many-cloud
Version:
A Node module for abstracting file management and interfacing with a variety of cloud storages.
85 lines (78 loc) • 2.12 kB
JavaScript
const Item = require("./item");
/**
* Folder class
* @constructor
* @param {String} id - Folder id. "root" for root folder.
* @param {Object} connection - A connection to a Box integration.
*/
function Folder(id, connection) {
if (id === "root") {
id = 0;
}
this.id = id;
this.type = "folder";
this.connection = connection;
}
Folder.prototype = Object.create(Item.prototype);
Folder.prototype.constructor = Folder;
/**
* List the files in this folder.
*
* @return {Promise} A promise that returns a list of files when resolved
*/
Folder.prototype.list_files = function () {
const File = require("./file");
return new Promise(async (resolve, reject) => {
try {
let res = (await this.connection.list_all_files(this.id)).entries;
let ret = [];
for (let i = 0; i < res.length; i++) {
let f;
if (res[i].type === "folder") {
f = new Folder(res[i].id, this.connection);
} else {
f = new File(res[i].id, this.connection);
}
f.name = res[i].name;
ret.push(f);
}
resolve(ret);
} catch (err) {
reject(err);
}
});
};
/**
* Upload a local file to this folder.
*
* @param path path to local file to upload
* @return {Promise} A promise that returns a file object when resolved
*/
Folder.prototype.upload_file = function (path) {
const File = require("./file");
return new Promise(async (resolve, reject) => {
try {
let res = (await this.connection.upload_file(this.id, path)).entries[0];
resolve(new File(res.id, this.connection));
} catch (err) {
reject(err);
}
});
};
/**
* Creates a new folder inside of this folder
*
* @param name Name of folder to create
* @return {Promise} A promise that returns a folder object when resolved
*/
Folder.prototype.new_folder = function (name) {
return new Promise(async (resolve, reject) => {
try {
let res = await this.connection.new_folder(this.id, name);
resolve(new Folder(res.id, this.connection));
} catch (err) {
reject(err);
}
});
};
module.exports = Folder;