mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-08 18:28:53 +01:00
Init metadata directly in initState
This commit is contained in:
parent
9c08e5a635
commit
bf0e60c474
1 changed files with 48 additions and 70 deletions
|
@ -9,7 +9,6 @@ import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/double_extension.dart';
|
import 'package:nc_photos/double_extension.dart';
|
||||||
import 'package:nc_photos/entity/album.dart';
|
import 'package:nc_photos/entity/album.dart';
|
||||||
import 'package:nc_photos/entity/exif.dart';
|
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
import 'package:nc_photos/entity/file/data_source.dart';
|
import 'package:nc_photos/entity/file/data_source.dart';
|
||||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||||
|
@ -50,10 +49,9 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
_log.info("[initState] Metadata missing in File");
|
_log.info("[initState] Metadata missing in File");
|
||||||
} else {
|
} else {
|
||||||
_log.info("[initState] Metadata exists in File");
|
_log.info("[initState] Metadata exists in File");
|
||||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
|
if (widget.file.metadata.exif != null) {
|
||||||
_updateMetadata(widget.file.metadata.imageWidth,
|
_initMetadata();
|
||||||
widget.file.metadata.imageHeight, widget.file.metadata.exif);
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,8 +63,10 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
|
|
||||||
String sizeSubStr = "";
|
String sizeSubStr = "";
|
||||||
const space = " ";
|
const space = " ";
|
||||||
if (_width != null && _height != null) {
|
if (widget.file.metadata?.imageWidth != null &&
|
||||||
final pixelCount = _width * _height;
|
widget.file.metadata?.imageHeight != null) {
|
||||||
|
final pixelCount =
|
||||||
|
widget.file.metadata.imageWidth * widget.file.metadata.imageHeight;
|
||||||
if (pixelCount >= 500000) {
|
if (pixelCount >= 500000) {
|
||||||
final mpCount = pixelCount / 1000000.0;
|
final mpCount = pixelCount / 1000000.0;
|
||||||
sizeSubStr += AppLocalizations.of(context)
|
sizeSubStr += AppLocalizations.of(context)
|
||||||
|
@ -131,13 +131,15 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
),
|
),
|
||||||
title: Text("$dateStr $timeStr"),
|
title: Text("$dateStr $timeStr"),
|
||||||
),
|
),
|
||||||
if (_width != null && _height != null)
|
if (widget.file.metadata?.imageWidth != null &&
|
||||||
|
widget.file.metadata?.imageHeight != null)
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: Icon(
|
leading: Icon(
|
||||||
Icons.aspect_ratio,
|
Icons.aspect_ratio,
|
||||||
color: AppTheme.getSecondaryTextColor(context),
|
color: AppTheme.getSecondaryTextColor(context),
|
||||||
),
|
),
|
||||||
title: Text("$_width x $_height"),
|
title: Text(
|
||||||
|
"${widget.file.metadata.imageWidth} x ${widget.file.metadata.imageHeight}"),
|
||||||
subtitle: Text(sizeSubStr),
|
subtitle: Text(sizeSubStr),
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
|
@ -170,6 +172,43 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Convert EXIF data to readable format
|
||||||
|
void _initMetadata() {
|
||||||
|
final exif = widget.file.metadata.exif;
|
||||||
|
_log.info("[_initMetadata] $exif");
|
||||||
|
|
||||||
|
if (exif.make != null && exif.model != null) {
|
||||||
|
_model = "${exif.make} ${exif.model}";
|
||||||
|
}
|
||||||
|
if (exif.fNumber != null) {
|
||||||
|
_fNumber = exif.fNumber.toDouble();
|
||||||
|
}
|
||||||
|
if (exif.exposureTime != null) {
|
||||||
|
if (exif.exposureTime.denominator == 1) {
|
||||||
|
_exposureTime = exif.exposureTime.numerator.toString();
|
||||||
|
} else {
|
||||||
|
_exposureTime = exif.exposureTime.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (exif.focalLength != null) {
|
||||||
|
_focalLength = exif.focalLength.toDouble();
|
||||||
|
}
|
||||||
|
if (exif.isoSpeedRatings != null) {
|
||||||
|
_isoSpeedRatings = exif.isoSpeedRatings;
|
||||||
|
}
|
||||||
|
if (exif.gpsLatitudeRef != null &&
|
||||||
|
exif.gpsLatitude != null &&
|
||||||
|
exif.gpsLongitudeRef != null &&
|
||||||
|
exif.gpsLongitude != null) {
|
||||||
|
final lat = _gpsDmsToDouble(exif.gpsLatitude) *
|
||||||
|
(exif.gpsLatitudeRef == "S" ? -1 : 1);
|
||||||
|
final lng = _gpsDmsToDouble(exif.gpsLongitude) *
|
||||||
|
(exif.gpsLongitudeRef == "W" ? -1 : 1);
|
||||||
|
_log.fine("GPS: ($lat, $lng)");
|
||||||
|
_gps = Tuple2(lat, lng);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _onAddToAlbumPressed(BuildContext context) {
|
void _onAddToAlbumPressed(BuildContext context) {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
|
@ -251,64 +290,6 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateMetadata(int imageWidth, int imageHeight, Exif exif) {
|
|
||||||
if (imageWidth != null && imageHeight != null) {
|
|
||||||
setState(() {
|
|
||||||
_width = imageWidth;
|
|
||||||
_height = imageHeight;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (exif != null) {
|
|
||||||
_updateMetadataExif(exif);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _updateMetadataExif(Exif exif) {
|
|
||||||
_log.info("[_updateMetadataExif] $exif");
|
|
||||||
if (exif.make != null && exif.model != null) {
|
|
||||||
setState(() {
|
|
||||||
_model = "${exif.make} ${exif.model}";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (exif.fNumber != null) {
|
|
||||||
setState(() {
|
|
||||||
_fNumber = exif.fNumber.toDouble();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (exif.exposureTime != null) {
|
|
||||||
setState(() {
|
|
||||||
if (exif.exposureTime.denominator == 1) {
|
|
||||||
_exposureTime = exif.exposureTime.numerator.toString();
|
|
||||||
} else {
|
|
||||||
_exposureTime = exif.exposureTime.toString();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (exif.focalLength != null) {
|
|
||||||
setState(() {
|
|
||||||
_focalLength = exif.focalLength.toDouble();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (exif.isoSpeedRatings != null) {
|
|
||||||
setState(() {
|
|
||||||
_isoSpeedRatings = exif.isoSpeedRatings;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (exif.gpsLatitudeRef != null &&
|
|
||||||
exif.gpsLatitude != null &&
|
|
||||||
exif.gpsLongitudeRef != null &&
|
|
||||||
exif.gpsLongitude != null) {
|
|
||||||
final lat = _gpsDmsToDouble(exif.gpsLatitude) *
|
|
||||||
(exif.gpsLatitudeRef == "S" ? -1 : 1);
|
|
||||||
final lng = _gpsDmsToDouble(exif.gpsLongitude) *
|
|
||||||
(exif.gpsLongitudeRef == "W" ? -1 : 1);
|
|
||||||
_log.fine("GPS: ($lat, $lng)");
|
|
||||||
setState(() {
|
|
||||||
_gps = Tuple2(lat, lng);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static double _gpsDmsToDouble(List<Rational> dms) {
|
static double _gpsDmsToDouble(List<Rational> dms) {
|
||||||
double product = dms[0].toDouble();
|
double product = dms[0].toDouble();
|
||||||
if (dms.length > 1) {
|
if (dms.length > 1) {
|
||||||
|
@ -353,9 +334,6 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// metadata
|
|
||||||
int _width;
|
|
||||||
int _height;
|
|
||||||
// EXIF data
|
// EXIF data
|
||||||
String _model;
|
String _model;
|
||||||
double _fNumber;
|
double _fNumber;
|
||||||
|
|
Loading…
Reference in a new issue