Allow loading of full res preview

pull/23721/head
Lasse D. 2025-12-10 20:16:16 +07:00
parent 6d499c782a
commit 4950c8088c
1 changed files with 28 additions and 2 deletions

@ -10,6 +10,7 @@ import 'package:immich_mobile/presentation/widgets/images/one_frame_multi_image_
import 'package:immich_mobile/providers/image/cache/remote_image_cache_manager.dart';
import 'package:immich_mobile/services/api.service.dart';
import 'package:immich_mobile/utils/image_url_builder.dart';
import 'package:openapi/api.dart';
class RemoteThumbProvider extends CancellableImageProvider<RemoteThumbProvider>
with CancellableImageProviderMixin<RemoteThumbProvider> {
@ -104,9 +105,34 @@ class RemoteFullImageProvider extends CancellableImageProvider<RemoteFullImagePr
return;
}
// If loading originals is enabled, attempt to load the original
// and fall back to the fullsize preview when that fails.
if (AppSetting.get(Setting.loadOriginal)) {
final request = this.request = RemoteImageRequest(uri: getOriginalUrlForRemoteId(key.assetId), headers: headers);
yield* loadRequest(request, decode);
try {
final request = this.request = RemoteImageRequest(uri: getOriginalUrlForRemoteId(key.assetId), headers: headers);
yield* loadRequest(request, decode);
} catch (e) {
if (isCancelled) {
unawaited(evict());
return;
}
// Fallback to fullsize preview when original fails
final fullResRequest = this.request = RemoteImageRequest(
uri: getThumbnailUrlForRemoteId(key.assetId, type: AssetMediaSize.fullsize),
headers: headers,
cacheManager: cacheManager,
);
yield* loadRequest(fullResRequest, decode);
}
} else {
// When load original is disabled, always load the fullsize preview after the preview.
final fullResRequest = this.request = RemoteImageRequest(
uri: getThumbnailUrlForRemoteId(key.assetId, type: AssetMediaSize.fullsize),
headers: headers,
cacheManager: cacheManager,
);
yield* loadRequest(fullResRequest, decode);
}
}