ProzillaOS/src/features/virtual-drive/VirtualFolderLink.js
2023-12-16 18:10:46 +01:00

155 lines
No EOL
3.3 KiB
JavaScript

import { APPS } from "../../constants/applications.js";
import AppsManager from "../applications/applications.js";
import { VirtualFolder } from "./virtualFolder.js";
/**
* A link that points to a virtual folder
*/
export class VirtualFolderLink extends VirtualFolder {
/**
* @param {string} name
* @param {VirtualFolder} linkedFolder
*/
constructor(name, linkedFolder) {
super(name);
this.linkedFolder = linkedFolder;
}
/**
* @param {VirtualFolder} folder
* @returns {VirtualFolderLink}
*/
setLinkedFolder(folder) {
this.linkedFolder = folder;
if (folder) {
this.linkedPath = folder.path;
this.type = folder.type;
}
return this;
}
/**
* @param {string} path
* @returns {VirtualFolderLink}
*/
setLinkedPath(path) {
if (this.linkedFolder && this.linkedFolder.path === path)
return;
const target = this.navigate(path);
if (target instanceof VirtualFolder) {
this.setLinkedFolder(target);
} else {
this.linkedFolder = null;
}
return this;
}
/**
* @returns {boolean}
*/
isValid() {
if (!this.linkedPath)
return false;
this.setLinkedPath(this.linkedPath);
return (this.linkedFolder != null);
}
/**
* @returns {string}
*/
getIconUrl() {
if (this.iconUrl != null)
return this.iconUrl;
return AppsManager.getAppIconUrl(APPS.FILE_EXPLORER, "folder-link");
}
/**
* @returns {object | null}
*/
toJSON() {
if (this.linkedPath == null)
return;
const object = {
nam: this.name,
lnk: this.linkedPath
};
return object;
}
// Point certain methods to linked folder
/** @type {VirtualFolder["setAlias"]} */
setAlias(...args) {
if (this.isValid()) return this.linkedFolder.setAlias(...args);
}
/** @type {VirtualFolder["hasFile"]} */
hasFile(...args) {
if (this.isValid()) return this.linkedFolder.hasFile(...args);
}
/** @type {VirtualFolder["hasFolder"]} */
hasFolder(...args) {
if (this.isValid()) return this.linkedFolder.hasFolder(...args);
}
/** @type {VirtualFolder["findFile"]} */
findFile(...args) {
if (this.isValid()) return this.linkedFolder.findFile(...args);
}
/** @type {VirtualFolder["findSubFolder"]} */
findSubFolder(...args) {
if (this.isValid()) return this.linkedFolder.findSubFolder(...args);
}
/** @type {VirtualFolder["createFile"]} */
createFile(...args) {
if (this.isValid()) return this.linkedFolder.createFile(...args);
}
/** @type {VirtualFolder["createFile"]} */
createFiles(...args) {
if (this.isValid()) return this.linkedFolder.createFiles(...args);
}
/** @type {VirtualFolder["createFolder"]} */
createFolder(...args) {
if (this.isValid()) return this.linkedFolder.createFolder(...args);
}
/** @type {VirtualFolder["createFolders"]} */
createFolders(...args) {
if (this.isValid()) return this.linkedFolder.createFolders(...args);
}
/** @type {VirtualFolder["getFiles"]} */
getFiles(...args) {
if (this.isValid()) return this.linkedFolder.getFiles(...args);
}
/** @type {VirtualFolder["getSubFolders"]} */
getSubFolders(...args) {
if (this.isValid()) return this.linkedFolder.getSubFolders(...args);
}
/** @type {VirtualFolder["open"]} */
open(...args) {
if (this.isValid()) return this.linkedFolder.open(...args);
}
/** @type {VirtualFolder["getItemCount"]} */
getItemCount(...args) {
if (this.isValid()) return this.linkedFolder.getItemCount(...args);
}
}