blob: dfb9158ad1a9c13037d827e024899f946b2db9e2 [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* Wallpaper file system quota.
*/
/** @const */ var WallpaperQuota = 1024 * 1024 * 100;
var wallpaperDirectories = null;
/**
* Manages custom wallpaper related directories in wallpaper's sandboxed
* FileSystem.
* @constructor
*/
function WallpaperDirectories() {
this.wallpaperDirs_ = {};
this.wallpaperDirs_[Constants.WallpaperDirNameEnum.ORIGINAL] = null;
this.wallpaperDirs_[Constants.WallpaperDirNameEnum.THUMBNAIL] = null;
}
/**
* Gets WallpaperDirectories instance. In case is hasn't been initialized, a new
* instance is created.
* @return {WallpaperDirectories} A WallpaperDirectories instance.
*/
WallpaperDirectories.getInstance = function() {
if (wallpaperDirectories === null)
wallpaperDirectories = new WallpaperDirectories();
return wallpaperDirectories;
};
WallpaperDirectories.prototype = {
/**
* Returns all custom wallpaper related directory entries.
*/
get wallpaperDirs() {
return this.wallpaperDirs_;
},
/**
* If dirName is not requested, gets the directory entry of dirName and cache
* the result. Calls success callback if success.
* @param {string} dirName The directory name of requested directory entry.
* @param {function(DirectoryEntry):void} success Call success with requested
* DirectoryEntry.
* @param {function(e):void} failure Call failure when failed to get the
* requested directory.
*/
requestDir: function(dirName, success, failure) {
if (dirName != Constants.WallpaperDirNameEnum.ORIGINAL &&
dirName != Constants.WallpaperDirNameEnum.THUMBNAIL) {
console.error('Error: Unknow directory name.');
var e = new Error();
e.code = FileError.NOT_FOUND_ERR;
failure(e);
return;
}
var self = this;
window.webkitRequestFileSystem(window.PERSISTENT, WallpaperQuota,
function(fs) {
fs.root.getDirectory(dirName, {create: true}, function(dirEntry) {
self.wallpaperDirs_[dirName] = dirEntry;
success(dirEntry);
}, failure);
}, failure);
},
/**
* Gets DirectoryEntry associated with dirName from cache. If not in cache try
* to request it from FileSystem.
* @param {string} dirName The directory name of requested directory entry.
* @param {function(DirectoryEntry):void} success Call success with requested
* DirectoryEntry.
* @param {function(e):void} failure Call failure when failed to get the
* requested directory.
*/
getDirectory: function(dirName, success, failure) {
if (this.wallpaperDirs[dirName])
success(this.wallpaperDirs[dirName]);
else
this.requestDir(dirName, success, failure);
}
};