Post has been deleted
·

用了订阅模式之后总感觉我正在写的是 API 接口…… joy

// 配置信息 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 = [];
  }

}