refactor(mobile): cleanup image providers (#31824)

* refactor(mobile): remove redundant cancellation checks in image providers

* refactor(mobile): extract request helpers in full image providers

(cherry picked from commit 795507cfec262f8a6a9bd3ddd6f5647781e605ca)
This commit is contained in:
Luis Nachtigall authored and Codex committed 2026-10-12 20:39:12 +03:00
1 parent db6e11ecc8
commit d63fc2088f
2 files changed
+31 -43

No files matched your search

@@ -152,13 +152,8 @@ class LocalFullImageProvider extends ImageProvider<LocalFullImageProvider> {
}
final loadOriginal = SettingsRepository.instance.appConfig.image.loadOriginal;
final devicePixelRatio = PlatformDispatcher.instance.views.first.devicePixelRatio;
var request = loader.request = LocalImageRequest(
localId: key.id,
size: _previewTarget(devicePixelRatio, !loadOriginal),
assetType: key.assetType,
);
yield* loader.loadRequest(request, decode, isFinal: !loadOriginal);
final previewRequest = loader.request = _previewRequest(key, isFinal: !loadOriginal);
yield* loader.loadRequest(previewRequest, decode, isFinal: !loadOriginal);
if (!loadOriginal) {
return;
@@ -168,9 +163,8 @@ class LocalFullImageProvider extends ImageProvider<LocalFullImageProvider> {
return;
}
request = loader.request = LocalImageRequest(localId: key.id, assetType: key.assetType, size: Size.zero);
yield* loader.loadRequest(request, decode, isFinal: true);
final originalRequest = loader.request = _originalRequest(key);
yield* loader.loadRequest(originalRequest, decode, isFinal: true);
}
Stream<Object> _animatedCodec(ImageLoader loader, LocalFullImageProvider key, ImageDecoderCallback decode) async* {
@@ -180,12 +174,7 @@ class LocalFullImageProvider extends ImageProvider<LocalFullImageProvider> {
return;
}
final devicePixelRatio = PlatformDispatcher.instance.views.first.devicePixelRatio;
final previewRequest = loader.request = LocalImageRequest(
localId: key.id,
size: _previewTarget(devicePixelRatio, false),
assetType: key.assetType,
);
final previewRequest = loader.request = _previewRequest(key, isFinal: false);
yield* loader.loadRequest(previewRequest, decode, isFinal: false);
if (loader.isCancelled) {
@@ -193,11 +182,7 @@ class LocalFullImageProvider extends ImageProvider<LocalFullImageProvider> {
}
// always try original for animated, since previews don't support animation
final originalRequest = loader.request = LocalImageRequest(
localId: key.id,
size: Size.zero,
assetType: key.assetType,
);
final originalRequest = loader.request = _originalRequest(key);
final codec = await loader.loadCodecRequest(originalRequest, isFinal: true);
if (codec == null) {
if (loader.isCancelled) {
@@ -208,6 +193,15 @@ class LocalFullImageProvider extends ImageProvider<LocalFullImageProvider> {
yield codec;
}
LocalImageRequest _previewRequest(LocalFullImageProvider key, {required bool isFinal}) => LocalImageRequest(
localId: key.id,
size: _previewTarget(PlatformDispatcher.instance.views.first.devicePixelRatio, isFinal),
assetType: key.assetType,
);
LocalImageRequest _originalRequest(LocalFullImageProvider key) =>
LocalImageRequest(localId: key.id, size: Size.zero, assetType: key.assetType);
@override
bool operator ==(Object other) {
if (identical(this, other)) {
@@ -132,14 +132,7 @@ class RemoteFullImageProvider extends ImageProvider<RemoteFullImageProvider> {
return;
}
final previewRequest = loader.request = RemoteImageRequest(
uri: getThumbnailUrlForRemoteId(
key.assetId,
type: AssetMediaSize.preview,
thumbhash: key.thumbhash,
edited: key.edited,
),
);
final previewRequest = loader.request = _previewRequest(key);
final loadOriginal = assetType == AssetType.image && SettingsRepository.instance.appConfig.image.loadOriginal;
yield* loader.loadRequest(previewRequest, decode, isFinal: !loadOriginal);
@@ -151,9 +144,7 @@ class RemoteFullImageProvider extends ImageProvider<RemoteFullImageProvider> {
return;
}
final originalRequest = loader.request = RemoteImageRequest(
uri: getOriginalUrlForRemoteId(key.assetId, edited: key.edited),
);
final originalRequest = loader.request = _originalRequest(key);
yield* loader.loadRequest(originalRequest, decode, isFinal: true);
}
@@ -164,14 +155,7 @@ class RemoteFullImageProvider extends ImageProvider<RemoteFullImageProvider> {
return;
}
final previewRequest = loader.request = RemoteImageRequest(
uri: getThumbnailUrlForRemoteId(
key.assetId,
type: AssetMediaSize.preview,
thumbhash: key.thumbhash,
edited: key.edited,
),
);
final previewRequest = loader.request = _previewRequest(key);
yield* loader.loadRequest(previewRequest, decode, isFinal: false);
if (loader.isCancelled) {
@@ -179,9 +163,7 @@ class RemoteFullImageProvider extends ImageProvider<RemoteFullImageProvider> {
}
// always try original for animated, since previews don't support animation
final originalRequest = loader.request = RemoteImageRequest(
uri: getOriginalUrlForRemoteId(key.assetId, edited: key.edited),
);
final originalRequest = loader.request = _originalRequest(key);
final codec = await loader.loadCodecRequest(originalRequest, isFinal: true);
if (codec == null) {
if (loader.isCancelled) {
@@ -192,6 +174,18 @@ class RemoteFullImageProvider extends ImageProvider<RemoteFullImageProvider> {
yield codec;
}
RemoteImageRequest _previewRequest(RemoteFullImageProvider key) => RemoteImageRequest(
uri: getThumbnailUrlForRemoteId(
key.assetId,
type: AssetMediaSize.preview,
thumbhash: key.thumbhash,
edited: key.edited,
),
);
RemoteImageRequest _originalRequest(RemoteFullImageProvider key) =>
RemoteImageRequest(uri: getOriginalUrlForRemoteId(key.assetId, edited: key.edited));
@override
bool operator ==(Object other) {
if (identical(this, other)) {