From 03df804868b145a71f63029a69fd3d8a49bd8692 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 12 May 2025 14:49:25 +0530 Subject: [PATCH] Restrict shared file preview playback to internal users --- mobile/lib/services/preview_video_store.dart | 2 +- mobile/lib/ui/viewer/file/video_widget.dart | 27 ++++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/mobile/lib/services/preview_video_store.dart b/mobile/lib/services/preview_video_store.dart index aac18a6a0f..1c057f2cb3 100644 --- a/mobile/lib/services/preview_video_store.dart +++ b/mobile/lib/services/preview_video_store.dart @@ -105,7 +105,7 @@ class PreviewVideoStore { return DateTime.fromMillisecondsSinceEpoch(milliseconds); } - Future isSharedFilePreviewAvilable(EnteFile file) async { + Future isSharedFileStreamble(EnteFile file) async { try { await getPreviewUrl(file); return true; diff --git a/mobile/lib/ui/viewer/file/video_widget.dart b/mobile/lib/ui/viewer/file/video_widget.dart index ebb14a333e..dd82c3af33 100644 --- a/mobile/lib/ui/viewer/file/video_widget.dart +++ b/mobile/lib/ui/viewer/file/video_widget.dart @@ -59,6 +59,15 @@ class _VideoWidgetState extends State { }); }); if (widget.file.isUploaded) { + isPreviewLoadable = FileDataService.instance.previewIds + ?.containsKey(widget.file.uploadedFileID) ?? + false; + if (!widget.file.isOwner && flagService.internalUser) { + // todo: neeraj assume shared files are previewable, fetch the preview data + // and mark as not previewable if not available. Add backend support for + // fetching preview status to cache this information proactively + isPreviewLoadable = true; + } _checkForPreview(); } } @@ -70,21 +79,13 @@ class _VideoWidgetState extends State { } Future _checkForPreview() async { - isPreviewLoadable = FileDataService.instance.previewIds - ?.containsKey(widget.file.uploadedFileID) ?? - false; - if (!isPreviewLoadable && !widget.file.isOwner) { - _logger.info( - "File is not owner, checking if preview is available", - ); - // temporarily mark it loadable, check if shared file is previewable - isPreviewLoadable = true; - isPreviewLoadable = await PreviewVideoStore.instance - .isSharedFilePreviewAvilable(widget.file); - if (!mounted) return; + if (!widget.file.isOwner && flagService.internalUser) { + final bool isStreambale = await PreviewVideoStore.instance + .isSharedFileStreamble(widget.file); + if (!isStreambale && mounted) { + isPreviewLoadable = false; setState(() {}); } - if (!isPreviewLoadable) { return; }