Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 55 additions & 5 deletions src/pages/manage/backup-restore.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
Resp,
PEmptyResp,
PPageResp,
ShareInfo,
} from "~/types"
import { createSignal, For } from "solid-js"
import crypto from "crypto-js"
Expand All @@ -30,6 +31,7 @@ interface Data {
users: User[]
storages: Storage[]
metas: Meta[]
shares: ShareInfo[]
}
type LogType = "success" | "error" | "info"
const LogMap = {
Expand Down Expand Up @@ -83,12 +85,16 @@ const BackupRestore = () => {
const [getStoragesLoading, getStorages] = useFetch(
(): PPageResp<Storage> => r.get("/admin/storage/list"),
)
const [getSharesLoading, getShares] = useFetch(
(): PPageResp<ShareInfo> => r.get("/share/list"),
)
const backupLoading = () => {
return (
getSettingsLoading() ||
getUsersLoading() ||
getMetasLoading() ||
getStoragesLoading()
getStoragesLoading() ||
getSharesLoading()
)
}
function encrypt(data: any, key: string): string {
Expand Down Expand Up @@ -119,13 +125,15 @@ const BackupRestore = () => {
users: [],
storages: [],
metas: [],
shares: [],
}
if (password() != "") allData.encrypted = encrypt("encrypted", password())
for (const item of [
{ name: "settings", fn: getSettings, page: false },
{ 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(
Expand Down Expand Up @@ -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)
})
Expand All @@ -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<T>(
dataArray: T[],
getDataFunc: { (): PResp<{ content: T[]; total: number }> },
Expand Down Expand Up @@ -252,9 +270,11 @@ const BackupRestore = () => {
addUserLoading() ||
addStorageLoading() ||
addMetaLoading() ||
addShareLoading() ||
updateUserLoading() ||
updateStorageLoading() ||
updateMetaLoading()
updateMetaLoading() ||
updateShareLoading()
)
}
const restore = async () => {
Expand Down Expand Up @@ -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),
() => {
Expand Down