- From: Peta Byte <256petabyte@googlemail.com>
- Date: Sun, 30 Jan 2011 18:10:37 +0100
- To: public-webapps@w3.org
- Message-ID: <AANLkTimGx=VVzJeMrwLUJ1CqQFziZQkfPTUa_jCpvYZ9@mail.gmail.com>
Hello everybody, it's the first time I participate in a working group's mailinglist like this, so when my concerns rather belong to the implementation area (like the mailinglists of browser developers) please correct me. # Foreword: I studied Eric Uhrhane's working draft of "File API: Directories and System" [1] and wrote some demo apps (including a multi-view File Manager that can extract tar archives) using the implementation that landed in recent releases of Chromium's Dev Channel. Doing so I noticed some aspects of the drafted API that could be improved. # Suggestions ## Callback methods used in asynchronous filesystem interfaces Nearly all registerable callbacks [2] are called being bound to the global scope object, instead to the object they were registered on (File-/Directory-/Entry, DirectoryReader, asf.). In my opinion this is unfavorable because in practice the async operation one starts (like querying metadata of an Entry or the contents of a directory) almost always will be handled in context of the entity the received information belongs to. Only the extensive use of closures and/or additional logic that keeps track of running async operations (in order to "map" the response and trigger further events) allows to work around this behaviour. Sure, that might be the rationale for 3rd party libaries, but as a webdeveloper that strives for performant code (like most of us do) I'd suggest to to avoid this "overhead" and just spec out to which objects those callbacks should be bound to. ## toURI-method of Entry Interface I'd recommend to spec out a common URI scheme for resources within a local filesystem, too. Some reasons for this: * Content of a permant filesystem should (theoretically) exist for a longer period of time (read for more than one sessions) * Avoids that user agents mistakenly interpret the value of href-attributes as local File URLs (though the file path begins with a slash) * When multiple filesystem instances are used within a session, a user agent is able to identify the specific filesystem where the resource identified by a URL resides in. In my demo file browser I introduced a pseudo URI scheme that looks like this: `lfs://file__0:Persistent/a/b/c.txt` Where the scheme "lfs" stands for "Local FileSystem" (as far as I know not officially reserved; only used internally by Cascading, a Java library to work with Hadoop FSs) . As authority part I simply used the value of the "name" attribute of the FileSystem interface. Then I appended the absolute filepath that every Entry has (fullPath attribute). Bubbling Click events of HTMLAnchorElements are catched either by the code of a custom widget or -- finally -- at the HTMLBodyElement that asks the user how to handle it or simply suppresses it. To dereference the URLs I created a wrapper go the LocalFileSystem/-Sync interface that is used to request filesystem instances. The name of every requested filesystem is saved together with a reference to the according FIleSystem in a lookup table and used to resolve the filesystem based on the authority part of a LFS-URI. Up to now, this is a wacky solution because there is no way to request a FileSystem by it's internal name. As long as I only use one persistent FileSystem this might work over more than one sessions. Of course, no serious solution. This leads to my next suggestion: ## Extend LocalFileSystem/-Sync interface by method to request FileSystem by its internal name As outlined in the section above, a precondition for persistent URLs of Local FileSystem resources that can be dereferenced by 3rd party applications is a method that tries to request a FileSystem by its internal name/id. Well, that's it. :-) Would like to head what you think about my suggestions. Best regards, Peter [1] http://www.w3.org/TR/2010/WD-file-system-api-20101026/#idl-def-LocalFileSystem [2] http://www.w3.org/TR/2010/WD-file-system-api-20101026/#callbacks
Received on Monday, 31 January 2011 08:29:39 UTC