From 8a3f58a08036b8a4c9c6aa98b075988476aa50f2 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 19 Sep 2023 10:20:16 +0530 Subject: [PATCH 01/10] add log for debugging download progress --- apps/photos/src/services/downloadManager.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/photos/src/services/downloadManager.ts b/apps/photos/src/services/downloadManager.ts index 1c9441903..43e8b341f 100644 --- a/apps/photos/src/services/downloadManager.ts +++ b/apps/photos/src/services/downloadManager.ts @@ -388,6 +388,9 @@ class DownloadManager { trackDownloadProgress = (fileID: number) => { return (event: { loaded: number; total: number }) => { + addLogLine( + `Download progress for fileID: ${fileID} is ${event.loaded} out of ${event.total}` + ); if (event.loaded === event.total) { this.fileDownloadProgress.delete(fileID); } else { From cbd054b0323b88addbfbe319a75acba72de99200 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 19 Sep 2023 13:14:45 +0530 Subject: [PATCH 02/10] handle contentLength not present --- apps/photos/src/services/downloadManager.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/photos/src/services/downloadManager.ts b/apps/photos/src/services/downloadManager.ts index 43e8b341f..a5af13117 100644 --- a/apps/photos/src/services/downloadManager.ts +++ b/apps/photos/src/services/downloadManager.ts @@ -240,7 +240,7 @@ class DownloadManager { ); const reader = resp.body.getReader(); - const contentLength = +resp.headers.get('Content-Length'); + const contentLength = +resp.headers.get('Content-Length') ?? 0; let downloadedBytes = 0; const stream = new ReadableStream({ @@ -388,9 +388,9 @@ class DownloadManager { trackDownloadProgress = (fileID: number) => { return (event: { loaded: number; total: number }) => { - addLogLine( - `Download progress for fileID: ${fileID} is ${event.loaded} out of ${event.total}` - ); + if (isNaN(event.total) || event.total === 0) { + return; + } if (event.loaded === event.total) { this.fileDownloadProgress.delete(fileID); } else { From 1567ff3a1af7311a392e7dad162f3d5fab730eab Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 19 Sep 2023 16:45:25 +0530 Subject: [PATCH 03/10] fallback to fileSize if present , if event.total is missing --- apps/photos/src/services/downloadManager.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/photos/src/services/downloadManager.ts b/apps/photos/src/services/downloadManager.ts index a5af13117..86077a1a8 100644 --- a/apps/photos/src/services/downloadManager.ts +++ b/apps/photos/src/services/downloadManager.ts @@ -188,7 +188,10 @@ class DownloadManager { if (!token) { return null; } - const onDownloadProgress = this.trackDownloadProgress(file.id); + const onDownloadProgress = this.trackDownloadProgress( + file.id, + file.info.fileSize + ); if ( file.metadata.fileType === FILE_TYPE.IMAGE || file.metadata.fileType === FILE_TYPE.LIVE_PHOTO @@ -386,10 +389,13 @@ class DownloadManager { } } - trackDownloadProgress = (fileID: number) => { + trackDownloadProgress = (fileID: number, fileSize?: number) => { return (event: { loaded: number; total: number }) => { if (isNaN(event.total) || event.total === 0) { - return; + if (!fileSize) { + return; + } + event.total = fileSize; } if (event.loaded === event.total) { this.fileDownloadProgress.delete(fileID); From d7a6a0d85ed9c39ed8accf970b576f681875cefd Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 19 Sep 2023 16:47:42 +0530 Subject: [PATCH 04/10] handle if info is missing --- apps/photos/src/services/downloadManager.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/photos/src/services/downloadManager.ts b/apps/photos/src/services/downloadManager.ts index 86077a1a8..97f402801 100644 --- a/apps/photos/src/services/downloadManager.ts +++ b/apps/photos/src/services/downloadManager.ts @@ -190,7 +190,7 @@ class DownloadManager { } const onDownloadProgress = this.trackDownloadProgress( file.id, - file.info.fileSize + file.info?.fileSize ); if ( file.metadata.fileType === FILE_TYPE.IMAGE || @@ -389,7 +389,7 @@ class DownloadManager { } } - trackDownloadProgress = (fileID: number, fileSize?: number) => { + trackDownloadProgress = (fileID: number, fileSize: number) => { return (event: { loaded: number; total: number }) => { if (isNaN(event.total) || event.total === 0) { if (!fileSize) { From 4b5d66baf3ed0f4d607dfb18d47a3e1835f161f9 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 20 Sep 2023 09:13:35 +0530 Subject: [PATCH 05/10] fix handling of conversion failure --- apps/photos/src/components/PhotoFrame.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/photos/src/components/PhotoFrame.tsx b/apps/photos/src/components/PhotoFrame.tsx index 1522b0354..cb48209fa 100644 --- a/apps/photos/src/components/PhotoFrame.tsx +++ b/apps/photos/src/components/PhotoFrame.tsx @@ -559,13 +559,14 @@ const PhotoFrame = ({ } else { originalVideoURL = srcURL.original.split(',')[1]; } - const convertedVideoURL = URL.createObjectURL( - await getPlayableVideo( - item.metadata.title, - await (await fetch(originalVideoURL)).blob(), - true - ) + const playableVideo = await getPlayableVideo( + item.metadata.title, + await (await fetch(originalVideoURL)).blob(), + true ); + const convertedVideoURL = playableVideo + ? URL.createObjectURL(playableVideo) + : ''; if (item.metadata.fileType === FILE_TYPE.VIDEO) { srcURL.converted = convertedVideoURL; } else { From 9e9298b5e3db5a55500ca173854c682207ce6d09 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 20 Sep 2023 13:11:36 +0530 Subject: [PATCH 06/10] add logs --- apps/photos/src/components/PhotoFrame.tsx | 4 +++- apps/photos/src/utils/file/index.ts | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/photos/src/components/PhotoFrame.tsx b/apps/photos/src/components/PhotoFrame.tsx index cb48209fa..65e5da96d 100644 --- a/apps/photos/src/components/PhotoFrame.tsx +++ b/apps/photos/src/components/PhotoFrame.tsx @@ -538,7 +538,9 @@ const PhotoFrame = ({ // ignore } try { - addLogLine(`[${item.id}] new file getConvertedVideo request`); + addLogLine( + `[${item.id}] new file getConvertedVideo request- ${item.metadata.title}}` + ); fetching[item.id] = true; if (!filesStore.has(item.id)) { addLogLine( diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index 9df39df16..7d04939cb 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -411,13 +411,18 @@ export async function getPlayableVideo( if (isPlayable && !forceConvert) { return videoBlob; } else { - addLogLine('video format not supported, converting it'); + addLogLine( + 'video format not supported, converting it name:', + videoNameTitle + ); const mp4ConvertedVideo = await ffmpegService.convertToMP4( new File([videoBlob], videoNameTitle) ); + addLogLine('video successfully converted', videoNameTitle); return new Blob([await mp4ConvertedVideo.arrayBuffer()]); } } catch (e) { + addLogLine('video conversion failed', videoNameTitle); logError(e, 'video conversion failed'); return null; } From f4e87d934a445a5f1ecf421509ee299f22e53698 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 20 Sep 2023 13:12:53 +0530 Subject: [PATCH 07/10] only show convert option on desktop --- apps/photos/src/components/PhotoViewer/index.tsx | 2 ++ apps/photos/src/utils/file/index.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/apps/photos/src/components/PhotoViewer/index.tsx b/apps/photos/src/components/PhotoViewer/index.tsx index 144b06cc9..94e779f8f 100644 --- a/apps/photos/src/components/PhotoViewer/index.tsx +++ b/apps/photos/src/components/PhotoViewer/index.tsx @@ -50,6 +50,7 @@ import CircularProgressWithLabel from './styledComponents/CircularProgressWithLa import EnteSpinner from 'components/EnteSpinner'; import AlbumOutlined from '@mui/icons-material/AlbumOutlined'; import { FlexWrapper } from 'components/Container'; +import isElectron from 'is-electron'; interface PhotoswipeFullscreenAPI { enter: () => void; @@ -298,6 +299,7 @@ function PhotoViewer(props: Iprops) { function updateShowConvertBtn(file: EnteFile) { const shouldShowConvertBtn = + isElectron() && (file.metadata.fileType === FILE_TYPE.VIDEO || file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) && !file.isConverted && diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index 7d04939cb..e49d75b18 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -411,6 +411,9 @@ export async function getPlayableVideo( if (isPlayable && !forceConvert) { return videoBlob; } else { + if (!isElectron()) { + return null; + } addLogLine( 'video format not supported, converting it name:', videoNameTitle From e29006f4ce3a9b40422bddb079d5bc1bacc0faa4 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 20 Sep 2023 13:56:24 +0530 Subject: [PATCH 08/10] add clear download pogress logic with logs --- apps/photos/src/services/downloadManager.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/photos/src/services/downloadManager.ts b/apps/photos/src/services/downloadManager.ts index 97f402801..e838da8a9 100644 --- a/apps/photos/src/services/downloadManager.ts +++ b/apps/photos/src/services/downloadManager.ts @@ -208,6 +208,7 @@ class DownloadManager { } ) ); + this.clearDownloadProgress(file.id); if (typeof resp.data === 'undefined') { throw Error(CustomError.REQUEST_FAILED); } @@ -391,6 +392,9 @@ class DownloadManager { trackDownloadProgress = (fileID: number, fileSize: number) => { return (event: { loaded: number; total: number }) => { + addLogLine( + `Download progress for fileID: ${fileID} loaded: ${event.loaded} total: ${event.total}` + ); if (isNaN(event.total) || event.total === 0) { if (!fileSize) { return; @@ -408,6 +412,11 @@ class DownloadManager { this.progressUpdater(new Map(this.fileDownloadProgress)); }; }; + + clearDownloadProgress = (fileID: number) => { + this.fileDownloadProgress.delete(fileID); + this.progressUpdater(new Map(this.fileDownloadProgress)); + }; } export default new DownloadManager(); From ccc6b5666f4e72ee01370127ed263df6f08ee517 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 20 Sep 2023 14:27:52 +0530 Subject: [PATCH 09/10] fix live-photo preview --- apps/photos/src/utils/file/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index e49d75b18..f5f324d01 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -386,7 +386,8 @@ async function getRenderableLivePhotoURL( ); const convertedVideoBlob = await getPlayableVideo( livePhoto.videoNameTitle, - videoBlob + videoBlob, + true ); const { originalURL: originalImageURL, convertedURL: convertedImageURL } = getFileObjectURLs(imageBlob, convertedImageBlob); @@ -411,7 +412,7 @@ export async function getPlayableVideo( if (isPlayable && !forceConvert) { return videoBlob; } else { - if (!isElectron()) { + if (!forceConvert && !isElectron()) { return null; } addLogLine( From 48b1fdd0035709624cfe3d2d61edd070ec9f5548 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 20 Sep 2023 15:59:59 +0530 Subject: [PATCH 10/10] remove testing log --- apps/photos/src/services/downloadManager.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/photos/src/services/downloadManager.ts b/apps/photos/src/services/downloadManager.ts index e838da8a9..0f8910b0b 100644 --- a/apps/photos/src/services/downloadManager.ts +++ b/apps/photos/src/services/downloadManager.ts @@ -392,9 +392,6 @@ class DownloadManager { trackDownloadProgress = (fileID: number, fileSize: number) => { return (event: { loaded: number; total: number }) => { - addLogLine( - `Download progress for fileID: ${fileID} loaded: ${event.loaded} total: ${event.total}` - ); if (isNaN(event.total) || event.total === 0) { if (!fileSize) { return;