diff --git a/mobile/lib/services/local/local_import.dart b/mobile/lib/services/local/local_import.dart index fce75f8f20..271c5e0314 100644 --- a/mobile/lib/services/local/local_import.dart +++ b/mobile/lib/services/local/local_import.dart @@ -113,23 +113,25 @@ class LocalImportService { bool hasChanges = false; _fullSync = Completer(); try { - final TimeLogger tL = TimeLogger(context: "fullSync"); - final inAppAssetIds = await localDB.getAssetsIDs(); - final inAppPathToAssetIds = await localDB.pathToAssetIDs(); - _log.info("loaded inApp State $tL"); - final fullDiff = await _deviceAssetsService.fullDiffWithOnDevice( - inAppAssetIds, - inAppPathToAssetIds, - tL, - ); - if (fullDiff.isInOutOfSync) { - _log.info("fullSyncDiff: ${fullDiff.countLog()} ${tL.elapsed}"); - await _storeDiff(fullDiff: fullDiff); - } - _log.fine( - "${fullDiff.isInOutOfSync ? 'changed saved ${fullDiff.countLog()} $tL)' : 'no change'}, completeTime ${tL.elapsed}", - ); - hasChanges = fullDiff.isInOutOfSync; + await _lock.synchronized(() async { + final TimeLogger tL = TimeLogger(context: "fullSync"); + final inAppAssetIds = await localDB.getAssetsIDs(); + final inAppPathToAssetIds = await localDB.pathToAssetIDs(); + _log.info("loaded inApp State $tL"); + final fullDiff = await _deviceAssetsService.fullDiffWithOnDevice( + inAppAssetIds, + inAppPathToAssetIds, + tL, + ); + if (fullDiff.isInOutOfSync) { + _log.info("fullSyncDiff: ${fullDiff.countLog()} ${tL.elapsed}"); + await _storeDiff(fullDiff: fullDiff); + } + _log.fine( + "${fullDiff.isInOutOfSync ? 'changed saved ${fullDiff.countLog()} $tL)' : 'no change'}, completeTime ${tL.elapsed}", + ); + hasChanges = fullDiff.isInOutOfSync; + }); } catch (e, s) { _log.severe("fullSync failed", e, s); rethrow;