B4A Library Automated FTP Library

Dataverde

Member
Licensed User
Longtime User
Hello,

is there a way to change the progress dialog?
Like, changing the color or size?
Also it would be nice if i could add an icon.

Keep up the good work
 

Dataverde

Member
Licensed User
Longtime User
Maybe i found an error or i am doing something wrong, see this:


This code:
B4X:
Sub ftpExport_click
   FTP.Initialize(Activity,all.ftpServer,all.ftpUsername,all.ftpPassword,all.ftpPort,True,False)
   FTP.SetColors(Colors.Black,Colors.Black,Colors.Black,Colors.Gray,Colors.DarkGray)
   If FTP.WiFi_IsConnected Then
      Try
         FTP.UploadFileSet(all.ftpTargetDir,Array As String(all.exportPath&"*.txt"))
         FTP.DownLoadFile(all.updatePath,all.ftpUpdateDir,"dataverde.sql",all.ftpDeleteAfterDownload)
      Catch
         Msgbox("Die Daten wurden nicht übertragen. Überprüfwn Sie die Verbindung.","Fehler")
         FTP.CloseNow
      End Try
   Else
      ToastMessageShow("Stellen Sie vorher eine Verbindung zum WLan her.",True)
      FTP.CloseNow
   End If
End Sub

Generates this log:
B4X:
Uploaded: //mnt/sdcard/dataverdeExport/test/260213_1352_Angebot.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/260213_1345_Auftrag.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/180213_1025_Auftrag.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/180213_1024_Auftrag.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/180213_0919_Auftrag.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/310113_1457_Angebot.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/310113_1043_Einkauf.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/021012_1523_Auftrag_Meier.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/021012_1454_Auftrag_aaa.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/021012_1316_Auftrag_.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/021012_1314_Angebot_Meier.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/021012_1312_Einkauf_Helmers.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/021012_1309_Einkauf_Lex.txt, Success=true...
Uploaded: //mnt/sdcard/dataverdeExport/test/021012_1306_Auftrag_Müller.txt, Success=true...


Without the "FTP.DownLoadFile" commad:
B4X:
Sub ftpExport_click
   FTP.Initialize(Activity,all.ftpServer,all.ftpUsername,all.ftpPassword,all.ftpPort,True,False)
   FTP.SetColors(Colors.Black,Colors.Black,Colors.Black,Colors.Gray,Colors.DarkGray)
   If FTP.WiFi_IsConnected Then
      Try
         FTP.UploadFileSet(all.ftpTargetDir,Array As String(all.exportPath&"*.txt"))
         'FTP.DownLoadFile(all.updatePath,all.ftpUpdateDir,"dataverde.sql",all.ftpDeleteAfterDownload)
      Catch
         Msgbox("Die Daten wurden nicht übertragen. Überprüfwn Sie die Verbindung.","Fehler")
         FTP.CloseNow
      End Try
   Else
      ToastMessageShow("Stellen Sie vorher eine Verbindung zum WLan her.",True)
      FTP.CloseNow
   End If
   'FTP.LastDownloadStats
   'FTP.LastUploadStats
End Sub


It generates this log:
B4X:
Uploaded: //mnt/sdcard/dataverdeExport/test/260213_1352_Angebot.txt, Success=true...
dataverde.sql
Uploaded: //mnt/sdcard/dataverdeExport/test/260213_1345_Auftrag.txt, Success=true...
Downloaded: //mnt/sdcard/dataverdeUpdates/dataverde.sql, Success=true
Uploaded: //mnt/sdcard/dataverdeUpdates/dataverde.sql180213_1025_Auftrag.txt, Success=true...

The files have not been changed or deleted between the tests.
It seems the FTP thing is stopping the upload queue when the download is finished? Also the log has confused/merged export(upload) and update(download) dirs in the last entry of the second log?
 

margret

Well-Known Member
Licensed User
Longtime User
You should never issue an Upload and a download command together. That will create a mess. Do each as a separate process.

Also, you should not issue the FTP.Close, the process runs in the background and your code will execute before the background code and it will terminate the process before it is completed. The Upload and Download both call the FTP.Close on their own once the process is complete. The only reason for you to call these functions is if you want to terminate the process early.

I thought most users would watch the progress dialog to see the status and completion of the job. It seems some are not doing this but wanting the code to do it for them. So, I am working on adding code feedback so that it can be used that way. This is one of the reasons I posted it as a Beta as it is hard to tell how each will use this.

For me it works fine because I use the visual feedback but I do understand the need for the code feedback and the issues one would run into trying to use it that way. I will post the New Update as soon as I have it ready.

Thanks
 

Dataverde

Member
Licensed User
Longtime User
First of all, thank you for the ongoing work you put in this! :icon_clap:


Okay, an upload and a download button it is then
I use the ftp.closeNow to hide the progress dialog when there is an error during file transfer.

