|
@@ -30,6 +30,7 @@ class RemoteSyncService {
|
|
|
final _diffFetcher = DiffFetcher();
|
|
|
int _completedUploads = 0;
|
|
|
SharedPreferences _prefs;
|
|
|
+ Completer<void> _existingSync;
|
|
|
|
|
|
static const kHasSyncedArchiveKey = "has_synced_archive";
|
|
|
|
|
@@ -54,6 +55,11 @@ class RemoteSyncService {
|
|
|
_logger.info("Skipping remote sync since account is not configured");
|
|
|
return;
|
|
|
}
|
|
|
+ if (_existingSync != null) {
|
|
|
+ _logger.info("Remote sync already in progress, skipping");
|
|
|
+ return _existingSync.future;
|
|
|
+ }
|
|
|
+ _existingSync = Completer<void>();
|
|
|
|
|
|
bool isFirstSync = !_collectionsService.hasSyncedCollections();
|
|
|
await _collectionsService.sync();
|
|
@@ -75,6 +81,8 @@ class RemoteSyncService {
|
|
|
.syncTrash()
|
|
|
.onError((e, s) => _logger.severe('trash sync failed', e, s));
|
|
|
bool hasUploadedFiles = await _uploadDiff();
|
|
|
+ _existingSync.complete();
|
|
|
+ _existingSync = null;
|
|
|
if (hasUploadedFiles) {
|
|
|
sync(silently: true);
|
|
|
}
|
|
@@ -113,9 +121,9 @@ class RemoteSyncService {
|
|
|
(await FilesDB.instance.getFilesFromIDs(fileIDs)).values.toList();
|
|
|
await FilesDB.instance.deleteFilesFromCollection(collectionID, fileIDs);
|
|
|
Bus.instance.fire(CollectionUpdatedEvent(collectionID, deletedFiles,
|
|
|
- type: EventType.deleted));
|
|
|
- Bus.instance
|
|
|
- .fire(LocalPhotosUpdatedEvent(deletedFiles, type: EventType.deleted));
|
|
|
+ type: EventType.deletedFromRemote));
|
|
|
+ Bus.instance.fire(LocalPhotosUpdatedEvent(deletedFiles,
|
|
|
+ type: EventType.deletedFromRemote));
|
|
|
}
|
|
|
if (diff.updatedFiles.isNotEmpty) {
|
|
|
await _storeDiff(diff.updatedFiles, collectionID);
|
|
@@ -138,23 +146,6 @@ class RemoteSyncService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- bool _shouldIgnoreFileUpload(
|
|
|
- File file, {
|
|
|
- Map<String, Set<String>> ignoredFilesMap,
|
|
|
- Set<String> ignoredLocalIDs,
|
|
|
- }) {
|
|
|
- if (file.localID == null || file.localID.isEmpty) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- if (Platform.isIOS) {
|
|
|
- return ignoredLocalIDs.contains(file.localID);
|
|
|
- }
|
|
|
- // For android, check if there's any ignored file with same device folder
|
|
|
- // and title.
|
|
|
- return ignoredFilesMap.containsKey(file.deviceFolder) &&
|
|
|
- ignoredFilesMap[file.deviceFolder].contains(file.title);
|
|
|
- }
|
|
|
-
|
|
|
Future<bool> _uploadDiff() async {
|
|
|
final foldersToBackUp = Configuration.instance.getPathsToBackUp();
|
|
|
List<File> filesToBeUploaded;
|