mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 02:39:03 -04:00 
			
		
		
		
	Switch to lazyBox
This commit is contained in:
		
							parent
							
								
									d310c77fc8
								
							
						
					
					
						commit
						d08475d5af
					
				| @ -27,9 +27,9 @@ const String backupRequireWifi = "immichBackupRequireWifi"; // Key 2 | ||||
| const String backupRequireCharging = "immichBackupRequireCharging"; // Key 3 | ||||
| 
 | ||||
| // Asset cache | ||||
| const String assetListCacheBox = "assetListCacheBox"; | ||||
| const String assetListCacheBox = "assetListCacheBoxl"; | ||||
| const String assetListCachedAssets = "assetListCachedAssets"; | ||||
| 
 | ||||
| // Album cache | ||||
| const String albumListCacheBox = "albumListCacheBox"; | ||||
| const String albumListCacheBox = "albumListCacheBoxl"; | ||||
| const String albumListCachedAssets = "albumListCachedAssets"; | ||||
|  | ||||
| @ -37,8 +37,14 @@ void main() async { | ||||
|   await Hive.openBox<HiveBackupAlbums>(hiveBackupInfoBox); | ||||
|   await Hive.openBox(hiveGithubReleaseInfoBox); | ||||
|   await Hive.openBox(userSettingInfoBox); | ||||
|   await Hive.openBox(assetListCacheBox); | ||||
|   await Hive.openBox(albumListCacheBox); | ||||
| 
 | ||||
|   final sw = Stopwatch(); | ||||
|   sw.start(); | ||||
| 
 | ||||
|   await Hive.openLazyBox(assetListCacheBox); | ||||
|   await Hive.openLazyBox(albumListCacheBox); | ||||
| 
 | ||||
|   debugPrint("Hive box open took ${sw.elapsedMilliseconds} ms"); | ||||
| 
 | ||||
|   SystemChrome.setSystemUIOverlayStyle( | ||||
|     const SystemUiOverlayStyle( | ||||
|  | ||||
| @ -15,7 +15,7 @@ class AlbumNotifier extends StateNotifier<List<AlbumResponseDto>> { | ||||
|   getAllAlbums() async { | ||||
| 
 | ||||
|     if (_albumCacheService.isValid() && state.isEmpty) { | ||||
|       state = await _albumCacheService.getAsync(); | ||||
|       state = await _albumCacheService.get(); | ||||
|     } | ||||
| 
 | ||||
|     List<AlbumResponseDto>? albums = | ||||
|  | ||||
| @ -15,9 +15,9 @@ class AlbumCacheService extends JsonCache<List<AlbumResponseDto>> { | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   List<AlbumResponseDto> get() { | ||||
|   Future<List<AlbumResponseDto>> get() async { | ||||
|     try { | ||||
|       final mapList =  readRawData() as List<dynamic>; | ||||
|       final mapList = await readRawData() as List<dynamic>; | ||||
| 
 | ||||
|       final responseData = mapList | ||||
|           .map((e) => AlbumResponseDto.fromJson(e)) | ||||
|  | ||||
| @ -11,12 +11,12 @@ import 'package:openapi/api.dart'; | ||||
| abstract class JsonCache<T> { | ||||
|   final String boxName; | ||||
|   final String valueKey; | ||||
|   final Box _cacheBox; | ||||
|   final LazyBox _cacheBox; | ||||
| 
 | ||||
|   JsonCache(this.boxName, this.valueKey) : _cacheBox = Hive.box(boxName); | ||||
|   JsonCache(this.boxName, this.valueKey) : _cacheBox = Hive.lazyBox(boxName); | ||||
| 
 | ||||
|   bool isValid() { | ||||
|     return _cacheBox.containsKey(valueKey) && _cacheBox.get(valueKey) is String; | ||||
|     return _cacheBox.containsKey(valueKey) && _cacheBox.containsKey(valueKey); | ||||
|   } | ||||
| 
 | ||||
|   void invalidate() { | ||||
| @ -28,17 +28,13 @@ abstract class JsonCache<T> { | ||||
|     _cacheBox.put(valueKey, jsonString); | ||||
|   } | ||||
| 
 | ||||
|   dynamic readRawData() { | ||||
|     return json.decode(_cacheBox.get(valueKey)); | ||||
|   dynamic readRawData() async { | ||||
|     final data = await _cacheBox.get(valueKey); | ||||
|     return json.decode(data); | ||||
|   } | ||||
| 
 | ||||
|   void put(T data); | ||||
| 
 | ||||
|   T get(); | ||||
| 
 | ||||
|   Future<T> getAsync() async { | ||||
|     return Future.microtask(() => get()); | ||||
|   } | ||||
|   Future<T> get(); | ||||
| } | ||||
| 
 | ||||
| class AssetCacheService extends JsonCache<List<AssetResponseDto>> { | ||||
| @ -50,9 +46,9 @@ class AssetCacheService extends JsonCache<List<AssetResponseDto>> { | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   List<AssetResponseDto> get() { | ||||
|   Future<List<AssetResponseDto>> get() async { | ||||
|     try { | ||||
|       final mapList =  readRawData() as List<dynamic>; | ||||
|       final mapList = await readRawData() as List<dynamic>; | ||||
| 
 | ||||
|       final responseData = mapList | ||||
|           .map((e) => AssetResponseDto.fromJson(e)) | ||||
| @ -66,7 +62,6 @@ class AssetCacheService extends JsonCache<List<AssetResponseDto>> { | ||||
|       return []; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| final assetCacheServiceProvider = Provider( | ||||
|  | ||||
| @ -26,7 +26,7 @@ class AssetNotifier extends StateNotifier<List<AssetResponseDto>> { | ||||
| 
 | ||||
|     if (_assetCacheService.isValid() && state.isEmpty) { | ||||
|       stopwatch.start(); | ||||
|       state = await _assetCacheService.getAsync(); | ||||
|       state = await _assetCacheService.get(); | ||||
|       debugPrint("Reading assets from cache: ${stopwatch.elapsedMilliseconds}ms"); | ||||
|       stopwatch.reset(); | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user