mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:27:09 -05:00 
			
		
		
		
	* Adds image provider * uses image provider * wip load preview * wip everything but activity asset thumbnail needs some help with a remote id * Immich provider used in gallery * First draft of the immich image provider, working nicely! * Removed OriginalImageProvider * Fixes for thumbnails * feat(mobile): thumbhash support (#7028) * feat(mobile): thumbhash support * perf(mobile): store bmp thumbhash bytes in Isar --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> * Uses octoimage for fade in and placeholders * fixes thumbnails, removes unused values, adds better thumbnail size * removes thumbhash support for now * Forgot one thumbhash removal * Use big thumbnail for local image on ios * fix(mobile): Multipart image loading for iOS double swipe (#7064) * uses local thumb first * Multipart thumbnail * Clean up file delete * await file delete * Fynn's comments, made thumbnail smaller and doesn't crash on erroring out on thumbnail * lint --------- Co-authored-by: Marty Fuhry <marty@fuhry.farm> Co-authored-by: Alex <alex.tran1502@gmail.com> * Moves http client to global private place for reuse * Got rid of usePreview for local image providers since we always show a thumbnail anyway first * linter --------- Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com> Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex <alex.tran1502@gmail.com> Co-authored-by: Marty Fuhry <marty@fuhry.farm>
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:flutter/painting.dart';
 | 
						|
import 'package:immich_mobile/modules/asset_viewer/image_providers/immich_local_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 ImmichLocalImageProvider ? _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 ImmichLocalImageProvider ? _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 ImmichLocalImageProvider ? _large : _small)
 | 
						|
          .putIfAbsent(key, loader, onError: onError);
 | 
						|
 | 
						|
  @override
 | 
						|
  ImageCacheStatus statusForKey(Object key) =>
 | 
						|
      (key is ImmichLocalImageProvider ? _large : _small).statusForKey(key);
 | 
						|
}
 |