98
if (!d->xmpMetadata.empty())
98
if (!d->xmpMetadata().empty())
101
101
std::string xmpPacket;
102
Exiv2::XmpParser::encode(xmpPacket, d->xmpMetadata);
102
Exiv2::XmpParser::encode(xmpPacket, d->xmpMetadata());
103
103
QByteArray data(xmpPacket.data(), xmpPacket.size());
668
bool KExiv2::addToXmpTagStringBag(const char *xmpTagName, const QStringList& entriesToAdd,
669
bool setProgramName) const
671
//#ifdef _XMP_SUPPORT_
673
if (!setProgramId(setProgramName))
676
QStringList oldEntries = getXmpTagStringBag(xmpTagName, false);
677
QStringList newEntries = entriesToAdd;
679
// Create a list of keywords including old one which already exists.
680
for (QStringList::const_iterator it = oldEntries.constBegin(); it != oldEntries.constEnd(); ++it )
682
if (!newEntries.contains(*it))
683
newEntries.append(*it);
686
if (setXmpTagStringBag(xmpTagName, newEntries, false))
689
//#endif // _XMP_SUPPORT_
694
bool KExiv2::removeFromXmpTagStringBag(const char *xmpTagName, const QStringList& entriesToRemove,
695
bool setProgramName) const
697
//#ifdef _XMP_SUPPORT_
699
if (!setProgramId(setProgramName))
702
QStringList currentEntries = getXmpTagStringBag(xmpTagName, false);
703
QStringList newEntries;
705
// Create a list of current keywords except those that shall be removed
706
for (QStringList::const_iterator it = currentEntries.constBegin(); it != currentEntries.constEnd(); ++it )
708
if (!entriesToRemove.contains(*it))
709
newEntries.append(*it);
712
if (setXmpTagStringBag(xmpTagName, newEntries, false))
715
//#endif // _XMP_SUPPORT_
668
720
QVariant KExiv2::getXmpTagVariant(const char *xmpTagName, bool rationalAsListOfInts, bool stringEscapeCR) const
670
722
#ifdef _XMP_SUPPORT_
673
Exiv2::XmpData xmpData(d->xmpMetadata);
725
Exiv2::XmpData xmpData(d->xmpMetadata());
674
726
Exiv2::XmpKey key(xmpTagName);
675
727
Exiv2::XmpData::iterator it = xmpData.findKey(key);
676
728
if (it != xmpData.end())
785
837
catch( Exiv2::Error &e )
787
d->printExiv2ExceptionError("Cannot register a new Xmp namespace using Exiv2 ", e);
839
KExiv2Priv::printExiv2ExceptionError("Cannot register a new Xmp namespace using Exiv2 ", e);
842
#endif // _XMP_SUPPORT_
847
bool KExiv2::unregisterXmpNameSpace(const QString& uri)
854
if (!uri.endsWith("/")) ns.append("/");
855
Exiv2::XmpProperties::unregisterNs(ns.toAscii().constData());
858
catch( Exiv2::Error &e )
860
KExiv2Priv::printExiv2ExceptionError("Cannot unregister a new Xmp namespace using Exiv2 ", e);
790
863
#endif // _XMP_SUPPORT_
804
877
Exiv2::XmpKey xmpKey(xmpTagName);
805
Exiv2::XmpData::iterator it = d->xmpMetadata.findKey(xmpKey);
806
if (it != d->xmpMetadata.end())
878
Exiv2::XmpData::iterator it = d->xmpMetadata().findKey(xmpKey);
879
if (it != d->xmpMetadata().end())
808
d->xmpMetadata.erase(it);
881
d->xmpMetadata().erase(it);
827
900
bool KExiv2::setXmpKeywords(const QStringList& newKeywords, bool setProgramName) const
831
if (!setProgramId(setProgramName))
834
QStringList oldkeys = getXmpKeywords();
835
QStringList newkeys = newKeywords;
837
// Create a list of keywords including old one which already exists.
838
for (QStringList::const_iterator it = oldkeys.constBegin(); it != oldkeys.constEnd(); ++it )
840
if (!newkeys.contains(*it))
844
if (setXmpTagStringBag("Xmp.dc.subject", newkeys, false))
847
#endif // _XMP_SUPPORT_
902
return addToXmpTagStringBag("Xmp.dc.subject", newKeywords, setProgramName);
905
bool KExiv2::removeXmpKeywords(const QStringList& keywordsToRemove, bool setProgramName)
907
return removeFromXmpTagStringBag("Xmp.dc.subject", keywordsToRemove, setProgramName);
852
910
QStringList KExiv2::getXmpSubCategories() const
857
915
bool KExiv2::setXmpSubCategories(const QStringList& newSubCategories, bool setProgramName) const
861
if (!setProgramId(setProgramName))
864
const QStringList oldSubCat = getXmpSubCategories();
865
QStringList newSubCat = newSubCategories;
867
// Create a list of sub-categories including old one which already exists.
868
for (QStringList::const_iterator it = oldSubCat.constBegin(); it != oldSubCat.constEnd(); ++it )
870
if (!newSubCat.contains(*it))
871
newSubCat.append(*it);
874
if (setXmpTagStringBag("Xmp.photoshop.SupplementalCategories", newSubCat, false))
877
#endif // _XMP_SUPPORT_
917
return addToXmpTagStringBag("Xmp.photoshop.SupplementalCategories", newSubCategories, setProgramName);
920
bool KExiv2::removeXmpSubCategories(const QStringList& subCategoriesToRemove, bool setProgramName)
922
return removeFromXmpTagStringBag("Xmp.photoshop.SupplementalCategories", subCategoriesToRemove, setProgramName);
882
925
QStringList KExiv2::getXmpSubjects() const
887
930
bool KExiv2::setXmpSubjects(const QStringList& newSubjects, bool setProgramName) const
891
if (!setProgramId(setProgramName))
894
QStringList oldSubjectCodes = getXmpSubjects();
895
QStringList newSubjectCodes = newSubjects;
897
// Create a list of sub-categories including old one which already exists.
898
for (QStringList::const_iterator it = oldSubjectCodes.constBegin(); it != oldSubjectCodes.constEnd(); ++it )
900
if (!newSubjectCodes.contains(*it))
901
newSubjectCodes.append(*it);
904
if (setXmpTagStringBag("Xmp.iptc.SubjectCode", newSubjectCodes, false))
907
#endif // _XMP_SUPPORT_
932
return addToXmpTagStringBag("Xmp.iptc.SubjectCode", newSubjects, setProgramName);
935
bool KExiv2::removeXmpSubjects(const QStringList& subjectsToRemove, bool setProgramName)
937
return removeFromXmpTagStringBag("Xmp.iptc.SubjectCode", subjectsToRemove, setProgramName);
940
KExiv2::TagsMap KExiv2::getXmpTagsList() const
945
d->getXMPTagsListFromPrefix("dc", tagsMap);
946
d->getXMPTagsListFromPrefix("digiKam", tagsMap);
947
d->getXMPTagsListFromPrefix("xmp", tagsMap);
948
d->getXMPTagsListFromPrefix("xmpRights", tagsMap);
949
d->getXMPTagsListFromPrefix("xmpMM", tagsMap);
950
d->getXMPTagsListFromPrefix("xmpBJ", tagsMap);
951
d->getXMPTagsListFromPrefix("xmpTPg", tagsMap);
952
d->getXMPTagsListFromPrefix("xmpDM", tagsMap);
953
d->getXMPTagsListFromPrefix("MicrosoftPhoto", tagsMap);
954
d->getXMPTagsListFromPrefix("pdf", tagsMap);
955
d->getXMPTagsListFromPrefix("photoshop", tagsMap);
956
d->getXMPTagsListFromPrefix("crs", tagsMap);
957
d->getXMPTagsListFromPrefix("tiff", tagsMap);
958
d->getXMPTagsListFromPrefix("exif", tagsMap);
959
d->getXMPTagsListFromPrefix("aux", tagsMap);
960
d->getXMPTagsListFromPrefix("iptc", tagsMap);
962
#if (EXIV2_TEST_VERSION(0,19,0))
963
d->getXMPTagsListFromPrefix("iptcExt", tagsMap);
964
d->getXMPTagsListFromPrefix("plus", tagsMap);
968
catch( Exiv2::Error &e )
970
d->printExiv2ExceptionError("Cannot get Xmp Tags list using Exiv2 ", e);
912
976
} // NameSpace KExiv2Iface