diff --git a/src/lib/stores/dataset.ts b/src/lib/stores/dataset.ts index 487e0e2..e0fe0b5 100644 --- a/src/lib/stores/dataset.ts +++ b/src/lib/stores/dataset.ts @@ -1,8 +1,33 @@ import type { DatasetMeta, ImageMeta } from "$lib/types/meta"; -import { writable } from "svelte/store"; +import { join } from "@tauri-apps/api/path"; +import { writeTextFile } from "@tauri-apps/plugin-fs"; +import { get, writable } from "svelte/store"; export const openedDatasetDir = writable(null); export const activeDatasetMeta = writable(null); export const activeDatasetImageMetas = writable([]); + +type DatasetMetaUpdater = Partial | ((current: DatasetMeta) => DatasetMeta); + +export async function updateActiveDatasetMeta(updater: DatasetMetaUpdater): Promise { + const datasetDir = get(openedDatasetDir); + if (!datasetDir) { + throw new Error("Cannot update dataset meta: openedDatasetDir is null"); + } + + const currentMeta = get(activeDatasetMeta); + if (!currentMeta) { + throw new Error("Cannot update dataset meta: activeDatasetMeta is null"); + } + + const nextMeta = + typeof updater === "function" ? updater(currentMeta) : { ...currentMeta, ...updater }; + + const metaPath = await join(datasetDir, "meta.json"); + await writeTextFile(metaPath, JSON.stringify(nextMeta, null, 2)); + activeDatasetMeta.set(nextMeta); + + return nextMeta; +}