diff --git a/src/pages/manage/backup-restore.tsx b/src/pages/manage/backup-restore.tsx index 95fe05915..0306399e9 100644 --- a/src/pages/manage/backup-restore.tsx +++ b/src/pages/manage/backup-restore.tsx @@ -20,6 +20,7 @@ import { Resp, PEmptyResp, PPageResp, + ShareInfo, } from "~/types" import { createSignal, For } from "solid-js" import crypto from "crypto-js" @@ -30,6 +31,7 @@ interface Data { users: User[] storages: Storage[] metas: Meta[] + shares: ShareInfo[] } type LogType = "success" | "error" | "info" const LogMap = { @@ -83,12 +85,16 @@ const BackupRestore = () => { const [getStoragesLoading, getStorages] = useFetch( (): PPageResp => r.get("/admin/storage/list"), ) + const [getSharesLoading, getShares] = useFetch( + (): PPageResp => r.get("/share/list"), + ) const backupLoading = () => { return ( getSettingsLoading() || getUsersLoading() || getMetasLoading() || - getStoragesLoading() + getStoragesLoading() || + getSharesLoading() ) } function encrypt(data: any, key: string): string { @@ -119,6 +125,7 @@ const BackupRestore = () => { users: [], storages: [], metas: [], + shares: [], } if (password() != "") allData.encrypted = encrypt("encrypted", password()) for (const item of [ @@ -126,6 +133,7 @@ const BackupRestore = () => { { name: "users", fn: getUsers, page: true }, { name: "storages", fn: getStorages, page: true }, { name: "metas", fn: getMetas, page: true }, + { name: "shares", fn: getShares, page: true }, ] as const) { const resp = await item.fn() handleRespWithoutNotify( @@ -187,6 +195,11 @@ const BackupRestore = () => { const [addMetaLoading, addMeta] = useFetch((meta: Meta): PEmptyResp => { return r.post(`/admin/meta/create`, meta) }) + const [addShareLoading, addShare] = useFetch( + (share: ShareInfo): PEmptyResp => { + return r.post(`/share/create`, share) + }, + ) const [updateUserLoading, updateUser] = useFetch((user: User): PEmptyResp => { return r.post(`/admin/user/update`, user) }) @@ -198,6 +211,11 @@ const BackupRestore = () => { const [updateMetaLoading, updateMeta] = useFetch((meta: Meta): PEmptyResp => { return r.post(`/admin/meta/update`, meta) }) + const [updateShareLoading, updateShare] = useFetch( + (share: ShareInfo): PEmptyResp => { + return r.post(`/share/update`, share) + }, + ) async function handleOvrData( dataArray: T[], getDataFunc: { (): PResp<{ content: T[]; total: number }> }, @@ -252,9 +270,11 @@ const BackupRestore = () => { addUserLoading() || addStorageLoading() || addMetaLoading() || + addShareLoading() || updateUserLoading() || updateStorageLoading() || - updateMetaLoading() + updateMetaLoading() || + updateShareLoading() ) } const restore = async () => { @@ -345,19 +365,49 @@ const BackupRestore = () => { "path", "manage.sidemenu.metas", ) + await handleOvrData( + data.shares, + getShares, + addShare, + updateShare, + "id", + "manage.sidemenu.shares", + ) } else { for (const item of [ - { name: "users", fn: addUser, data: data.users, key: "username" }, + { + name: "users", + fn: addUser, + data: data.users, + key: "username", + removeId: true, + }, { name: "storages", fn: addStorage, data: data.storages, key: "mount_path", + removeId: true, + }, + { + name: "metas", + fn: addMeta, + data: data.metas, + key: "path", + removeId: true, + }, + { + name: "shares", + fn: addShare, + data: data.shares, + key: "id", + removeId: false, }, - { name: "metas", fn: addMeta, data: data.metas, key: "path" }, ] as const) { for (const itemData of item.data || []) { - itemData.id = 0 + if (item.removeId) { + itemData.id = 0 + } handleRespWithoutNotify( await item.fn(itemData), () => {