Hi all, I've proposed a PR with some cleanups in this respect
https://github.com/pharo-project/pharo/pull/1941 This is the proposed replacement API that returns file references instead of streams or file names. "Get existing file reference" UIManager default chooseExistingFileReference: 'title' extensions: nil path: FileSystem workingDirectory. "Get existing file reference filtering by extensions" UIManager default chooseExistingFileReference: 'title' extensions: #('log') path: FileSystem workingDirectory. "Get existing file reference to file" UIManager default chooseExistingFileReference: 'title' extensions: nil path: FileSystem workingDirectory / 'PharoDebug.log'. "Get file reference for save (not necessarily existing)" UIManager default chooseForSaveFileReference: 'title' extensions: #('log') path: 'PharoDebuasdg.log'. On Fri, Oct 26, 2018 at 3:11 PM Guillermo Polito <guillermopol...@gmail.com> wrote: > Ok, so can we agree on deprecating the non compatible methods and redirect > the user to the new ones? > > To me, the problem with returning a stream is that from a user perspective > you don't know: > - is the file encoded or binary > - if it is encoded, in which encoding? > - if i receive an open file stream, and I want to delete that file I have > to close it, retrieve the file, delete it? > - IMHO, what is the worst: whose responsibility is it to close the file? > > On Thu, Sep 6, 2018 at 10:43 PM Peter Uhnak <i.uh...@gmail.com> wrote: > >> > It should return a FileReference, not an open stream. I believe there >> are methods that do that. >> >> There are different APIs for that. >> >> fileOpen*, as the name implies, _opens the file_ and returns the stream. >> (I think this should be the case for fileSave*) >> >> If you want file reference, then you can use e.g. >> >> UIManager default chooseFileMatching: #() label: nil >> >> or `chooseFileMatching:label:`, >> `chooseFileName:extensions:path:preview:`, >> `chooseFullFileName:extensions:path:preview:`, >> `chooseFullFileNameMatching:label:`. >> Also some methods for selecting directories >> (`chooseDirectory:path:`, chooseDirectory:from:`, ...) >> >> iirc some of them actually return String (file path) instead of >> FileReference. ( >> https://gist.github.com/peteruhnak/8ac6667b8eb11daee71517d0172b7355#file-ui-manager-md >> ) >> >> So it can be confusing, but the API is already available. >> >> Also iirc UIManager should be preferred over UITheme builder. >> >> Peter >> >> On Thu, Sep 6, 2018 at 9:57 PM Sven Van Caekenberghe <s...@stfx.eu> >> wrote: >> >>> >>> >>> > On 6 Sep 2018, at 21:37, Torsten Bergmann <asta...@gmx.de> wrote: >>> > >>> > Hi, >>> > >>> > A question to those who worked on the new streams for Pharo 7: >>> > >>> > >>> > In PHARO 6 I used the following expression to open a file dialog and >>> let the user choose >>> > a binary file: >>> > >>> > s := UITheme builder fileOpen: 'Choose a file' extensions: #('exe'). >>> > >>> > This returned >>> > - either nil (when file dialog was canceled) >>> > - a "MultiByteFileStream" instance when a file was selected >>> > >>> > The MultiByteFileStream instance already had the name of the file (= >>> full path) and I was >>> > able to query it for further use: >>> > >>> > s := UITheme builder fileOpen: 'Choose a file' extensions: #('exe'). >>> > s name inspect >>> > >>> > (for instance to display which file is processed in a window by >>> showing the full path) >>> > >>> > >>> > >>> > Now in PHARO 7 same expression returns an instance of >>> ZnCharacterReadStream (as MultiByteFileStream >>> > is deprecated): >>> > >>> > s := UITheme builder fileOpen: 'Choose a file' extensions: #('exe'). >>> > >>> > and ZnCharacterReadStream does not understand #name - and in fact >>> the info about the name is >>> > totally lost/not available. To me this looks missing/broken. >>> > >>> > So what is the recommended way in Pharo 7 to open a file dialog, let >>> the use choose a file >>> > and get a file stream but also the name? IMHO this is either broken or >>> missing... >>> > >>> > Thanks >>> > T. >>> >>> It should return a FileReference, not an open stream. I believe there >>> are methods that do that. >>> >>> But that is an incompatible API change (same selector, different return >>> type). So hard to decide. >>> >>> >>> > > -- > > > > Guille Polito > > Research Engineer > > Centre de Recherche en Informatique, Signal et Automatique de Lille > > CRIStAL - UMR 9189 > > French National Center for Scientific Research - *http://www.cnrs.fr > <http://www.cnrs.fr>* > > > *Web:* *http://guillep.github.io* <http://guillep.github.io> > > *Phone: *+33 06 52 70 66 13 > -- Guille Polito Research Engineer Centre de Recherche en Informatique, Signal et Automatique de Lille CRIStAL - UMR 9189 French National Center for Scientific Research - *http://www.cnrs.fr <http://www.cnrs.fr>* *Web:* *http://guillep.github.io* <http://guillep.github.io> *Phone: *+33 06 52 70 66 13