From b80290528e7619f72f94fcb36c9c2cab349cf821 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 7 Mar 2022 11:46:07 +0900 Subject: [PATCH] info: improved xmp display --- .../viewer/info/metadata/xmp_namespaces.dart | 4 +++ .../info/metadata/xmp_ns/iptc4xmpExt.dart | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 lib/widgets/viewer/info/metadata/xmp_ns/iptc4xmpExt.dart diff --git a/lib/widgets/viewer/info/metadata/xmp_namespaces.dart b/lib/widgets/viewer/info/metadata/xmp_namespaces.dart index d4154c64e..8e1469d64 100644 --- a/lib/widgets/viewer/info/metadata/xmp_namespaces.dart +++ b/lib/widgets/viewer/info/metadata/xmp_namespaces.dart @@ -10,6 +10,7 @@ import 'package:aves/widgets/viewer/info/metadata/xmp_ns/dwc.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/exif.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/google.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/iptc.dart'; +import 'package:aves/widgets/viewer/info/metadata/xmp_ns/iptc4xmpExt.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/mwg.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/photoshop.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/tiff.dart'; @@ -51,6 +52,8 @@ class XmpNamespace extends Equatable { return XmpGImageNamespace(rawProps); case XmpIptcCoreNamespace.ns: return XmpIptcCoreNamespace(rawProps); + case XmpIptc4xmpExtNamespace.ns: + return XmpIptc4xmpExtNamespace(rawProps); case XmpMgwRegionsNamespace.ns: return XmpMgwRegionsNamespace(rawProps); case XmpMMNamespace.ns: @@ -97,6 +100,7 @@ class XmpNamespace extends Equatable { 'lr': 'Lightroom', 'MicrosoftPhoto': 'Microsoft Photo', 'mwg-rs': 'Regions', + 'nga': 'National Gallery of Art', 'panorama': 'Panorama', 'PanoStudioXMP': 'PanoramaStudio', 'pdf': 'PDF', diff --git a/lib/widgets/viewer/info/metadata/xmp_ns/iptc4xmpExt.dart b/lib/widgets/viewer/info/metadata/xmp_ns/iptc4xmpExt.dart new file mode 100644 index 000000000..147cb48fe --- /dev/null +++ b/lib/widgets/viewer/info/metadata/xmp_ns/iptc4xmpExt.dart @@ -0,0 +1,25 @@ +import 'package:aves/widgets/viewer/info/metadata/xmp_namespaces.dart'; +import 'package:aves/widgets/viewer/info/metadata/xmp_structs.dart'; +import 'package:flutter/material.dart'; + +class XmpIptc4xmpExtNamespace extends XmpNamespace { + static const ns = 'Iptc4xmpExt'; + + static final aooPattern = RegExp(ns + r':ArtworkOrObject\[(\d+)\]/(.*)'); + + final aoo = >{}; + + XmpIptc4xmpExtNamespace(Map rawProps) : super(ns, rawProps); + + @override + bool extractData(XmpProp prop) => extractIndexedStruct(prop, aooPattern, aoo); + + @override + List buildFromExtractedData() => [ + if (aoo.isNotEmpty) + XmpStructArrayCard( + title: 'Artwork or Object', + structByIndex: aoo, + ), + ]; +}