1
0
mirror of https://github.com/immich-app/immich.git synced 2024-11-28 09:33:27 +02:00

fix(mobile): fix cache invalidation on logout (#1030)

await all the cache-invalidation operations during logout and catch errors to actually perform all operations.
This commit is contained in:
Fynn Petersen-Frey 2022-11-28 17:01:09 +01:00 committed by GitHub
parent 024177515d
commit d82dec9773
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 11 deletions

View File

@ -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<List<Asset>?> getRemoteAssets() async {
Future<List<Asset>?> getRemoteAssets({required bool hasCache}) async {
final Box box = Hive.box(userInfoBox);
final Pair<List<AssetResponseDto>, String?>? remote = await _apiService
.assetApi
.getAllAssetsWithETag(eTag: box.get(assetEtagKey));
.getAllAssetsWithETag(eTag: hasCache ? box.get(assetEtagKey) : null);
if (remote == null) {
return null;
}

View File

@ -101,11 +101,14 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
}
Future<bool> 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<AuthenticationState> {
loginInfo.password = "";
loginInfo.isSaveLogin = false;
Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox).put(
await Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox).put(
savedLoginInfoKey,
loginInfo,
);

View File

@ -38,7 +38,7 @@ class AssetNotifier extends StateNotifier<List<Asset>> {
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(

View File

@ -23,8 +23,12 @@ abstract class JsonCache<T> {
}
Future<void> invalidate() async {
final file = await _getCacheFile();
await file.delete();
try {
final file = await _getCacheFile();
await file.delete();
} on FileSystemException {
// file is already deleted
}
}
Future<void> putRawData(dynamic data) async {
@ -46,4 +50,4 @@ abstract class JsonCache<T> {
void put(T data);
Future<T> get();
}
}