Page 1 of 2

mobile download file

Posted: Fri Nov 14, 2014 2:00 pm
by vedus
i am using the bellow code to download a file from my ftp server.
On the mac desktop is working ok without problems,but in the apple simulator and in the android (phone Z1) i don't get anything..
No messages,no download,nothing and the field and progress bar don't show up.

Code: Select all

constant FTPHOST = "myip"
constant FTPUSER = "user"
constant FTPPASS = "pass"
global sDownloadStart 
on mouseUp
    put "data.sqlite" into tFileName
    put "ftp://" & FTPUSER & ":" & FTPPASS & "@" & FTPHOST & "/" & tFileName into myUrl
    -- set up a message to show the status of the download as it progresses
    libURLSetStatusCallback "showProgress", the long name of me
    -- make sure the progress bar is hidden, as this property is used to initialise it
    hide scrollbar "ProgressBar"
    put empty into fld "ProgressField"
    put the seconds into sDownloadStart
    -- start the download process, telling Rev to call the "downloadComplete" handler when finished
    load URL myUrl with message "downloadComplete"
end mouseUp

command showProgress pURL, pStatus
   -- this is the status callback message which gets called regularly during the download
   -- pStatus will show some initialisation messages, then
   -- loading,bytesReceived,bytesTotal
   -- using a graphical progress bar instead
   -- ths first time this is called, find the total number of bytes that are to be downloaded
   -- use this info to set the span of the progress bar
   	
   -- wait until the download info is being received
   if the number of items in pStatus = 3 then
      if the visible of scrollbar "Progressbar" = false then
         put the last item of pStatus into tTotalBytes
         set the startValue of scrollbar "Progressbar" to 0
         set the endValue of scrollbar "Progressbar" to tTotalBytes
         show scrollbar "Progressbar"
      end if
      
      set the thumbPosition of scrollbar "Progressbar" to item 2 of pStatus
   end if
   
   -- better text information
   if the number of items in pStatus = 3 then
      put item 2 of pStatus into tBytesReceived
      put item 3 of pStatus into tTotalBytes
      
      -- this gives very large numbers that are not easily read, so convert to KB
      put tBytesReceived div 1024 into tKBreceived
      put tTotalBytes div 1024 into tTotalKB
      
      -- calculate speed
      put the seconds - sDownloadStart into tElapsedSeconds
      if tElapsedSeconds = 0 then
         -- make sure we don't divide by zero at the start
         put "unknown" into tKBperSecond
      else
         put round(tKBreceived / tElapsedSeconds, 1) into tKBperSecond
      end if
      
      --put "Received " & tKBreceived & " KB of " & tTotalKB & " KB at " into fld "ProgressField"
      put "Received " & tKBreceived  into fld "ProgressField"
      //put tKBperSecond & " KB/sec" after fld "ProgressField"
   end if
end showProgress
 
   
command downloadComplete pURL, pStatus
    -- this is the handler called when the download is finished
    -- the pStatus variable will show the result
    
    -- since the download is complete, there is no need to leave the progress bar visible
    hide scrollbar "ProgressBar"
    
    -- check if there was a problem with the download
    if pStatus = "error" or pStatus = "timeout" then
        answer error "The file could not be downloaded."
    else
        -- work out a file name for saving this file to the desktop
        set the itemDel to slash
        put "binfile:" & specialfolderpath("documents") & "/data.sqlite" into myPath
        put url purl into url myPath
        answer "Download completed" with ok
        put empty into fld "ProgressField"
        dispatch "ResetList" to group "datagrid1" of group "scroller1" of card "base"
        
        -- to save memory, now unload the URL from memory
        -- this also means that if you want to run the test again, it does not just use a cached version
        unload pURL
    end if
end downloadComplete

Re: mobile download file

Posted: Fri Nov 14, 2014 2:08 pm
by Klaus
Hi vedus,

according to the dictionary, which I always consult if in doubt 8) ,
"libURLSetStatusCallback", like most of the LIBURL stuff, is NOT supported
on the mobile platform! So your script will silently fail at this point.


