URL download and Cache problems
Alex Tweedly
alex at tweedly.net
Wed Dec 15 12:58:28 EST 2004
At 12:28 15/12/2004 -0500, Rick Harrison wrote:
>Hi there,
>
>I'm getting some Revolution weirdness when trying to download
>files from the internet.
I don't think there's a real problem there, but I'm not sure, because it's
hard to follow the description / script to be sure I'm correctly
interpreting what you want.
The basic issue is that the "load" command is non-blocking. So when you do
the first "load URL" it does not (and should not) wait. It will accept any
number of load commands, and queues them up (it probably fetches multiple
of them in parallel, with some limit on how many it has under way at a time).
>I'm using:
>
>put "" into field "CachedURLSListField1" of card 1
>put "" into field "ClearedCacheList1" of card 1
>
>put 1 into N2
>repeat while N2 < 4
>load URL field "JPEGURL" of card 1 with message "downloadComplete"
>--(Which sends this message to the stack which I handle by updating a
>field with "Status - Download completed")
>
> export image "JpegImage" of card 2 to file field "ImageFileName1" of
> card 1 as JPEG -- Gets entire image
> put field "CachedURLSListField1" of card 1 & the cachedURLs into field
> "CachedURLSListField1" of card 1
>
>--to list what files are in my cache
>--then I supposedly delete the cache with
>
> unload URL field "JPEGURL" of card 1
>
>--and to check if the file was deleted out of the cache
>
> put field "ClearedCacheList1" of card 1 & the cachedURLs into field
> "ClearedCacheList1" of card 1
>add 1 to N2
>end repeat
>
>The problems I'm running into are the following:
>
>1. The program doesn't wait until the first download is complete before
>moving on to the second download.
That's good :-)
>2. The cache isn't getting cleared
Perhaps because you're clearing it (with unload) before that URL has
finished being loaded; perhaps because there are multiple in-progress
fetches, and you can never clear one without the next one appearing.
>3. It's like Revolution is executing just too fast.
The purpose of the load command is to act fast, and to allow your stack to
continue with other work while the URLs are being pre-fetched. If you go
ahead and use the URL before it has completely loaded, you'll still get the
benefit.
>If I simply put
>
>answer "N2 = " & N2
>
>-- before the end repeat everything downloads - but unfortunately, -- I
>have to be around to press the stupid button everytime to -- let the
>program move on, and I don't want to have to do that.
>
>Any ideas as to what is going on, and as to what I need to do to fix things?
It's not clear just what you want to do, overall. It looks to me as though
the loop is loading the same URL each time round - or am I missing something ?
You might want to do something like
local lNumberDone
on gettheURLs
put 0 into lNumberDone
repeat while N2 < 4
load ......
end repeat
send checkifdone in 50 millisecs
end gettheURLS
on checkIfDone
if lNumberDone = 4 then
....finished ...
else
send checkIfDone in 50 millisecs
end if
end checkIfDone
on downloadComplete pURL, pURLStatus
if pURLStatus = "Download Complete" then
put URL pURL into (wherever you want it)
else
put "problem with " && pURL && ":" && pURLStatus & CR after field
"myStatusfield"
end if
add 1 to lNumberDone
end downloadComplete
In summary - load is non-blocking.
If this hasn't helped - send more of the script, or a fuller description of
what you want.
-- Alex.
More information about the use-livecode
mailing list