ng-cordova
Version:
[ngCordova](http://ngcordova.com/) ==========
718 lines (619 loc) • 23.5 kB
JavaScript
// install : cordova plugin add cordova-plugin-file
// link : https://github.com/apache/cordova-plugin-file
angular.module('ngCordova.plugins.file', [])
.constant('$cordovaFileError', {
1: 'NOT_FOUND_ERR',
2: 'SECURITY_ERR',
3: 'ABORT_ERR',
4: 'NOT_READABLE_ERR',
5: 'ENCODING_ERR',
6: 'NO_MODIFICATION_ALLOWED_ERR',
7: 'INVALID_STATE_ERR',
8: 'SYNTAX_ERR',
9: 'INVALID_MODIFICATION_ERR',
10: 'QUOTA_EXCEEDED_ERR',
11: 'TYPE_MISMATCH_ERR',
12: 'PATH_EXISTS_ERR'
})
.provider('$cordovaFile', [function () {
this.$get = ['$q', '$window', '$cordovaFileError', function ($q, $window, $cordovaFileError) {
return {
getFreeDiskSpace: function () {
var q = $q.defer();
cordova.exec(function (result) {
q.resolve(result);
}, function (error) {
q.reject(error);
}, 'File', 'getFreeDiskSpace', []);
return q.promise;
},
checkDir: function (path, dir) {
var q = $q.defer();
if ((/^\//.test(dir))) {
q.reject('directory cannot start with \/');
}
try {
var directory = path + dir;
$window.resolveLocalFileSystemURL(directory, function (fileSystem) {
if (fileSystem.isDirectory === true) {
q.resolve(fileSystem);
} else {
q.reject({code: 13, message: 'input is not a directory'});
}
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
} catch (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
}
return q.promise;
},
checkFile: function (path, file) {
var q = $q.defer();
if ((/^\//.test(file))) {
q.reject('directory cannot start with \/');
}
try {
var directory = path + file;
$window.resolveLocalFileSystemURL(directory, function (fileSystem) {
if (fileSystem.isFile === true) {
q.resolve(fileSystem);
} else {
q.reject({code: 13, message: 'input is not a file'});
}
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
} catch (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
}
return q.promise;
},
createDir: function (path, dirName, replaceBool) {
var q = $q.defer();
if ((/^\//.test(dirName))) {
q.reject('directory cannot start with \/');
}
replaceBool = replaceBool ? false : true;
var options = {
create: true,
exclusive: replaceBool
};
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getDirectory(dirName, options, function (result) {
q.resolve(result);
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
createFile: function (path, fileName, replaceBool) {
var q = $q.defer();
if ((/^\//.test(fileName))) {
q.reject('file-name cannot start with \/');
}
replaceBool = replaceBool ? false : true;
var options = {
create: true,
exclusive: replaceBool
};
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(fileName, options, function (result) {
q.resolve(result);
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
removeDir: function (path, dirName) {
var q = $q.defer();
if ((/^\//.test(dirName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
dirEntry.remove(function () {
q.resolve({success: true, fileRemoved: dirEntry});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
}, function (er) {
er.message = $cordovaFileError[er.code];
q.reject(er);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
removeFile: function (path, fileName) {
var q = $q.defer();
if ((/^\//.test(fileName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
fileEntry.remove(function () {
q.resolve({success: true, fileRemoved: fileEntry});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
}, function (er) {
er.message = $cordovaFileError[er.code];
q.reject(er);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
removeRecursively: function (path, dirName) {
var q = $q.defer();
if ((/^\//.test(dirName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
dirEntry.removeRecursively(function () {
q.resolve({success: true, fileRemoved: dirEntry});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
}, function (er) {
er.message = $cordovaFileError[er.code];
q.reject(er);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
writeFile: function (path, fileName, text, replaceBool) {
var q = $q.defer();
if ((/^\//.test(fileName))) {
q.reject('file-name cannot start with \/');
}
replaceBool = replaceBool ? false : true;
var options = {
create: true,
exclusive: replaceBool
};
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(fileName, options, function (fileEntry) {
fileEntry.createWriter(function (writer) {
if (options.append === true) {
writer.seek(writer.length);
}
if (options.truncate) {
writer.truncate(options.truncate);
}
writer.onwriteend = function (evt) {
if (this.error) {
q.reject(this.error);
} else {
q.resolve(evt);
}
};
writer.write(text);
q.promise.abort = function () {
writer.abort();
};
});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
writeExistingFile: function (path, fileName, text) {
var q = $q.defer();
if ((/^\//.test(fileName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
fileEntry.createWriter(function (writer) {
writer.seek(writer.length);
writer.onwriteend = function (evt) {
if (this.error) {
q.reject(this.error);
} else {
q.resolve(evt);
}
};
writer.write(text);
q.promise.abort = function () {
writer.abort();
};
});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
readAsText: function (path, file) {
var q = $q.defer();
if ((/^\//.test(file))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(file, {create: false}, function (fileEntry) {
fileEntry.file(function (fileData) {
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.result !== undefined || evt.target.result !== null) {
q.resolve(evt.target.result);
} else if (evt.target.error !== undefined || evt.target.error !== null) {
q.reject(evt.target.error);
} else {
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
}
};
reader.readAsText(fileData);
});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
readAsDataURL: function (path, file) {
var q = $q.defer();
if ((/^\//.test(file))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(file, {create: false}, function (fileEntry) {
fileEntry.file(function (fileData) {
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.result !== undefined || evt.target.result !== null) {
q.resolve(evt.target.result);
} else if (evt.target.error !== undefined || evt.target.error !== null) {
q.reject(evt.target.error);
} else {
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
}
};
reader.readAsDataURL(fileData);
});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
readAsBinaryString: function (path, file) {
var q = $q.defer();
if ((/^\//.test(file))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(file, {create: false}, function (fileEntry) {
fileEntry.file(function (fileData) {
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.result !== undefined || evt.target.result !== null) {
q.resolve(evt.target.result);
} else if (evt.target.error !== undefined || evt.target.error !== null) {
q.reject(evt.target.error);
} else {
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
}
};
reader.readAsBinaryString(fileData);
});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
readAsArrayBuffer: function (path, file) {
var q = $q.defer();
if ((/^\//.test(file))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(file, {create: false}, function (fileEntry) {
fileEntry.file(function (fileData) {
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.result !== undefined || evt.target.result !== null) {
q.resolve(evt.target.result);
} else if (evt.target.error !== undefined || evt.target.error !== null) {
q.reject(evt.target.error);
} else {
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
}
};
reader.readAsArrayBuffer(fileData);
});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
moveFile: function (path, fileName, newPath, newFileName) {
var q = $q.defer();
newFileName = newFileName || fileName;
if ((/^\//.test(fileName)) || (/^\//.test(newFileName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
$window.resolveLocalFileSystemURL(newPath, function (newFileEntry) {
fileEntry.moveTo(newFileEntry, newFileName, function (result) {
q.resolve(result);
}, function (error) {
q.reject(error);
});
}, function (err) {
q.reject(err);
});
}, function (err) {
q.reject(err);
});
}, function (er) {
q.reject(er);
});
} catch (e) {
q.reject(e);
}
return q.promise;
},
moveDir: function (path, dirName, newPath, newDirName) {
var q = $q.defer();
newDirName = newDirName || dirName;
if (/^\//.test(dirName) || (/^\//.test(newDirName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
$window.resolveLocalFileSystemURL(newPath, function (newDirEntry) {
dirEntry.moveTo(newDirEntry, newDirName, function (result) {
q.resolve(result);
}, function (error) {
q.reject(error);
});
}, function (erro) {
q.reject(erro);
});
}, function (err) {
q.reject(err);
});
}, function (er) {
q.reject(er);
});
} catch (e) {
q.reject(e);
}
return q.promise;
},
copyDir: function (path, dirName, newPath, newDirName) {
var q = $q.defer();
newDirName = newDirName || dirName;
if (/^\//.test(dirName) || (/^\//.test(newDirName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getDirectory(dirName, {create: false, exclusive: false}, function (dirEntry) {
$window.resolveLocalFileSystemURL(newPath, function (newDirEntry) {
dirEntry.copyTo(newDirEntry, newDirName, function (result) {
q.resolve(result);
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (erro) {
erro.message = $cordovaFileError[erro.code];
q.reject(erro);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
}, function (er) {
er.message = $cordovaFileError[er.code];
q.reject(er);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
copyFile: function (path, fileName, newPath, newFileName) {
var q = $q.defer();
newFileName = newFileName || fileName;
if ((/^\//.test(fileName))) {
q.reject('file-name cannot start with \/');
}
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getFile(fileName, {create: false, exclusive: false}, function (fileEntry) {
$window.resolveLocalFileSystemURL(newPath, function (newFileEntry) {
fileEntry.copyTo(newFileEntry, newFileName, function (result) {
q.resolve(result);
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (erro) {
erro.message = $cordovaFileError[erro.code];
q.reject(erro);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
}, function (er) {
er.message = $cordovaFileError[er.code];
q.reject(er);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
readFileMetadata: function (path, file) {
var q = $q.defer();
if ((/^\//.test(file))) {
q.reject('directory cannot start with \/');
}
try {
var directory = path + file;
$window.resolveLocalFileSystemURL(directory, function (fileEntry) {
fileEntry.file(function (result) {
q.resolve(result);
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
}
/*
listFiles: function (path, dir) {
},
listDir: function (path, dirName) {
var q = $q.defer();
try {
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
fileSystem.getDirectory(dirName, options, function (parent) {
var reader = parent.createReader();
reader.readEntries(function (entries) {
q.resolve(entries);
}, function () {
q.reject('DIR_READ_ERROR : ' + path + dirName);
});
}, function (error) {
error.message = $cordovaFileError[error.code];
q.reject(error);
});
}, function (err) {
err.message = $cordovaFileError[err.code];
q.reject(err);
});
} catch (e) {
e.message = $cordovaFileError[e.code];
q.reject(e);
}
return q.promise;
},
*/
};
}];
}]);