1
0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2024-12-29 15:11:58 +00:00

local orientation on ios is unreliable; prefer remote

This commit is contained in:
mertalev 2024-11-17 14:59:39 -05:00
parent 0a77a65044
commit dec514bd6d
No known key found for this signature in database
GPG key ID: CA85EF6600C9E8AD
2 changed files with 25 additions and 16 deletions

View file

@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:io';
import 'package:immich_mobile/entities/exif_info.entity.dart';
import 'package:immich_mobile/utils/hash.dart';
@ -92,27 +93,19 @@ class Asset {
@ignore
bool _didUpdateLocal = false;
@ignore
bool get didUpdateLocal => _didUpdateLocal;
Future<AssetEntity> get localAsync async {
final currentLocal = local;
if (currentLocal == null) {
final local = this.local;
if (local == null) {
throw Exception('Asset $fileName has no local data');
}
if (_didUpdateLocal) {
return currentLocal;
}
final updatedLocal = _didUpdateLocal
? currentLocal
: await currentLocal.obtainForNewProperties();
final updatedLocal =
_didUpdateLocal ? local : await local.obtainForNewProperties();
if (updatedLocal == null) {
throw Exception('Could not fetch local data for $fileName');
}
local = updatedLocal;
this.local = updatedLocal;
_didUpdateLocal = true;
return updatedLocal;
}
@ -242,7 +235,7 @@ class Asset {
return exifInfo.isFlipped;
}
if (didUpdateLocal) {
if (_didUpdateLocal && Platform.isAndroid) {
final local = this.local;
if (local == null) {
throw Exception('Asset $fileName has no local data');

View file

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:io';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
@ -404,12 +405,27 @@ class AssetService {
}
Future<double> getAspectRatio(Asset asset) async {
if (asset.isLocal) {
// platform_manager always returns 0 for orientation on iOS, so only prefer it on Android
if (asset.isLocal && Platform.isAndroid) {
await asset.localAsync;
} else if (asset.isRemote) {
asset = await loadExif(asset);
} else if (asset.isLocal) {
await asset.localAsync;
}
return asset.aspectRatio ?? 1.0;
final aspectRatio = asset.aspectRatio;
if (aspectRatio != null) {
return aspectRatio;
}
final width = asset.width;
final height = asset.height;
if (width != null && height != null) {
// we don't know the orientation, so assume it's normal
return width / height;
}
return 1.0;
}
}