mirror of
https://github.com/decaf-dev/obsidian-vault-explorer.git
synced 2026-07-22 10:10:31 +00:00
feat: add config folder setting
This commit is contained in:
parent
050db0e55c
commit
07da098d36
4 changed files with 53 additions and 39 deletions
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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<string, boolean>();
|
||||
const rawData = await app.vault.adapter.read(filePath);
|
||||
|
||||
const items = this.parseItems<FavoritesItem>(rawData);
|
||||
const items = parseItems<FavoritesItem>(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<string, boolean>());
|
||||
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<T>(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();
|
||||
|
|
|
|||
15
src/svelte/app/services/utils/json-utils.ts
Normal file
15
src/svelte/app/services/utils/json-utils.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
export const parseItems = <T>(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
|
||||
);
|
||||
};
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
{
|
||||
"items": [
|
||||
{
|
||||
"filePath": "attachments/file.xlsx",
|
||||
"isFavorite": true
|
||||
}
|
||||
]
|
||||
"items": []
|
||||
}
|
||||
Loading…
Reference in a new issue