Explorar el Código

Merge pull request #121 from ente-io/trash_empty_event

Vishnu Mohandas hace 3 años
padre
commit
03aa7ee6e4

+ 8 - 3
lib/db/trash_db.dart

@@ -98,10 +98,15 @@ class TrashDB {
     await db.delete(tableName);
   }
 
-  Future<bool> isEmpty() async {
+  // getRecentlyTrashedFile returns the file which was trashed recently
+  Future<TrashFile> getRecentlyTrashedFile() async {
     final db = await instance.database;
-    var rows = await db.query(tableName, limit: 1);
-    return rows == null || rows.isEmpty;
+    var rows = await db.query(tableName,
+        orderBy: '$columnTrashDeleteBy DESC', limit: 1);
+    if (rows == null || rows.isEmpty) {
+      return null;
+    }
+    return _getTrashFromRow(rows[0]);
   }
 
   Future<void> insertMultiple(List<TrashFile> trashFiles) async {

+ 5 - 0
lib/events/force_reload_trash_page_event.dart

@@ -0,0 +1,5 @@
+import 'package:photos/events/event.dart';
+
+class ForceReloadTrashPageEvent extends Event {
+  ForceReloadTrashPageEvent();
+}

+ 3 - 0
lib/services/trash_sync_service.dart

@@ -1,9 +1,11 @@
 import 'package:dio/dio.dart';
 import 'package:logging/logging.dart';
 import 'package:photos/core/configuration.dart';
+import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/network.dart';
 import 'package:photos/db/ignored_files_db.dart';
 import 'package:photos/db/trash_db.dart';
+import 'package:photos/events/force_reload_trash_page_event.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/ignored_file.dart';
 import 'package:photos/models/trash_file.dart';
@@ -144,6 +146,7 @@ class TrashSyncService {
         data: params,
       );
       await _trashDB.clearTable();
+      Bus.instance.fire(ForceReloadTrashPageEvent());
     } catch (e, s) {
       _logger.severe("failed to empty trash", e, s);
       rethrow;

+ 2 - 0
lib/ui/file_widget.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
+import 'package:logging/logging.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/file_type.dart';
 import 'package:photos/ui/video_widget.dart';
@@ -48,6 +49,7 @@ class FileWidget extends StatelessWidget {
         playbackCallback: playbackCallback,
       );
     } else {
+      Logger('FileWidget').severe('unsupported file type ${file.fileType}');
       return Icon(Icons.error);
     }
   }

+ 6 - 12
lib/ui/trash_page.dart

@@ -3,8 +3,9 @@ import 'package:flutter/material.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/db/trash_db.dart';
 import 'package:photos/events/files_updated_event.dart';
-import 'package:photos/models/file_load_result.dart';
+import 'package:photos/events/force_reload_trash_page_event.dart';
 import 'package:photos/models/selected_files.dart';
+import 'package:photos/models/trash_file.dart';
 
 import 'gallery.dart';
 import 'gallery_app_bar_widget.dart';
@@ -36,13 +37,7 @@ class TrashPage extends StatelessWidget {
                 null,
           ),
       forceReloadEvents: [
-        Bus.instance.on<FilesUpdatedEvent>().where(
-              (event) =>
-                  event.updatedFiles.firstWhere(
-                      (element) => element.uploadedFileID != null,
-                      orElse: () => null) !=
-                  null,
-            ),
+        Bus.instance.on<ForceReloadTrashPageEvent>(),
       ],
       tagPrefix: tagPrefix,
       selectedFiles: _selectedFiles,
@@ -64,11 +59,10 @@ class TrashPage extends StatelessWidget {
   }
 
   Widget _headerWidget() {
-    return FutureBuilder<FileLoadResult>(
-      future: TrashDB.instance
-          .getTrashedFiles(0, DateTime.now().microsecondsSinceEpoch),
+    return FutureBuilder<TrashFile>(
+      future: TrashDB.instance.getRecentlyTrashedFile(),
       builder: (context, snapshot) {
-        if (snapshot.hasData && snapshot.data.files.isNotEmpty) {
+        if (snapshot.hasData) {
           return Padding(
             padding: EdgeInsets.all(16),
             child: Text(

+ 0 - 2
lib/utils/delete_file_util.dart

@@ -239,8 +239,6 @@ Future<bool> emptyTrash(BuildContext context) async {
     await TrashSyncService.instance.emptyTrash();
     showToast("trash emptied");
     await dialog.hide();
-    Bus.instance
-        .fire(FilesUpdatedEvent((List<File>.empty()), type: EventType.deleted));
     return true;
   } catch (e, s) {
     _logger.info("failed empty trash", e, s);