feat: delete actions (#20034)

* chore: show delete local

* pr feedback

* restore and perm delete action
This commit is contained in:
Alex
2025-07-22 11:36:00 -05:00
committed by GitHub
parent 2efca67217
commit aa344a3989
18 changed files with 285 additions and 18 deletions
@@ -206,6 +206,7 @@ class ActionNotifier extends Notifier<void> {
Future<ActionResult> trash(ActionSource source) async {
final ids = _getOwnedRemoteIdsForSource(source);
try {
await _service.trash(ids);
return ActionResult(count: ids.length, success: true);
@@ -219,10 +220,26 @@ class ActionNotifier extends Notifier<void> {
}
}
Future<ActionResult> delete(ActionSource source) async {
Future<ActionResult> restoreTrash(ActionSource source) async {
final ids = _getOwnedRemoteIdsForSource(source);
try {
await _service.delete(ids);
await _service.restoreTrash(ids);
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to restore trash assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
}
}
Future<ActionResult> deleteRemoteAndLocal(ActionSource source) async {
final ids = _getOwnedRemoteIdsForSource(source);
final localIds = _getLocalIdsForSource(source);
try {
await _service.deleteRemoteAndLocal(ids, localIds);
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to delete assets', error, stack);
@@ -23,15 +23,22 @@ class MultiSelectState {
});
bool get isEnabled => selectedAssets.isNotEmpty;
/// Cloud only
bool get hasRemote => selectedAssets.any(
(asset) =>
asset.storage == AssetState.remote ||
asset.storage == AssetState.merged,
);
bool get hasLocal => selectedAssets.any(
(asset) => asset.storage == AssetState.local,
);
bool get hasMerged => selectedAssets.any(
(asset) => asset.storage == AssetState.merged,
);
MultiSelectState copyWith({
Set<BaseAsset>? selectedAssets,
Set<BaseAsset>? lockedSelectionAssets,