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: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