Version: 0.10.0-beta6 (using Devel) Installed from: Compiled sources After deselecting a tag and clicking apply (with save to to "Keywords" enabled) the corresponding IPTC tag is deleted, whilst the XMP tag is not. This causes problems when loading tags from the image, resulting in a previously deleted tag reappearing, in effect preventing the deletion of tags.
SVN commit 905075 by mwiesweg: Return true even if no tag was present (but no error occurred and the desired result is reached), as it is already done for removeIptcTag and removeGPSInfo CCBUG: 177887 M +3 -3 kexiv2.h M +2 -0 kexiv2exif.cpp M +2 -0 kexiv2xmp.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=905075
SVN commit 905093 by mwiesweg: Fix logic, do not bail out on success CCBUG: 177887 M +2 -2 dmetadata.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=905093
Working on this I found three distinct remaining problems for which I need Gilles' opinion: 1) We now set IPTC tags with tag name only, not full tag path. For the 0.9 userbase however, the tag path will never be removed when new names are set. I think we should put path and names into the oldKeywords list. 2) setXmpKeywords will only add keywords and never remove any. I think we need oldKeywords / newKeywords as with Iptc. Alternatively we need to add a method to removed a specified list of keywords 3) DMetadata::setImageTagsPath has no effect for me. There is no error message, and I traced down to KExiv2::setXmpTagStringSeq and everything seems all right, but with exiv2 from today's SVN the value is not changed in the file. Does it work for you?
>1) We now set IPTC tags with tag name only, not full tag path. Yes, because XMP is used instead ==> UTF8 support and IPTC ascii limitation >For the 0.9 userbase however, the tag path will never be removed when new >names are set. I think we should put path and names into the oldKeywords list. I'm not sure to understand. with 0.9 full path is recorded in IPTC. >2) setXmpKeywords will only add keywords and never remove any. fine for me. note this must be the same with IPTC >I think we need >oldKeywords / newKeywords as with Iptc. Alternatively we need to add a method to removed a specified list of keywords Agree >3) DMetadata::setImageTagsPath has no effect for me. There is no error message, and I traced down to KExiv2::setXmpTagStringSeq and everything seems all right, but with exiv2 from today's SVN the value is not changed in the file. Does it work for you? I will check IMPORTANT: KDE4.2 will be branched tomorrow. all changes done libkexiv2, libkdcraw, libkipi from trunk need to be backported to KDE 4.2 branch (only if binary compatibility is preserved of course) Gilles Caulier
1) > I'm not sure to understand. with 0.9 full path is recorded in IPTC. Yes, we did record the full path. What I mean is, now, if a tag is _removed_, we need to remove both the full path and the name from IPTC - when the tag was added with 0.9, there will be the full path in IPTC. It can be done easily. 2) So with all freezing and branching, it would be ok to add bool KExiv2::removeXmpKeywords(const QStringList& keywordsToRemove, bool setProgramName) const (and probably similar methods for XmpSubCategories and XmpSubjects) to libkexiv2 now?
1/ Ok now i understand. 2/ ok. it's urgent to implement these method now. tomorrow evening, KDE 4.2 is branched and API will be frozen. Gilles
I have everything working now on my machine, that is all three points above are fixed. There is a bugfix patch for libkexiv2 that I will attach here. I think it is ok to commit this to trunk and backport to the 4.2 branch, as it is only bugfix. But I'm not absolutely sure. The problem is that when using xmpData.add for XMP String Bags and Seqs, somehow values are only added and not removed. The API-changing patch that I sent to you will have to go to DMetadata as I understand this. It's prepared and ready to commit. It is suboptimal but we are late. (We could commit to trunk/ again, but, as 0.10 will depend on 4.2 only, that would mean more #ifdefs in our code, and probably we wont want to depend on KDE4.3 but only on KDE4.2 for a longer period.
Created attachment 29986 [details] patch for libkexiv2
SVN commit 907203 by mwiesweg: Fix setXmpTagStringBag and setXmpTagStringSeq: Using XmpData::add with these types would somehow only append and keep all old entries. Replace an existing XmpDatum, or remove tag altogether if the new list is empty. CCBUG: 177887 M +30 -16 kexiv2xmp.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=907203
SVN commit 907204 by mwiesweg: Backport commit 907203: Fix setXmpTagStringBag and setXmpTagStringSeq: Using XmpData::add with these types would somehow only append and keep all old entries. Replace an existing XmpDatum, or remove tag altogether if the new list is empty. CCBUG: 177887 M +30 -16 kexiv2xmp.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=907204
SVN commit 907212 by mwiesweg: - add a common implementation addToXmpTagStringBag and removeFromXmpTagStringBag to add a given list of string to / remove from the current entries of a string bag - implement or reimplement XmpKeywords, Subjects and SubCategories methods get, set and remove using the new common implementation. This patch should normally go to libkexiv2 but didn't make it due to KDE4.2 freeze CCBUG: 177887 M +101 -0 dmetadata.cpp M +66 -0 dmetadata.h WebSVN link: http://websvn.kde.org/?view=rev&revision=907212
SVN commit 907214 by mwiesweg: When removing a tag: - remove both tag name and tags path from Iptc keywords because tags set with 0.9 will be written with full path - remove tag name from Xmp dc.subject CCBUG: 177887 M +8 -6 metadatahub.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=907214