From 2d1d2c80e1df0c0240db507f95830cdd12d709a8 Mon Sep 17 00:00:00 2001 From: Vixalie Date: Sat, 28 Mar 2026 08:13:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E5=85=83=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8C=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=86=99=E5=85=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/stores/dataset.ts | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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; +}