cordova-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CB-9752) getDirectory fails on valid directory with assets filesystem
Date Fri, 30 Oct 2015 16:53:27 GMT

    [ https://issues.apache.org/jira/browse/CB-9752?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14982864#comment-14982864
] 

ASF GitHub Bot commented on CB-9752:
------------------------------------

GitHub user jasongin opened a pull request:

    https://github.com/apache/cordova-plugin-file/pull/144

    Fix CB-9752: FileEntry.getDirectory fails with assets filesystem

    Calls to FileEntry.getDirectory() on an asset entry would internally call
    the AssetFileSystem.listAssets() method using an asset path with a
    trailing slash, regardless of whether a trailing slash was included by
    the user. But neither the asset list cache (from cdvasset.manifest) nor
    Android's AssetManager.list() API support matching a path with a trailing
    slash. That resulted in a TypeMismatchException thrown from
    AssetFileSystem.getFileForLocalURL(), because the asset path was found
    but not matched as a directory as expected by the caller.
    
    This fix removes the trailing slash from the asset path before matching
    against the asset list cache or calling Android's AssetManager.list() API.
    A new unit test for getting asset directories fails without and passes
    with the fix.
    
    While I'm here, I'm also adding a unit test for reading asset file
    contents. There are a couple old bug reports about that (CB-7273,
    CB-8350). The bugs don't repro anymore, but I'm adding the test anyway
    since there wasn't good test coverage before.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/jasongin/cordova-plugin-file CB-9752

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/cordova-plugin-file/pull/144.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #144
    
----
commit 76c8fd5e43598ea660c2db64eb08e2659b45a575
Author: Jason Ginchereau <jasongin@microsoft.com>
Date:   2015-10-28T21:30:24Z

    Fix CB-9752: getDirectory fails on valid directory with assets filesystem
    
    Calls to FileEntry.getDirectory() on an asset entry would internally call
    the AssetFileSystem.listAssets() method using an asset path with a
    trailing slash, regardless of whether a trailing slash was included by
    the user. But neither the asset list cache (from cdvasset.manifest) nor
    Android's AssetManager.list() API support matching a path with a trailing
    slash. That resulted in a TypeMismatchException thrown from
    AssetFileSystem.getFileForLocalURL(), because the asset path was found
    but not matched as a directory as expected by the caller.
    
    This fix removes the trailing slash from the asset path before matching
    against the asset list cache or calling Android's AssetManager.list() API.
    A new unit test for getting asset directories fails without and passes
    with the fix.
    
    While I'm here, I'm also adding a unit test for reading asset file
    contents. There are a couple old bug reports about that (CB-7273,
    CB-8350). The bugs don't repro anymore, but I'm adding the test anyway
    since there wasn't good test coverage before.

----


> getDirectory fails on valid directory with assets filesystem
> ------------------------------------------------------------
>
>                 Key: CB-9752
>                 URL: https://issues.apache.org/jira/browse/CB-9752
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android, Plugin File
>         Environment: cordova 5.3.3
> cordova android 4.0.0
> cordova-plugin-file 2.0.0
> *** using build-extras.gradle to speed up lookups (as per README.md for plugin) ***
>            Reporter: Denis Babineau
>            Assignee: Jason Ginchereau
>
> The following JS snippet fails with "failed to get www directory":
> window.resolveLocalFileSystemURL(cordova.file.applicationDirectory, function(appDir)
{
>     appDir.getDirectory('www', {create:false}, function(wwwDir) {
>         console.log("success!");
>     }, function() {
>         console.log("failed to get www directory");
>     });
> }, function() {
>     console.log("Failed to get application directory");
> });
> I narrowed it down to AssetFilesystem.java's listAssets() method called from isDirectory()
which returns the "new String[0];" (assetPath = 'www/' in this method) which in turn causes
isDirectory() to return false.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org


Mime
View raw message