Browse Source

Show import progress on loading screen

Neeraj Gupta 2 years ago
parent
commit
f2244f8ae2

+ 8 - 0
lib/events/local_import_progress.dart

@@ -0,0 +1,8 @@
+import 'package:photos/events/event.dart';
+
+class LocalImportProgressEvent extends Event {
+  final String folderName;
+  final int count;
+
+  LocalImportProgressEvent(this.folderName, this.count);
+}

+ 6 - 0
lib/services/local/local_sync_util.dart

@@ -5,6 +5,8 @@ import 'package:computer/computer.dart';
 import 'package:flutter/foundation.dart';
 import 'package:logging/logging.dart';
 import 'package:photo_manager/photo_manager.dart';
+import 'package:photos/core/event_bus.dart';
+import 'package:photos/events/local_import_progress.dart';
 import 'package:photos/models/file.dart';
 import 'package:tuple/tuple.dart';
 
@@ -256,6 +258,10 @@ Future<List<AssetEntity>> _getAllAssetLists(AssetPathEntity pathEntity) async {
       page: currentPage,
       size: assetFetchPageSize,
     );
+    Bus.instance.fire(
+      LocalImportProgressEvent(pathEntity.name,
+          currentPage * assetFetchPageSize + currentPageResult.length),
+    );
     result.addAll(currentPageResult);
     currentPage = currentPage + 1;
   } while (currentPageResult.length >= assetFetchPageSize);

+ 12 - 1
lib/ui/loading_photos_widget.dart

@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
 import 'package:lottie/lottie.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/ente_theme_data.dart';
+import 'package:photos/events/local_import_progress.dart';
 import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/services/local_sync_service.dart';
 import 'package:photos/ui/backup_folder_selection_page.dart';
@@ -21,7 +22,9 @@ class LoadingPhotosWidget extends StatefulWidget {
 
 class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
   StreamSubscription<SyncStatusUpdate> _firstImportEvent;
+  StreamSubscription<LocalImportProgressEvent> _imprortProgressEvent;
   int _currentPage = 0;
+  String _loadingMessage = "Loading your photos...";
   final PageController _pageController = PageController(
     initialPage: 0,
   );
@@ -56,6 +59,13 @@ class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
         }
       }
     });
+    _imprortProgressEvent =
+        Bus.instance.on<LocalImportProgressEvent>().listen((event) {
+      _loadingMessage = 'Processing ${event.folderName}';
+      if (mounted) {
+        setState(() {});
+      }
+    });
     Timer.periodic(const Duration(seconds: 5), (Timer timer) {
       if (!mounted) {
         return;
@@ -77,6 +87,7 @@ class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
   @override
   void dispose() {
     _firstImportEvent.cancel();
+    _imprortProgressEvent.cancel();
     super.dispose();
   }
 
@@ -118,7 +129,7 @@ class _LoadingPhotosWidgetState extends State<LoadingPhotosWidget> {
                   ],
                 ),
                 Text(
-                  "Loading your photos...",
+                  _loadingMessage,
                   style: TextStyle(
                     color: Theme.of(context).colorScheme.subTextColor,
                   ),