diff --git a/src/obsidian/vault-explorer-settings-tab.ts b/src/obsidian/vault-explorer-settings-tab.ts index c9b24e3..b0fa64e 100644 --- a/src/obsidian/vault-explorer-settings-tab.ts +++ b/src/obsidian/vault-explorer-settings-tab.ts @@ -14,17 +14,13 @@ import { } from "src/logger/constants"; import Logger from "js-logger"; import { stringToLogLevel } from "src/logger"; -import { - FileInteractionStyle, - FlexWrap, - TExplorerView, - WordBreak, -} from "src/types"; +import { FileInteractionStyle, FlexWrap, TExplorerView } from "src/types"; import EventManager from "src/event/event-manager"; import LicenseKeyApp from "../svelte/license-key-app/index.svelte"; import License from "src/svelte/shared/services/license"; import "./styles.css"; import { PluginEvent } from "src/event/types"; +import { favoritesStore } from "src/svelte/app/services/favorites-store"; export default class VaultExplorerSettingsTab extends PluginSettingTab { plugin: VaultExplorerPlugin; @@ -557,6 +553,29 @@ export default class VaultExplorerSettingsTab extends PluginSettingTab { target: containerEl, }); + new Setting(containerEl).setName("Storage").setHeading(); + + const configFolderDesc = new DocumentFragment(); + configFolderDesc.createDiv({ + text: "Set the plugin configuration folder.", + }); + configFolderDesc.createDiv({ + text: "Restart Obsidian after changing this setting.", + cls: "mod-warning", + }); + + new Setting(containerEl) + .setName("Config folder") + .setDesc(configFolderDesc) + .addText((component) => + component + .setValue(this.plugin.settings.configDir) + .onChange(async (value) => { + this.plugin.settings.configDir = value; + await this.plugin.saveSettings(); + }) + ); + new Setting(containerEl).setName("Debugging").setHeading(); new Setting(containerEl) .setName("Log level") diff --git a/src/svelte/app/services/favorites-store.ts b/src/svelte/app/services/favorites-store.ts index fa814b7..19d893c 100644 --- a/src/svelte/app/services/favorites-store.ts +++ b/src/svelte/app/services/favorites-store.ts @@ -3,6 +3,7 @@ import _ from "lodash"; import { App, normalizePath, Notice } from "obsidian"; import { VaultExplorerPluginSettings } from "src/types"; import { Writable, writable } from "svelte/store"; +import { parseItems, stringifyItems } from "./utils/json-utils"; interface FavoritesItem { filePath: string; @@ -65,7 +66,7 @@ class FavoritesStore { const cache = new Map(); const rawData = await app.vault.adapter.read(filePath); - const items = this.parseItems(rawData); + const items = parseItems(rawData); items.forEach((item) => { const { filePath, isFavorite } = item; cache.set(filePath, isFavorite); @@ -162,7 +163,14 @@ class FavoritesStore { try { const path = this.getFavoritesFilePath(this.settings.configDir); - const rawData = this.stringifyCache(cache); + const items = Array.from(cache.entries()).map( + ([filePath, isFavorite]) => ({ + filePath, + isFavorite, + }) + ); + + const rawData = stringifyItems(items); await this.app.vault.adapter.write(path, rawData); } catch (err) { const error = err as Error; @@ -210,8 +218,8 @@ class FavoritesStore { functionName: "load", message: "creating new file...", }); - const data = this.stringifyCache(new Map()); - await app.vault.create(filePath, data); + const rawData = stringifyItems([]); + await app.vault.create(filePath, rawData); return true; } catch (err) { const error = err as Error; @@ -231,29 +239,6 @@ class FavoritesStore { private getFavoritesFilePath(configDir: string) { return normalizePath(configDir + "/" + FAVORITES_FILE); } - - private parseItems(rawData: string): T[] { - const json = JSON.parse(rawData); - if (!json.items) return []; - return json.items; - } - - private stringifyCache(cache: TFavoritesCache) { - const items = Array.from(cache.entries()).map( - ([filePath, isFavorite]) => ({ - filePath, - isFavorite, - }) - ); - - return JSON.stringify( - { - items, - }, - null, - 2 - ); - } } export const favoritesStore = new FavoritesStore(); diff --git a/src/svelte/app/services/utils/json-utils.ts b/src/svelte/app/services/utils/json-utils.ts new file mode 100644 index 0000000..3e0c46c --- /dev/null +++ b/src/svelte/app/services/utils/json-utils.ts @@ -0,0 +1,15 @@ +export const parseItems = (rawData: string): T[] => { + const json = JSON.parse(rawData); + if (!json.items) return []; + return json.items; +}; + +export const stringifyItems = (items: unknown[]) => { + return JSON.stringify( + { + items, + }, + null, + 2 + ); +}; diff --git a/test-vault/.vaultexplorer/favorites.json b/test-vault/.vaultexplorer/favorites.json index 21c062d..fc69ce2 100644 --- a/test-vault/.vaultexplorer/favorites.json +++ b/test-vault/.vaultexplorer/favorites.json @@ -1,8 +1,3 @@ { - "items": [ - { - "filePath": "attachments/file.xlsx", - "isFavorite": true - } - ] + "items": [] } \ No newline at end of file