Best

Klaus

Re: mobile download file

Posted: Fri Nov 14, 2014 2:52 pm
by vedus
Klaus wrote:Hi vedus,

according to the dictionary, which I always consult if in doubt 8) ,
"libURLSetStatusCallback", like most of the LIBURL stuff, is NOT supported
on the mobile platform! So your script will silently fail at this point.


Best

Klaus
thx klaus
is there any alternate method to show up the progress bar or the KB/s that have downloaded?

Re: mobile download file

Posted: Fri Nov 14, 2014 5:56 pm
by jmburnod
Hi vedus,

I think urlProgress is the magic word for this job on mobile
Best regards
Jean-Marc

Re: mobile download file

Posted: Sat Nov 15, 2014 8:21 pm
by vedus
i have reproduce my code and i have success with progress bar and field with total Kb/s downloaded.
the only problem i have is i don't get the answer that file have by downloaded.
Can someone tell me where i do wrong?
here is the code.

Code: Select all

constant FTPHOST = "myIP"
constant FTPUSER = "user"
constant FTPPASS = "pass"
global tFileName
on mouseUp
    set the cProgress of group "prbar1" of group "up_bar" to 0
    put "test.zip" into tFileName
    put "ftp://" & FTPUSER & ":" & FTPPASS & "@" & FTPHOST & "/" & tFileName into pUrl
    -- start the download process, telling Rev to call the "downloadComplete" handler when finished
    Load URL pUrl with message "urlProgress"

    
end mouseUp

on urlProgress pURL, pStatus, pBytesDone, pBytesTotal
    put pStatus into fld "pf1" of group "up_bar"
    switch item 1 of pStatus

              case "loading"
            set the cProgress of group "prbar1" to round((pBytesDone / pBytesTotal) * 100)
            put the round of (item 1 of pBytesDone / 1024)&& "KB Downloaded" into field "status"
            break
        case "cached"
            -- work out a file name for saving this file to the desktop
            set the itemDel to slash
            put "binfile:" & specialfolderpath("documents") & "/test.zip" into myPath
            put url pUrl into url myPath
            answer "Download completed" with ok
            -- to save memory, now unload the URL from memory
            -- this also means that if you want to run the test again, it does not just use a cached version
            unload pURL
            
                     break
              case "error"
                   if pStatus = "error" or pStatus = "timeout" then
                answer error "The file could not be downloaded." with "ok"
            end if
                     break
                  
       end switch
    
end urlProgress

Re: mobile download file

Posted: Sun Nov 16, 2014 1:16 pm
by jmburnod
Hi Vedus,
What happen if you put

Code: Select all

case "downloaded"
answer "Download completed"
break
Best regards
Jean-Marc

Re: mobile download file

Posted: Sun Nov 23, 2014 2:05 pm
by vedus
If I put case "download" the result I get is to have double download of the file,and progress bar start over again.

Re: mobile download file

Posted: Sun Nov 23, 2014 2:09 pm
by Klaus
vedus wrote:If I put case "download" the result I get is to have double download of the file,and progress bar start over again.
Sorry, don't get this, if you do this, then the file will be downloaded twice? :shock:

Code: Select all

...
case "downloaded"
case "cached"
  -- work out a file name for saving this file to the desktop
  set the itemDel to slash
  put "binfile:" & specialfolderpath("documents") & "/test.zip" into myPath
  put url pUrl into url myPath
 answer "Download completed" with ok
...

Re: mobile download file

Posted: Sun Nov 23, 2014 9:41 pm
by vedus
Hi klaus.
I am using a field to show me how is progress,if I have contact the server,if there is loading etc.in the end I get in the field the word downloaded,so there is no problem.
So I go and put the >> case "downloaded" the result is,the file have started and download is on progress,when the file is on the end,the progress bar restart and the file is re-downloaded in the end of second download I get 2 messages that file have be downloaded !!!

Re: mobile download file

