Browse Source

Fix collection updates on the UI

Vishnu Mohandas 4 years ago
parent
commit
03e7b385e2

+ 1 - 1
lib/events/collection_updated_event.dart

@@ -3,5 +3,5 @@ import 'package:photos/events/event.dart';
 class CollectionUpdatedEvent extends Event {
   final int collectionID;
 
-  CollectionUpdatedEvent(this.collectionID);
+  CollectionUpdatedEvent({this.collectionID});
 }

+ 12 - 5
lib/services/collections_service.dart

@@ -14,6 +14,7 @@ import 'package:photos/events/collection_updated_event.dart';
 import 'package:photos/models/collection.dart';
 import 'package:photos/models/collection_file_item.dart';
 import 'package:photos/models/file.dart';
+import 'package:photos/services/sync_service.dart';
 import 'package:photos/utils/crypto_util.dart';
 import 'package:photos/utils/file_util.dart';
 
@@ -44,12 +45,16 @@ class CollectionsService {
   Future<void> sync() async {
     final lastCollectionCreationTime =
         await _db.getLastCollectionCreationTime();
-    var collections = await _fetchCollections(lastCollectionCreationTime ?? 0);
-    await _db.insert(collections);
-    collections = await _db.getAllCollections();
+    final fetchedCollections =
+        await _fetchCollections(lastCollectionCreationTime ?? 0);
+    await _db.insert(fetchedCollections);
+    final collections = await _db.getAllCollections();
     for (final collection in collections) {
       _cacheCollectionAttributes(collection);
     }
+    if (fetchedCollections.isNotEmpty) {
+      Bus.instance.fire(CollectionUpdatedEvent());
+    }
   }
 
   Collection getCollectionForPath(String path) {
@@ -208,7 +213,8 @@ class CollectionsService {
     )
         .then((value) async {
       await FilesDB.instance.insertMultiple(files);
-      Bus.instance.fire(CollectionUpdatedEvent(collectionID));
+      Bus.instance.fire(CollectionUpdatedEvent(collectionID: collectionID));
+      SyncService.instance.syncWithRemote();
     });
   }
 
@@ -229,7 +235,8 @@ class CollectionsService {
     );
     await FilesDB.instance
         .removeFromCollection(collectionID, params["fileIDs"]);
-    Bus.instance.fire(CollectionUpdatedEvent(collectionID));
+    Bus.instance.fire(CollectionUpdatedEvent(collectionID: collectionID));
+    SyncService.instance.syncWithRemote();
   }
 
   Future<Collection> createAndCacheCollection(Collection collection) async {

+ 2 - 2
lib/services/sync_service.dart

@@ -110,7 +110,7 @@ class SyncService {
 
     await _insertFilesToDB(files, syncStartTime);
     await FileRepository.instance.reloadFiles();
-    await _syncWithRemote();
+    await syncWithRemote();
   }
 
   Future<List<AssetPathEntity>> _getGalleryList(
@@ -154,7 +154,7 @@ class SyncService {
     }
   }
 
-  Future<void> _syncWithRemote() async {
+  Future<void> syncWithRemote() async {
     if (!Configuration.instance.hasConfiguredAccount()) {
       return Future.error("Account not configured yet");
     }

+ 0 - 3
lib/ui/collections_gallery_widget.dart

@@ -10,12 +10,10 @@ import 'package:photos/db/files_db.dart';
 import 'package:photos/events/collection_updated_event.dart';
 import 'package:photos/events/local_photos_updated_event.dart';
 import 'package:photos/events/tab_changed_event.dart';
-import 'package:photos/models/collection.dart';
 import 'package:photos/models/collection_items.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/repositories/file_repository.dart';
 import 'package:photos/services/collections_service.dart';
-import 'package:photos/services/favorites_service.dart';
 import 'package:photos/models/device_folder.dart';
 import 'package:photos/ui/collection_page.dart';
 import 'package:photos/ui/device_folder_page.dart';
@@ -150,7 +148,6 @@ class _CollectionsGalleryWidgetState extends State<CollectionsGalleryWidget> {
       return second.lastUpdatedFile.updationTime
           .compareTo(first.lastUpdatedFile.updationTime);
     });
-
     return CollectionItems(folders, collectionsWithThumbnail);
   }