diff --git a/lib/widgets/viewer/info/metadata/xmp_namespaces.dart b/lib/widgets/viewer/info/metadata/xmp_namespaces.dart index 695cd6cc0..37f2b33bf 100644 --- a/lib/widgets/viewer/info/metadata/xmp_namespaces.dart +++ b/lib/widgets/viewer/info/metadata/xmp_namespaces.dart @@ -32,6 +32,8 @@ class XmpNamespace extends Equatable { switch (namespace) { case XmpBasicNamespace.ns: return XmpBasicNamespace(rawProps); + case XmpContainer.ns: + return XmpContainer(rawProps); case XmpCrsNamespace.ns: return XmpCrsNamespace(rawProps); case XmpDarktableNamespace.ns: diff --git a/lib/widgets/viewer/info/metadata/xmp_ns/google.dart b/lib/widgets/viewer/info/metadata/xmp_ns/google.dart index 5b7d3ad8e..8081111c0 100644 --- a/lib/widgets/viewer/info/metadata/xmp_ns/google.dart +++ b/lib/widgets/viewer/info/metadata/xmp_ns/google.dart @@ -2,7 +2,9 @@ import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/viewer/embedded/notifications.dart'; import 'package:aves/widgets/viewer/info/common.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_namespaces.dart'; +import 'package:aves/widgets/viewer/info/metadata/xmp_structs.dart'; import 'package:collection/collection.dart'; +import 'package:flutter/widgets.dart'; import 'package:tuple/tuple.dart'; abstract class XmpGoogleNamespace extends XmpNamespace { @@ -61,3 +63,25 @@ class XmpGImageNamespace extends XmpGoogleNamespace { @override List> get dataProps => const [Tuple2('$ns:Data', '$ns:Mime')]; } + +class XmpContainer extends XmpNamespace { + static const ns = 'Container'; + + static final directoryPattern = RegExp('$ns:Directory\\[(\\d+)\\]/$ns:Item/(.*)'); + + final directories = >{}; + + XmpContainer(Map rawProps) : super(ns, rawProps); + + @override + bool extractData(XmpProp prop) => extractIndexedStruct(prop, directoryPattern, directories); + + @override + List buildFromExtractedData() => [ + if (directories.isNotEmpty) + XmpStructArrayCard( + title: 'Directory Item', + structByIndex: directories, + ), + ]; +}