Posted: Mon Nov 24, 2014 3:24 am
by dave.kilroy
vedus do you have "break" in-between all your "case" statements? A missing "break" might account for double-downloading...

Re: mobile download file

Posted: Mon Nov 24, 2014 6:11 pm
by vedus
hi Dave,yes i have breaks between cases,but i don't understand why i get re-download when i put the case "downloaded"..
Dictionary say that the messages is
  • contacted - The server has been contacted.
    requested - A request was made to the URL.
    loading - Data is being downloaded.
    uploading - Data is being uploaded to the server.
    downloaded - Data has finished downloading.
    uploaded - Data has finished uploading.
    error - An error occurred.
And i get the bellow
1:) Contacted
2:) Loading
3:) downloaded
i Don't get the >"cached"
So my file is no saved in the folder.
If i change the case "cached" to the "downloaded" my file downloaded over and over without stoping.
i will post again my code.i know somewhere is something wrong,but i don't understand where!!!

Code: Select all

constant FTPHOST = "myIP"
constant FTPUSER = "user"
constant FTPPASS = "pass"

on mouseUp
    set the cProgress of group "prbar1" of group "up_bar" to 0
    put "fms.zip" into tFileName
    put "ftp://" & FTPUSER & ":" & FTPPASS & "@" & FTPHOST & "/" & tFileName into pUrl
    -- start the download process, telling Rev to call the "downloadComplete" handler when finished
    Load URL pUrl with message "urlProgress"


    
end mouseUp

on urlProgress pURL, pStatus, pBytesDone, pBytesTotal
        put pStatus into fld "pf1" of group "up_bar"
        switch pStatus
        
                      case "loading"
                        set the cProgress of group "prbar1" to round((pBytesDone / pBytesTotal) * 100)
                        put the round of (item 1 of pBytesDone / 1024)&& "KB Downloaded" into field "status"
                        break
                      case "error"
                               if pStatus = "error" or pStatus = "timeout" then
                                answer error "The file could not be downloaded." with "ok"
                        end if
                                 break  
          case "downloaded"
            set the itemDel to slash
put specialfolderpath("documents") & "/fms.zip" into myPath
put pUrl into URL ("binfile:" & myPath)
put url pUrl into url myPath
            answer "Update Completed" with "Ok"
                unload pURL
            break
           end switch    
end urlProgress
file is from my ftp server and is 6 MB

Re: mobile download file

Posted: Mon Nov 24, 2014 6:31 pm
by dave.kilroy
Looking at your code it appears that by the time you get to "downloaded" the variable pUrl should contain all the downloaded data and all you need to do is to save it

Code: Select all

 put specialfolderpath("documents") & "/fms.zip" into myPath
put pUrl into URL ("binfile:" & myPath) 
and that if you carry on with

Code: Select all

put url pUrl into url myPath
it will indeed download it all over again - or - am I missing something?

EDIT: left in a bit of bad syntax...now removed

Re: mobile download file

Posted: Mon Nov 24, 2014 6:43 pm
by vedus
dave.kilroy wrote:Looking at your code it appears that by the time you get to "downloaded" the variable pUrl should contain all the downloaded data and all you need to do is to save it

Code: Select all

 put specialfolderpath("documents") & "/fms.zip" into myPath
put pUrl into URL ("binfile:" & myPath) 
and that if you carry on with

Code: Select all

put url pUrl into url myPath
it will indeed download it all over again - or - am I missing something?

EDIT: left in a bit of bad syntax...now removed
i have try this way,and still the file is no saved, and the download go on over and over with progress bar reset and over again..

i have rewrite my code above in my last message!!

Re: mobile download file

Posted: Mon Nov 24, 2014 7:55 pm
by dave.kilroy
hmm - sorry vedus I'm obviously missing something - I'm sure somebody else will stop by soon and point it out...

Re: mobile download file

Posted: Mon Nov 24, 2014 8:11 pm
by vedus
dave.kilroy wrote:hmm - sorry vedus I'm obviously missing something - I'm sure somebody else will stop by soon and point it out...
no problem Dave thx for the help anyway ;)