import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/account.dart'; import 'package:nc_photos/app_localizations.dart'; import 'package:nc_photos/controller/files_controller.dart'; import 'package:nc_photos/entity/file_descriptor.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/navigation_manager.dart'; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/widget/trashbin_browser.dart'; import 'package:np_codegen/np_codegen.dart'; part 'remove_selection_handler.g.dart'; @npLog class RemoveSelectionHandler { const RemoveSelectionHandler({ required this.filesController, }); /// Remove [selectedFiles] and return the removed count Future call({ required Account account, required List selection, bool shouldCleanupAlbum = true, bool isRemoveOpened = false, bool isMoveToTrash = false, }) async { final String successText; final String Function(int) failureText; if (isRemoveOpened) { successText = L10n.global().deleteSuccessNotification; failureText = (_) => L10n.global().deleteFailureNotification; } else { successText = L10n.global().deleteSelectedSuccessNotification; failureText = (count) => L10n.global().deleteSelectedFailureNotification(count); } var failureCount = 0; await filesController.remove( selection, errorBuilder: (fileIds) { failureCount = fileIds.length; return RemoveFailureError(fileIds); }, ); final trashAction = isMoveToTrash ? SnackBarAction( label: L10n.global().albumTrashLabel, onPressed: () { NavigationManager().getNavigator()?.pushNamed( TrashbinBrowser.routeName, arguments: TrashbinBrowserArguments(account)); }, ) : null; if (failureCount == 0) { SnackBarManager().showSnackBar(SnackBar( content: Text(successText), duration: k.snackBarDurationNormal, action: trashAction, )); } else { SnackBarManager().showSnackBar(SnackBar( content: Text(failureText(failureCount)), duration: k.snackBarDurationNormal, action: trashAction, )); } return selection.length - failureCount; } final FilesController filesController; }