mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-11-04 08:10:28 +09:00
삭제된 파일의 캐시가 존재하는 경우 캐시 페이지의 로딩이 끝나지 않는 버그 수정
This commit is contained in:
1 parent
182ec18a2b
commit
841c57e8fc
16 files changed
+98
-59
No files matched your search
@@ -2,9 +2,9 @@ import * as IndexedDB from "$lib/indexedDB";
|
||||
import { monotonicResolve } from "$lib/utils";
|
||||
import { trpc, isTRPCClientError } from "$trpc/client";
|
||||
import { FilesystemCache, decryptDirectoryMetadata, decryptFileMetadata } from "./internal.svelte";
|
||||
import type { DirectoryInfo } from "./types";
|
||||
import type { MaybeDirectoryInfo } from "./types";
|
||||
|
||||
const cache = new FilesystemCache<DirectoryId, DirectoryInfo>();
|
||||
const cache = new FilesystemCache<DirectoryId, MaybeDirectoryInfo>();
|
||||
|
||||
const fetchFromIndexedDB = async (id: DirectoryId) => {
|
||||
const [directory, subDirectories, files] = await Promise.all([
|
||||
@@ -14,9 +14,21 @@ const fetchFromIndexedDB = async (id: DirectoryId) => {
|
||||
]);
|
||||
|
||||
if (id === "root") {
|
||||
return { id, subDirectories, files };
|
||||
return {
|
||||
id,
|
||||
exists: true as const,
|
||||
subDirectories,
|
||||
files,
|
||||
};
|
||||
} else if (directory) {
|
||||
return { id, parentId: directory.parentId, name: directory.name, subDirectories, files };
|
||||
return {
|
||||
id,
|
||||
exists: true as const,
|
||||
parentId: directory.parentId,
|
||||
name: directory.name,
|
||||
subDirectories,
|
||||
files,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -44,10 +56,16 @@ const fetchFromServer = async (id: DirectoryId, masterKey: CryptoKey) => {
|
||||
]);
|
||||
|
||||
if (id === "root") {
|
||||
return { id, subDirectories, files };
|
||||
return {
|
||||
id,
|
||||
exists: true as const,
|
||||
subDirectories,
|
||||
files,
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
id,
|
||||
exists: true as const,
|
||||
parentId: metadata!.parent,
|
||||
subDirectories,
|
||||
files,
|
||||
@@ -56,9 +74,8 @@ const fetchFromServer = async (id: DirectoryId, masterKey: CryptoKey) => {
|
||||
}
|
||||
} catch (e) {
|
||||
if (isTRPCClientError(e) && e.data?.code === "NOT_FOUND") {
|
||||
cache.delete(id);
|
||||
await IndexedDB.deleteDirectoryInfo(id as number);
|
||||
return;
|
||||
return { id, exists: false as const };
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user