2022-12-15 10:02:46 +00:00
|
|
|
import 'package:flutter/cupertino.dart';
|
2023-04-05 07:50:02 +00:00
|
|
|
import "package:photos/generated/l10n.dart";
|
2022-12-15 10:02:46 +00:00
|
|
|
import 'package:photos/models/collection.dart';
|
|
|
|
import 'package:photos/models/file.dart';
|
|
|
|
import 'package:photos/models/selected_files.dart';
|
|
|
|
import 'package:photos/services/favorites_service.dart';
|
|
|
|
import 'package:photos/ui/actions/collection/collection_sharing_actions.dart';
|
|
|
|
import 'package:photos/ui/common/progress_dialog.dart';
|
2023-01-05 11:17:34 +00:00
|
|
|
import 'package:photos/ui/components/action_sheet_widget.dart';
|
2023-03-10 08:08:51 +00:00
|
|
|
import 'package:photos/ui/components/buttons/button_widget.dart';
|
2023-01-05 11:17:34 +00:00
|
|
|
import 'package:photos/ui/components/models/button_type.dart';
|
2022-12-15 10:02:46 +00:00
|
|
|
import 'package:photos/utils/dialog_util.dart';
|
|
|
|
import 'package:photos/utils/toast_util.dart';
|
|
|
|
|
|
|
|
extension CollectionFileActions on CollectionActions {
|
2023-01-05 11:17:34 +00:00
|
|
|
Future<void> showRemoveFromCollectionSheetV2(
|
|
|
|
BuildContext bContext,
|
|
|
|
Collection collection,
|
|
|
|
SelectedFiles selectedFiles,
|
2023-02-03 00:14:49 +00:00
|
|
|
bool removingOthersFile,
|
2023-01-05 11:17:34 +00:00
|
|
|
) async {
|
|
|
|
final actionResult = await showActionSheet(
|
|
|
|
context: bContext,
|
|
|
|
buttons: [
|
|
|
|
ButtonWidget(
|
2023-04-05 07:50:02 +00:00
|
|
|
labelText: S.of(bContext).remove,
|
2023-02-03 00:14:49 +00:00
|
|
|
buttonType:
|
|
|
|
removingOthersFile ? ButtonType.critical : ButtonType.neutral,
|
2023-01-05 11:17:34 +00:00
|
|
|
buttonSize: ButtonSize.large,
|
|
|
|
shouldStickToDarkTheme: true,
|
|
|
|
isInAlert: true,
|
|
|
|
onTap: () async {
|
2023-01-12 04:18:57 +00:00
|
|
|
try {
|
|
|
|
await moveFilesFromCurrentCollection(
|
|
|
|
bContext,
|
|
|
|
collection,
|
|
|
|
selectedFiles.files,
|
|
|
|
);
|
|
|
|
} catch (e) {
|
|
|
|
logger.severe("Failed to move files", e);
|
|
|
|
rethrow;
|
|
|
|
}
|
2023-01-05 11:17:34 +00:00
|
|
|
},
|
|
|
|
),
|
2023-04-05 07:50:02 +00:00
|
|
|
ButtonWidget(
|
|
|
|
labelText: S.of(bContext).cancel,
|
2023-01-05 11:17:34 +00:00
|
|
|
buttonType: ButtonType.secondary,
|
|
|
|
buttonSize: ButtonSize.large,
|
|
|
|
buttonAction: ButtonAction.second,
|
|
|
|
shouldStickToDarkTheme: true,
|
|
|
|
isInAlert: true,
|
|
|
|
),
|
|
|
|
],
|
2023-04-07 03:37:57 +00:00
|
|
|
title: removingOthersFile ? S.of(bContext).removeFromAlbumTitle : null,
|
2023-02-03 00:14:49 +00:00
|
|
|
body: removingOthersFile
|
2023-04-05 07:50:02 +00:00
|
|
|
? S.of(bContext).removeShareItemsWarning
|
|
|
|
: S.of(bContext).itemsWillBeRemovedFromAlbum,
|
2023-01-05 11:17:34 +00:00
|
|
|
actionSheetType: ActionSheetType.defaultActionSheet,
|
|
|
|
);
|
2023-02-09 13:18:01 +00:00
|
|
|
if (actionResult?.action != null &&
|
|
|
|
actionResult!.action == ButtonAction.error) {
|
2023-01-05 11:17:34 +00:00
|
|
|
showGenericErrorDialog(context: bContext);
|
|
|
|
} else {
|
|
|
|
selectedFiles.clearAll();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-15 10:02:46 +00:00
|
|
|
Future<bool> updateFavorites(
|
|
|
|
BuildContext context,
|
|
|
|
List<File> files,
|
|
|
|
bool markAsFavorite,
|
|
|
|
) async {
|
|
|
|
final ProgressDialog dialog = createProgressDialog(
|
|
|
|
context,
|
2023-04-05 07:50:02 +00:00
|
|
|
markAsFavorite
|
|
|
|
? S.of(context).addingToFavorites
|
|
|
|
: S.of(context).removingFromFavorites,
|
2022-12-15 10:02:46 +00:00
|
|
|
);
|
|
|
|
await dialog.show();
|
|
|
|
|
|
|
|
try {
|
2023-01-12 18:22:14 +00:00
|
|
|
await FavoritesService.instance
|
|
|
|
.updateFavorites(context, files, markAsFavorite);
|
2022-12-15 10:02:46 +00:00
|
|
|
return true;
|
|
|
|
} catch (e, s) {
|
|
|
|
logger.severe(e, s);
|
|
|
|
showShortToast(
|
|
|
|
context,
|
2023-04-05 07:50:02 +00:00
|
|
|
markAsFavorite
|
|
|
|
? S.of(context).sorryCouldNotAddToFavorites
|
|
|
|
: S.of(context).sorryCouldNotRemoveFromFavorites,
|
2022-12-15 10:02:46 +00:00
|
|
|
);
|
|
|
|
} finally {
|
|
|
|
await dialog.hide();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|