Browse Source

[Part-4] Mark all folders for backup when limited permission is granted

Neeraj Gupta 2 years ago
parent
commit
d61d456217

+ 3 - 2
lib/db/files_db.dart

@@ -625,8 +625,9 @@ class FilesDB {
     return _deduplicatedAndFilterIgnoredFiles(files, ignoredCollectionIDs);
   }
 
-  // Files which user added to a collection manually but they are not uploaded yet.
-  Future<List<File>> getPendingManualUploads() async {
+  // Files which user added to a collection manually but they are not
+  // uploaded yet or files belonging to a collection which is marked for backup
+  Future<List<File>> getFilesPendingForUpload() async {
     final db = await instance.database;
     final results = await db.query(
       filesTable,

+ 5 - 0
lib/services/local_sync_service.dart

@@ -281,6 +281,11 @@ class LocalSyncService {
   Future<void> onPermissionGranted(PermissionState state) async {
     await _prefs.setBool(kHasGrantedPermissionsKey, true);
     await _prefs.setString(kPermissionStateKey, state.toString());
+    if (state == PermissionState.limited) {
+      // when limited permission is granted, by default mark all folders for
+      // backup
+      await Configuration.instance.setSelectAllFoldersForBackup(true);
+    }
     _registerChangeCallback();
   }
 

+ 1 - 12
lib/services/remote_sync_service.dart

@@ -26,7 +26,6 @@ import 'package:photos/services/app_lifecycle_service.dart';
 import 'package:photos/services/collections_service.dart';
 import 'package:photos/services/ignored_files_service.dart';
 import 'package:photos/services/local_file_update_service.dart';
-import 'package:photos/services/local_sync_service.dart';
 import 'package:photos/services/sync_service.dart';
 import 'package:photos/services/trash_sync_service.dart';
 import 'package:photos/utils/diff_fetcher.dart';
@@ -103,10 +102,6 @@ class RemoteSyncService {
           .onError((e, s) => _logger.severe('trash sync failed', e, s));
       await _syncDeviceCollectionFilesForUpload();
       final filesToBeUploaded = await _getFilesToBeUploaded();
-      if (kDebugMode) {
-        debugPrint("Skip upload for testing");
-        // filesToBeUploaded.clear();
-      }
       final hasUploadedFiles = await _uploadFiles(filesToBeUploaded);
       if (hasUploadedFiles) {
         await _pullDiff();
@@ -393,13 +388,7 @@ class RemoteSyncService {
   Future<List<File>> _getFilesToBeUploaded() async {
     final deviceCollections = await FilesDB.instance.getDeviceCollections();
     deviceCollections.removeWhere((element) => !element.shouldBackup);
-    List<File> filesToBeUploaded;
-    if (LocalSyncService.instance.hasGrantedLimitedPermissions() &&
-        deviceCollections.isEmpty) {
-      filesToBeUploaded = await _db.getUnUploadedLocalFiles();
-    } else {
-      filesToBeUploaded = await _db.getPendingManualUploads();
-    }
+    final List<File> filesToBeUploaded = await _db.getFilesPendingForUpload();
     if (!Configuration.instance.shouldBackupVideos() || _shouldThrottleSync()) {
       filesToBeUploaded
           .removeWhere((element) => element.fileType == FileType.video);

+ 3 - 1
lib/ui/home_widget.dart

@@ -393,10 +393,12 @@ class _HomeWidgetState extends State<HomeWidget> {
     final gallery = Gallery(
       asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) async {
         final ownerID = Configuration.instance.getUserID();
+        final hasSelectedAllForBackup =
+            Configuration.instance.hasSelectedAllFoldersForBackup();
         final archivedCollectionIds =
             CollectionsService.instance.getArchivedCollections();
         FileLoadResult result;
-        if (LocalSyncService.instance.hasGrantedLimitedPermissions()) {
+        if (hasSelectedAllForBackup) {
           result = await FilesDB.instance.getAllLocalAndUploadedFiles(
             creationStartTime,
             creationEndTime,