mirror of
https://github.com/immich-app/immich.git
synced 2024-12-26 10:50:29 +02:00
e80d37bf8f
* refactor(mobile): add AssetState and proper asset updating * generate files --------- Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
133 lines
2.9 KiB
Dart
133 lines
2.9 KiB
Dart
import 'package:isar/isar.dart';
|
|
import 'package:openapi/api.dart';
|
|
import 'package:immich_mobile/utils/builtin_extensions.dart';
|
|
|
|
part 'exif_info.g.dart';
|
|
|
|
/// Exif information 1:1 relation with Asset
|
|
@Collection(inheritance: false)
|
|
class ExifInfo {
|
|
Id? id;
|
|
int? fileSize;
|
|
String? make;
|
|
String? model;
|
|
String? lens;
|
|
float? f;
|
|
float? mm;
|
|
short? iso;
|
|
float? exposureSeconds;
|
|
float? lat;
|
|
float? long;
|
|
String? city;
|
|
String? state;
|
|
String? country;
|
|
String? description;
|
|
|
|
@ignore
|
|
String get exposureTime {
|
|
if (exposureSeconds == null) {
|
|
return "";
|
|
} else if (exposureSeconds! < 1) {
|
|
return "1/${(1.0 / exposureSeconds!).round()} s";
|
|
} else {
|
|
return "${exposureSeconds!.toStringAsFixed(1)} s";
|
|
}
|
|
}
|
|
|
|
@ignore
|
|
String get fNumber => f != null ? f!.toStringAsFixed(1) : "";
|
|
|
|
@ignore
|
|
String get focalLength => mm != null ? mm!.toStringAsFixed(1) : "";
|
|
|
|
@ignore
|
|
double? get latitude => lat;
|
|
|
|
@ignore
|
|
double? get longitude => long;
|
|
|
|
ExifInfo.fromDto(ExifResponseDto dto)
|
|
: fileSize = dto.fileSizeInByte,
|
|
make = dto.make,
|
|
model = dto.model,
|
|
lens = dto.lensModel,
|
|
f = dto.fNumber?.toDouble(),
|
|
mm = dto.focalLength?.toDouble(),
|
|
iso = dto.iso?.toInt(),
|
|
exposureSeconds = _exposureTimeToSeconds(dto.exposureTime),
|
|
lat = dto.latitude?.toDouble(),
|
|
long = dto.longitude?.toDouble(),
|
|
city = dto.city,
|
|
state = dto.state,
|
|
country = dto.country,
|
|
description = dto.description;
|
|
|
|
ExifInfo({
|
|
this.id,
|
|
this.fileSize,
|
|
this.make,
|
|
this.model,
|
|
this.lens,
|
|
this.f,
|
|
this.mm,
|
|
this.iso,
|
|
this.exposureSeconds,
|
|
this.lat,
|
|
this.long,
|
|
this.city,
|
|
this.state,
|
|
this.country,
|
|
this.description,
|
|
});
|
|
|
|
ExifInfo copyWith({
|
|
Id? id,
|
|
int? fileSize,
|
|
String? make,
|
|
String? model,
|
|
String? lens,
|
|
float? f,
|
|
float? mm,
|
|
short? iso,
|
|
float? exposureSeconds,
|
|
float? lat,
|
|
float? long,
|
|
String? city,
|
|
String? state,
|
|
String? country,
|
|
String? description,
|
|
}) =>
|
|
ExifInfo(
|
|
id: id ?? this.id,
|
|
fileSize: fileSize ?? this.fileSize,
|
|
make: make ?? this.make,
|
|
model: model ?? this.model,
|
|
lens: lens ?? this.lens,
|
|
f: f ?? this.f,
|
|
mm: mm ?? this.mm,
|
|
iso: iso ?? this.iso,
|
|
exposureSeconds: exposureSeconds ?? this.exposureSeconds,
|
|
lat: lat ?? this.lat,
|
|
long: long ?? this.long,
|
|
city: city ?? this.city,
|
|
state: state ?? this.state,
|
|
country: country ?? this.country,
|
|
description: description ?? this.description,
|
|
);
|
|
}
|
|
|
|
double? _exposureTimeToSeconds(String? s) {
|
|
if (s == null) {
|
|
return null;
|
|
}
|
|
double? value = double.tryParse(s);
|
|
if (value != null) {
|
|
return value;
|
|
}
|
|
final parts = s.split("/");
|
|
if (parts.length == 2) {
|
|
return parts[0].toDouble() / parts[1].toDouble();
|
|
}
|
|
return null;
|
|
}
|