You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by GitBox <gi...@apache.org> on 2021/04/26 15:02:50 UTC

[GitHub] [cordova-plugin-file] WeaponX86 commented on issue #422: Error thrown when accessing parent folder of cordova.file.externalApplicationStorageDirectory on Android 11

WeaponX86 commented on issue #422:
URL: https://github.com/apache/cordova-plugin-file/issues/422#issuecomment-826907351


   > 
   > 
   > @WeaponX86 I have the same issue, any workaround?
   
   Nope. Ended up having to change my recursion method from starting at the root to starting with the full path and working down to the root and hoping it never hits this path.
   
   `	/**
   	* Create a nested folder from a string in one of the standard filesystem locations
   	* 
   	* @public
   	* @memberOf FileApi#
   	* @param {string} sPath - The absolute folder path (a/b/c)
   	* @param {function} fnSuccess - Success callback (object)
   	* @param {function} fnFail - Error callback
   	*/
   	function createDirectoryAny(sPath, fnSuccess, fnError){
   		
   		console.log('FileApi: createDirectoryReverse - sPath: ' + sPath);
   	
   		//var aPath = sPath.split('/'); // Doesn't handle protocol correctly
   		var oPath = Common.splitPath(sPath);
   		//console.log(oPath);
   		
   		var sRoot = oPath['sRoot'].replace('///','//'); // Remove extra slash
   		var aPath = oPath['aPath'];
   		
   		aPath.unshift(sRoot); // Append root to start of array
   		
   		//console.log('aPath',aPath)
   		
   		// RECURSIVE
   		var fnCreate = function(directoryEntry,aPathTemp){
   			
   			//console.log('FileApi: createDirectoryReverse > fnCreate directoryEntry',directoryEntry);
   			
   			//console.log(aPathTemp);
   			var sFolder = aPathTemp.shift(); // Affects aPath
   			
   			var sNewPath = directoryEntry.nativeURL + sFolder;
   			
   			// On Android 11, if the folder already exists, calling getDirectory will throw an error
   
               //console.log('FileApi: createDirectoryReverse > fnCreate > resolve not found: ' + sNewPath);
   
               directoryEntry.getDirectory(sFolder, {
                   create : true,
                   //exclusive: false
               }, function(childDirectoryEntry) {
                   //console.log('FileApi: getDirectory success ' + childDirectoryEntry.fullPath);
                   //console.log(directoryEntry);
   
                   if (aPathTemp.length > 0){
                       fnCreate(childDirectoryEntry, aPathTemp);
                   } else {
                       if (typeof(fnSuccess) == 'function'){
                           fnSuccess(childDirectoryEntry);
                       }
                   }
               }, function(error){
                   console.error('FileApi: createDirectoryReverse > getDirectory failed to create folder: ' + sFolder + ' under: ' + directoryEntry.fullPath + ' error code: ' + error.code);
   
                   if (typeof(fnError) == 'function'){
                       fnError();
                   }
               });
   		};
   		
   
   		var fnResolve = function(iIndex){
   			var sSubPath = aPath.slice(0,iIndex).join('/'); // Slice uses 1 index, not zero index
   			
   			if (iIndex > 1) sSubPath += '/'; // Append slash to end if not at root
   			
   			//console.log('fnResolve iIndex: ' + iIndex + ' sSubPath: ' + sSubPath);
   			
   			resolve(sSubPath,
   			function(oEntry){
   				//console.log('FileApi: createDirectoryAny > fnResolve path found: ' + sSubPath);
   				
   				fnCreate(oEntry, aPath.slice(iIndex)); // Break recursion
   			},
   			function(){
   				if (iIndex > 1){
   					fnResolve(iIndex-1);	
   				} else {
   					console.error('FileApi: createDirectoryReverse > fnResolve not found: ' + sSubPath);
   					
   					// No valid parent folder found
   					if (typeof(fnError) == 'function'){
   						fnError();
   					}
   				}	
   			});
   		}
   		
   		// ATTEMPT to resolve the full path
   		resolve(sPath,function(oTarget){	
   			console.log('FileApi: createDirectoryAny path already exists: ' + sPath);
   
   			fnSuccess(oTarget);
   		},function(){
   			fnResolve(aPath.length); // Find the first parent path that already exists
   		});
   	}`


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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