浏览代码

Refactor code for recursively fetching diff

Vishnu Mohandas 5 年之前
父节点
当前提交
bd049d00dd
共有 1 个文件被更改,包括 20 次插入23 次删除
  1. 20 23
      lib/photo_sync_manager.dart

+ 20 - 23
lib/photo_sync_manager.dart

@@ -73,21 +73,27 @@ class PhotoSyncManager {
     }
     if (photos.isEmpty) {
       _isSyncInProgress = false;
-      _syncPhotosWithServer().then((_) {
-        _deletePhotosOnServer();
-      });
+      _syncWithRemote(prefs);
     } else {
       photos.sort((first, second) =>
           first.createTimestamp.compareTo(second.createTimestamp));
       _updateDatabase(photos, prefs, lastDBUpdateTimestamp).then((_) {
         _isSyncInProgress = false;
-        _syncPhotosWithServer().then((_) {
-          _deletePhotosOnServer();
-        });
+        _syncWithRemote(prefs);
       });
     }
   }
 
+  Future<void> _syncWithRemote(SharedPreferences prefs) {
+    // TODO:  Fix race conditions triggered due to concurrent syncs.
+    //        Add device_id/last_sync_timestamp to the upload request?
+    return _downloadDiff(prefs).then((_) {
+      _uploadDiff(prefs).then((_) {
+        _deletePhotosOnServer();
+      });
+    });
+  }
+
   Future<bool> _updateDatabase(final List<Photo> photos,
       SharedPreferences prefs, int lastDBUpdateTimestamp) async {
     var photosToBeAdded = List<Photo>();
@@ -100,25 +106,16 @@ class PhotoSyncManager {
         photosToBeAdded, prefs, DateTime.now().microsecondsSinceEpoch);
   }
 
-  _syncPhotosWithServer() async {
-    SharedPreferences prefs = await SharedPreferences.getInstance();
-
-    var shouldFetchDiff = true;
-    while (shouldFetchDiff) {
-      int lastSyncTimestamp = _getLastSyncTimestamp(prefs);
-      var diff = await _getDiff(lastSyncTimestamp, _diffLimit);
-      if (diff != null && diff.isNotEmpty) {
-        await _storeDiff(diff, prefs);
-        PhotoRepository.instance.reloadPhotos();
-      }
-      if (diff == null || diff.length < _diffLimit) {
-        shouldFetchDiff = false;
+  Future<void> _downloadDiff(SharedPreferences prefs) async {
+    int lastSyncTimestamp = _getLastSyncTimestamp(prefs);
+    var diff = await _getDiff(lastSyncTimestamp, _diffLimit);
+    if (diff != null && diff.isNotEmpty) {
+      await _storeDiff(diff, prefs);
+      PhotoRepository.instance.reloadPhotos();
+      if (diff.length == _diffLimit) {
+        return await _downloadDiff(prefs);
       }
     }
-    _uploadDiff(prefs);
-
-    // TODO:  Fix race conditions triggered due to concurrent syncs.
-    //        Add device_id/last_sync_timestamp to the upload request?
   }
 
   int _getLastSyncTimestamp(SharedPreferences prefs) {