Polylist widget Lazy Loading images example. [was Re: polylist toys]
Alex Tweedly
alex at tweedly.net
Thu Aug 18 19:32:56 EDT 2022
On 18/08/2022 23:13, Alex Tweedly via use-livecode wrote:
>
> However, the lazy load example still contains bugs due to race conditions
Solution:
replace the card script with the following .... should fix all the race
conditions I can see.
> local sURLToIndex
>
> on onlineImage pIndex, pURL
> put pIndex &CR after sURLToIndex[pURL]
> load URL pURL with message "downloadComplete"
> end onlineImage
>
> on downloadComplete pURL, pSatus
> local tURL
> repeat for each line L in sURLToIndex[pURL]
> set the itemPointer of widget "PolyList" to L
> set the subItemPointer of widget "PolyList" to "url"
> put the subitemContent of widget "PolyList" into tURL
> if tURL = pURL then -- still the right URL
> set the subItemPointer of widget "PolyList" to "image"
> set the subitemContent of widget "PolyList" to URL pURL
> end if
> end repeat
> put empty into sURLToIndex[pURL]
> end downloadComplete
And in the real world, add in cache aging, limit on number of entries,
limit on total cache size in bytes, ...
Alex.
>
> 1. if multiple entries reference the same image, then there is a
> chance the earlier ones never get properly updated (sURLToIndex[pURL]
> will have been overwritten by the next call to onlineImage before the
> image value gets set).
>
> 2. if the user (or anything else) resets the dataContent of the widget
> while there are outstanding "load URL"s, then when the
> downloadComplete is triggered, it will set the image value for some
> random new item to the image of the earlier one.
>
> 3. And if the one which was wrongly set in case 2 above also happens
> to be a URL that occurs multiple time (i.e. case 1 above), then that
> wrongly set image will remain "forever".
>
>
More information about the use-livecode
mailing list