#443 info: improved display for google device in XMP

This commit is contained in:
Thibault Deckers 2022-12-15 19:27:04 +01:00
parent da751190c5
commit 386c1cf57d
5 changed files with 43 additions and 7 deletions

View file

@ -28,13 +28,14 @@ class Namespaces {
static const gCamera = 'http://ns.google.com/photos/1.0/camera/'; static const gCamera = 'http://ns.google.com/photos/1.0/camera/';
static const gCreations = 'http://ns.google.com/photos/1.0/creations/'; static const gCreations = 'http://ns.google.com/photos/1.0/creations/';
static const gDepth = 'http://ns.google.com/photos/1.0/depthmap/'; static const gDepth = 'http://ns.google.com/photos/1.0/depthmap/';
static const gettyImagesGift = 'http://xmp.gettyimages.com/gift/1.0/'; static const gDevice = 'http://ns.google.com/photos/dd/1.0/device/';
static const gFocus = 'http://ns.google.com/photos/1.0/focus/'; static const gFocus = 'http://ns.google.com/photos/1.0/focus/';
static const gImage = 'http://ns.google.com/photos/1.0/image/'; static const gImage = 'http://ns.google.com/photos/1.0/image/';
static const gimp210 = 'http://www.gimp.org/ns/2.10/';
static const gimpXmp = 'http://www.gimp.org/xmp/';
static const gPano = 'http://ns.google.com/photos/1.0/panorama/'; static const gPano = 'http://ns.google.com/photos/1.0/panorama/';
static const gSpherical = 'http://ns.google.com/videos/1.0/spherical/'; static const gSpherical = 'http://ns.google.com/videos/1.0/spherical/';
static const gettyImagesGift = 'http://xmp.gettyimages.com/gift/1.0/';
static const gimp210 = 'http://www.gimp.org/ns/2.10/';
static const gimpXmp = 'http://www.gimp.org/xmp/';
static const illustrator = 'http://ns.adobe.com/illustrator/1.0/'; static const illustrator = 'http://ns.adobe.com/illustrator/1.0/';
static const iptc4xmpCore = 'http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/'; static const iptc4xmpCore = 'http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/';
static const iptc4xmpExt = 'http://iptc.org/std/Iptc4xmpExt/2008-02-29/'; static const iptc4xmpExt = 'http://iptc.org/std/Iptc4xmpExt/2008-02-29/';
@ -93,17 +94,18 @@ class Namespaces {
dwc: 'Darwin Core', dwc: 'Darwin Core',
exif: 'Exif', exif: 'Exif',
exifEx: 'Exif Ex', exifEx: 'Exif Ex',
gettyImagesGift: 'Getty Images',
gAudio: 'Google Audio', gAudio: 'Google Audio',
gCamera: 'Google Camera', gCamera: 'Google Camera',
gCreations: 'Google Creations', gCreations: 'Google Creations',
gDepth: 'Google Depth', gDepth: 'Google Depth',
gDevice: 'Google Device',
gFocus: 'Google Focus', gFocus: 'Google Focus',
gImage: 'Google Image', gImage: 'Google Image',
gimp210: 'GIMP 2.10',
gimpXmp: 'GIMP',
gPano: 'Google Panorama', gPano: 'Google Panorama',
gSpherical: 'Google Spherical', gSpherical: 'Google Spherical',
gettyImagesGift: 'Getty Images',
gimp210: 'GIMP 2.10',
gimpXmp: 'GIMP',
illustrator: 'Illustrator', illustrator: 'Illustrator',
iptc4xmpCore: 'IPTC Core', iptc4xmpCore: 'IPTC Core',
iptc4xmpExt: 'IPTC Extension', iptc4xmpExt: 'IPTC Extension',

View file

@ -60,7 +60,6 @@ class _TvRailState extends State<TvRail> {
controller.focusedIndex = null; controller.focusedIndex = null;
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
final nodes = _focusNode.children.toList(); final nodes = _focusNode.children.toList();
debugPrint('TLAD focusedIndex=$focusedIndex < nodes.length=${nodes.length}');
if (focusedIndex < nodes.length) { if (focusedIndex < nodes.length) {
nodes[focusedIndex].requestFocus(); nodes[focusedIndex].requestFocus();
} }

View file

@ -19,6 +19,7 @@ import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:aves/widgets/dialogs/aves_dialog.dart';
import 'package:aves/widgets/map/map_page.dart'; import 'package:aves/widgets/map/map_page.dart';
import 'package:aves/widgets/viewer/action/single_entry_editor.dart'; import 'package:aves/widgets/viewer/action/single_entry_editor.dart';
import 'package:aves/widgets/viewer/debug/debug_page.dart';
import 'package:aves/widgets/viewer/embedded/notifications.dart'; import 'package:aves/widgets/viewer/embedded/notifications.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -118,6 +119,10 @@ class EntryInfoActionDelegate with FeedbackMixin, PermissionAwareMixin, EntryEdi
case EntryAction.viewMotionPhotoVideo: case EntryAction.viewMotionPhotoVideo:
OpenEmbeddedDataNotification.motionPhotoVideo().dispatch(context); OpenEmbeddedDataNotification.motionPhotoVideo().dispatch(context);
break; break;
// debug
case EntryAction.debug:
_goToDebug(context, targetEntry);
break;
default: default:
break; break;
} }
@ -273,4 +278,14 @@ class EntryInfoActionDelegate with FeedbackMixin, PermissionAwareMixin, EntryEdi
); );
mapCollection.dispose(); mapCollection.dispose();
} }
void _goToDebug(BuildContext context, AvesEntry targetEntry) {
Navigator.push(
context,
MaterialPageRoute(
settings: const RouteSettings(name: ViewerDebugPage.routeName),
builder: (context) => ViewerDebugPage(entry: targetEntry),
),
);
}
} }

