feat: add config folder setting

This commit is contained in:
DecafDev 2024-07-16 01:40:50 -06:00
parent 050db0e55c
commit 07da098d36
4 changed files with 53 additions and 39 deletions

View file

@ -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")

View file

@ -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();

View 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
);
};

View file

@ -1,8 +1,3 @@
{
"items": [
{
"filePath": "attachments/file.xlsx",
"isFavorite": true
}
]
"items": []
}