Jelajahi Sumber

refactor code for ignoring files for upload

Neeraj Gupta 3 tahun lalu
induk
melakukan
f78d248f90

+ 18 - 3
lib/services/ignored_files_service.dart

@@ -3,6 +3,7 @@ import 'dart:io';
 
 import 'package:logging/logging.dart';
 import 'package:photos/db/ignored_files_db.dart';
+import 'package:photos/models/file.dart';
 import 'package:photos/models/ignored_file.dart';
 
 class IgnoredFilesService {
@@ -28,19 +29,33 @@ class IgnoredFilesService {
     return _db.insertMultiple(ignoredFiles);
   }
 
+  // shouldSkipUpload takes IDs to ignore and file for which it will return
+  // whether either true or false. This helper method takes ignoredIDs as input
+  // to avoid making it async in nature.
+  bool shouldSkipUpload(Set<String> ignoredIDs, File file) {
+    final id = _getIgnoreID(file.localID, file.deviceFolder, file.title);
+    if (id != null && id.isNotEmpty) {
+      return ignoredIDs.contains(id);
+    }
+    return false;
+  }
+
   Future<Set<String>> _loadExistingIDs() async {
     final result = await _db.getAll();
     return result.map((e) => _iDForIgnoredFile(e)).toSet();
   }
 
   String _iDForIgnoredFile(IgnoredFile ignoredFile) {
-    return _geIgnoreID(
+    return _getIgnoreID(
         ignoredFile.localID, ignoredFile.deviceFolder, ignoredFile.title);
   }
 
   // _computeIgnoreID will return null if don't have sufficient information
-  // to ignore the file based on the platform
-  String _geIgnoreID(String localID, String deviceFolder, String title) {
+  // to ignore the file based on the platform.
+  // For Android: It returns deviceFolder-title as ID for Android.
+  // For iOS, it returns localID as localID is uuid and the title or deviceFolder (aka
+  // album name) can be missing due to various reasons.
+  String _getIgnoreID(String localID, String deviceFolder, String title) {
     // file was not uploaded from mobile device
     if (localID == null || localID.isEmpty) {
       return null;

+ 4 - 14
lib/services/remote_sync_service.dart

@@ -7,7 +7,6 @@ import 'package:photos/core/configuration.dart';
 import 'package:photos/core/errors.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/db/files_db.dart';
-import 'package:photos/db/ignored_files_db.dart';
 import 'package:photos/events/collection_updated_event.dart';
 import 'package:photos/events/files_updated_event.dart';
 import 'package:photos/events/local_photos_updated_event.dart';
@@ -15,6 +14,7 @@ import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/file_type.dart';
 import 'package:photos/services/collections_service.dart';
+import 'package:photos/services/ignored_files_service.dart';
 import 'package:photos/services/local_sync_service.dart';
 import 'package:photos/services/trash_sync_service.dart';
 import 'package:photos/utils/diff_fetcher.dart';
@@ -132,9 +132,6 @@ class RemoteSyncService {
     }
   }
 
-  // This method checks for deviceFolder + title for Android.
-  // For iOS, we rely on localIDs as they are uuid as title or deviceFolder (aka
-  // album name) can be missing due to various reasons.
   bool _shouldIgnoreFileUpload(
     File file, {
     Map<String, Set<String>> ignoredFilesMap,
@@ -168,16 +165,9 @@ class RemoteSyncService {
     }
     if (filesToBeUploaded.isNotEmpty) {
       final int prevCount = filesToBeUploaded.length;
-      if (Platform.isAndroid) {
-        final ignoredFilesMap = await IgnoredFilesDB.instance
-            .getFilenamesForDeviceFolders(foldersToBackUp);
-        filesToBeUploaded.removeWhere((file) =>
-            _shouldIgnoreFileUpload(file, ignoredFilesMap: ignoredFilesMap));
-      } else {
-        final ignoredLocalIDs = await IgnoredFilesDB.instance.getAllLocalIDs();
-        filesToBeUploaded.removeWhere((file) =>
-            _shouldIgnoreFileUpload(file, ignoredLocalIDs: ignoredLocalIDs));
-      }
+      final ignoredIDs = await IgnoredFilesService.instance.ignoredIDs;
+      filesToBeUploaded.removeWhere((file) =>
+          IgnoredFilesService.instance.shouldSkipUpload(ignoredIDs, file));
       if (prevCount != filesToBeUploaded.length) {
         _logger.info((prevCount - filesToBeUploaded.length).toString() +
             " files were ignored for upload");