tns-core-modules
Version:
Telerik NativeScript Core Modules
321 lines (320 loc) • 11.6 kB
JavaScript
var textModule = require("text");
var FileSystemAccess = (function () {
function FileSystemAccess() {
this.keyModificationTime = "NSFileModificationDate";
this.documentDir = 9;
this.cachesDir = 13;
this.userDomain = 1;
}
FileSystemAccess.prototype.getLastModified = function (path) {
var fileManager = NSFileManager.defaultManager();
var attributes = fileManager.attributesOfItemAtPathError(path);
if (attributes) {
return attributes.objectForKey(this.keyModificationTime);
}
else {
return new Date();
}
};
FileSystemAccess.prototype.getParent = function (path, onError) {
try {
var fileManager = NSFileManager.defaultManager();
var nsString = NSString.alloc().initWithString(path);
var parentPath = nsString.stringByDeletingLastPathComponent;
var name = fileManager.displayNameAtPath(parentPath);
return {
path: parentPath.toString(),
name: name
};
}
catch (exception) {
if (onError) {
onError(exception);
}
return undefined;
}
};
FileSystemAccess.prototype.getFile = function (path, onError) {
try {
var fileManager = NSFileManager.defaultManager();
var exists = fileManager.fileExistsAtPath(path);
if (!exists) {
if (!fileManager.createFileAtPathContentsAttributes(path, null, null)) {
if (onError) {
onError(new Error("Failed to create folder at path '" + path + "'"));
}
return undefined;
}
}
var fileName = fileManager.displayNameAtPath(path);
return {
path: path,
name: fileName,
extension: this.getFileExtension(path)
};
}
catch (exception) {
if (onError) {
onError(exception);
}
return undefined;
}
};
FileSystemAccess.prototype.getFolder = function (path, onError) {
try {
var fileManager = NSFileManager.defaultManager();
var exists = this.folderExists(path);
if (!exists) {
try {
fileManager.createDirectoryAtPathWithIntermediateDirectoriesAttributesError(path, true, null);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to create folder at path '" + path + "': " + ex));
}
return undefined;
}
}
var dirName = fileManager.displayNameAtPath(path);
return {
path: path,
name: dirName
};
}
catch (ex) {
if (onError) {
onError(new Error("Failed to create folder at path '" + path + "'"));
}
return undefined;
}
};
FileSystemAccess.prototype.eachEntity = function (path, onEntity, onError) {
if (!onEntity) {
return;
}
this.enumEntities(path, onEntity, onError);
};
FileSystemAccess.prototype.getEntities = function (path, onError) {
var fileInfos = new Array();
var onEntity = function (entity) {
fileInfos.push(entity);
return true;
};
var errorOccurred;
var localError = function (error) {
if (onError) {
onError(error);
}
errorOccurred = true;
};
this.enumEntities(path, onEntity, localError);
if (!errorOccurred) {
return fileInfos;
}
return null;
};
FileSystemAccess.prototype.fileExists = function (path) {
var result = this.exists(path);
return result.exists;
};
FileSystemAccess.prototype.folderExists = function (path) {
var result = this.exists(path);
return result.exists && result.isDirectory;
};
FileSystemAccess.prototype.exists = function (path) {
var fileManager = NSFileManager.defaultManager();
var isDirectory = new interop.Reference(interop.types.bool, false);
var exists = fileManager.fileExistsAtPathIsDirectory(path, isDirectory);
return { exists: exists, isDirectory: isDirectory.value };
};
FileSystemAccess.prototype.concatPath = function (left, right) {
var utils = require("utils/utils");
var nsArray = utils.ios.collections.jsArrayToNSArray([left, right]);
var nsString = NSString.pathWithComponents(nsArray);
return nsString.toString();
};
FileSystemAccess.prototype.deleteFile = function (path, onError) {
this.deleteEntity(path, onError);
};
FileSystemAccess.prototype.deleteFolder = function (path, onError) {
this.deleteEntity(path, onError);
};
FileSystemAccess.prototype.emptyFolder = function (path, onError) {
var fileManager = NSFileManager.defaultManager();
var entities = this.getEntities(path, onError);
if (!entities) {
return;
}
var i;
for (i = 0; i < entities.length; i++) {
try {
fileManager.removeItemAtPathError(entities[i].path);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to empty folder '" + path + "': " + ex));
}
return;
}
}
};
FileSystemAccess.prototype.rename = function (path, newPath, onError) {
var fileManager = NSFileManager.defaultManager();
try {
fileManager.moveItemAtPathToPathError(path, newPath);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to rename '" + path + "' to '" + newPath + "': " + ex));
}
}
};
FileSystemAccess.prototype.getLogicalRootPath = function () {
var mainBundlePath = NSBundle.mainBundle().bundlePath;
var resolvedPath = NSString.stringWithString(mainBundlePath).stringByResolvingSymlinksInPath;
return resolvedPath;
};
FileSystemAccess.prototype.getDocumentsFolderPath = function () {
return this.getKnownPath(this.documentDir);
};
FileSystemAccess.prototype.getTempFolderPath = function () {
return this.getKnownPath(this.cachesDir);
};
FileSystemAccess.prototype.readText = function (path, onError, encoding) {
var actualEncoding = encoding;
if (!actualEncoding) {
actualEncoding = textModule.encoding.UTF_8;
}
try {
var nsString = NSString.stringWithContentsOfFileEncodingError(path, actualEncoding);
return nsString.toString();
}
catch (ex) {
if (onError) {
onError(new Error("Failed to read file at path '" + path + "': " + ex));
}
}
};
FileSystemAccess.prototype.read = function (path, onError) {
try {
return NSData.dataWithContentsOfFile(path);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to read file at path '" + path + "': " + ex));
}
}
};
FileSystemAccess.prototype.writeText = function (path, content, onError, encoding) {
var nsString = NSString.alloc().initWithString(content);
var actualEncoding = encoding;
if (!actualEncoding) {
actualEncoding = textModule.encoding.UTF_8;
}
try {
nsString.writeToFileAtomicallyEncodingError(path, false, actualEncoding);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to write to file '" + path + "': " + ex));
}
}
};
FileSystemAccess.prototype.write = function (path, content, onError) {
try {
content.writeToFileAtomically(path, true);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to write to file '" + path + "': " + ex));
}
}
};
FileSystemAccess.prototype.getKnownPath = function (folderType) {
var fileManager = NSFileManager.defaultManager();
var paths = fileManager.URLsForDirectoryInDomains(folderType, this.userDomain);
var url = paths.objectAtIndex(0);
return url.path;
};
FileSystemAccess.prototype.getFileExtension = function (path) {
var dotIndex = path.lastIndexOf(".");
if (dotIndex && dotIndex >= 0 && dotIndex < path.length) {
return path.substring(dotIndex);
}
return "";
};
FileSystemAccess.prototype.deleteEntity = function (path, onError) {
var fileManager = NSFileManager.defaultManager();
try {
fileManager.removeItemAtPathError(path);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to delete file at path '" + path + "': " + ex));
}
}
};
FileSystemAccess.prototype.enumEntities = function (path, callback, onError) {
try {
var fileManager = NSFileManager.defaultManager();
try {
var files = fileManager.contentsOfDirectoryAtPathError(path);
}
catch (ex) {
if (onError) {
onError(new Error("Failed to enum files for folder '" + path + "': " + ex));
}
return;
}
var file;
var i;
var info;
var retVal;
for (i = 0; i < files.count; i++) {
file = files.objectAtIndex(i);
info = {
path: this.concatPath(path, file),
name: file
};
if (!this.folderExists(this.joinPath(path, file))) {
info.extension = this.getFileExtension(info.path);
}
retVal = callback(info);
if (retVal === false) {
break;
}
}
}
catch (ex) {
if (onError) {
onError(ex);
}
}
};
FileSystemAccess.prototype.getPathSeparator = function () {
return "/";
};
FileSystemAccess.prototype.normalizePath = function (path) {
var nsString = NSString.stringWithString(path);
var normalized = nsString.stringByStandardizingPath;
return normalized;
};
FileSystemAccess.prototype.joinPath = function (left, right) {
var nsString = NSString.stringWithString(left);
return nsString.stringByAppendingPathComponent(right);
};
FileSystemAccess.prototype.joinPaths = function (paths) {
if (!paths || paths.length === 0) {
return "";
}
var nsArray = NSMutableArray.alloc().initWithCapacity(paths.length);
var i;
for (i = 0; i < paths.length; i++) {
nsArray.addObject(paths[i]);
}
var nsString = NSString.stringWithString(NSString.pathWithComponents(nsArray));
return nsString.stringByStandardizingPath;
};
return FileSystemAccess;
}());
exports.FileSystemAccess = FileSystemAccess;