ProzillaOS/src/features/virtual-drive/virtual-base.js
2023-08-08 15:24:35 +02:00

95 lines
No EOL
1.4 KiB
JavaScript

import { EventEmitter } from "../utils/events.js";
import { VirtualRoot } from "./virtual-root.js";
export class VirtualBase extends EventEmitter {
/**
* @param {string} name
*/
constructor(name) {
super();
this.name = name;
}
get id() {
return this.name;
}
/**
* @param {string} name
* @returns {VirtualBase}
*/
setName(name) {
this.name = name;
this.getRoot().saveData();
return this;
}
/**
* @param {string} alias
* @returns {ThisType}
*/
setAlias(alias) {
if (this.alias === alias)
return;
this.alias = alias;
this.getRoot().addShortcut(alias, this);
this.getRoot().saveData();
return this;
}
/**
* @param {VirtualBase} parent
* @returns {VirtualBase}
*/
setParent(parent) {
if (this.parent === parent)
return;
this.parent = parent;
this.getRoot().saveData();
return this;
}
delete() {
const parent = this.parent;
if (parent == null)
return;
parent.remove?.(this);
parent.getRoot()?.saveData();
}
open() {}
get path() {
return this.alias ?? this.absolutePath;
}
get absolutePath() {
return this.parent?.path + "/" + this.id;
}
/**
* @returns {VirtualRoot}
*/
getRoot() {
const root = this.root ?? this.parent?.getRoot();
if (root === null) {
throw new Error("Root not found");
}
return root;
}
toJSON() {
const object = {
nam: this.name
};
return object;
}
}