feat: 实现更新活动数据集元数据的功能,添加错误处理和文件写入逻辑
This commit is contained in:
@@ -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<string | null>(null);
|
||||
|
||||
export const activeDatasetMeta = writable<DatasetMeta | null>(null);
|
||||
|
||||
export const activeDatasetImageMetas = writable<ImageMeta[]>([]);
|
||||
|
||||
type DatasetMetaUpdater = Partial<DatasetMeta> | ((current: DatasetMeta) => DatasetMeta);
|
||||
|
||||
export async function updateActiveDatasetMeta(updater: DatasetMetaUpdater): Promise<DatasetMeta> {
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user