Lasse D. 2025-12-10 18:13:11 +07:00 committed by GitHub
commit 417f7e420f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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/providers/image/cache/remote_image_cache_manager.dart';
import 'package:immich_mobile/services/api.service.dart'; import 'package:immich_mobile/services/api.service.dart';
import 'package:immich_mobile/utils/image_url_builder.dart'; import 'package:immich_mobile/utils/image_url_builder.dart';
import 'package:openapi/api.dart';
class RemoteThumbProvider extends CancellableImageProvider<RemoteThumbProvider> class RemoteThumbProvider extends CancellableImageProvider<RemoteThumbProvider>
with CancellableImageProviderMixin<RemoteThumbProvider> { with CancellableImageProviderMixin<RemoteThumbProvider> {
@ -104,9 +105,34 @@ class RemoteFullImageProvider extends CancellableImageProvider<RemoteFullImagePr
return; 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)) { if (AppSetting.get(Setting.loadOriginal)) {
final request = this.request = RemoteImageRequest(uri: getOriginalUrlForRemoteId(key.assetId), headers: headers); try {
yield* loadRequest(request, decode); 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);
} }
} }