From 7d888106eda61322c7cfb80d568c31eda45dc277 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 14 Aug 2024 14:52:19 -0500 Subject: [PATCH] fix(mobile): load original (#11786) * fix(mobile): load original * revert change to format --- mobile/lib/pages/common/gallery_viewer.page.dart | 7 +------ .../image/immich_local_image_provider.dart | 15 +++++++++++++-- .../image/immich_remote_image_provider.dart | 2 +- mobile/lib/utils/image_url_builder.dart | 8 ++------ 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/mobile/lib/pages/common/gallery_viewer.page.dart b/mobile/lib/pages/common/gallery_viewer.page.dart index 93fd5afceb..8c2c70d93c 100644 --- a/mobile/lib/pages/common/gallery_viewer.page.dart +++ b/mobile/lib/pages/common/gallery_viewer.page.dart @@ -55,8 +55,6 @@ class GalleryViewerPage extends HookConsumerWidget { final settings = ref.watch(appSettingsServiceProvider); final loadAsset = renderList.loadAsset; final totalAssets = useState(renderList.totalAssets); - final isLoadPreview = useState(AppSettingsEnum.loadPreview.defaultValue); - final isLoadOriginal = useState(AppSettingsEnum.loadOriginal.defaultValue); final shouldLoopVideo = useState(AppSettingsEnum.loopVideo.defaultValue); final isZoomed = useState(false); final isPlayingVideo = useState(false); @@ -97,10 +95,6 @@ class GalleryViewerPage extends HookConsumerWidget { useEffect( () { - isLoadPreview.value = - settings.getSetting(AppSettingsEnum.loadPreview); - isLoadOriginal.value = - settings.getSetting(AppSettingsEnum.loadOriginal); shouldLoopVideo.value = settings.getSetting(AppSettingsEnum.loopVideo); return null; @@ -324,6 +318,7 @@ class GalleryViewerPage extends HookConsumerWidget { builder: (context, index) { final a = index == currentIndex.value ? asset : loadAsset(index); + final ImageProvider provider = ImmichImage.imageProvider(asset: a); diff --git a/mobile/lib/providers/image/immich_local_image_provider.dart b/mobile/lib/providers/image/immich_local_image_provider.dart index cf9cf86090..dc1b8a9845 100644 --- a/mobile/lib/providers/image/immich_local_image_provider.dart +++ b/mobile/lib/providers/image/immich_local_image_provider.dart @@ -7,6 +7,8 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/painting.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; +import 'package:immich_mobile/entities/store.entity.dart'; +import 'package:immich_mobile/services/app_settings.service.dart'; import 'package:photo_manager/photo_manager.dart'; /// The local image provider for an asset @@ -17,6 +19,12 @@ class ImmichLocalImageProvider extends ImageProvider { required this.asset, }) : assert(asset.local != null, 'Only usable when asset.local is set'); + /// Whether to show the original file or load a compressed version + bool get _useOriginal => Store.get( + AppSettingsEnum.loadOriginal.storeKey, + AppSettingsEnum.loadOriginal.defaultValue, + ); + /// Converts an [ImageProvider]'s settings plus an [ImageConfiguration] to a key /// that describes the precise image to load. @override @@ -62,8 +70,11 @@ class ImmichLocalImageProvider extends ImageProvider { if (asset.isImage) { /// Using 2K thumbnail for local iOS image to avoid double swiping issue if (Platform.isIOS) { - final largeImageBytes = await asset.local - ?.thumbnailDataWithSize(const ThumbnailSize(3840, 2160)); + final largeImageBytes = _useOriginal + ? await asset.local?.originBytes + : await asset.local + ?.thumbnailDataWithSize(const ThumbnailSize(3840, 2160)); + if (largeImageBytes == null) { throw StateError( "Loading thumb for local photo ${asset.fileName} failed", diff --git a/mobile/lib/providers/image/immich_remote_image_provider.dart b/mobile/lib/providers/image/immich_remote_image_provider.dart index 2756ed1dc9..9e1d8aa120 100644 --- a/mobile/lib/providers/image/immich_remote_image_provider.dart +++ b/mobile/lib/providers/image/immich_remote_image_provider.dart @@ -101,7 +101,7 @@ class ImmichRemoteImageProvider // Load the final remote image if (_useOriginal) { // Load the original image - final url = getImageUrlFromId(key.assetId); + final url = getOriginalUrlForRemoteId(key.assetId); final codec = await ImageLoader.loadImageFromCache( url, cache: cache, diff --git a/mobile/lib/utils/image_url_builder.dart b/mobile/lib/utils/image_url_builder.dart index b6c7f2ba8b..e7a1b9e39e 100644 --- a/mobile/lib/utils/image_url_builder.dart +++ b/mobile/lib/utils/image_url_builder.dart @@ -55,12 +55,8 @@ String getAlbumThumbNailCacheKey( ); } -String getImageUrl(final Asset asset) { - return getImageUrlFromId(asset.remoteId!); -} - -String getImageUrlFromId(final String id) { - return '${Store.get(StoreKey.serverEndpoint)}/assets/$id/thumbnail?size=preview'; +String getOriginalUrlForRemoteId(final String id) { + return '${Store.get(StoreKey.serverEndpoint)}/assets/$id/original'; } String getImageCacheKey(final Asset asset) {