29 #include <klocalizedstring.h>
30 #include <kconfiggroup.h>
64 dbg.
nospace() <<
"[NamespaceEntry] nsType("
73 << inf.
index <<
"), ";
74 dbg.
nospace() <<
"namespaceName("
76 dbg.
nospace() <<
"alternativeName("
82 dbg.
nospace() <<
"convertRatio("
86 dbg.
nospace() <<
"secondNameOpts("
94 class Q_DECL_HIDDEN DMetadataSettingsContainer::Private
100 unifyReadWrite =
false;
110 DMetadataSettingsContainer::DMetadataSettingsContainer()
118 DMetadataSettingsContainer::DMetadataSettingsContainer(
const DMetadataSettingsContainer& other)
124 DMetadataSettingsContainer& DMetadataSettingsContainer::operator=(
const DMetadataSettingsContainer& other)
130 DMetadataSettingsContainer::~DMetadataSettingsContainer()
135 bool DMetadataSettingsContainer::unifyReadWrite()
const
137 return d->unifyReadWrite;
140 void DMetadataSettingsContainer::setUnifyReadWrite(
bool b)
142 d->unifyReadWrite =
b;
145 void DMetadataSettingsContainer::readFromConfig(KConfigGroup& group)
151 foreach (
const QString& str, mappingKeys())
153 if (!group.hasGroup(readNameSpace.
arg(str)))
156 qCDebug(DIGIKAM_GENERAL_LOG) <<
"Does not contain " << str <<
" Namespace";
160 if (!group.hasGroup(writeNameSpace.
arg(str)))
163 qCDebug(DIGIKAM_GENERAL_LOG) <<
"Does not contain " << str <<
" Namespace";
170 foreach (
const QString& str, mappingKeys())
172 readOneGroup(group, readNameSpace.
arg(str), getReadMapping(str));
173 readOneGroup(group, writeNameSpace.
arg(str), getWriteMapping(str));
182 void DMetadataSettingsContainer::writeToConfig(KConfigGroup& group)
const
187 foreach (
const QString& str, mappingKeys())
190 group.group(readNameSpace.
arg(str)).deleteGroup();
191 group.group(writeNameSpace.
arg(str)).deleteGroup();
193 writeOneGroup(group, readNameSpace.
arg(str), getReadMapping(str));
194 writeOneGroup(group, writeNameSpace.
arg(str), getWriteMapping(str));
200 void DMetadataSettingsContainer::defaultValues()
202 d->unifyReadWrite =
true;
203 d->writeMappings.clear();
204 d->readMappings.clear();
207 defaultRatingValues();
208 defaultCommentValues();
211 void DMetadataSettingsContainer::addMapping(
const QString& key)
219 return d->readMappings[key];
224 return d->writeMappings[key];
229 return d->readMappings.keys();
232 void DMetadataSettingsContainer::defaultTagValues()
235 NamespaceEntry tagNs1;
236 tagNs1.namespaceName =
QLatin1String(
"Xmp.digiKam.TagsList");
237 tagNs1.tagPaths = NamespaceEntry::TAGPATH;
241 tagNs1.specialOpts = NamespaceEntry::TAG_XMPSEQ;
242 tagNs1.subspace = NamespaceEntry::XMP;
244 NamespaceEntry tagNs2;
245 tagNs2.namespaceName =
QLatin1String(
"Xmp.MicrosoftPhoto.LastKeywordXMP");
246 tagNs2.tagPaths = NamespaceEntry::TAGPATH;
250 tagNs2.specialOpts = NamespaceEntry::TAG_XMPBAG;
251 tagNs2.subspace = NamespaceEntry::XMP;
253 NamespaceEntry tagNs3;
254 tagNs3.namespaceName =
QLatin1String(
"Xmp.lr.hierarchicalSubject");
255 tagNs3.tagPaths = NamespaceEntry::TAGPATH;
259 tagNs3.specialOpts = NamespaceEntry::TAG_XMPBAG;
260 tagNs3.subspace = NamespaceEntry::XMP;
261 tagNs3.alternativeName =
QLatin1String(
"Xmp.lr.HierarchicalSubject");
262 tagNs3.secondNameOpts = NamespaceEntry::TAG_XMPSEQ;
264 NamespaceEntry tagNs4;
265 tagNs4.namespaceName =
QLatin1String(
"Xmp.mediapro.CatalogSets");
266 tagNs4.tagPaths = NamespaceEntry::TAGPATH;
270 tagNs4.specialOpts = NamespaceEntry::TAG_XMPBAG;
271 tagNs4.subspace = NamespaceEntry::XMP;
273 NamespaceEntry tagNs5;
274 tagNs5.namespaceName =
QLatin1String(
"Xmp.acdsee.categories");
275 tagNs5.tagPaths = NamespaceEntry::TAGPATH;
279 tagNs5.specialOpts = NamespaceEntry::TAG_ACDSEE;
280 tagNs5.subspace = NamespaceEntry::XMP;
282 NamespaceEntry tagNs6;
288 tagNs6.specialOpts = NamespaceEntry::TAG_XMPBAG;
289 tagNs6.subspace = NamespaceEntry::XMP;
291 NamespaceEntry tagNs7;
292 tagNs7.namespaceName =
QLatin1String(
"Iptc.Application2.Keywords");
293 tagNs7.tagPaths = NamespaceEntry::TAGPATH;
297 tagNs7.subspace = NamespaceEntry::IPTC;
299 NamespaceEntry tagNs8;
300 tagNs8.namespaceName =
QLatin1String(
"Exif.Image.XPKeywords");
301 tagNs8.tagPaths = NamespaceEntry::TAGPATH;
305 tagNs8.subspace = NamespaceEntry::EXIF;
307 getReadMapping(NamespaceEntry::DM_TAG_CONTAINER()) << tagNs1
316 d->writeMappings[NamespaceEntry::DM_TAG_CONTAINER()]
320 void DMetadataSettingsContainer::defaultRatingValues()
326 defaultVal << 0 << 1 << 2 << 3 << 4 << 5;
327 microsoftMappings << 0 << 1 << 25 << 50 << 75 << 99;
328 iptcMappings << 8 << 6 << 5 << 4 << 2 << 1;
330 NamespaceEntry ratingNs1;
332 ratingNs1.convertRatio = defaultVal;
335 ratingNs1.subspace = NamespaceEntry::XMP;
337 NamespaceEntry ratingNs2;
338 ratingNs2.namespaceName =
QLatin1String(
"Xmp.acdsee.rating");
339 ratingNs2.convertRatio = defaultVal;
342 ratingNs2.subspace = NamespaceEntry::XMP;
344 NamespaceEntry ratingNs3;
345 ratingNs3.namespaceName =
QLatin1String(
"Xmp.MicrosoftPhoto.Rating");
346 ratingNs3.convertRatio = microsoftMappings;
349 ratingNs3.subspace = NamespaceEntry::XMP;
351 NamespaceEntry ratingNs4;
352 ratingNs4.namespaceName =
QLatin1String(
"Exif.Image.0x4746");
353 ratingNs4.convertRatio = defaultVal;
356 ratingNs4.subspace = NamespaceEntry::EXIF;
358 NamespaceEntry ratingNs5;
359 ratingNs5.namespaceName =
QLatin1String(
"Exif.Image.0x4749");
360 ratingNs5.convertRatio = microsoftMappings;
363 ratingNs5.subspace = NamespaceEntry::EXIF;
365 NamespaceEntry ratingNs6;
366 ratingNs6.namespaceName =
QLatin1String(
"Iptc.Application2.Urgency");
367 ratingNs6.convertRatio = iptcMappings;
370 ratingNs6.subspace = NamespaceEntry::IPTC;
372 getReadMapping(NamespaceEntry::DM_RATING_CONTAINER()) << ratingNs1
379 d->writeMappings[NamespaceEntry::DM_RATING_CONTAINER()]
383 void DMetadataSettingsContainer::defaultCommentValues()
385 NamespaceEntry commNs1;
388 commNs1.specialOpts = NamespaceEntry::COMMENT_ATLLANGLIST;
390 commNs1.subspace = NamespaceEntry::XMP;
392 NamespaceEntry commNs2;
393 commNs2.namespaceName =
QLatin1String(
"Xmp.exif.UserComment");
395 commNs2.specialOpts = NamespaceEntry::COMMENT_ALTLANG;
397 commNs2.subspace = NamespaceEntry::XMP;
399 NamespaceEntry commNs3;
400 commNs3.namespaceName =
QLatin1String(
"Xmp.tiff.ImageDescription");
402 commNs3.specialOpts = NamespaceEntry::COMMENT_ALTLANG;
404 commNs3.subspace = NamespaceEntry::XMP;
406 NamespaceEntry commNs4;
409 commNs4.specialOpts = NamespaceEntry::COMMENT_XMP;
411 commNs4.subspace = NamespaceEntry::XMP;
413 NamespaceEntry commNs5;
416 commNs5.specialOpts = NamespaceEntry::COMMENT_JPEG;
418 commNs5.subspace = NamespaceEntry::XMP;
420 NamespaceEntry commNs6;
421 commNs6.namespaceName =
QLatin1String(
"Exif.Image.ImageDescription");
423 commNs6.specialOpts = NamespaceEntry::NO_OPTS;
425 commNs6.alternativeName =
QLatin1String(
"Exif.Photo.UserComment");
426 commNs6.subspace = NamespaceEntry::EXIF;
428 NamespaceEntry commNs7;
429 commNs7.namespaceName =
QLatin1String(
"Iptc.Application2.Caption");
431 commNs7.specialOpts = NamespaceEntry::NO_OPTS;
433 commNs7.subspace = NamespaceEntry::IPTC;
436 getReadMapping(NamespaceEntry::DM_COMMENT_CONTAINER()) << commNs1
444 d->writeMappings[NamespaceEntry::DM_COMMENT_CONTAINER()]
450 KConfigGroup myItems = group.group(name);
452 for (
QString element : myItems.groupList())
454 KConfigGroup gr = myItems.group(element);
459 ns.namespaceName = gr.readEntry(
"namespaceName");
463 ns.namespaceName = element;
466 ns.tagPaths = (NamespaceEntry::TagType)gr.readEntry(
"tagPaths").toInt();
467 ns.separator = gr.readEntry(
"separator");
468 ns.nsType = (NamespaceEntry::NamespaceType)gr.readEntry(
"nsType").toInt();
469 ns.index = gr.readEntry(
"index").toInt();
470 ns.subspace = (NamespaceEntry::NsSubspace)gr.readEntry(
"subspace").toInt();
471 ns.alternativeName = gr.readEntry(
"alternativeName");
472 ns.specialOpts = (NamespaceEntry::SpecialOptions)gr.readEntry(
"specialOpts").toInt();
473 ns.secondNameOpts = (NamespaceEntry::SpecialOptions)gr.readEntry(
"secondNameOpts").toInt();
476 QString conversion = gr.readEntry(
"convertRatio");
491 KConfigGroup namespacesGroup = group.group(name);
494 for (NamespaceEntry e : container)
499 KConfigGroup tmp = namespacesGroup.group(groupNumber);
500 tmp.writeEntry(
"namespaceName", e.namespaceName);
501 tmp.writeEntry(
"alternativeName", e.alternativeName);
502 tmp.writeEntry(
"subspace", (
int)e.subspace);
503 tmp.writeEntry(
"tagPaths", (
int)e.tagPaths);
504 tmp.writeEntry(
"separator", e.separator);
505 tmp.writeEntry(
"nsType", (
int)e.nsType);
506 tmp.writeEntry(
"convertRatio", e.convertRatio);
507 tmp.writeEntry(
"specialOpts", (
int)e.specialOpts);
508 tmp.writeEntry(
"secondNameOpts", (
int)e.secondNameOpts);
509 tmp.writeEntry(
"index", e.index);
510 tmp.writeEntry(
"isDisabled", e.isDisabled);
511 tmp.writeEntry(
"isDefault", e.isDefault);
517 dbg.
nospace() <<
"[DMetadataSettingsContainer] readMappings(";
519 foreach (
const QString& str, inf.mappingKeys())
521 dbg.
nospace() << inf.getReadMapping(str) <<
"), ";
524 dbg.
nospace() <<
"writeMappings(";
526 foreach (
const QString& str, inf.mappingKeys())
528 dbg.
nospace() << inf.getWriteMapping(str) <<
"), ";
531 dbg.
nospace() <<
"unifyReadWrite("
532 << inf.unifyReadWrite() <<
")";
The NamespaceEntry class provide a simple container for dmetadata namespaces variables, such as names, what types of data expects and extra xml tags.
QString & append(QChar ch)
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
QDebug operator<<(QDebug dbg, const DbEngineParameters &p)
static QString DM_RATING_CONTAINER()
static QString DM_COMMENT_CONTAINER()
void append(const T &value)
QString fromUtf8(const char *str, int size)
int toInt(bool *ok, int base) const
SpecialOptions secondNameOpts
QDebug operator<<(QDebug dbg, const DMetadataSettingsContainer &inf)
qDebug() stream operator. Writes property inf to the debug output in a nicely formatted way...
bool dmcompare(NamespaceEntry &e1, NamespaceEntry e2)
SpecialOptions specialOpts
QString fromLatin1(const char *str, int size)
static QString DM_TAG_CONTAINER()
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QList< int > convertRatio
Rating Options.
QString namespaceName
Tag Options.