Hi,

This is the code that finally did it:

http://ws.stfx.eu/458U3WRKXAW1.

I was really puzzled by the progress bar not being updated despite of the download being made (it took me several days to find what happen!). The thing is that the total size of the file was not being delivered by the datahub.io site, so there was no way to put it into the progress bar. I used an alternative approach reading the actual size against the total expected size (once you know the cause the solution took me a couple of hours, mostly learning about SystemProgressBar and JobProgressBar, the actual script took minutes.).

Thanks Sven and Johan for helping me to figure this out.

Cheers,

Offray


On 13/05/16 00:35, Sven Van Caekenberghe wrote:
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...'.
                [
                        ZnClient new
                                url: 
'http://files.pharo.org/sources/PharoV30.sources';
                                signalProgress: true;   
                                downloadTo: FileLocator temp ]
                        on: HTTPProgress
                        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.l...@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?

Cheers,

Offray

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:

ZnSignalProgress
   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.

HTH,

Sven

On 13 May 2016, at 00:14, Offray Vladimir Luna Cárdenas 
<offray.l...@mutabit.com> wrote:

Hi,

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?

Thanks,

Offray






Reply via email to