+1 On 12/12/2013 6:26 am, "Ian Clelland" <[email protected]> wrote:
> Yeah, it would definitely require some kind of migration support. Not > suggesting that this is something that we ever actually do, but we could > give developers a bit of code that automatically looks in both places, and > moves files to the new location on open. Or we do it under a flag that is > off for existing apps (off-on-upgrade) and only enabled-by-default for new > apps. > > I agree with you: this could cause worlds of pain, with developers, and > worse with users. We shouldn't take any steps in that direction without a > lot of very careful thought. For now, /Documents, sub-optimal though it may > be, is where Cordova puts persistent files. > > Ian > > On Wed, Dec 11, 2013 at 2:18 PM, Tommy Williams <[email protected]> > wrote: > > > Changing where PERSISTENT is located sounds like a very very bad idea. > > > > I know that would cause me personally a lot of grief with existing user > > data. > > On 11/12/2013 8:58 am, "Ian Clelland" <[email protected]> wrote: > > > > > On Tue, Dec 10, 2013 at 4:37 PM, Michael Gauthier < > [email protected] > > > >wrote: > > > > > > > On 10/12/13 05:02 PM, Ian Clelland wrote: > > > > > > > >> Yep. > > > >> > > > >> I think that Library is the more natural place for the HTML > persistent > > > >> filesystem, since it's used by an app for whatever persistent > storage > > it > > > >> needs, without exposing all of it's implementation details to the > > user. > > > >> (There's lots of room for debate on this, I'm sure) > > > >> > > > >> The trouble is that we've historically used /Documents for > persistent > > > >> storage, and changing that will break apps. > > > >> > > > >> I'm fine with a BC break, but I don't have to maintain any legacy > > > > applications. /Library does make more sense as the default for > > > PERSISTENT. > > > > The big problem with BC is for installed apps with existing data on > the > > > > filesystem, right? > > > > > > > > > Exactly. I'd hate for developers to update their plugins, and push a > new > > > version of their app that seems fine -- everything works great when you > > > start from scratch -- but users with existing data find themselves > > > completely locked out of it. > > > > > > > > > > > > > > One idea is to allow something like requestFilesystem(DOCUMENT), in > > > >> addition to PERSISTENT and TEMPORARY. Another suggestion has been to > > add > > > >> extra arguments -- hints -- such as "{sync: true}", or maybe in this > > > case > > > >> "{purpose: documents}" to specify the attributes of the filesystem > > that > > > is > > > >> returned. > > > >> > > > > > > > > > {sync: true} is a bit tricky because /Library/Cache is not synced but > > > > /Library/Application Data is synced. Having a DOCUMENT type would > match > > > > /tmp and /Library as the top-level dirs mapping to file-system > > constants. > > > > > > > > All my feedback is only from the iOS perspective though. Not sure if > > > these > > > > ideas make other platforms more or less complicated. > > > > > > > > Cheers, > > > > Mike > > > > > > > > > > > >> > > > >> > > > >> On Tue, Dec 10, 2013 at 2:39 PM, Michael Gauthier < > > > [email protected] > > > >> >wrote: > > > >> > > > >> Hmm.. The two directories have different defined roles on iOS and > > both > > > >>> are > > > >>> normal targets for applications to read/write files. Library is for > > > cache > > > >>> data or app-specific resources. Documents is for saving/loading > > actual > > > >>> things created by users within apps. > > > >>> > > > >>> See https://developer.apple.com/library/ios/documentation/ > > > >>> > > > > FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/ > > > >>> FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW14 > > > >>> > > > >>> Supporting both should be a goal. > > > >>> > > > >>> Cheers, > > > >>> Mike > > > >>> > > > >>> > > > >>> > > > >>> On 2013-12-10 14:39, Ian Clelland wrote: > > > >>> > > > >>> If you could do that before, it was probably a bug :) (You > shouldn't > > > be > > > >>>> able to use getParent on the filesystem root, and the native code > > was > > > >>>> supposed to be checking for the correct path prefix before > allowing > > > >>>> access > > > >>>> to any files on the device) > > > >>>> > > > >>>> At the moment, it's not possible to do that -- the filesystems > > should > > > be > > > >>>> properly isolated, and only allow access to correctly formed urls, > > > like > > > >>>> filesystem://localhost/persistent/some-file-here.txt. > > > >>>> > > > >>>> What we *can* do easily, though, is allow a new URL scheme for > > library > > > >>>> assets; something like filesystem://localhost/ > > > >>>> library/some-file-here.txt, > > > >>>> and we can have a filesystem handler for those URLs. That'll work > if > > > >>>> your > > > >>>> use case is just "I need access to files in /Library", rather than > > "I > > > >>>> need > > > >>>> to get to them via string manipulation". > > > >>>> > > > >>>> I've also had some discussions about making /Library the default > > place > > > >>>> for > > > >>>> the persistent filesystem, and leaving /Documents either just for > > > legacy > > > >>>> apps, or making *that* the target of the special URL scheme. > That's > > a > > > >>>> proposal for a different day, though. There are some pretty big > > > >>>> backwards-compatibility issues there. > > > >>>> > > > >>>> > > > >>>> > > > >>>> On Tue, Dec 10, 2013 at 11:54 AM, Michael Gauthier < > > > >>>> [email protected] > > > >>>> > > > >>>>> wrote: > > > >>>>> > > > >>>> > > > >>>> Ian, > > > >>>> > > > >>>>> > > > >>>>> With the new URLs will it be possible to write to both /Documents > > and > > > >>>>> /Library for iOS apps? In the old version, the filesystem root > > > resolved > > > >>>>> as > > > >>>>> /Documents but it was possible to get to /Library by navigating > the > > > the > > > >>>>> parent dir. > > > >>>>> > > > >>>>> Cheers, > > > >>>>> Mike > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> On 2013-11-15 15:19, Ian Clelland wrote: > > > >>>>> > > > >>>>> On Fri, Nov 15, 2013 at 1:40 PM, purplecabbage < > > > >>>>> [email protected] > > > >>>>> > > > >>>>>> > > > >>>>>>> wrote: > > > >>>>>> > > > >>>>>> Considering the magnitude of the changes I would have > expected > > > that > > > >>>>>> this > > > >>>>>> > > > >>>>>> was just a new file plugin. The previous version was based on a > > > spec, > > > >>>>>>> and > > > >>>>>>> if we are deviating from it we should probably maintain both, > and > > > >>>>>>> possibly > > > >>>>>>> even make a recommendation to the w3c. > > > >>>>>>> I hope we at least do a major version update for this if APIs > > have > > > >>>>>>> changed. > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> Yes, definitely a major version bump, at least so that devs > > > aren't > > > >>>>>>> > > > >>>>>> caught > > > >>>>>> by the URL-format-change. > > > >>>>>> > > > >>>>>> There aren't any changes to external APIs; I've been very > careful > > to > > > >>>>>> maintain conformance with the existing tests, except where those > > > tests > > > >>>>>> have > > > >>>>>> been for undocumented implementation details. The only > app-visible > > > >>>>>> change > > > >>>>>> is that URLs returned by the .toURL() method will look like > > > >>>>>> > > > >>>>>> filesystem://localhost/persistent/my/file.jpg > > > >>>>>> > > > >>>>>> rather than > > > >>>>>> > > > >>>>>> file:///var/mobile/Applications/<app id>/Documents/my/file.jpg > > > >>>>>> > > > >>>>>> We are still following the spec -- in fact, this brings us > closer > > in > > > >>>>>> line > > > >>>>>> with the W3C File API spec, on these points: > > > >>>>>> > > > >>>>>> http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath -- > The > > > >>>>>> fullPath > > > >>>>>> of an entry should be the path from the root (of the HTML > > > filesystem, > > > >>>>>> not > > > >>>>>> the underlying device file system). > > > >>>>>> > > > >>>>>> > http://www.w3.org/TR/file-system-api/#widl-Entry-toURL-DOMString-- > > > >>>>>> This > > > >>>>>> is > > > >>>>>> a note, rather than a requirement, but a filesystem url scheme > is > > > >>>>>> mentioned > > > >>>>>> there. > > > >>>>>> > > > >>>>>> We're considering extending the spec in one way, which should be > > > >>>>>> compatible > > > >>>>>> with the spirit of the spec, and backwards-compatible with the > > > >>>>>> previous > > > >>>>>> API. That is the ability to declare new filesystem types, beyond > > > >>>>>> "temporary" and "persistent", so that we can access things like > > > device > > > >>>>>> media and app bundle assets using the same APIs that we use for > > > >>>>>> accessing > > > >>>>>> user-defined files. If we're happy with the way that works, then > > we > > > >>>>>> should > > > >>>>>> definitely propose it for inclusion in the standard (not the > > > specific > > > >>>>>> filesystems, perhaps, but the mechanism for requesting and > > > interacting > > > >>>>>> with > > > >>>>>> them) > > > >>>>>> > > > >>>>>> Ian > > > >>>>>> > > > >>>>>> > > > >>>>>> > > > >>>>>> Sent from my iPhone > > > >>>>>> > > > >>>>>>> > > > >>>>>>> On Nov 15, 2013, at 8:36 AM, Ian Clelland < > > > [email protected] > > > >>>>>>> > > > > >>>>>>> > > > >>>>>>> > > > >>>>>>>> wrote: > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> I've created CB-5403 as the über-ticket for this; various bits > > of > > > it > > > >>>>>>>> are > > > >>>>>>>> > > > >>>>>>>> in > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> subtasks. > > > >>>>>>> > > > >>>>>>>> > > > >>>>>>>> Once I have the tests and the JS updated, then platform owners > > can > > > >>>>>>>> take > > > >>>>>>>> a > > > >>>>>>>> look and see whether they have anything to do to support their > > own > > > >>>>>>>> > > > >>>>>>>> schemes. > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> As general guidelines, I would say: > > > >>>>>>>> > > > >>>>>>>> * If you can intercept filesystem://* URLs in native code, and > > > >>>>>>>> return > > > >>>>>>>> arbitrary responses, then do it! It will let your platform > > support > > > >>>>>>>> new > > > >>>>>>>> filesystems in the future as we come up with them. Add a > couple > > of > > > >>>>>>>> > > > >>>>>>>> subtasks > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> for CB-5403 for your platform and go. > > > >>>>>>> > > > >>>>>>>> > > > >>>>>>>> * If you can't do that, but you *can* provide access to things > > > like > > > >>>>>>>> media > > > >>>>>>>> through special urls, then try that! You should be able to > > create > > > a > > > >>>>>>>> FileSystem object that uses that URL as its root, and > everything > > > >>>>>>>> should > > > >>>>>>>> work. Add a subtask for that, and see what you can do. > > > >>>>>>>> > > > >>>>>>>> * If you can't do that either, and you just want to stick with > > the > > > >>>>>>>> > > > >>>>>>>> file:/// > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> urls that we are currently using, then don't do anything; > > nothing > > > >>>>>>> > > > >>>>>>>> should > > > >>>>>>>> change for you. > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> On Fri, Nov 15, 2013 at 10:36 AM, Ian Clelland < > > > >>>>>>>> [email protected] > > > >>>>>>>> wrote: > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> On Fri, Nov 15, 2013 at 10:03 AM, Marcel Kinard < > > > >>>>>>>> [email protected] > > > >>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> wrote: > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> Ian, will there be changes that app developers will need > to > > > do? > > > >>>>>>>>> If > > > >>>>>>>>> so, > > > >>>>>>>>> > > > >>>>>>>>> those should be clearly documented in a migration guide. If > > not, > > > >>>>>>>>>> it > > > >>>>>>>>>> > > > >>>>>>>>>> sounds > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> like the [improved] tests should pass on both the old and > new > > > >>>>>>> > > > >>>>>>>> versions, > > > >>>>>>>> > > > >>>>>>>> which would be sweet. > > > >>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> The filesystem URLs themselves will change as a result of > > this. > > > >>>>>>>>> The > > > >>>>>>>>> > > > >>>>>>>>> tests > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>> should pass on both old and new versions, but the tests mint > > > their > > > >>>>>>> own > > > >>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>>> URLs > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>> for testing against -- each version is internally consistent, > > but > > > >>>>>>> if > > > >>>>>>> > > > >>>>>>>> an > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>>> app > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>> is saving internal URLs and tries to dereference an old > > > (file:///) > > > >>>>>>> url > > > >>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>>> with > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>> the new plugin, it will probably not resolve. > > > >>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>>> Maybe there's a transition path here -- it might be possible > to > > > >>>>>>>>> allow > > > >>>>>>>>> window.resolveLocalFileSystemURL to access files with the old > > > URL, > > > >>>>>>>>> but > > > >>>>>>>>> never actually generate URLs. > > > >>>>>>>>> > > > >>>>>>>>> That would mean that > > > >>>>>>>>> > > > >>>>>>>>> (resolveLocalFileSystemURL(a)).toURL() !== a, > > > >>>>>>>>> > > > >>>>>>>>> but I don't think that we depend on that as an identity. > > > >>>>>>>>> > > > >>>>>>>>> Is there work which needs to be done on the other platforms > > (BB, > > > >>>>>>>>> WP8, > > > >>>>>>>>> > > > >>>>>>>>> Win8, FFOS, etc) so that those platforms don't get left > > behind? > > > >>>>>>>>> If > > > >>>>>>>>> > > > >>>>>>>>>> so, > > > >>>>>>>>>> would it make sense to reach out to those platform owners > and > > at > > > >>>>>>>>>> least > > > >>>>>>>>>> > > > >>>>>>>>>> get > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> Jira items created with some notes? > > > >>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>>> Yes. I'm going to create a ticket for this, and we can add > > > >>>>>>>>> platform-specific tasks to it. > > > >>>>>>>>> > > > >>>>>>>>> Other platforms shouldn't *have* to do anything, and some > > > platforms > > > >>>>>>>>> *can't* do anything, because they cannot access anything > other > > > than > > > >>>>>>>>> file:/// urls anyway. > > > >>>>>>>>> > > > >>>>>>>>> However, if the other platforms want to get in on the > goodness, > > > and > > > >>>>>>>>> > > > >>>>>>>>> start > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>> supporting their own URL schemes (I think the BB folks can > use > > > >>>>>>> > > > >>>>>>>> something > > > >>>>>>>> > > > >>>>>>>> like local:// for their filesystem access), then that'll be > the > > > >>>>>>>>> place > > > >>>>>>>>> to > > > >>>>>>>>> keep everything organized. > > > >>>>>>>>> > > > >>>>>>>>> I'll post back once I have that issue set up. > > > >>>>>>>>> > > > >>>>>>>>> Ian > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> Sounds like you've built some very significant > improvements. > > > >>>>>>>>> Thanks! > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>>> On Nov 15, 2013, at 9:29 AM, Ian Clelland < > > > >>>>>>>>>> [email protected] > > > >>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>>> wrote: > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>> After working with the File plugin for a week or so, I've > > gotten > > > >>>>>>>> it > > > >>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>>>> more or > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> less where I want it to be on iOS, and am working through > > > >>>>>>>>>> Android. > > > >>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> Looking > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> at the end result, though, I expect that over 90% of the > > code > > > >>>>>>>>>> has > > > >>>>>>>>>> > > > >>>>>>>>>>> been > > > >>>>>>>>>>> touched in some way. (It's a huge diff.) > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > >> > > > > > > > > > >
