info: improved XMP darktable namespace display
This commit is contained in:
parent
4d377173b6
commit
f16645dd34
2 changed files with 32 additions and 2 deletions
|
@ -4,6 +4,7 @@ import 'package:aves/utils/constants.dart';
|
||||||
import 'package:aves/utils/string_utils.dart';
|
import 'package:aves/utils/string_utils.dart';
|
||||||
import 'package:aves/widgets/common/identity/highlight_title.dart';
|
import 'package:aves/widgets/common/identity/highlight_title.dart';
|
||||||
import 'package:aves/widgets/viewer/info/common.dart';
|
import 'package:aves/widgets/viewer/info/common.dart';
|
||||||
|
import 'package:aves/widgets/viewer/info/metadata/xmp_ns/darktable.dart';
|
||||||
import 'package:aves/widgets/viewer/info/metadata/xmp_ns/exif.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/google.dart';
|
||||||
import 'package:aves/widgets/viewer/info/metadata/xmp_ns/iptc.dart';
|
import 'package:aves/widgets/viewer/info/metadata/xmp_ns/iptc.dart';
|
||||||
|
@ -30,6 +31,8 @@ class XmpNamespace extends Equatable {
|
||||||
switch (namespace) {
|
switch (namespace) {
|
||||||
case XmpBasicNamespace.ns:
|
case XmpBasicNamespace.ns:
|
||||||
return XmpBasicNamespace(rawProps);
|
return XmpBasicNamespace(rawProps);
|
||||||
|
case XmpDarktableNamespace.ns:
|
||||||
|
return XmpDarktableNamespace(rawProps);
|
||||||
case XmpExifNamespace.ns:
|
case XmpExifNamespace.ns:
|
||||||
return XmpExifNamespace(rawProps);
|
return XmpExifNamespace(rawProps);
|
||||||
case XmpGAudioNamespace.ns:
|
case XmpGAudioNamespace.ns:
|
||||||
|
@ -136,8 +139,10 @@ class XmpProp {
|
||||||
return propPath.splitMapJoin(XMP.structFieldSeparator,
|
return propPath.splitMapJoin(XMP.structFieldSeparator,
|
||||||
onMatch: (match) => ' ${match.group(0)} ',
|
onMatch: (match) => ' ${match.group(0)} ',
|
||||||
onNonMatch: (s) {
|
onNonMatch: (s) {
|
||||||
// strip namespace & format
|
// strip namespace
|
||||||
return s.split(XMP.propNamespaceSeparator).last.toSentenceCase();
|
final key = s.split(XMP.propNamespaceSeparator).last;
|
||||||
|
// format
|
||||||
|
return key.replaceAll('_', ' ').toSentenceCase();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
25
lib/widgets/viewer/info/metadata/xmp_ns/darktable.dart
Normal file
25
lib/widgets/viewer/info/metadata/xmp_ns/darktable.dart
Normal file
|
@ -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 XmpDarktableNamespace extends XmpNamespace {
|
||||||
|
static const ns = 'darktable';
|
||||||
|
|
||||||
|
static final historyPattern = RegExp(r'darktable:history\[(\d+)\]/(.*)');
|
||||||
|
|
||||||
|
final history = <int, Map<String, String>>{};
|
||||||
|
|
||||||
|
XmpDarktableNamespace(Map<String, String> rawProps) : super(ns, rawProps);
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool extractData(XmpProp prop) => extractIndexedStruct(prop, historyPattern, history);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Widget> buildFromExtractedData() => [
|
||||||
|
if (history.isNotEmpty)
|
||||||
|
XmpStructArrayCard(
|
||||||
|
title: 'History',
|
||||||
|
structByIndex: history,
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in a new issue