The feedback for the user with the process dialog is just fine but please consider 2 things:

1. My customers are usually very unconfortable with PCs, it even gets worse on android devices. So for them i would like something like a "Everything went fine"-msgbox after the ftp transfer(or a "update is ready, apply now?" decision). They always get confused if a dialog simply disapears("did i do something wrong?" "no, its ok" "are you shure?").
To be more flexible it would be perfect if we could just handle the finished queue with an event.

2. Can we somehow customize the text that is displayed? My customers are german for example and it would be nice if i could change the text to fit their needs.
 

margret

Well-Known Member
Licensed User
Longtime User
New Beta Version .99 is now attached to post #1 of this thread. New features are listed below.

Updated 3-17-2013
NEW FEATURES ADDED TO BETA .99:

  • SetCompletedDownloadDialog (ShowCompletedDialog As Boolean, DialogText As String) As String
    If ShowCompletedDialog=True, it will show a dialog after the download process is completed.
  • SetCompletedUploadDialog (ShowCompletedDialog As Boolean, DialogText As String) As String
    If ShowCompletedDialog=True, it will show a dialog after the upload process is completed.
  • SetStealthOn (UseStealth As Boolean) As String
    If set to True, no progress box will be displayed during the file
    transfer. If False the progress dialog will show during the file
    transfers. The default is False.
  • SetStickyOn (MakeSticky As Boolean) As String
    If set to True, the progress box will stay on the screen until
    the user taps the Done button, otherwise the progress box will close
    as soon as the transfer is complete. The default is False.
  • SetText (HeaderDownLoadText As String, HeaderUploadText As String, TotalProgressText As String, FileProgressText As String, ButtonCancelText As String, ButtonDoneText As String) As String
    Used to set the Text of the Item's status display.
    NOTE: May be used for different language, etc.
 

Dataverde

Member
Licensed User
Longtime User
Hey,

tested the new features, they work fine.
There is a problem with the buttons textsize.
See the screenshot from the Nexus 7:


dropbox link


I would like to disable the toasmessages the class is displaying.

Is there a way to know when the upload/download is finished?
I need that to move the uploaded files to an other folder.
 
Last edited:

Dataverde

Member
Licensed User
Longtime User
In the Initialize command, set ShowMessages to false to stop the messages.

The toastmessage "Reading local files information..." is still displayed somehow.

B4X:
   FTP.Initialize(Activity,all.ftpServer,all.ftpUsername,all.ftpPassword,all.ftpPort,False,False)
 

Dataverde

Member
Licensed User
Longtime User
You save me from doing all the FTP stuff my self, so i have to thank you ;-)
Looking forward to the next update.
 

cjolly

Member
Licensed User
Longtime User
Hi Margret,

I need you clarify how it works in Initialize "CalledFrom As Object".

The library is fantastic, thanks for simplify the work with ftp server :wav:

*TIA*
 

Dataverde

Member
Licensed User
Longtime User
Tested v1.0 today.

The FTP_ProcessComplete is working like a charm for me! Thanks.


Is there any way to know if the process of uploading or downloading was sucessfull?
 

margret

Well-Known Member
Licensed User
Longtime User
If it completes the process it was successful. If there are any errors, it will show a popup and abort the process. If this shows to be an issue, I may change the way this is coded. But again, if there is an error the process will stop and display an error message that you have to clear. So, if you do not have to clear an error message, all went well. Are you looking for something else?
 
Last edited:

cjolly

Member
Licensed User
Longtime User
Hi Margret,

For some reason I'm not getting that FTP_ProcessComplete work, could you post an "functional" example.

I'm using for development B4A and v2.52 Android SDK 4.2.2 - API 17 and test phone is a Samsung GT-S56500L with Android 2.3.6.

:sign0085: The code I'm using is:

Sub FTPUpload
FTP.Initialize (Activity, Me, "www.zzzzzz.com.py", "zzzzzz", "zzzzzz", 21, True, False)
FTP.SetText("BAJANDO DEL FTP", "SUBIENDO AL FTP", "procesados", "procesando", "CANCELAR", "CONCLUIDO")
FTP.UploadFileSet("/var/conf/ventas/files/", Array As String(File.DirRootExternal & "/ventas_log/*.zip"))
End Sub


Sub FTP_ProcessComplete
Log("datos enviados")
Dim borrar As String
LISTx.Initialize
LISTx = File.Listfiles(File.DirRootExternal & "/ventas_log/")
LISTx.SortCaseInsensitive(True)
For i = 0 To LISTx.Size -1
borrar = LISTx.Get(i)
If borrar.EndsWith(".zip") = True Then 'solo los zipeados
File.Delete(File.DirRootExternal & "/ventas_log/",LISTx.get(i))
Log("borrando " & File.DirRootExternal & "/ventas_log/" & " - " & LISTx.Get(i))
End If
Next
End Sub

*TIA*
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…