mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -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>
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:immich_mobile/shared/models/album.dart';
 | 
						|
import 'package:immich_mobile/shared/models/asset.dart';
 | 
						|
import 'package:immich_mobile/shared/models/store.dart';
 | 
						|
import 'package:isar/isar.dart';
 | 
						|
import 'package:openapi/api.dart';
 | 
						|
 | 
						|
String getThumbnailUrl(
 | 
						|
  final Asset asset, {
 | 
						|
  ThumbnailFormat type = ThumbnailFormat.WEBP,
 | 
						|
}) {
 | 
						|
  return getThumbnailUrlForRemoteId(asset.remoteId!, type: type);
 | 
						|
}
 | 
						|
 | 
						|
String getThumbnailCacheKey(
 | 
						|
  final Asset asset, {
 | 
						|
  ThumbnailFormat type = ThumbnailFormat.WEBP,
 | 
						|
}) {
 | 
						|
  return getThumbnailCacheKeyForRemoteId(asset.remoteId!, type: type);
 | 
						|
}
 | 
						|
 | 
						|
String getThumbnailCacheKeyForRemoteId(
 | 
						|
  final String id, {
 | 
						|
  ThumbnailFormat type = ThumbnailFormat.WEBP,
 | 
						|
}) {
 | 
						|
  if (type == ThumbnailFormat.WEBP) {
 | 
						|
    return 'thumbnail-image-$id';
 | 
						|
  } else {
 | 
						|
    return '${id}_previewStage';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
String getAlbumThumbnailUrl(
 | 
						|
  final Album album, {
 | 
						|
  ThumbnailFormat type = ThumbnailFormat.WEBP,
 | 
						|
}) {
 | 
						|
  if (album.thumbnail.value?.remoteId == null) {
 | 
						|
    return '';
 | 
						|
  }
 | 
						|
  return getThumbnailUrlForRemoteId(
 | 
						|
    album.thumbnail.value!.remoteId!,
 | 
						|
    type: type,
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
String getAlbumThumbNailCacheKey(
 | 
						|
  final Album album, {
 | 
						|
  ThumbnailFormat type = ThumbnailFormat.WEBP,
 | 
						|
}) {
 | 
						|
  if (album.thumbnail.value?.remoteId == null) {
 | 
						|
    return '';
 | 
						|
  }
 | 
						|
  return getThumbnailCacheKeyForRemoteId(
 | 
						|
    album.thumbnail.value!.remoteId!,
 | 
						|
    type: type,
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
String getImageUrl(final Asset asset) {
 | 
						|
  return getImageUrlFromId(asset.remoteId!);
 | 
						|
}
 | 
						|
 | 
						|
String getImageUrlFromId(final String id) {
 | 
						|
  return '${Store.get(StoreKey.serverEndpoint)}/asset/file/$id?isThumb=false';
 | 
						|
}
 | 
						|
 | 
						|
String getImageCacheKey(final Asset asset) {
 | 
						|
  // Assets from response DTOs do not have an isar id, querying which would give us the default autoIncrement id
 | 
						|
  final isFromDto = asset.id == Isar.autoIncrement;
 | 
						|
  return '${isFromDto ? asset.remoteId : asset.id}_fullStage';
 | 
						|
}
 | 
						|
 | 
						|
String getThumbnailUrlForRemoteId(
 | 
						|
  final String id, {
 | 
						|
  ThumbnailFormat type = ThumbnailFormat.WEBP,
 | 
						|
}) {
 | 
						|
  return '${Store.get(StoreKey.serverEndpoint)}/asset/thumbnail/$id?format=${type.value}';
 | 
						|
}
 | 
						|
 | 
						|
String getFaceThumbnailUrl(final String personId) {
 | 
						|
  return '${Store.get(StoreKey.serverEndpoint)}/person/$personId/thumbnail';
 | 
						|
}
 |