mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-11-04 08:10:28 +09:00
파일 및 디렉터리 메타데이터 복호화 로직 리팩토링
This commit is contained in:
1 parent
4797ccfd23
commit
63163d6279
10 files changed
+156
-210
No files matched your search
@@ -1,6 +1,4 @@
|
||||
import {
|
||||
decryptDirectoryMetadata,
|
||||
decryptFileMetadata,
|
||||
getDirectoryInfo,
|
||||
getFileInfo,
|
||||
type LocalDirectoryInfo,
|
||||
@@ -30,49 +28,14 @@ export const requestSearch = async (filter: SearchFilter, masterKey: CryptoKey)
|
||||
.filter(({ type }) => type === "exclude")
|
||||
.map(({ info }) => info.id),
|
||||
});
|
||||
|
||||
const [directories, files] = await HybridPromise.all([
|
||||
HybridPromise.all(
|
||||
directoriesRaw.map((directory) =>
|
||||
HybridPromise.resolve(
|
||||
getDirectoryInfo(directory.id, masterKey, {
|
||||
async fetchFromServer(id, cachedInfo, masterKey) {
|
||||
const metadata = await decryptDirectoryMetadata(directory, masterKey);
|
||||
return {
|
||||
subDirectories: [],
|
||||
files: [],
|
||||
...cachedInfo,
|
||||
id: id as number,
|
||||
exists: true,
|
||||
parentId: directory.parent,
|
||||
...metadata,
|
||||
isFavorite: !!directory.isFavorite,
|
||||
};
|
||||
},
|
||||
}),
|
||||
),
|
||||
getDirectoryInfo(directory.id, masterKey, { serverResponse: directory }),
|
||||
),
|
||||
),
|
||||
HybridPromise.all(
|
||||
filesRaw.map((file) =>
|
||||
HybridPromise.resolve(
|
||||
getFileInfo(file.id, masterKey, {
|
||||
async fetchFromServer(id, cachedInfo, masterKey) {
|
||||
const metadata = await decryptFileMetadata(file, masterKey);
|
||||
return {
|
||||
categories: [],
|
||||
...cachedInfo,
|
||||
id: id as number,
|
||||
exists: true,
|
||||
parentId: file.parent,
|
||||
contentType: file.contentType,
|
||||
isFavorite: !!file.isFavorite,
|
||||
...metadata,
|
||||
};
|
||||
},
|
||||
}),
|
||||
),
|
||||
),
|
||||
filesRaw.map((file) => getFileInfo(file.id, masterKey, { serverResponse: file })),
|
||||
),
|
||||
]);
|
||||
return { directories, files } as SearchResult;
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
import { limitFunction } from "p-limit";
|
||||
import { SvelteMap } from "svelte/reactivity";
|
||||
import { CHUNK_SIZE } from "$lib/constants";
|
||||
import {
|
||||
decryptFileMetadata,
|
||||
getFileInfo,
|
||||
type FileInfo,
|
||||
type MaybeFileInfo,
|
||||
} from "$lib/modules/filesystem";
|
||||
import { getFileInfo, type FileInfo } from "$lib/modules/filesystem";
|
||||
import { uploadBlob } from "$lib/modules/upload";
|
||||
import { requestFileDownload } from "$lib/services/file";
|
||||
import { HybridPromise, Scheduler } from "$lib/utils";
|
||||
@@ -35,26 +30,7 @@ export const requestLegacyFiles = async (
|
||||
masterKey: CryptoKey,
|
||||
) => {
|
||||
const files = await HybridPromise.all(
|
||||
filesRaw.map((file) =>
|
||||
HybridPromise.resolve(
|
||||
getFileInfo(file.id, masterKey, {
|
||||
async fetchFromServer(id, cachedInfo, masterKey) {
|
||||
const metadata = await decryptFileMetadata(file, masterKey);
|
||||
return {
|
||||
categories: [],
|
||||
...cachedInfo,
|
||||
id: id as number,
|
||||
exists: true,
|
||||
isLegacy: file.isLegacy,
|
||||
parentId: file.parent,
|
||||
contentType: file.contentType,
|
||||
isFavorite: file.isFavorite,
|
||||
...metadata,
|
||||
};
|
||||
},
|
||||
}),
|
||||
),
|
||||
),
|
||||
filesRaw.map((file) => getFileInfo(file.id, masterKey, { serverResponse: file })),
|
||||
);
|
||||
return files;
|
||||
};
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
import { limitFunction } from "p-limit";
|
||||
import { SvelteMap } from "svelte/reactivity";
|
||||
import { storeFileThumbnailCache } from "$lib/modules/file";
|
||||
import {
|
||||
decryptFileMetadata,
|
||||
getFileInfo,
|
||||
type FileInfo,
|
||||
type MaybeFileInfo,
|
||||
} from "$lib/modules/filesystem";
|
||||
import { getFileInfo, type FileInfo } from "$lib/modules/filesystem";
|
||||
import { generateThumbnail } from "$lib/modules/thumbnail";
|
||||
import { requestFileDownload, requestFileThumbnailUpload } from "$lib/services/file";
|
||||
import { HybridPromise, Scheduler } from "$lib/utils";
|
||||
@@ -40,26 +35,7 @@ export const requestMissingThumbnailFiles = async (
|
||||
masterKey: CryptoKey,
|
||||
) => {
|
||||
const files = await HybridPromise.all(
|
||||
filesRaw.map((file) =>
|
||||
HybridPromise.resolve(
|
||||
getFileInfo(file.id, masterKey, {
|
||||
async fetchFromServer(id, cachedInfo, masterKey) {
|
||||
const metadata = await decryptFileMetadata(file, masterKey);
|
||||
return {
|
||||
categories: [],
|
||||
...cachedInfo,
|
||||
id: id as number,
|
||||
exists: true,
|
||||
isLegacy: file.isLegacy,
|
||||
parentId: file.parent,
|
||||
contentType: file.contentType,
|
||||
isFavorite: file.isFavorite,
|
||||
...metadata,
|
||||
};
|
||||
},
|
||||
}),
|
||||
),
|
||||
),
|
||||
filesRaw.map((file) => getFileInfo(file.id, masterKey, { serverResponse: file })),
|
||||
);
|
||||
return files;
|
||||
};
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import {
|
||||
decryptDirectoryMetadata,
|
||||
decryptFileMetadata,
|
||||
getDirectoryInfo,
|
||||
getFileInfo,
|
||||
type SummarizedFileInfo,
|
||||
type SubDirectoryInfo,
|
||||
type LocalDirectoryInfo,
|
||||
} from "$lib/modules/filesystem";
|
||||
import { HybridPromise, sortEntries } from "$lib/utils";
|
||||
import { trpc } from "$trpc/client";
|
||||
@@ -16,59 +16,41 @@ export type FavoriteEntry =
|
||||
export const requestFavoriteEntries = async (
|
||||
favorites: RouterOutputs["favorites"]["get"],
|
||||
masterKey: CryptoKey,
|
||||
): Promise<FavoriteEntry[]> => {
|
||||
const directories: FavoriteEntry[] = await Promise.all(
|
||||
favorites.directories.map(async (dir) => {
|
||||
const metadata = await decryptDirectoryMetadata(dir, masterKey);
|
||||
return {
|
||||
type: "directory" as const,
|
||||
name: metadata.name,
|
||||
details: {
|
||||
id: dir.id,
|
||||
parentId: dir.parent,
|
||||
isFavorite: true,
|
||||
dataKey: metadata.dataKey,
|
||||
name: metadata.name,
|
||||
} as SubDirectoryInfo,
|
||||
};
|
||||
}),
|
||||
);
|
||||
|
||||
const fileResults = await Promise.all(
|
||||
favorites.files.map(async (file) => {
|
||||
const result = await HybridPromise.resolve(
|
||||
getFileInfo(file.id, masterKey, {
|
||||
async fetchFromServer(id, cachedInfo) {
|
||||
const metadata = await decryptFileMetadata(file, masterKey);
|
||||
return {
|
||||
categories: [],
|
||||
...cachedInfo,
|
||||
id: id as number,
|
||||
exists: true,
|
||||
parentId: file.parent,
|
||||
contentType: file.contentType,
|
||||
isFavorite: true,
|
||||
...metadata,
|
||||
};
|
||||
},
|
||||
) => {
|
||||
const [directories, files] = await HybridPromise.all([
|
||||
HybridPromise.all(
|
||||
favorites.directories.map((directory) =>
|
||||
getDirectoryInfo(directory.id, masterKey, {
|
||||
serverResponse: { ...directory, isFavorite: true },
|
||||
}),
|
||||
);
|
||||
if (result?.exists) {
|
||||
return {
|
||||
type: "file" as const,
|
||||
name: result.name,
|
||||
details: result as SummarizedFileInfo,
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
);
|
||||
|
||||
const files = fileResults.filter(
|
||||
(f): f is { type: "file"; name: string; details: SummarizedFileInfo } => f !== null,
|
||||
);
|
||||
|
||||
return [...sortEntries(directories), ...sortEntries(files)];
|
||||
),
|
||||
),
|
||||
HybridPromise.all(
|
||||
favorites.files.map((file) =>
|
||||
getFileInfo(file.id, masterKey, { serverResponse: { ...file, isFavorite: true } }),
|
||||
),
|
||||
),
|
||||
]);
|
||||
return [
|
||||
...sortEntries(
|
||||
directories.map(
|
||||
(directory): FavoriteEntry => ({
|
||||
type: "directory",
|
||||
name: directory.name!,
|
||||
details: directory as LocalDirectoryInfo,
|
||||
}),
|
||||
),
|
||||
),
|
||||
...sortEntries(
|
||||
files.map(
|
||||
(file): FavoriteEntry => ({
|
||||
type: "file",
|
||||
name: file.name!,
|
||||
details: file as SummarizedFileInfo,
|
||||
}),
|
||||
),
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export const requestRemoveFavorite = async (type: "file" | "directory", id: number) => {
|
||||
|
||||
Reference in new issue
Block a user