[Pharo-users] Downloading large files with a progress bar
Sven Van Caekenberghe
sven at stfx.eu
Fri May 13 01:35:07 EDT 2016
When the UI thread is really busy, updating the UI can be problematic.
An extra fork seems to help:
(FileLocator temp / 'PharoV30.sources') ensureDelete.
[ [ :bar |
bar title: 'Downloading Sources...'.
downloadTo: FileLocator temp ]
do: [ :progress |
progress isEmpty ifFalse: [ bar current: progress percentage ].
progress resume ] ] asJob run ] fork.
> On 13 May 2016, at 01:00, Offray Vladimir Luna Cárdenas <offray.luna at mutabit.com> wrote:
> Hi Sven,
> Thanks for your quick answer. I tried both approaches but I'm missing something. See my last attempt at http://ws.stfx.eu/KBVBAP72IWOO with the last one. I get a progress bar message, but not the advancements on it. What I'm missing?
> ps: The file I'm trying to download is covered by the Open Data Base License.
> On 12/05/16 17:24, Sven Van Caekenberghe wrote:
>> Hi Offray,
>> The actual implementation of #saveContentsToFile: can be found in ZnHttpSaveContentsToFile>>#performOperation where you can see how ZnClient is invoked. Just copy that with signalProgress: true added and you should be good.
>> Alternatively, you could wrap the first expression as follows:
>> value: true
>> during: [ myUrl asUrl saveContentsToFile: file ]
>> ZnSignalProgress is a DynamicVariable that is used by ZnClient to figure out if progress should be signalled. It takes precedence over the option #signalProgress. See #withProgressDo: if you are interested.
>>> On 13 May 2016, at 00:14, Offray Vladimir Luna Cárdenas <offray.luna at mutabit.com> wrote:
>>> I'm using
>>> myUrl asUrl saveContentsToFile: file
>>> to download large files and is working fine. But I would like to add a progress bar to show the progress to the user. Previously I used
>>> [: bar |
>>> bar title: aString.
>>> "A classical ZnClient download with signalProgress: true;"
>>> on: HTTPProgress
>>> do: [ :progress |
>>> progress isEmpty ifFalse: [ bar current: progress percentage ].
>>> progress resume ].
>>> ] asJob run.
>>> but I don't know how to signal progress with "saveContentsToFile".
>>> Any hints?
More information about the Pharo-users