사소한 버그 수정

This commit is contained in:
static
2026-01-06 07:46:07 +09:00
parent 4997b1f38c
commit 5d130204a6
4 changed files with 15 additions and 21 deletions

View File

@@ -96,6 +96,10 @@ export const deleteFileInfo = async (id: number) => {
await filesystem.file.delete(id); await filesystem.file.delete(id);
}; };
export const bulkDeleteFileInfos = async (ids: number[]) => {
await filesystem.file.bulkDelete(ids);
};
export const deleteDanglingFileInfos = async (parentId: DirectoryId, validIds: Set<number>) => { export const deleteDanglingFileInfos = async (parentId: DirectoryId, validIds: Set<number>) => {
await filesystem.file await filesystem.file
.where({ parentId }) .where({ parentId })

View File

@@ -126,12 +126,12 @@ const cache = new FilesystemCache<number, MaybeFileInfo>({
); );
const existingIds = new Set(filesRaw.map(({ id }) => id)); const existingIds = new Set(filesRaw.map(({ id }) => id));
const deletedIds = idsArray.filter((id) => !existingIds.has(id));
void IndexedDB.bulkDeleteFileInfos(deletedIds);
return new Map<number, MaybeFileInfo>([ return new Map<number, MaybeFileInfo>([
...bulkStoreToIndexedDB(files), ...bulkStoreToIndexedDB(files),
...idsArray ...deletedIds.map((id) => [id, { id, exists: false }] as const),
.filter((id) => !existingIds.has(id))
.map((id) => [id, { id, exists: false }] as const),
]); ]);
}, },
}); });

View File

@@ -24,8 +24,9 @@
.filter((file) => file.exists) .filter((file) => file.exists)
.filter( .filter(
(file) => file.contentType.startsWith("image/") || file.contentType.startsWith("video/"), (file) => file.contentType.startsWith("image/") || file.contentType.startsWith("video/"),
), )
(file) => formatDateSortable(file.createdAt ?? file.lastModifiedAt), .map((file) => ({ ...file, date: file.createdAt ?? file.lastModifiedAt })),
(file) => formatDateSortable(file.date),
); );
return Array.from(groups.entries()) return Array.from(groups.entries())
.sort(([dateA], [dateB]) => dateB.localeCompare(dateA)) .sort(([dateA], [dateB]) => dateB.localeCompare(dateA))
@@ -34,7 +35,7 @@
return [ return [
{ {
type: "header", type: "header",
label: formatDate(sortedEntries[0]!.createdAt ?? sortedEntries[0]!.lastModifiedAt), label: formatDate(sortedEntries[0]!.date),
}, },
...Array.from({ length: Math.ceil(sortedEntries.length / 4) }, (_, i) => { ...Array.from({ length: Math.ceil(sortedEntries.length / 4) }, (_, i) => {
const start = i * 4; const start = i * 4;

View File

@@ -2,22 +2,13 @@
import { onMount } from "svelte"; import { onMount } from "svelte";
import { goto } from "$app/navigation"; import { goto } from "$app/navigation";
import { EntryButton, FileThumbnailButton } from "$lib/components/atoms"; import { EntryButton, FileThumbnailButton } from "$lib/components/atoms";
import { bulkGetFileInfo, type MaybeFileInfo } from "$lib/modules/filesystem"; import { type SummarizedFileInfo } from "$lib/modules/filesystem";
import { masterKeyStore } from "$lib/stores";
import { requestFreshMediaFilesRetrieval } from "./service"; import { requestFreshMediaFilesRetrieval } from "./service";
let mediaFiles: MaybeFileInfo[] = $state([]); let mediaFiles: SummarizedFileInfo[] = $state([]);
onMount(async () => { onMount(async () => {
const files = await requestFreshMediaFilesRetrieval(); mediaFiles = await requestFreshMediaFilesRetrieval();
mediaFiles = Array.from(
(
await bulkGetFileInfo(
files.map(({ id }) => id),
$masterKeyStore?.get(1)?.key!,
)
).values(),
);
}); });
</script> </script>
@@ -34,9 +25,7 @@
{#if mediaFiles.length > 0} {#if mediaFiles.length > 0}
<div class="grid grid-cols-4 gap-2 p-2"> <div class="grid grid-cols-4 gap-2 p-2">
{#each mediaFiles as file (file.id)} {#each mediaFiles as file (file.id)}
{#if file.exists} <FileThumbnailButton info={file} onclick={({ id }) => goto(`/file/${id}`)} />
<FileThumbnailButton info={file} onclick={({ id }) => goto(`/file/${id}`)} />
{/if}
{/each} {/each}
</div> </div>
{/if} {/if}