|
@@ -19,10 +19,15 @@ import 'package:photos/utils/share_util.dart';
|
|
|
import 'package:photos/utils/toast_util.dart';
|
|
|
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
|
|
|
|
|
+enum CollectionActionType { addFiles, moveFiles }
|
|
|
+
|
|
|
class CreateCollectionPage extends StatefulWidget {
|
|
|
final SelectedFiles selectedFiles;
|
|
|
final List<SharedMediaFile> sharedFiles;
|
|
|
- const CreateCollectionPage(this.selectedFiles, this.sharedFiles, {Key key})
|
|
|
+ final CollectionActionType actionType;
|
|
|
+
|
|
|
+ const CreateCollectionPage(this.selectedFiles, this.sharedFiles,
|
|
|
+ {Key key, this.actionType = CollectionActionType.addFiles})
|
|
|
: super(key: key);
|
|
|
|
|
|
@override
|
|
@@ -37,7 +42,9 @@ class _CreateCollectionPageState extends State<CreateCollectionPage> {
|
|
|
Widget build(BuildContext context) {
|
|
|
return Scaffold(
|
|
|
appBar: AppBar(
|
|
|
- title: Text("add files"),
|
|
|
+ title: Text(widget.actionType == CollectionActionType.addFiles
|
|
|
+ ? "add files"
|
|
|
+ : "move files"),
|
|
|
),
|
|
|
body: _getBody(context),
|
|
|
);
|
|
@@ -140,8 +147,10 @@ class _CreateCollectionPageState extends State<CreateCollectionPage> {
|
|
|
],
|
|
|
),
|
|
|
onTap: () async {
|
|
|
- if (await _addToCollection(item.collection.id)) {
|
|
|
- showToast("added successfully to '" + item.collection.name);
|
|
|
+ if (await _addOrMoveToCollection(item.collection.id)) {
|
|
|
+ showToast(widget.actionType == CollectionActionType.addFiles
|
|
|
+ ? "added successfully to " + item.collection.name
|
|
|
+ : "moved successfully to " + item.collection.name);
|
|
|
_navigateToCollection(item.collection);
|
|
|
}
|
|
|
},
|
|
@@ -191,7 +200,7 @@ class _CreateCollectionPageState extends State<CreateCollectionPage> {
|
|
|
Navigator.of(context, rootNavigator: true).pop('dialog');
|
|
|
final collection = await _createAlbum(_albumName);
|
|
|
if (collection != null) {
|
|
|
- if (await _addToCollection(collection.id)) {
|
|
|
+ if (await _addOrMoveToCollection(collection.id)) {
|
|
|
showToast("album '" + _albumName + "' created.");
|
|
|
_navigateToCollection(collection);
|
|
|
}
|
|
@@ -220,6 +229,36 @@ class _CreateCollectionPageState extends State<CreateCollectionPage> {
|
|
|
)));
|
|
|
}
|
|
|
|
|
|
+ Future<bool> _addOrMoveToCollection(int collectionID) async {
|
|
|
+ return widget.actionType == CollectionActionType.addFiles
|
|
|
+ ? _addToCollection(collectionID)
|
|
|
+ : _moveFilesToCollection(collectionID);
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<bool> _moveFilesToCollection(int toCollectionID) async {
|
|
|
+ final dialog = createProgressDialog(context, "moving files to album...");
|
|
|
+ await dialog.show();
|
|
|
+ try {
|
|
|
+ int fromCollectionID = widget.selectedFiles.files?.first?.collectionID;
|
|
|
+ await CollectionsService.instance.move(
|
|
|
+ toCollectionID,
|
|
|
+ fromCollectionID,
|
|
|
+ widget.selectedFiles.files?.toList());
|
|
|
+ RemoteSyncService.instance.sync(silently: true);
|
|
|
+ widget.selectedFiles?.clearAll();
|
|
|
+ await dialog.hide();
|
|
|
+ return true;
|
|
|
+ } on AssertionError catch (e, s) {
|
|
|
+ await dialog.hide();
|
|
|
+ showErrorDialog(context, "oops", e.message);
|
|
|
+ return false;
|
|
|
+ } catch (e, s) {
|
|
|
+ _logger.severe("Could not move to album", e, s);
|
|
|
+ showGenericErrorDialog(context);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
Future<bool> _addToCollection(int collectionID) async {
|
|
|
final dialog = createProgressDialog(context, "uploading files to album...");
|
|
|
await dialog.show();
|