mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:37:11 -04:00 
			
		
		
		
	Add cache for shared albums
This commit is contained in:
		
							parent
							
								
									6796462b13
								
							
						
					
					
						commit
						d77e25425e
					
				| @ -1,12 +1,18 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||
| import 'package:immich_mobile/modules/album/services/album.service.dart'; | ||||
| import 'package:immich_mobile/modules/album/services/album_cache.service.dart'; | ||||
| import 'package:openapi/api.dart'; | ||||
| 
 | ||||
| class SharedAlbumNotifier extends StateNotifier<List<AlbumResponseDto>> { | ||||
|   SharedAlbumNotifier(this._sharedAlbumService) : super([]); | ||||
|   SharedAlbumNotifier(this._sharedAlbumService, this._sharedAlbumCacheService) : super([]); | ||||
| 
 | ||||
|   final AlbumService _sharedAlbumService; | ||||
|   final SharedAlbumCacheService _sharedAlbumCacheService; | ||||
| 
 | ||||
|   _cacheState() { | ||||
|     _sharedAlbumCacheService.put(state); | ||||
|   } | ||||
| 
 | ||||
|   Future<AlbumResponseDto?> createSharedAlbum( | ||||
|     String albumName, | ||||
| @ -22,6 +28,7 @@ class SharedAlbumNotifier extends StateNotifier<List<AlbumResponseDto>> { | ||||
| 
 | ||||
|       if (newAlbum != null) { | ||||
|         state = [...state, newAlbum]; | ||||
|         _cacheState(); | ||||
|       } | ||||
| 
 | ||||
|       return newAlbum; | ||||
| @ -33,16 +40,22 @@ class SharedAlbumNotifier extends StateNotifier<List<AlbumResponseDto>> { | ||||
|   } | ||||
| 
 | ||||
|   getAllSharedAlbums() async { | ||||
|     if (await _sharedAlbumCacheService.isValid() && state.isEmpty) { | ||||
|       state = await _sharedAlbumCacheService.get(); | ||||
|     } | ||||
| 
 | ||||
|     List<AlbumResponseDto>? sharedAlbums = | ||||
|         await _sharedAlbumService.getAlbums(isShared: true); | ||||
| 
 | ||||
|     if (sharedAlbums != null) { | ||||
|       state = sharedAlbums; | ||||
|       _cacheState(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   deleteAlbum(String albumId) async { | ||||
|     state = state.where((album) => album.id != albumId).toList(); | ||||
|     _cacheState(); | ||||
|   } | ||||
| 
 | ||||
|   Future<bool> leaveAlbum(String albumId) async { | ||||
| @ -50,6 +63,7 @@ class SharedAlbumNotifier extends StateNotifier<List<AlbumResponseDto>> { | ||||
| 
 | ||||
|     if (res) { | ||||
|       state = state.where((album) => album.id != albumId).toList(); | ||||
|       _cacheState(); | ||||
|       return true; | ||||
|     } else { | ||||
|       return false; | ||||
| @ -72,7 +86,10 @@ class SharedAlbumNotifier extends StateNotifier<List<AlbumResponseDto>> { | ||||
| 
 | ||||
| final sharedAlbumProvider = | ||||
|     StateNotifierProvider<SharedAlbumNotifier, List<AlbumResponseDto>>((ref) { | ||||
|   return SharedAlbumNotifier(ref.watch(albumServiceProvider)); | ||||
|   return SharedAlbumNotifier( | ||||
|     ref.watch(albumServiceProvider), | ||||
|     ref.watch(sharedAlbumCacheServiceProvider), | ||||
|   ); | ||||
| }); | ||||
| 
 | ||||
| final sharedAlbumDetailProvider = FutureProvider.autoDispose | ||||
|  | ||||
| @ -5,8 +5,8 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||
| import 'package:immich_mobile/modules/home/services/asset_cache.service.dart'; | ||||
| import 'package:openapi/api.dart'; | ||||
| 
 | ||||
| class AlbumCacheService extends JsonCache<List<AlbumResponseDto>> { | ||||
|   AlbumCacheService() : super("album_cache"); | ||||
| class BaseAlbumCacheService extends JsonCache<List<AlbumResponseDto>> { | ||||
|   BaseAlbumCacheService(super.cacheFileName); | ||||
| 
 | ||||
|   @override | ||||
|   void put(List<AlbumResponseDto> data) { | ||||
| @ -29,9 +29,21 @@ class AlbumCacheService extends JsonCache<List<AlbumResponseDto>> { | ||||
|       return []; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class AlbumCacheService extends BaseAlbumCacheService { | ||||
|   AlbumCacheService() : super("album_cache"); | ||||
| } | ||||
| 
 | ||||
| class SharedAlbumCacheService extends BaseAlbumCacheService { | ||||
|   SharedAlbumCacheService() : super("shared_album_cache"); | ||||
| } | ||||
| 
 | ||||
| final albumCacheServiceProvider = Provider( | ||||
|       (ref) => AlbumCacheService(), | ||||
| ); | ||||
| 
 | ||||
| final sharedAlbumCacheServiceProvider = Provider( | ||||
|       (ref) => SharedAlbumCacheService(), | ||||
| ); | ||||
| 
 | ||||
|  | ||||
| @ -19,6 +19,7 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> { | ||||
|     this._apiService, | ||||
|     this._assetCacheService, | ||||
|     this._albumCacheService, | ||||
|     this._sharedAlbumCacheService, | ||||
|   ) : super( | ||||
|           AuthenticationState( | ||||
|             deviceId: "", | ||||
| @ -47,6 +48,7 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> { | ||||
|   final ApiService _apiService; | ||||
|   final AssetCacheService _assetCacheService; | ||||
|   final AlbumCacheService _albumCacheService; | ||||
|   final SharedAlbumCacheService _sharedAlbumCacheService; | ||||
| 
 | ||||
|   Future<bool> login( | ||||
|     String email, | ||||
| @ -159,6 +161,7 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> { | ||||
|     state = state.copyWith(isAuthenticated: false); | ||||
|     _assetCacheService.invalidate(); | ||||
|     _albumCacheService.invalidate(); | ||||
|     _sharedAlbumCacheService.invalidate(); | ||||
|     return true; | ||||
|   } | ||||
| 
 | ||||
| @ -206,5 +209,6 @@ final authenticationProvider = | ||||
|     ref.watch(apiServiceProvider), | ||||
|     ref.watch(assetCacheServiceProvider), | ||||
|     ref.watch(albumCacheServiceProvider), | ||||
|     ref.watch(sharedAlbumCacheServiceProvider), | ||||
|   ); | ||||
| }); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user