diff --git a/src/lib/components/organisms/Gallery.svelte b/src/lib/components/organisms/Gallery.svelte index 9f80846..521c287 100644 --- a/src/lib/components/organisms/Gallery.svelte +++ b/src/lib/components/organisms/Gallery.svelte @@ -13,7 +13,9 @@ let { files, onFileClick }: Props = $props(); - type FileEntry = { date?: Date; info: Writable }; + type FileEntry = + | { date?: undefined; contentType?: undefined; info: Writable } + | { date: Date; contentType: string; info: Writable }; type Row = | { type: "header"; key: string; label: string } | { type: "items"; key: string; items: FileEntry[] }; @@ -37,15 +39,28 @@ $effect(() => { filesWithDate = files.map((file) => { - const { createdAt, lastModifiedAt } = get(file) ?? {}; - return { date: createdAt ?? lastModifiedAt, info: file }; + const info = get(file); + if (info) { + return { + date: info.createdAt ?? info.lastModifiedAt, + contentType: info.contentType, + info: file, + }; + } else { + return { info: file }; + } }); const buildRows = () => { const map = new Map(); for (const file of filesWithDate) { - if (!file.date) continue; + if ( + !file.date || + !(file.contentType.startsWith("image/") || file.contentType.startsWith("video/")) + ) { + continue; + } const date = formatDateSortable(file.date); const entries = map.get(date) ?? []; diff --git a/src/routes/(main)/home/+page.svelte b/src/routes/(main)/home/+page.svelte index 8393641..e8997c4 100644 --- a/src/routes/(main)/home/+page.svelte +++ b/src/routes/(main)/home/+page.svelte @@ -5,13 +5,13 @@ import { FileThumbnailButton } from "$lib/components/molecules"; import { getFileInfo, type FileInfo } from "$lib/modules/filesystem"; import { masterKeyStore } from "$lib/stores"; - import { requestFreshFilesRetrieval } from "./service"; + import { requestFreshMediaFilesRetrieval } from "./service"; - let files: Writable[] = $state([]); + let mediaFiles: Writable[] = $state([]); $effect(() => { - requestFreshFilesRetrieval().then((retrievedFiles) => { - files = retrievedFiles.map(({ id }) => getFileInfo(id, $masterKeyStore?.get(1)?.key!)); + requestFreshMediaFilesRetrieval().then((files) => { + mediaFiles = files.map(({ id }) => getFileInfo(id, $masterKeyStore?.get(1)?.key!)); }); }); @@ -27,7 +27,7 @@

사진 및 동영상

- {#each files as file} + {#each mediaFiles as file} goto(`/file/${id}`)} /> {/each}
diff --git a/src/routes/(main)/home/service.ts b/src/routes/(main)/home/service.ts index 50dc652..6d02199 100644 --- a/src/routes/(main)/home/service.ts +++ b/src/routes/(main)/home/service.ts @@ -1,10 +1,14 @@ import { getAllFileInfos } from "$lib/indexedDB"; -export const requestFreshFilesRetrieval = async (limit = 8) => { +export const requestFreshMediaFilesRetrieval = async (limit = 8) => { const files = await getAllFileInfos(); files.sort( (a, b) => (b.createdAt ?? b.lastModifiedAt).getTime() - (a.createdAt ?? a.lastModifiedAt).getTime(), ); - return files.slice(0, limit); + return files + .filter( + ({ contentType }) => contentType.startsWith("image/") || contentType.startsWith("video/"), + ) + .slice(0, limit); };