> On 27 Jan 2019, at 00:20, Hernán Morales Durand <hernan.mora...@gmail.com> 
> wrote:
> 
> Hi Sven,
> 
> Yes, your examples work in Pharo 7, however I also wanted a progress bar, and 
> two exception handlers:
> 
> 1) Resume when my files are too large (ZnEntityTooLarge).
> 2) When download failed display an error message.
> 
> Now for 1) I consider to wrap the whole download code - because I don't like 
> #isKindOf: - into this:
> 
> ZnMaximumEntitySize value: someMaxSize during: [ ... ].

There is also an accessor #maximumEntitySize: 

Because ZnMaximumEntitySize will go away for a more general mechanism.

> I changed my code to use #downloadTo: 
> Thank you for the suggestion!!
> 
> Cheers,
> 
> Hernán
> 
> El sáb., 26 ene. 2019 a las 19:05, Sven Van Caekenberghe (<s...@stfx.eu>) 
> escribió:
> BTW, ZTimezone in ZTimestamp does something similar to what I guess you want 
> to do:
> 
> downloadFallbackZoneinfoDataset
>         "Download a fallback copy of the zoneinfo dataset and return its 
> location.
>         See #fallbackZoneinfoDatasetURL for more info and a warning"
> 
>         | zipLocation zoneinfoLocation |
>         zipLocation := self fallbackZoneinfoDatasetURL file asFileReference.
>         zipLocation ensureDelete.
>         ZnClient new 
>                 url: self fallbackZoneinfoDatasetURL; 
>                 downloadTo: zipLocation;
>                 close.
>         zoneinfoLocation := zipLocation parent / 'zoneinfo'.
>         zoneinfoLocation ensureDeleteAll.
>         ZipArchive new
>                 readFrom: zipLocation;
>                 extractAllTo: zoneinfoLocation parent;
>                 close.
>         ^ zoneinfoLocation
> 
> where
> 
> fallbackZoneinfoDatasetURL
>         "The URL to the ZIP archive zoneinfo.zip which is offered as a 
> fallback for 
>         systems (such as Windows) that do no have their own copy of this 
> data. 
>         Note that it is highly recommended that you use such a OS maintained 
> dataset, 
>         as this data is changed (being added to) each year."
> 
>         ^ 'https://github.com/svenvc/ztimestamp/raw/master/rsrc/zoneinfo.zip' 
> asUrl
> 
> > On 26 Jan 2019, at 23:00, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> > 
> > Hmm, the following all work for me (in Pharo 7.0.1 on macOS):
> > 
> > ZnClient new
> >       url: 
> > 'https://github.com/biosmalltalk/biopharo/raw/develop/test_files/BioSmalltalkTestFiles.zip';
> >       get;
> >       yourself.
> >       
> > ZnClient new
> >       url: 
> > 'https://github.com/biosmalltalk/biopharo/raw/develop/test_files/BioSmalltalkTestFiles.zip';
> >       get;
> >       contents.
> >       
> > ZnClient new
> >       get: 
> > 'https://github.com/biosmalltalk/biopharo/raw/develop/test_files/BioSmalltalkTestFiles.zip'.
> >       
> > ZnClient new
> >       url: 
> > 'https://github.com/biosmalltalk/biopharo/raw/develop/test_files/BioSmalltalkTestFiles.zip';
> >       downloadTo: '/tmp'.
> > 
> > $ ls -lah /tmp/BioSmalltalkTestFiles.zip 
> > -rw-r--r--@ 1 sven  wheel   5.3M Jan 26 22:57 /tmp/BioSmalltalkTestFiles.zip
> > 
> > $ file /tmp/BioSmalltalkTestFiles.zip 
> > /tmp/BioSmalltalkTestFiles.zip: Zip archive data, at least v2.0 to extract
> > 
> >> On 26 Jan 2019, at 20:36, Hernán Morales Durand <hernan.mora...@gmail.com> 
> >> wrote:
> >> 
> >> Hi there,
> >> 
> >> In Pharo 7.0 I've encountered an error related with the new streams 
> >> changes 
> >> (https://github.com/pharo-open-documentation/pharo-wiki/blob/master/Migration/MigrationToPharo7.md)
> >>  while downloading a zip file. Problem is ZnUTF8Encoder expects a String, 
> >> but my code which worked in Pharo 6 provides a ByteArray. I've isolated it 
> >> in a reproducible way:
> >> 
> >> | webClient resp |
> >> webClient := ZnClient new.
> >> UIManager default informUserDuring: [ :bar | 
> >>    bar label: 'Downloading resources for ' , self class printString.
> >>    [ webClient
> >>        signalProgress: true;
> >>        get: 
> >> 'https://github.com/biosmalltalk/biopharo/raw/develop/test_files/BioSmalltalkTestFiles.zip'
> >>  ]
> >>    on: HTTPProgress , ZnEntityTooLarge
> >>    do: [ : ex | 
> >>        (ex isKindOf: ZnEntityTooLarge)
> >>            ifTrue: [ ex resume ]
> >>            ifFalse: [ 
> >>                | progress |
> >>                progress := ex.
> >>                progress isEmpty
> >>                    ifFalse: [
> >>                        bar current: progress percentage.
> >>                        progress total ifNotNil: [ :aTotalNumber | bar 
> >> label: 'Downloading ' ] ].
> >>                progress resume ] ] ].
> >> (resp := webClient response) isSuccess
> >>        ifTrue: [ 'output2.zip' asFileReference writeStreamDo: [ : stream | 
> >> stream nextPutAll: resp contents ] ]
> >>        ifFalse: [ self error: 'Cannot download resource files' ].
> >> 
> >> I also tried using #writeOn: on the response, but that also wrote the 
> >> response header:
> >> 
> >> self response writeOn: 'test1.zip' asFileReference writeStream.
> >> self response writeOn: 'test2.zip' asFileReference binaryWriteStream.
> >> 
> >> 
> >> HTTP/1.1 200 OK
> >> Via: 1.1 varnish
> >> Strict-Transport-Security: max-age=31536000
> >> ...
> >> 
> >> PK    ¸  D               BioSmalltalkTestFiles/PK ½U?+*8!"  K  /   
> >> BioSmalltalkTestFiles/A4A7DS6V01S-Alignment.xmlíœks›H †¿à ¯èà ‡©à 
> >> "’¹_  ¦: 0 R$`ðjSS.,a›
> >> 
> >> Any suggestion?
> >> 
> >> Cheers,
> >> 
> >> Hernán
> >> 
> >> 
> >> 
> > 
> 
> 


Reply via email to