From cc9d355ac1e916325ba00bd400492283f3546001 Mon Sep 17 00:00:00 2001 From: static Date: Thu, 16 Jan 2025 04:23:31 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=8C=EC=9D=BC=EC=9D=84=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=ED=95=98=EB=8A=94=20=EC=A4=91=EC=97=90,=20?= =?UTF-8?q?=ED=95=B4=EB=8B=B9=EB=90=98=EB=8A=94=20=EB=94=94=EB=A0=89?= =?UTF-8?q?=ED=84=B0=EB=A6=AC=EC=97=90=20=EC=97=85=EB=A1=9C=EB=93=9C=20Pro?= =?UTF-8?q?gress=EB=A5=BC=20=ED=91=9C=EC=8B=9C=ED=95=98=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DirectoryEntries/DirectoryEntries.svelte | 108 +++++++++++++++--- .../DirectoryEntries/UploadingFile.svelte | 37 ++++++ .../[[id]]/DirectoryEntries/service.ts | 23 ++-- 3 files changed, 143 insertions(+), 25 deletions(-) create mode 100644 src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte index ea8a984..0933650 100644 --- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte @@ -1,11 +1,18 @@ -{#if info.subDirectoryIds.length + info.fileIds.length > 0} +{#if subDirectories.length + files.length > 0}
- {#each subDirectoryInfos as subDirectory} - + {#each subDirectories as { info }} + {/each} - {#each fileInfos as file} - + {#each files as file} + {#if file.type === "file"} + + {:else} + + {/if} {/each}
{:else} diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte new file mode 100644 index 0000000..e50d4bf --- /dev/null +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte @@ -0,0 +1,37 @@ + + +{#if $info.status !== "uploaded" && $info.status !== "canceled" && $info.status !== "error"} +
+
+ +
+
+

+ {$info.name} +

+

+ {#if $info.status === "encryption-pending"} + 준비 중 + {:else if $info.status === "encrypting"} + 암호화하는 중 + {:else if $info.status === "upload-pending"} + 업로드를 기다리는 중 + {:else if $info.status === "uploading"} + 전송됨 {formatUploadProgress($info.progress)} · {formatUploadRate($info.rate)} + {/if} +

+
+
+{/if} diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts b/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts index a879d68..10f8e32 100644 --- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts @@ -1,5 +1,4 @@ -import { get, type Writable } from "svelte/store"; -import type { DirectoryInfo, FileInfo } from "$lib/stores"; +import { formatFileSize } from "$lib/modules/util"; export { formatDateTime } from "$lib/modules/util"; @@ -8,17 +7,19 @@ export enum SortBy { NAME_DESC, } -type SortFunc = (a: DirectoryInfo | FileInfo | null, b: DirectoryInfo | FileInfo | null) => number; +type SortFunc = (a?: string, b?: string) => number; const sortByNameAsc: SortFunc = (a, b) => { - if (a && b) return a.name!.localeCompare(b.name!); + if (a && b) return a.localeCompare(b); + if (a) return -1; + if (b) return 1; return 0; }; const sortByNameDesc: SortFunc = (a, b) => -sortByNameAsc(a, b); -export const sortEntries = ( - entries: Writable[], +export const sortEntries = ( + entries: T[], sortBy: SortBy = SortBy.NAME_ASC, ) => { let sortFunc: SortFunc; @@ -28,5 +29,13 @@ export const sortEntries = ( sortFunc = sortByNameDesc; } - entries.sort((a, b) => sortFunc(get(a), get(b))); + entries.sort((a, b) => sortFunc(a.name, b.name)); +}; + +export const formatUploadProgress = (progress?: number) => { + return `${Math.floor((progress ?? 0) * 100)}%`; +}; + +export const formatUploadRate = (rate?: number) => { + return `${formatFileSize((rate ?? 0) / 8)}/s`; };