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