- {#if $status.status === "encryption-pending"}
+ {#if state.status === "encryption-pending"}
- {:else if $status.status === "encrypting"}
+ {:else if state.status === "encrypting"}
- {:else if $status.status === "upload-pending"}
+ {:else if state.status === "upload-pending"}
- {:else if $status.status === "uploading"}
+ {:else if state.status === "uploading"}
- {:else if $status.status === "uploaded"}
+ {:else if state.status === "uploaded"}
- {:else if $status.status === "error"}
+ {:else if state.status === "error"}
{/if}
-
- {$status.name}
+
+ {state.name}
- {#if $status.status === "encryption-pending"}
+ {#if state.status === "encryption-pending"}
준비 중
- {:else if $status.status === "encrypting"}
+ {:else if state.status === "encrypting"}
암호화하는 중
- {:else if $status.status === "upload-pending"}
+ {:else if state.status === "upload-pending"}
업로드를 기다리는 중
- {:else if $status.status === "uploading"}
+ {:else if state.status === "uploading"}
전송됨
- {Math.floor(($status.progress ?? 0) * 100)}% · {formatNetworkSpeed(($status.rate ?? 0) * 8)}
- {:else if $status.status === "uploaded"}
+ {Math.floor((state.progress ?? 0) * 100)}% · {formatNetworkSpeed((state.rate ?? 0) * 8)}
+ {:else if state.status === "uploaded"}
업로드 완료
- {:else if $status.status === "error"}
+ {:else if state.status === "error"}
업로드 실패
{/if}
diff --git a/src/routes/(main)/directory/[[id]]/+page.svelte b/src/routes/(main)/directory/[[id]]/+page.svelte
index a4edf30..1bd2c5c 100644
--- a/src/routes/(main)/directory/[[id]]/+page.svelte
+++ b/src/routes/(main)/directory/[[id]]/+page.svelte
@@ -1,11 +1,10 @@
@@ -89,106 +88,106 @@
-
- {#if showTopBar}
-
- {/if}
- {#if $info}
-
-
- goto("/file/uploads")} />
- goto("/file/downloads")} />
-
- {#key $info}
+{#await infoPromise then info}
+ {#if info}
+
+ {#if showTopBar}
+
+ {/if}
+
+
+ goto("/file/uploads")} />
+ goto("/file/downloads")} />
+
goto(`/${type}/${id}`)}
onEntryMenuClick={(entry) => {
context.selectedEntry = entry;
isEntryMenuBottomSheetOpen = true;
}}
- showParentEntry={isFromFilePage && $info.parentId !== undefined}
+ showParentEntry={isFromFilePage && info.parentId !== undefined}
onParentClick={() =>
goto(
- $info.parentId === "root"
+ info.parentId === "root"
? "/directory?from=file"
- : `/directory/${$info.parentId}?from=file`,
+ : `/directory/${info.parentId}?from=file`,
)}
/>
- {/key}
+
+
+
{
+ isEntryCreateBottomSheetOpen = true;
+ }}
+ class="bottom-24 right-4"
+ />
+ {
+ isEntryCreateBottomSheetOpen = false;
+ isDirectoryCreateModalOpen = true;
+ }}
+ onFileUploadClick={() => {
+ isEntryCreateBottomSheetOpen = false;
+ fileInput?.click();
+ }}
+ />
+ {
+ if (await requestDirectoryCreation(name, data.id, $masterKeyStore?.get(1)!)) {
+ infoPromise = getDirectoryInfo(data.id, $masterKeyStore?.get(1)?.key!); // TODO: FIXME
+ return true;
+ }
+ return false;
+ }}
+ />
+ {
+ resolveForDuplicateFileModal?.(false);
+ isDuplicateFileModalOpen = false;
+ }}
+ onUploadClick={() => {
+ resolveForDuplicateFileModal?.(true);
+ isDuplicateFileModalOpen = false;
+ }}
+ />
+
+ {
+ isEntryMenuBottomSheetOpen = false;
+ isEntryRenameModalOpen = true;
+ }}
+ onDeleteClick={() => {
+ isEntryMenuBottomSheetOpen = false;
+ isEntryDeleteModalOpen = true;
+ }}
+ />
+ {
+ if (await requestEntryRename(context.selectedEntry!, newName)) {
+ infoPromise = getDirectoryInfo(data.id, $masterKeyStore?.get(1)?.key!); // TODO: FIXME
+ return true;
+ }
+ return false;
+ }}
+ />
+ {
+ if (await requestEntryDeletion(context.selectedEntry!)) {
+ infoPromise = getDirectoryInfo(data.id, $masterKeyStore?.get(1)?.key!); // TODO: FIXME
+ return true;
+ }
+ return false;
+ }}
+ />
{/if}
-
-
-
{
- isEntryCreateBottomSheetOpen = true;
- }}
- class="bottom-24 right-4"
-/>
- {
- isEntryCreateBottomSheetOpen = false;
- isDirectoryCreateModalOpen = true;
- }}
- onFileUploadClick={() => {
- isEntryCreateBottomSheetOpen = false;
- fileInput?.click();
- }}
-/>
- {
- if (await requestDirectoryCreation(name, data.id, $masterKeyStore?.get(1)!)) {
- info = getDirectoryInfo(data.id, $masterKeyStore?.get(1)?.key!); // TODO: FIXME
- return true;
- }
- return false;
- }}
-/>
- {
- resolveForDuplicateFileModal?.(false);
- isDuplicateFileModalOpen = false;
- }}
- onUploadClick={() => {
- resolveForDuplicateFileModal?.(true);
- isDuplicateFileModalOpen = false;
- }}
-/>
-
- {
- isEntryMenuBottomSheetOpen = false;
- isEntryRenameModalOpen = true;
- }}
- onDeleteClick={() => {
- isEntryMenuBottomSheetOpen = false;
- isEntryDeleteModalOpen = true;
- }}
-/>
- {
- if (await requestEntryRename(context.selectedEntry!, newName)) {
- info = getDirectoryInfo(data.id, $masterKeyStore?.get(1)?.key!); // TODO: FIXME
- return true;
- }
- return false;
- }}
-/>
- {
- if (await requestEntryDeletion(context.selectedEntry!)) {
- info = getDirectoryInfo(data.id, $masterKeyStore?.get(1)?.key!); // TODO: FIXME
- return true;
- }
- return false;
- }}
-/>
+{/await}
diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte
index 527bd1b..b761176 100644
--- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte
+++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte
@@ -1,21 +1,9 @@
{#if subDirectories.length + files.length > 0 || showParentEntry}
@@ -124,8 +55,8 @@
{/if}
- {#each subDirectories as { info }}
-
+ {#each subDirectories as subDirectory}
+
{/each}
{#if files.length > 0}
{#if file.type === "file"}
-
+
{:else}
-
+
{/if}
{/snippet}
diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/File.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/File.svelte
index 67d7e36..fdc225c 100644
--- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/File.svelte
+++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/File.svelte
@@ -1,66 +1,46 @@
-{#if $info}
-
+ action(onclick)}
+ actionButtonIcon={IconMoreVert}
+ onActionButtonClick={() => action(onOpenMenuClick)}
+>
+ {#await thumbnailPromise then thumbnail}
-
-{/if}
+ {/await}
+
diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/SubDirectory.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/SubDirectory.svelte
index 5454695..0d65cc2 100644
--- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/SubDirectory.svelte
+++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/SubDirectory.svelte
@@ -1,44 +1,29 @@
-{#if $info}
-
-
-
-{/if}
+
action(onclick)}
+ actionButtonIcon={IconMoreVert}
+ onActionButtonClick={() => action(onOpenMenuClick)}
+>
+
+
diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte
index bf5e85a..0ec7263 100644
--- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte
+++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte
@@ -1,38 +1,35 @@
-{#if isFileUploading($status.status)}
-
-
-
-
-
-
- {$status.name}
-
-
- {#if $status.status === "encryption-pending"}
- 준비 중
- {:else if $status.status === "encrypting"}
- 암호화하는 중
- {:else if $status.status === "upload-pending"}
- 업로드를 기다리는 중
- {:else if $status.status === "uploading"}
- 전송됨 {Math.floor(($status.progress ?? 0) * 100)}% ·
- {formatNetworkSpeed(($status.rate ?? 0) * 8)}
- {/if}
-
-
+
+
+
-{/if}
+
+
+ {state.name}
+
+
+ {#if state.status === "encryption-pending"}
+ 준비 중
+ {:else if state.status === "encrypting"}
+ 암호화하는 중
+ {:else if state.status === "upload-pending"}
+ 업로드를 기다리는 중
+ {:else if state.status === "uploading"}
+ 전송됨 {Math.floor((state.progress ?? 0) * 100)}% ·
+ {formatNetworkSpeed((state.rate ?? 0) * 8)}
+ {/if}
+
+
+
diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts b/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts
deleted file mode 100644
index d4b47f8..0000000
--- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { requestFileThumbnailDownload } from "$lib/services/file";
diff --git a/src/routes/(main)/directory/[[id]]/UploadStatusCard.svelte b/src/routes/(main)/directory/[[id]]/UploadStatusCard.svelte
index 1ac40b3..578c368 100644
--- a/src/routes/(main)/directory/[[id]]/UploadStatusCard.svelte
+++ b/src/routes/(main)/directory/[[id]]/UploadStatusCard.svelte
@@ -1,7 +1,5 @@
{#if uploadingFiles.length > 0}
diff --git a/src/routes/(main)/directory/[[id]]/service.svelte.ts b/src/routes/(main)/directory/[[id]]/service.svelte.ts
index c94cc1e..db1f114 100644
--- a/src/routes/(main)/directory/[[id]]/service.svelte.ts
+++ b/src/routes/(main)/directory/[[id]]/service.svelte.ts
@@ -14,8 +14,7 @@ import { trpc } from "$trpc/client";
export interface SelectedEntry {
type: "directory" | "file";
id: number;
- dataKey: CryptoKey;
- dataKeyVersion: Date;
+ dataKey: { key: CryptoKey; version: Date } | undefined;
name: string;
}
@@ -97,20 +96,26 @@ export const requestFileUpload = async (
};
export const requestEntryRename = async (entry: SelectedEntry, newName: string) => {
- const newNameEncrypted = await encryptString(newName, entry.dataKey);
+ if (!entry.dataKey) {
+ // TODO: Error Handling
+ console.log("hi");
+ return false;
+ }
+
+ const newNameEncrypted = await encryptString(newName, entry.dataKey.key);
try {
if (entry.type === "directory") {
await trpc().directory.rename.mutate({
id: entry.id,
- dekVersion: entry.dataKeyVersion,
+ dekVersion: entry.dataKey.version,
name: newNameEncrypted.ciphertext,
nameIv: newNameEncrypted.iv,
});
} else {
await trpc().file.rename.mutate({
id: entry.id,
- dekVersion: entry.dataKeyVersion,
+ dekVersion: entry.dataKey.version,
name: newNameEncrypted.ciphertext,
nameIv: newNameEncrypted.iv,
});
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index e4bca97..612cfe4 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -2,10 +2,9 @@
import { onMount } from "svelte";
import { get } from "svelte/store";
import { goto as svelteGoto } from "$app/navigation";
+ import { getUploadingFiles } from "$lib/modules/file";
import {
- fileUploadStatusStore,
fileDownloadStatusStore,
- isFileUploading,
isFileDownloading,
clientKeyStore,
masterKeyStore,
@@ -16,7 +15,7 @@
const protectFileUploadAndDownload = (e: BeforeUnloadEvent) => {
if (
- $fileUploadStatusStore.some((status) => isFileUploading(get(status).status)) ||
+ getUploadingFiles().length > 0 ||
$fileDownloadStatusStore.some((status) => isFileDownloading(get(status).status))
) {
e.preventDefault();
diff --git a/src/trpc/routers/directory.ts b/src/trpc/routers/directory.ts
index e060c23..6e1e358 100644
--- a/src/trpc/routers/directory.ts
+++ b/src/trpc/routers/directory.ts
@@ -32,8 +32,27 @@ const directoryRouter = router({
name: directory.encName.ciphertext,
nameIv: directory.encName.iv,
},
- subDirectories: directories.map(({ id }) => id),
- files: files.map(({ id }) => id),
+ subDirectories: directories.map((directory) => ({
+ id: directory.id,
+ mekVersion: directory.mekVersion,
+ dek: directory.encDek,
+ dekVersion: directory.dekVersion,
+ name: directory.encName.ciphertext,
+ nameIv: directory.encName.iv,
+ })),
+ files: files.map((file) => ({
+ id: file.id,
+ mekVersion: file.mekVersion,
+ dek: file.encDek,
+ dekVersion: file.dekVersion,
+ contentType: file.contentType,
+ name: file.encName.ciphertext,
+ nameIv: file.encName.iv,
+ createdAt: file.encCreatedAt?.ciphertext,
+ createdAtIv: file.encCreatedAt?.iv,
+ lastModifiedAt: file.encLastModifiedAt.ciphertext,
+ lastModifiedAtIv: file.encLastModifiedAt.iv,
+ })),
};
}),