www·
用了订阅模式之后总感觉我正在写的是 API 接口……
// 配置信息 app.conf
export class AppConf extends Conf {
// app 启动时是否自动打开仓库
#autoOpenVault: boolean;
#autoOpenVaultListeners: ((autoOpenVault: boolean) => any)[];
autoOpenVault_listen(callback: (autoOpenVault: boolean) => any): UnlistenFn {
const id = this.#autoOpenVaultListeners.push(callback) - 1;
return () => { delete this.#autoOpenVaultListeners[id]; };
}
get autoOpenVault() { return this.#autoOpenVault; }
set autoOpenVault(autoOpenVault: boolean) {
this.#autoOpenVault = autoOpenVault;
for (const callback of this.#autoOpenVaultListeners) { if (typeof callback === "function") { callback(autoOpenVault); } }
}
// app 启动时用户指定的自动打开的仓库路径
#alwaysOpenVaultPath: string;
#alwaysOpenVaultPathListeners: ((alwaysOpenVaultPath: string) => any)[];
alwaysOpenVaultPath_listen(callback: (alwaysOpenVaultPath: string) => any): UnlistenFn {
const id = this.#alwaysOpenVaultPathListeners.push(callback) - 1;
return () => { delete this.#alwaysOpenVaultPathListeners[id]; };
}
get alwaysOpenVaultPath() { return this.#alwaysOpenVaultPath; }
set alwaysOpenVaultPath(alwaysOpenVaultPath: string) {
this.#alwaysOpenVaultPath = alwaysOpenVaultPath;
for (const callback of this.#alwaysOpenVaultPathListeners) { if (typeof callback === "function") { callback(alwaysOpenVaultPath); } }
}
// app 记录的最后一次打开的仓库路径
#lastOpenVaultPath: string;
#lastOpenVaultPathListeners: ((lastOpenVaultPath: string) => any)[];
lastOpenVaultPath_listen(callback: (lastOpenVaultPath: string) => any): UnlistenFn {
const id = this.#lastOpenVaultPathListeners.push(callback) - 1;
return () => { delete this.#lastOpenVaultPathListeners[id]; };
}
get lastOpenVaultPath() { return this.#lastOpenVaultPath; }
set lastOpenVaultPath(lastOpenVaultPath: string) {
this.#lastOpenVaultPath = lastOpenVaultPath;
for (const callback of this.#lastOpenVaultPathListeners) { if (typeof callback === "function") { callback(lastOpenVaultPath); } }
}
// app 记录的用户所拥有的仓库路径列表
#ownVaultPaths: string[];
#ownVaultPathsListeners: ((ownVaultPaths: string[]) => any)[];
ownVaultPaths_listen(callback: (ownVaultPaths: string[]) => any): UnlistenFn {
const id = this.#ownVaultPathsListeners.push(callback) - 1;
return () => { delete this.#ownVaultPathsListeners[id]; };
}
get ownVaultPaths() { return this.#ownVaultPaths; }
set ownVaultPaths(ownVaultPaths: string[]) {
this.#ownVaultPaths = [];
for (const item of ownVaultPaths) { if (typeof item === "string") { this.#ownVaultPaths.push(item); } }
for (const callback of this.#ownVaultPathsListeners) { if (typeof callback === "function") { callback(ownVaultPaths); } }
}
// 构造函数
constructor() {
super();
// 设置默认值
this.#autoOpenVault = false;
this.#alwaysOpenVaultPath = "";
this.#lastOpenVaultPath = "";
this.#ownVaultPaths = [];
// Listeners
this.#autoOpenVaultListeners = [];
this.#alwaysOpenVaultPathListeners = [];
this.#lastOpenVaultPathListeners = [];
this.#ownVaultPathsListeners = [];
}
}