diff --git a/mobile/lib/modules/home/services/asset.service.dart b/mobile/lib/modules/home/services/asset.service.dart index 264f636e71..2d8014484d 100644 --- a/mobile/lib/modules/home/services/asset.service.dart +++ b/mobile/lib/modules/home/services/asset.service.dart @@ -30,11 +30,11 @@ class AssetService { AssetService(this._apiService, this._backupService, this._backgroundService); /// Returns `null` if the server state did not change, else list of assets - Future?> getRemoteAssets() async { + Future?> getRemoteAssets({required bool hasCache}) async { final Box box = Hive.box(userInfoBox); final Pair, String?>? remote = await _apiService .assetApi - .getAllAssetsWithETag(eTag: box.get(assetEtagKey)); + .getAllAssetsWithETag(eTag: hasCache ? box.get(assetEtagKey) : null); if (remote == null) { return null; } diff --git a/mobile/lib/modules/login/providers/authentication.provider.dart b/mobile/lib/modules/login/providers/authentication.provider.dart index 1864d0e024..db1c2343cd 100644 --- a/mobile/lib/modules/login/providers/authentication.provider.dart +++ b/mobile/lib/modules/login/providers/authentication.provider.dart @@ -101,11 +101,14 @@ class AuthenticationNotifier extends StateNotifier { } Future logout() async { - Hive.box(userInfoBox).delete(accessTokenKey); state = state.copyWith(isAuthenticated: false); - _assetCacheService.invalidate(); - _albumCacheService.invalidate(); - _sharedAlbumCacheService.invalidate(); + await Future.wait([ + Hive.box(userInfoBox).delete(accessTokenKey), + Hive.box(userInfoBox).delete(assetEtagKey), + _assetCacheService.invalidate(), + _albumCacheService.invalidate(), + _sharedAlbumCacheService.invalidate(), + ]); // Remove login info from local storage var loginInfo = @@ -115,7 +118,7 @@ class AuthenticationNotifier extends StateNotifier { loginInfo.password = ""; loginInfo.isSaveLogin = false; - Hive.box(hiveLoginInfoBox).put( + await Hive.box(hiveLoginInfoBox).put( savedLoginInfoKey, loginInfo, ); diff --git a/mobile/lib/shared/providers/asset.provider.dart b/mobile/lib/shared/providers/asset.provider.dart index 10c2325c97..9250c33802 100644 --- a/mobile/lib/shared/providers/asset.provider.dart +++ b/mobile/lib/shared/providers/asset.provider.dart @@ -38,7 +38,7 @@ class AssetNotifier extends StateNotifier> { final bool isCacheValid = await _assetCacheService.isValid(); stopwatch.start(); final localTask = _assetService.getLocalAssets(urgent: !isCacheValid); - final remoteTask = _assetService.getRemoteAssets(); + final remoteTask = _assetService.getRemoteAssets(hasCache: isCacheValid); if (isCacheValid && state.isEmpty) { state = await _assetCacheService.get(); log.info( diff --git a/mobile/lib/shared/services/json_cache.dart b/mobile/lib/shared/services/json_cache.dart index b8a403abba..739d8931de 100644 --- a/mobile/lib/shared/services/json_cache.dart +++ b/mobile/lib/shared/services/json_cache.dart @@ -23,8 +23,12 @@ abstract class JsonCache { } Future invalidate() async { - final file = await _getCacheFile(); - await file.delete(); + try { + final file = await _getCacheFile(); + await file.delete(); + } on FileSystemException { + // file is already deleted + } } Future putRawData(dynamic data) async { @@ -46,4 +50,4 @@ abstract class JsonCache { void put(T data); Future get(); -} \ No newline at end of file +}