Merge pull request #2475 from NativeScript/ios-known-folders

Add iOS-specific known folders to fs.knownFolders
This commit is contained in:
Rossen Hristov
2016-07-20 11:37:09 +03:00
committed by GitHub
7 changed files with 210 additions and 15 deletions

View File

@ -3,22 +3,14 @@ import * as utilsModule from "utils/utils";
// TODO: Implement all the APIs receiving callback using async blocks
// TODO: Check whether we need try/catch blocks for the iOS implementation
export class FileSystemAccess {
//private keyFileType = "NSFileType";
//private keyReadonly = "NSFileImmutable";
//private NSUTF8StringEncoding = 4;
private keyModificationTime = "NSFileModificationDate";
private documentDir = 9;
private cachesDir = 13;
private userDomain = 1;
public getLastModified(path: string): Date {
var fileManager = NSFileManager.defaultManager();
var attributes = fileManager.attributesOfItemAtPathError(path);
if (attributes) {
return attributes.objectForKey(this.keyModificationTime);
return attributes.objectForKey("NSFileModificationDate");
} else {
return new Date();
}
@ -226,11 +218,11 @@ export class FileSystemAccess {
}
public getDocumentsFolderPath(): string {
return this.getKnownPath(this.documentDir);
return this.getKnownPath(NSSearchPathDirectory.NSDocumentDirectory);
}
public getTempFolderPath(): string {
return this.getKnownPath(this.cachesDir);
return this.getKnownPath(NSSearchPathDirectory.NSCachesDirectory);
}
public getCurrentAppPath(): string {
@ -307,7 +299,7 @@ export class FileSystemAccess {
private getKnownPath(folderType: number): string {
var fileManager = NSFileManager.defaultManager();
var paths = fileManager.URLsForDirectoryInDomains(folderType, this.userDomain);
var paths = fileManager.URLsForDirectoryInDomains(folderType, NSSearchPathDirectory.NSApplicationDirectory);
var url = paths.objectAtIndex(0);
return url.path;

View File

@ -208,6 +208,51 @@ declare module "file-system" {
* iOS - this folder is read-only and contains the app and all its resources.
*/
export function currentApp(): Folder;
/**
* Contains iOS-specific known folders.
*/
module ios {
/**
* Gets the NSLibraryDirectory.
*/
export function library(): Folder;
/**
* Gets the NSDeveloperDirectory.
*/
export function developer(): Folder;
/**
* Gets the NSDesktopDirectory.
*/
export function desktop(): Folder;
/**
* Gets the NSDownloadsDirectory.
*/
export function downloads(): Folder;
/**
* Gets the NSMoviesDirectory.
*/
export function movies(): Folder;
/**
* Gets the NSMusicDirectory.
*/
export function music(): Folder;
/**
* Gets the NSPicturesDirectory.
*/
export function pictures(): Folder;
/**
* Gets the NSSharedPublicDirectory.
*/
export function sharedPublic(): Folder;
}
}
/**

View File

@ -1,4 +1,5 @@
import file_access_module = require("file-system/file-system-access");
import * as platformModule from "platform";
// The FileSystemAccess implementation, used through all the APIs.
var fileAccess;
@ -10,6 +11,13 @@ var getFileAccess = function (): file_access_module.FileSystemAccess {
return fileAccess;
};
let platform: typeof platformModule;
function ensurePlatform() {
if (!platform) {
platform = require("platform");
}
}
// we are defining these as private variables within the IO scope and will use them to access the corresponding properties for each FSEntity instance.
// this allows us to encapsulate (hide) the explicit property setters and force the users go through the exposed APIs to receive FSEntity instances.
var nameProperty = "_name";
@ -491,6 +499,119 @@ export module knownFolders {
return _app;
};
export module ios {
function _checkPlatform(knownFolderName: string){
ensurePlatform();
if (!platform.isIOS){
throw new Error(`The "${knownFolderName}" known folder is available on iOS only!`);
}
}
let _library: Folder;
export var library = function(): Folder {
_checkPlatform("library");
if (!_library) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSLibraryDirectory);
_library = Folder.fromPath(path);
_library[pathProperty] = path;
_library[isKnownProperty] = true;
}
return _library;
};
let _developer: Folder;
export var developer = function(): Folder {
_checkPlatform("developer");
if (!_developer) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSDeveloperDirectory);
_developer = Folder.fromPath(path);
_developer[pathProperty] = path;
_developer[isKnownProperty] = true;
}
return _developer;
};
let _desktop: Folder;
export var desktop = function(): Folder {
_checkPlatform("desktop");
if (!_desktop) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSDesktopDirectory);
_desktop = Folder.fromPath(path);
_desktop[pathProperty] = path;
_desktop[isKnownProperty] = true;
}
return _desktop;
};
let _downloads: Folder;
export var downloads = function(): Folder {
_checkPlatform("downloads");
if (!_downloads) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSDownloadsDirectory);
_downloads = Folder.fromPath(path);
_downloads[pathProperty] = path;
_downloads[isKnownProperty] = true;
}
return _downloads;
};
let _movies: Folder;
export var movies = function(): Folder {
_checkPlatform("movies");
if (!_movies) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSMoviesDirectory);
_movies = Folder.fromPath(path);
_movies[pathProperty] = path;
_movies[isKnownProperty] = true;
}
return _movies;
};
let _music: Folder;
export var music = function(): Folder {
_checkPlatform("music");
if (!_music) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSMusicDirectory);
_music = Folder.fromPath(path);
_music[pathProperty] = path;
_music[isKnownProperty] = true;
}
return _music;
};
let _pictures: Folder;
export var pictures = function(): Folder {
_checkPlatform("pictures");
if (!_pictures) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSPicturesDirectory);
_pictures = Folder.fromPath(path);
_pictures[pathProperty] = path;
_pictures[isKnownProperty] = true;
}
return _pictures;
};
let _sharedPublic: Folder;
export var sharedPublic = function(): Folder {
_checkPlatform("sharedPublic");
if (!_sharedPublic) {
var path = (<any>getFileAccess()).getKnownPath(NSSearchPathDirectory.NSSharedPublicDirectory);
_sharedPublic = Folder.fromPath(path);
_sharedPublic[pathProperty] = path;
_sharedPublic[isKnownProperty] = true;
}
return _sharedPublic;
};
}
}
export module path {