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