From e06cedb62683dbc035d67a113dff152b1c040abf Mon Sep 17 00:00:00 2001 From: Yaros Date: Sun, 1 Mar 2026 06:46:45 +0100 Subject: [PATCH] fix: hide download action for local/merged assets (#26461) * fix: hide download action for local/merged assets * chore: use onlyRemote * chore: rename hasLocal to onlyLocal --- .../bottom_sheet/archive_bottom_sheet.widget.dart | 2 +- .../bottom_sheet/favorite_bottom_sheet.widget.dart | 2 +- .../bottom_sheet/general_bottom_sheet.widget.dart | 9 +++++---- mobile/lib/providers/timeline/multiselect.provider.dart | 6 ++++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/mobile/lib/presentation/widgets/bottom_sheet/archive_bottom_sheet.widget.dart b/mobile/lib/presentation/widgets/bottom_sheet/archive_bottom_sheet.widget.dart index 9481ec12f5..cdff393a3f 100644 --- a/mobile/lib/presentation/widgets/bottom_sheet/archive_bottom_sheet.widget.dart +++ b/mobile/lib/presentation/widgets/bottom_sheet/archive_bottom_sheet.widget.dart @@ -36,7 +36,7 @@ class ArchiveBottomSheet extends ConsumerWidget { const ShareLinkActionButton(source: ActionSource.timeline), const UnArchiveActionButton(source: ActionSource.timeline), const FavoriteActionButton(source: ActionSource.timeline), - const DownloadActionButton(source: ActionSource.timeline), + if (multiselect.onlyRemote) const DownloadActionButton(source: ActionSource.timeline), isTrashEnable ? const TrashActionButton(source: ActionSource.timeline) : const DeletePermanentActionButton(source: ActionSource.timeline), diff --git a/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart b/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart index fb6034b869..1dee0f6456 100644 --- a/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart +++ b/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart @@ -75,7 +75,7 @@ class FavoriteBottomSheet extends ConsumerWidget { const ShareLinkActionButton(source: ActionSource.timeline), const UnFavoriteActionButton(source: ActionSource.timeline), const ArchiveActionButton(source: ActionSource.timeline), - const DownloadActionButton(source: ActionSource.timeline), + if (multiselect.onlyRemote) const DownloadActionButton(source: ActionSource.timeline), isTrashEnable ? const TrashActionButton(source: ActionSource.timeline) : const DeletePermanentActionButton(source: ActionSource.timeline), diff --git a/mobile/lib/presentation/widgets/bottom_sheet/general_bottom_sheet.widget.dart b/mobile/lib/presentation/widgets/bottom_sheet/general_bottom_sheet.widget.dart index fea3da88e5..8753a9c14f 100644 --- a/mobile/lib/presentation/widgets/bottom_sheet/general_bottom_sheet.widget.dart +++ b/mobile/lib/presentation/widgets/bottom_sheet/general_bottom_sheet.widget.dart @@ -108,7 +108,7 @@ class _GeneralBottomSheetState extends ConsumerState { const ShareActionButton(source: ActionSource.timeline), if (multiselect.hasRemote) ...[ const ShareLinkActionButton(source: ActionSource.timeline), - const DownloadActionButton(source: ActionSource.timeline), + if (multiselect.onlyRemote) const DownloadActionButton(source: ActionSource.timeline), isTrashEnable ? const TrashActionButton(source: ActionSource.timeline) : const DeletePermanentActionButton(source: ActionSource.timeline), @@ -119,10 +119,11 @@ class _GeneralBottomSheetState extends ConsumerState { const MoveToLockFolderActionButton(source: ActionSource.timeline), if (multiselect.selectedAssets.length > 1) const StackActionButton(source: ActionSource.timeline), if (multiselect.hasStacked) const UnStackActionButton(source: ActionSource.timeline), - if (multiselect.hasLocal || multiselect.hasMerged) const DeleteActionButton(source: ActionSource.timeline), + if (multiselect.onlyLocal || multiselect.hasMerged) const DeleteActionButton(source: ActionSource.timeline), ], - if (multiselect.hasLocal || multiselect.hasMerged) const DeleteLocalActionButton(source: ActionSource.timeline), - if (multiselect.hasLocal) const UploadActionButton(source: ActionSource.timeline), + if (multiselect.onlyLocal || multiselect.hasMerged) + const DeleteLocalActionButton(source: ActionSource.timeline), + if (multiselect.onlyLocal) const UploadActionButton(source: ActionSource.timeline), ], slivers: multiselect.hasRemote ? [ diff --git a/mobile/lib/providers/timeline/multiselect.provider.dart b/mobile/lib/providers/timeline/multiselect.provider.dart index 0b3f7e610b..6e375f3852 100644 --- a/mobile/lib/providers/timeline/multiselect.provider.dart +++ b/mobile/lib/providers/timeline/multiselect.provider.dart @@ -24,10 +24,12 @@ class MultiSelectState { bool get hasStacked => selectedAssets.any((asset) => asset is RemoteAsset && asset.stackId != null); - bool get hasLocal => selectedAssets.any((asset) => asset.storage == AssetState.local); - bool get hasMerged => selectedAssets.any((asset) => asset.storage == AssetState.merged); + bool get onlyLocal => selectedAssets.any((asset) => asset.storage == AssetState.local); + + bool get onlyRemote => selectedAssets.any((asset) => asset.storage == AssetState.remote); + MultiSelectState copyWith({ Set? selectedAssets, Set? lockedSelectionAssets,