瀏覽代碼

Add ability to unshare a collection

Vishnu Mohandas 4 年之前
父節點
當前提交
4117ae0a3d
共有 2 個文件被更改,包括 32 次插入3 次删除
  1. 12 0
      lib/services/collections_service.dart
  2. 20 3
      lib/ui/share_collection_widget.dart

+ 12 - 0
lib/services/collections_service.dart

@@ -111,6 +111,18 @@ class CollectionsService {
     );
   }
 
+  Future<void> unshare(int collectionID, String email) {
+    return Dio().post(
+      Configuration.instance.getHttpEndpoint() + "/collections/unshare",
+      data: {
+        "collectionID": collectionID,
+        "email": email,
+      },
+      options:
+          Options(headers: {"X-Auth-Token": Configuration.instance.getToken()}),
+    );
+  }
+
   Uint8List getCollectionKey(int collectionID) {
     if (!_cachedKeys.containsKey(collectionID)) {
       final collection = _collectionIDToCollections[collectionID];

+ 20 - 3
lib/ui/share_collection_widget.dart

@@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
 import 'package:flutter_typeahead/flutter_typeahead.dart';
+import 'package:logging/logging.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/db/public_keys_db.dart';
 import 'package:photos/models/collection.dart';
@@ -40,7 +41,7 @@ class _SharingDialogState extends State<SharingDialog> {
       children.add(Text("Click the + button to share this folder."));
     } else {
       for (final email in _sharees) {
-        children.add(EmailItemWidget(email));
+        children.add(EmailItemWidget(widget.collection.id, email));
       }
     }
     if (_showEntryField) {
@@ -195,8 +196,11 @@ class _SharingDialogState extends State<SharingDialog> {
 }
 
 class EmailItemWidget extends StatelessWidget {
+  final int collectionID;
   final String email;
+
   const EmailItemWidget(
+    this.collectionID,
     this.email, {
     Key key,
   }) : super(key: key);
@@ -214,9 +218,22 @@ class EmailItemWidget extends StatelessWidget {
                 style: TextStyle(fontSize: 16),
               ),
             ),
-            Icon(
-              Icons.delete_forever,
+            IconButton(
+              icon: Icon(Icons.delete_forever),
               color: Colors.redAccent,
+              onPressed: () async {
+                final dialog = createProgressDialog(context, "Please wait...");
+                await dialog.show();
+                try {
+                  await CollectionsService.instance
+                      .unshare(collectionID, email);
+                  await dialog.hide();
+                } catch (e, s) {
+                  Logger("EmailItemWidget").severe(e, s);
+                  await dialog.hide();
+                  showGenericErrorDialog(context);
+                }
+              },
             ),
           ],
         ));