mirror of
https://github.com/immich-app/immich.git
synced 2024-12-25 10:43:13 +02: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…
Reference in New Issue
Block a user