diff options
| author | PliablePixels <pliablepixels@gmail.com> | 2015-06-24 18:47:42 -0400 |
|---|---|---|
| committer | PliablePixels <pliablepixels@gmail.com> | 2015-06-24 18:47:42 -0400 |
| commit | 855a0e8ddc273b58066530a1b55a946021dfc56e (patch) | |
| tree | 26550033e855a31a265fc2da4da3df0cc2733dc1 /plugins/org.apache.cordova.file/src/windows8/FileProxy.js | |
| parent | d442629aa825aab6bc55ab6be19e3aba060867fe (diff) | |
Cleaned up code, commented, preparing for HTTPS via CordovaHTTP
Diffstat (limited to 'plugins/org.apache.cordova.file/src/windows8/FileProxy.js')
| -rw-r--r-- | plugins/org.apache.cordova.file/src/windows8/FileProxy.js | 845 |
1 files changed, 845 insertions, 0 deletions
diff --git a/plugins/org.apache.cordova.file/src/windows8/FileProxy.js b/plugins/org.apache.cordova.file/src/windows8/FileProxy.js new file mode 100644 index 00000000..1445ae70 --- /dev/null +++ b/plugins/org.apache.cordova.file/src/windows8/FileProxy.js @@ -0,0 +1,845 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +var cordova = require('cordova'); +var Entry = require('./Entry'), + File = require('./File'), + FileEntry = require('./FileEntry'), + FileError = require('./FileError'), + DirectoryEntry = require('./DirectoryEntry'), + Flags = require('./Flags'), + FileSystem = require('./FileSystem'), + LocalFileSystem = require('./LocalFileSystem'); + +module.exports = { + + getFileMetadata:function(win,fail,args) { + var fullPath = args[0]; + + Windows.Storage.StorageFile.getFileFromPathAsync(fullPath).done( + function (storageFile) { + storageFile.getBasicPropertiesAsync().then( + function (basicProperties) { + win(new File(storageFile.name, storageFile.path, storageFile.fileType, basicProperties.dateModified, basicProperties.size)); + }, function () { + fail && fail(FileError.NOT_READABLE_ERR); + } + ); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + }, + + getMetadata:function(success,fail,args) { + var fullPath = args[0]; + + var dealFile = function (sFile) { + Windows.Storage.StorageFile.getFileFromPathAsync(fullPath).then( + function (storageFile) { + return storageFile.getBasicPropertiesAsync(); + }, + function () { + fail && fail(FileError.NOT_READABLE_ERR); + } + // get the basic properties of the file. + ).then( + function (basicProperties) { + success(basicProperties.dateModified); + }, + function () { + fail && fail(FileError.NOT_READABLE_ERR); + } + ); + }; + + var dealFolder = function (sFolder) { + Windows.Storage.StorageFolder.getFolderFromPathAsync(fullPath).then( + function (storageFolder) { + return storageFolder.getBasicPropertiesAsync(); + }, + function () { + fail && fail(FileError.NOT_READABLE_ERR); + } + // get the basic properties of the folder. + ).then( + function (basicProperties) { + success(basicProperties.dateModified); + }, + function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + }; + + Windows.Storage.StorageFile.getFileFromPathAsync(fullPath).then( + // the path is file. + function (sFile) { + dealFile(sFile); + }, + // the path is folder + function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(fullPath).then( + function (sFolder) { + dealFolder(sFolder); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + } + ); + }, + + getParent:function(win,fail,args) { // ["fullPath"] + var fullPath = args[0]; + + var storageFolderPer = Windows.Storage.ApplicationData.current.localFolder; + var storageFolderTem = Windows.Storage.ApplicationData.current.temporaryFolder; + + if (fullPath == storageFolderPer.path) { + win(new DirectoryEntry(storageFolderPer.name, storageFolderPer.path)); + return; + } else if (fullPath == storageFolderTem.path) { + win(new DirectoryEntry(storageFolderTem.name, storageFolderTem.path)); + return; + } + var splitArr = fullPath.split(new RegExp(/\/|\\/g)); + + var popItem = splitArr.pop(); + + var result = new DirectoryEntry(popItem, fullPath.substr(0, fullPath.length - popItem.length - 1)); + Windows.Storage.StorageFolder.getFolderFromPathAsync(result.fullPath).done( + function () { win(result); }, + function () { fail && fail(FileError.INVALID_STATE_ERR); } + ); + }, + + readAsText:function(win,fail,args) { + var fileName = args[0]; + var enc = args[1]; + + Windows.Storage.StorageFile.getFileFromPathAsync(fileName).done( + function (storageFile) { + var value = Windows.Storage.Streams.UnicodeEncoding.utf8; + if (enc == 'Utf16LE' || enc == 'utf16LE') { + value = Windows.Storage.Streams.UnicodeEncoding.utf16LE; + }else if (enc == 'Utf16BE' || enc == 'utf16BE') { + value = Windows.Storage.Streams.UnicodeEncoding.utf16BE; + } + Windows.Storage.FileIO.readTextAsync(storageFile, value).done( + function (fileContent) { + win(fileContent); + }, + function () { + fail && fail(FileError.ENCODING_ERR); + } + ); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + }, + + readAsDataURL:function(win,fail,args) { + var fileName = args[0]; + + + Windows.Storage.StorageFile.getFileFromPathAsync(fileName).then( + function (storageFile) { + Windows.Storage.FileIO.readBufferAsync(storageFile).done( + function (buffer) { + var strBase64 = Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(buffer); + //the method encodeToBase64String will add "77u/" as a prefix, so we should remove it + if(String(strBase64).substr(0,4) == "77u/") { + strBase64 = strBase64.substr(4); + } + var mediaType = storageFile.contentType; + var result = "data:" + mediaType + ";base64," + strBase64; + win(result); + } + ); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + }, + + getDirectory:function(win,fail,args) { + var fullPath = args[0]; + var path = args[1]; + var options = args[2]; + + var flag = ""; + if (options !== null) { + flag = new Flags(options.create, options.exclusive); + } else { + flag = new Flags(false, false); + } + + Windows.Storage.StorageFolder.getFolderFromPathAsync(fullPath).then( + function (storageFolder) { + if (flag.create === true && flag.exclusive === true) { + storageFolder.createFolderAsync(path, Windows.Storage.CreationCollisionOption.failIfExists).done( + function (storageFolder) { + win(new DirectoryEntry(storageFolder.name, storageFolder.path)); + }, function () { + fail && fail(FileError.PATH_EXISTS_ERR); + } + ); + } else if (flag.create === true && flag.exclusive === false) { + storageFolder.createFolderAsync(path, Windows.Storage.CreationCollisionOption.openIfExists).done( + function (storageFolder) { + win(new DirectoryEntry(storageFolder.name, storageFolder.path)); + }, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + } + ); + } else if (flag.create === false) { + if (/\?|\\|\*|\||\"|<|>|\:|\//g.test(path)) { + fail && fail(FileError.ENCODING_ERR); + return; + } + + storageFolder.getFolderAsync(path).done( + function (storageFolder) { + win(new DirectoryEntry(storageFolder.name, storageFolder.path)); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + } + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + }, + + remove:function(win,fail,args) { + var fullPath = args[0]; + + Windows.Storage.StorageFile.getFileFromPathAsync(fullPath).then( + function (sFile) { + Windows.Storage.StorageFile.getFileFromPathAsync(fullPath).done(function (storageFile) { + storageFile.deleteAsync().done(win, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + + }); + }); + }, + function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(fullPath).then( + function (sFolder) { + var removeEntry = function () { + var storageFolderTop = null; + + Windows.Storage.StorageFolder.getFolderFromPathAsync(fullPath).then( + function (storageFolder) { + // FileSystem root can't be removed! + var storageFolderPer = Windows.Storage.ApplicationData.current.localFolder; + var storageFolderTem = Windows.Storage.ApplicationData.current.temporaryFolder; + if (fullPath == storageFolderPer.path || fullPath == storageFolderTem.path) { + fail && fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + return; + } + storageFolderTop = storageFolder; + return storageFolder.createFileQuery().getFilesAsync(); + }, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + + } + // check sub-files. + ).then(function (fileList) { + if (fileList) { + if (fileList.length === 0) { + return storageFolderTop.createFolderQuery().getFoldersAsync(); + } else { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + } + } + // check sub-folders. + }).then(function (folderList) { + if (folderList) { + if (folderList.length === 0) { + storageFolderTop.deleteAsync().done(win, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + + }); + } else { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + } + } + + }); + }; + removeEntry(); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + } + ); + }, + + removeRecursively:function(successCallback,fail,args) { + var fullPath = args[0]; + + Windows.Storage.StorageFolder.getFolderFromPathAsync(fullPath).done(function (storageFolder) { + var storageFolderPer = Windows.Storage.ApplicationData.current.localFolder; + var storageFolderTem = Windows.Storage.ApplicationData.current.temporaryFolder; + + if (storageFolder.path == storageFolderPer.path || storageFolder.path == storageFolderTem.path) { + fail && fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + return; + } + + var removeFolders = function (path) { + return new WinJS.Promise(function (complete) { + var filePromiseArr = []; + var storageFolderTop = null; + Windows.Storage.StorageFolder.getFolderFromPathAsync(path).then( + function (storageFolder) { + var fileListPromise = storageFolder.createFileQuery().getFilesAsync(); + + storageFolderTop = storageFolder; + return fileListPromise; + } + // remove all the files directly under the folder. + ).then(function (fileList) { + if (fileList !== null) { + for (var i = 0; i < fileList.length; i++) { + var filePromise = fileList[i].deleteAsync(); + filePromiseArr.push(filePromise); + } + } + WinJS.Promise.join(filePromiseArr).then(function () { + var folderListPromise = storageFolderTop.createFolderQuery().getFoldersAsync(); + return folderListPromise; + // remove empty folders. + }).then(function (folderList) { + var folderPromiseArr = []; + if (folderList.length !== 0) { + for (var j = 0; j < folderList.length; j++) { + + folderPromiseArr.push(removeFolders(folderList[j].path)); + } + WinJS.Promise.join(folderPromiseArr).then(function () { + storageFolderTop.deleteAsync().then(complete); + }); + } else { + storageFolderTop.deleteAsync().then(complete); + } + }, function () { }); + }, function () { }); + }); + }; + removeFolders(storageFolder.path).then(function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(storageFolder.path).then( + function () {}, + function () { + if (typeof successCallback !== 'undefined' && successCallback !== null) { successCallback(); } + }); + }); + }); + }, + + getFile:function(win,fail,args) { + var fullPath = args[0]; + var path = args[1]; + var options = args[2]; + + var flag = ""; + if (options !== null) { + flag = new Flags(options.create, options.exclusive); + } else { + flag = new Flags(false, false); + } + + Windows.Storage.StorageFolder.getFolderFromPathAsync(fullPath).then( + function (storageFolder) { + if (flag.create === true && flag.exclusive === true) { + storageFolder.createFileAsync(path, Windows.Storage.CreationCollisionOption.failIfExists).done( + function (storageFile) { + win(new FileEntry(storageFile.name, storageFile.path)); + }, function () { + fail && fail(FileError.PATH_EXISTS_ERR); + } + ); + } else if (flag.create === true && flag.exclusive === false) { + storageFolder.createFileAsync(path, Windows.Storage.CreationCollisionOption.openIfExists).done( + function (storageFile) { + win(new FileEntry(storageFile.name, storageFile.path)); + }, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + } + ); + } else if (flag.create === false) { + if (/\?|\\|\*|\||\"|<|>|\:|\//g.test(path)) { + fail && fail(FileError.ENCODING_ERR); + return; + } + storageFolder.getFileAsync(path).done( + function (storageFile) { + win(new FileEntry(storageFile.name, storageFile.path)); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + } + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + }, + + readEntries:function(win,fail,args) { // ["fullPath"] + var path = args[0]; + + var result = []; + + Windows.Storage.StorageFolder.getFolderFromPathAsync(path).then(function (storageFolder) { + var promiseArr = []; + var index = 0; + promiseArr[index++] = storageFolder.createFileQuery().getFilesAsync().then(function (fileList) { + if (fileList !== null) { + for (var i = 0; i < fileList.length; i++) { + result.push(new FileEntry(fileList[i].name, fileList[i].path)); + } + } + }); + promiseArr[index++] = storageFolder.createFolderQuery().getFoldersAsync().then(function (folderList) { + if (folderList !== null) { + for (var j = 0; j < folderList.length; j++) { + result.push(new FileEntry(folderList[j].name, folderList[j].path)); + } + } + }); + WinJS.Promise.join(promiseArr).then(function () { + win(result); + }); + + }, function () { fail && fail(FileError.NOT_FOUND_ERR); }); + }, + + write:function(win,fail,args) { + var fileName = args[0]; + var text = args[1]; + var position = args[2]; + + Windows.Storage.StorageFile.getFileFromPathAsync(fileName).done( + function (storageFile) { + Windows.Storage.FileIO.writeTextAsync(storageFile,text,Windows.Storage.Streams.UnicodeEncoding.utf8).done( + function() { + win(String(text).length); + }, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + } + ); + }, function() { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + }, + + truncate:function(win,fail,args) { // ["fileName","size"] + var fileName = args[0]; + var size = args[1]; + + Windows.Storage.StorageFile.getFileFromPathAsync(fileName).done(function(storageFile){ + //the current length of the file. + var leng = 0; + + storageFile.getBasicPropertiesAsync().then(function (basicProperties) { + leng = basicProperties.size; + if (Number(size) >= leng) { + win(this.length); + return; + } + if (Number(size) >= 0) { + Windows.Storage.FileIO.readTextAsync(storageFile, Windows.Storage.Streams.UnicodeEncoding.utf8).then(function (fileContent) { + fileContent = fileContent.substr(0, size); + var fullPath = storageFile.path; + var name = storageFile.name; + var entry = new Entry(true, false, name, fullPath); + var parentPath = ""; + var successCallBack = function (entry) { + parentPath = entry.fullPath; + storageFile.deleteAsync().then(function () { + return Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath); + }).then(function (storageFolder) { + storageFolder.createFileAsync(name).then(function (newStorageFile) { + Windows.Storage.FileIO.writeTextAsync(newStorageFile, fileContent).done(function () { + win(String(fileContent).length); + }, function () { + fail && fail(FileError.NO_MODIFICATION_ALLOWED_ERR); + }); + }); + }); + }; + entry.getParent(successCallBack, null); + }, function () { fail && fail(FileError.NOT_FOUND_ERR); }); + } + }); + }, function () { fail && fail(FileError.NOT_FOUND_ERR); }); + }, + + copyTo:function(success,fail,args) { // ["fullPath","parent", "newName"] + var srcPath = args[0]; + var parentFullPath = args[1]; + var name = args[2]; + + //name can't be invalid + if (/\?|\\|\*|\||\"|<|>|\:|\//g.test(name)) { + fail && fail(FileError.ENCODING_ERR); + return; + } + // copy + var copyFiles = ""; + Windows.Storage.StorageFile.getFileFromPathAsync(srcPath).then( + function (sFile) { + copyFiles = function (srcPath, parentPath) { + var storageFileTop = null; + Windows.Storage.StorageFile.getFileFromPathAsync(srcPath).then(function (storageFile) { + storageFileTop = storageFile; + return Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath); + }, function () { + + fail && fail(FileError.NOT_FOUND_ERR); + }).then(function (storageFolder) { + storageFileTop.copyAsync(storageFolder, name, Windows.Storage.NameCollisionOption.failIfExists).then(function (storageFile) { + + success(new FileEntry(storageFile.name, storageFile.path)); + }, function () { + + fail && fail(FileError.INVALID_MODIFICATION_ERR); + }); + }, function () { + + fail && fail(FileError.NOT_FOUND_ERR); + }); + }; + var copyFinish = function (srcPath, parentPath) { + copyFiles(srcPath, parentPath); + }; + copyFinish(srcPath, parentFullPath); + }, + function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(srcPath).then( + function (sFolder) { + copyFiles = function (srcPath, parentPath) { + var coreCopy = function (storageFolderTop, complete) { + storageFolderTop.createFolderQuery().getFoldersAsync().then(function (folderList) { + var folderPromiseArr = []; + if (folderList.length === 0) { complete(); } + else { + Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath).then(function (storageFolderTarget) { + var tempPromiseArr = []; + var index = 0; + for (var j = 0; j < folderList.length; j++) { + tempPromiseArr[index++] = storageFolderTarget.createFolderAsync(folderList[j].name).then(function (targetFolder) { + folderPromiseArr.push(copyFiles(folderList[j].path, targetFolder.path)); + }); + } + WinJS.Promise.join(tempPromiseArr).then(function () { + WinJS.Promise.join(folderPromiseArr).then(complete); + }); + }); + } + }); + }; + + return new WinJS.Promise(function (complete) { + var storageFolderTop = null; + var filePromiseArr = []; + var fileListTop = null; + Windows.Storage.StorageFolder.getFolderFromPathAsync(srcPath).then(function (storageFolder) { + storageFolderTop = storageFolder; + return storageFolder.createFileQuery().getFilesAsync(); + }).then(function (fileList) { + fileListTop = fileList; + if (fileList) { + return Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath); + } + }).then(function (targetStorageFolder) { + for (var i = 0; i < fileListTop.length; i++) { + filePromiseArr.push(fileListTop[i].copyAsync(targetStorageFolder)); + } + WinJS.Promise.join(filePromiseArr).then(function () { + coreCopy(storageFolderTop, complete); + }); + }); + }); + }; + var copyFinish = function (srcPath, parentPath) { + Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath).then(function (storageFolder) { + storageFolder.createFolderAsync(name, Windows.Storage.CreationCollisionOption.openIfExists).then(function (newStorageFolder) { + //can't copy onto itself + if (srcPath == newStorageFolder.path) { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + return; + } + //can't copy into itself + if (srcPath == parentPath) { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + return; + } + copyFiles(srcPath, newStorageFolder.path).then(function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(newStorageFolder.path).done( + function (storageFolder) { + success(new DirectoryEntry(storageFolder.name, storageFolder.path)); + }, + function () { fail && fail(FileError.NOT_FOUND_ERR); } + ); + }); + }, function () { fail && fail(FileError.INVALID_MODIFICATION_ERR); }); + }, function () { fail && fail(FileError.INVALID_MODIFICATION_ERR); }); + }; + copyFinish(srcPath, parentFullPath); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + } + ); + }, + + moveTo:function(success,fail,args) { + var srcPath = args[0]; + var parentFullPath = args[1]; + var name = args[2]; + + + //name can't be invalid + if (/\?|\\|\*|\||\"|<|>|\:|\//g.test(name)) { + fail && fail(FileError.ENCODING_ERR); + return; + } + + var moveFiles = ""; + Windows.Storage.StorageFile.getFileFromPathAsync(srcPath).then( + function (sFile) { + moveFiles = function (srcPath, parentPath) { + var storageFileTop = null; + Windows.Storage.StorageFile.getFileFromPathAsync(srcPath).then(function (storageFile) { + storageFileTop = storageFile; + return Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + }).then(function (storageFolder) { + storageFileTop.moveAsync(storageFolder, name, Windows.Storage.NameCollisionOption.replaceExisting).then(function () { + success(new FileEntry(name, storageFileTop.path)); + }, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + }); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + }); + }; + var moveFinish = function (srcPath, parentPath) { + //can't copy onto itself + if (srcPath == parentPath + "\\" + name) { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + return; + } + moveFiles(srcPath, parentFullPath); + }; + moveFinish(srcPath, parentFullPath); + }, + function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(srcPath).then( + function (sFolder) { + moveFiles = function (srcPath, parentPath) { + var coreMove = function (storageFolderTop, complete) { + storageFolderTop.createFolderQuery().getFoldersAsync().then(function (folderList) { + var folderPromiseArr = []; + if (folderList.length === 0) { + // If failed, we must cancel the deletion of folders & files.So here wo can't delete the folder. + complete(); + } + else { + Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath).then(function (storageFolderTarget) { + var tempPromiseArr = []; + var index = 0; + for (var j = 0; j < folderList.length; j++) { + tempPromiseArr[index++] = storageFolderTarget.createFolderAsync(folderList[j].name).then(function (targetFolder) { + folderPromiseArr.push(moveFiles(folderList[j].path, targetFolder.path)); + }); + } + WinJS.Promise.join(tempPromiseArr).then(function () { + WinJS.Promise.join(folderPromiseArr).then(complete); + }); + }); + } + }); + }; + return new WinJS.Promise(function (complete) { + var storageFolderTop = null; + Windows.Storage.StorageFolder.getFolderFromPathAsync(srcPath).then(function (storageFolder) { + storageFolderTop = storageFolder; + return storageFolder.createFileQuery().getFilesAsync(); + }).then(function (fileList) { + var filePromiseArr = []; + Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath).then(function (dstStorageFolder) { + if (fileList) { + for (var i = 0; i < fileList.length; i++) { + filePromiseArr.push(fileList[i].moveAsync(dstStorageFolder)); + } + } + WinJS.Promise.join(filePromiseArr).then(function () { + coreMove(storageFolderTop, complete); + }, function () { }); + }); + }); + }); + }; + var moveFinish = function (srcPath, parentPath) { + var originFolderTop = null; + Windows.Storage.StorageFolder.getFolderFromPathAsync(srcPath).then(function (originFolder) { + originFolderTop = originFolder; + return Windows.Storage.StorageFolder.getFolderFromPathAsync(parentPath); + }, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + }).then(function (storageFolder) { + return storageFolder.createFolderAsync(name, Windows.Storage.CreationCollisionOption.openIfExists); + }, function () { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + }).then(function (newStorageFolder) { + //can't move onto directory that is not empty + newStorageFolder.createFileQuery().getFilesAsync().then(function (fileList) { + newStorageFolder.createFolderQuery().getFoldersAsync().then(function (folderList) { + if (fileList.length !== 0 || folderList.length !== 0) { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + return; + } + //can't copy onto itself + if (srcPath == newStorageFolder.path) { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + return; + } + //can't copy into itself + if (srcPath == parentPath) { + fail && fail(FileError.INVALID_MODIFICATION_ERR); + return; + } + moveFiles(srcPath, newStorageFolder.path).then(function () { + var successCallback = function () { + success(new DirectoryEntry(name, newStorageFolder.path)); + }; + var temp = new DirectoryEntry(originFolderTop.name, originFolderTop.path).removeRecursively(successCallback, fail); + + }, function () { console.log("error!"); }); + }); + }); + }, function () { fail && fail(FileError.INVALID_MODIFICATION_ERR); }); + + }; + moveFinish(srcPath, parentFullPath); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + } + ); + }, + tempFileSystem:null, + + persistentFileSystem:null, + + requestFileSystem:function(win,fail,args) { + var type = args[0]; + var size = args[1]; + + var filePath = ""; + var result = null; + var fsTypeName = ""; + + switch (type) { + case LocalFileSystem.TEMPORARY: + filePath = Windows.Storage.ApplicationData.current.temporaryFolder.path; + fsTypeName = "temporary"; + break; + case LocalFileSystem.PERSISTENT: + filePath = Windows.Storage.ApplicationData.current.localFolder.path; + fsTypeName = "persistent"; + break; + } + + var MAX_SIZE = 10000000000; + if (size > MAX_SIZE) { + fail && fail(FileError.QUOTA_EXCEEDED_ERR); + return; + } + + var fileSystem = new FileSystem(fsTypeName, new DirectoryEntry(fsTypeName, filePath)); + result = fileSystem; + win(result); + }, + + resolveLocalFileSystemURI:function(success,fail,args) { + var uri = args[0]; + + var path = uri; + + // support for file name with parameters + if (/\?/g.test(path)) { + path = String(path).split("?")[0]; + } + + // support for encodeURI + if (/\%5/g.test(path)) { + path = decodeURI(path); + } + + // support for special path start with file:/// + if (path.substr(0, 8) == "file:///") { + path = Windows.Storage.ApplicationData.current.localFolder.path + "\\" + String(path).substr(8).split("/").join("\\"); + Windows.Storage.StorageFile.getFileFromPathAsync(path).then( + function (storageFile) { + success(new FileEntry(storageFile.name, storageFile.path)); + }, function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(path).then( + function (storageFolder) { + success(new DirectoryEntry(storageFolder.name, storageFolder.path)); + }, function () { + fail && fail(FileError.NOT_FOUND_ERR); + } + ); + } + ); + } else { + Windows.Storage.StorageFile.getFileFromPathAsync(path).then( + function (storageFile) { + success(new FileEntry(storageFile.name, storageFile.path)); + }, function () { + Windows.Storage.StorageFolder.getFolderFromPathAsync(path).then( + function (storageFolder) { + success(new DirectoryEntry(storageFolder.name, storageFolder.path)); + }, function () { + fail && fail(FileError.ENCODING_ERR); + } + ); + } + ); + } + } + +}; + +require("cordova/windows8/commandProxy").add("File",module.exports); |
