mirror of
https://github.com/immich-app/immich.git
synced 2026-05-22 07:32:32 -04:00
12f7b2a005
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
45 lines
1.4 KiB
Dart
45 lines
1.4 KiB
Dart
part of 'image_request.dart';
|
|
|
|
class RemoteImageRequest extends ImageRequest {
|
|
final String uri;
|
|
|
|
RemoteImageRequest({required this.uri});
|
|
|
|
@override
|
|
Future<ImageInfo?> load(ImageDecoderCallback decode, {double scale = 1.0}) async {
|
|
if (_isCancelled) {
|
|
return null;
|
|
}
|
|
|
|
final info = await remoteImageApi.requestImage(uri, requestId: requestId, preferEncoded: false);
|
|
// Android always returns encoded data, so we need to check for both shapes of the response.
|
|
final frame = switch (info) {
|
|
{'pointer': int pointer, 'length': int length} => await _fromEncodedPlatformImage(pointer, length),
|
|
{'pointer': int pointer, 'width': int width, 'height': int height, 'rowBytes': int rowBytes} =>
|
|
await _fromDecodedPlatformImage(pointer, width, height, rowBytes),
|
|
_ => null,
|
|
};
|
|
return frame == null ? null : ImageInfo(image: frame.image, scale: scale);
|
|
}
|
|
|
|
@override
|
|
Future<ui.Codec?> loadCodec() async {
|
|
if (_isCancelled) {
|
|
return null;
|
|
}
|
|
|
|
final info = await remoteImageApi.requestImage(uri, requestId: requestId, preferEncoded: true);
|
|
if (info == null) {
|
|
return null;
|
|
}
|
|
|
|
final (codec, _) = await _codecFromEncodedPlatformImage(info['pointer']!, info['length']!) ?? (null, null);
|
|
return codec;
|
|
}
|
|
|
|
@override
|
|
Future<void> _onCancelled() {
|
|
return remoteImageApi.cancelRequest(requestId);
|
|
}
|
|
}
|