From 43cf296058997f3ae8acdb3ac92640a1a00e8b73 Mon Sep 17 00:00:00 2001 From: Hakan Shehu Date: Fri, 3 Jan 2025 22:31:22 +0100 Subject: [PATCH] Fix file download --- .../src/main/queries/files/file-get.ts | 36 +++++++++++++++++ .../src/main/queries/files/file-list.ts | 40 +++++++++++++++++++ .../components/files/file-download.tsx | 15 ++++--- .../components/files/file-preview.tsx | 4 +- 4 files changed, 87 insertions(+), 8 deletions(-) diff --git a/apps/desktop/src/main/queries/files/file-get.ts b/apps/desktop/src/main/queries/files/file-get.ts index 56940d4c..6c551514 100644 --- a/apps/desktop/src/main/queries/files/file-get.ts +++ b/apps/desktop/src/main/queries/files/file-get.ts @@ -67,6 +67,42 @@ export class FileGetQueryHandler implements QueryHandler { }; } + if (event.type === 'file_state_created') { + if (output === null) { + const newResult = await this.fetchFile(input); + return { + hasChanges: true, + result: newResult, + }; + } + + return { + hasChanges: true, + result: { + ...output, + ...event.fileState, + }, + }; + } + + if (event.type === 'file_state_updated') { + if (output === null) { + const newResult = await this.fetchFile(input); + return { + hasChanges: true, + result: newResult, + }; + } + + return { + hasChanges: true, + result: { + ...output, + ...event.fileState, + }, + }; + } + return { hasChanges: false, }; diff --git a/apps/desktop/src/main/queries/files/file-list.ts b/apps/desktop/src/main/queries/files/file-list.ts index 34c6eb96..002fdb51 100644 --- a/apps/desktop/src/main/queries/files/file-list.ts +++ b/apps/desktop/src/main/queries/files/file-list.ts @@ -82,6 +82,46 @@ export class FileListQueryHandler implements QueryHandler { } } + if (event.type === 'file_state_created') { + const file = output.find((file) => file.id === event.fileState.fileId); + if (file) { + const newResult = output.map((file) => { + if (file.id === event.fileState.fileId) { + return { + ...file, + ...event.fileState, + }; + } + return file; + }); + + return { + hasChanges: true, + result: newResult, + }; + } + } + + if (event.type === 'file_state_updated') { + const file = output.find((file) => file.id === event.fileState.fileId); + if (file) { + const newResult = output.map((file) => { + if (file.id === event.fileState.fileId) { + return { + ...file, + ...event.fileState, + }; + } + return file; + }); + + return { + hasChanges: true, + result: newResult, + }; + } + } + return { hasChanges: false, }; diff --git a/apps/desktop/src/renderer/components/files/file-download.tsx b/apps/desktop/src/renderer/components/files/file-download.tsx index b947603b..6a719b34 100644 --- a/apps/desktop/src/renderer/components/files/file-download.tsx +++ b/apps/desktop/src/renderer/components/files/file-download.tsx @@ -4,17 +4,19 @@ import { Spinner } from '@/renderer/components/ui/spinner'; import { useWorkspace } from '@/renderer/contexts/workspace'; import { useMutation } from '@/renderer/hooks/use-mutation'; import { toast } from '@/renderer/hooks/use-toast'; +import { FileWithState } from '@/shared/types/files'; +import { formatBytes } from '@/shared/lib/files'; interface FileDownloadProps { - id: string; - downloadProgress: number | null | undefined; + file: FileWithState; } -export const FileDownload = ({ id, downloadProgress }: FileDownloadProps) => { +export const FileDownload = ({ file }: FileDownloadProps) => { const workspace = useWorkspace(); const { mutate } = useMutation(); - const isDownloading = typeof downloadProgress === 'number'; + const isDownloading = file.downloadStatus === 'pending'; + return (
{isDownloading ? ( @@ -33,7 +35,7 @@ export const FileDownload = ({ id, downloadProgress }: FileDownloadProps) => { input: { type: 'file_download', userId: workspace.userId, - fileId: id, + fileId: file.id, }, onError(error) { toast({ @@ -49,6 +51,9 @@ export const FileDownload = ({ id, downloadProgress }: FileDownloadProps) => {

File is not downloaded in your device. Click to download.

+

+ {formatBytes(file.size)} - {file.mimeType} +

)} diff --git a/apps/desktop/src/renderer/components/files/file-preview.tsx b/apps/desktop/src/renderer/components/files/file-preview.tsx index c4aa31b3..265df636 100644 --- a/apps/desktop/src/renderer/components/files/file-preview.tsx +++ b/apps/desktop/src/renderer/components/files/file-preview.tsx @@ -16,9 +16,7 @@ export const FilePreview = ({ file }: FilePreviewProps) => { const workspace = useWorkspace(); if (file.downloadProgress !== 100) { - return ( - - ); + return ; } const url = getFileUrl(workspace.userId, file.id, file.extension);