View file

@ -48,6 +48,8 @@ class XmpNamespace extends Equatable {
return XmpGAudioNamespace(nsPrefix, rawProps); return XmpGAudioNamespace(nsPrefix, rawProps);
case Namespaces.gDepth: case Namespaces.gDepth:
return XmpGDepthNamespace(nsPrefix, rawProps); return XmpGDepthNamespace(nsPrefix, rawProps);
case Namespaces.gDevice:
return XmpGDeviceNamespace(nsPrefix, rawProps);
case Namespaces.gImage: case Namespaces.gImage:
return XmpGImageNamespace(nsPrefix, rawProps); return XmpGImageNamespace(nsPrefix, rawProps);
case Namespaces.iptc4xmpCore: case Namespaces.iptc4xmpCore:

View file

@ -69,6 +69,24 @@ class XmpGDepthNamespace extends XmpGoogleNamespace {
]; ];
} }
class XmpGDeviceNamespace extends XmpNamespace {
XmpGDeviceNamespace(String nsPrefix, Map<String, String> rawProps) : super(Namespaces.gDevice, nsPrefix, rawProps);
@override
late final List<XmpCardData> cards = [
XmpCardData(
RegExp(nsPrefix + r'Cameras\[(\d+)\]/(.*)'),
cards: [
XmpCardData(RegExp(r'Camera:DepthMap/(.*)')),
XmpCardData(RegExp(r'Camera:Image/(.*)')),
XmpCardData(RegExp(r'Camera:ImagingModel/(.*)')),
],
),
XmpCardData(RegExp(nsPrefix + r'Container/Container:Directory\[(\d+)\]/(.*)')),
XmpCardData(RegExp(nsPrefix + r'Profiles\[(\d+)\]/(.*)')),
];
}
class XmpGImageNamespace extends XmpGoogleNamespace { class XmpGImageNamespace extends XmpGoogleNamespace {
const XmpGImageNamespace(String nsPrefix, Map<String, String> rawProps) : super(Namespaces.gImage, nsPrefix, rawProps); const XmpGImageNamespace(String nsPrefix, Map<String, String> rawProps) : super(Namespaces.gImage, nsPrefix, rawProps);