mirror of
https://github.com/immich-app/immich.git
synced 2024-12-27 10:58:13 +02:00
70 lines
1.8 KiB
Dart
70 lines
1.8 KiB
Dart
|
import 'package:flutter/painting.dart';
|
||
|
|
||
|
import 'original_image_provider.dart';
|
||
|
|
||
|
/// [ImageCache] that uses two caches for small and large images
|
||
|
/// so that a single large image does not evict all small iamges
|
||
|
final class CustomImageCache implements ImageCache {
|
||
|
final _small = ImageCache();
|
||
|
final _large = ImageCache();
|
||
|
|
||
|
@override
|
||
|
int get maximumSize => _small.maximumSize + _large.maximumSize;
|
||
|
|
||
|
@override
|
||
|
int get maximumSizeBytes => _small.maximumSizeBytes + _large.maximumSizeBytes;
|
||
|
|
||
|
@override
|
||
|
set maximumSize(int value) => _small.maximumSize = value;
|
||
|
|
||
|
@override
|
||
|
set maximumSizeBytes(int value) => _small.maximumSize = value;
|
||
|
|
||
|
@override
|
||
|
void clear() {
|
||
|
_small.clear();
|
||
|
_large.clear();
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
void clearLiveImages() {
|
||
|
_small.clearLiveImages();
|
||
|
_large.clearLiveImages();
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
bool containsKey(Object key) =>
|
||
|
(key is OriginalImageProvider ? _large : _small).containsKey(key);
|
||
|
|
||
|
@override
|
||
|
int get currentSize => _small.currentSize + _large.currentSize;
|
||
|
|
||
|
@override
|
||
|
int get currentSizeBytes => _small.currentSizeBytes + _large.currentSizeBytes;
|
||
|
|
||
|
@override
|
||
|
bool evict(Object key, {bool includeLive = true}) =>
|
||
|
(key is OriginalImageProvider ? _large : _small)
|
||
|
.evict(key, includeLive: includeLive);
|
||
|
|
||
|
@override
|
||
|
int get liveImageCount => _small.liveImageCount + _large.liveImageCount;
|
||
|
|
||
|
@override
|
||
|
int get pendingImageCount =>
|
||
|
_small.pendingImageCount + _large.pendingImageCount;
|
||
|
|
||
|
@override
|
||
|
ImageStreamCompleter? putIfAbsent(
|
||
|
Object key,
|
||
|
ImageStreamCompleter Function() loader, {
|
||
|
ImageErrorListener? onError,
|
||
|
}) =>
|
||
|
(key is OriginalImageProvider ? _large : _small)
|
||
|
.putIfAbsent(key, loader, onError: onError);
|
||
|
|
||
|
@override
|
||
|
ImageCacheStatus statusForKey(Object key) =>
|
||
|
(key is OriginalImageProvider ? _large : _small).statusForKey(key);
|
||
|
}
|