[Kde-imaging] extragear/libs/kipi-plugins/metadataedit
Gilles Caulier
caulier.gilles at gmail.com
Tue Oct 16 09:36:16 CEST 2007
SVN commit 725801 by cgilles:
kipi-plugins from trunk (KDE4) : XMP metadata editor : new option to import XMP metadata from a picture to a selection
of pictures. This option work exactly like Import EXIF or Import IPTC. XMP Template file can be used to batch set metadata on pictures.
CCMAIL: digikam-devel at kde.org
CCMAIL: kde-imaging at kde.org
M +81 -9 plugin_metadataedit.cpp
--- trunk/extragear/libs/kipi-plugins/metadataedit/plugin_metadataedit.cpp #725800:725801
@@ -247,7 +247,7 @@
if (!exiv2Iface.load(importEXIFFile.path()))
{
KMessageBox::error(kapp->activeWindow(),
- i18n("Cannot load metadata from \"%1\"",importEXIFFile.fileName()),
+ i18n("Cannot load metadata from \"%1\"", importEXIFFile.fileName()),
i18n("Import EXIF Metadata"));
return;
}
@@ -256,7 +256,7 @@
if (exifData.isEmpty())
{
KMessageBox::error(kapp->activeWindow(),
- i18n("\"%1\" do not have EXIF metadata",importEXIFFile.fileName()),
+ i18n("\"%1\" do not have EXIF metadata", importEXIFFile.fileName()),
i18n("Import EXIF Metadata"));
return;
}
@@ -265,11 +265,10 @@
kapp->activeWindow(),
i18n("EXIF metadata from current selected pictures will be permanently "
"replaced by the EXIF content of \"%1\".\n"
- "Do you want to continue ?",importEXIFFile.fileName()),
+ "Do you want to continue ?", importEXIFFile.fileName()),
i18n("Import EXIF Metadata")) != KMessageBox::Yes)
return;
-
KUrl::List imageURLs = images.images();
KUrl::List updatedURLs;
QStringList errorFiles;
@@ -393,7 +392,7 @@
if (!exiv2Iface.load(importIPTCFile.path()))
{
KMessageBox::error(kapp->activeWindow(),
- i18n("Cannot load metadata from \"%1\"",importIPTCFile.fileName()),
+ i18n("Cannot load metadata from \"%1\"", importIPTCFile.fileName()),
i18n("Import IPTC Metadata"));
return;
}
@@ -402,7 +401,7 @@
if (iptcData.isEmpty())
{
KMessageBox::error(kapp->activeWindow(),
- i18n("\"%1\" do not have IPTC metadata",importIPTCFile.fileName()),
+ i18n("\"%1\" do not have IPTC metadata", importIPTCFile.fileName()),
i18n("Import IPTC Metadata"));
return;
}
@@ -411,11 +410,10 @@
kapp->activeWindow(),
i18n("IPTC metadata from current selected pictures will be permanently "
"replaced by the IPTC content of \"%1\".\n"
- "Do you want to continue ?",importIPTCFile.fileName()),
+ "Do you want to continue ?", importIPTCFile.fileName()),
i18n("Import IPTC Metadata")) != KMessageBox::Yes)
return;
-
KUrl::List imageURLs = images.images();
KUrl::List updatedURLs;
QStringList errorFiles;
@@ -524,7 +522,81 @@
void Plugin_MetadataEdit::slotImportXmp()
{
-// TODO
+ KIPI::ImageCollection images = m_interface->currentSelection();
+
+ if ( !images.isValid() || images.images().isEmpty() )
+ return;
+
+ KUrl importXMPFile = KFileDialog::getOpenUrl(KGlobalSettings::documentPath(),
+ QString::null, kapp->activeWindow(),
+ i18n("Select File to Import XMP metadata") );
+ if( importXMPFile.isEmpty() )
+ return;
+
+ KExiv2Iface::KExiv2 exiv2Iface;
+ if (!exiv2Iface.load(importXMPFile.path()))
+ {
+ KMessageBox::error(kapp->activeWindow(),
+ i18n("Cannot load metadata from \"%1\"", importXMPFile.fileName()),
+ i18n("Import XMP Metadata"));
+ return;
+ }
+
+ QByteArray xmpData = exiv2Iface.getXmp();
+ if (xmpData.isEmpty())
+ {
+ KMessageBox::error(kapp->activeWindow(),
+ i18n("\"%1\" do not have XMP metadata", importXMPFile.fileName()),
+ i18n("Import XMP Metadata"));
+ return;
+ }
+
+ if (KMessageBox::warningYesNo(
+ kapp->activeWindow(),
+ i18n("XMP metadata from current selected pictures will be permanently "
+ "replaced by the XMP content of \"%1\".\n"
+ "Do you want to continue ?", importXMPFile.fileName()),
+ i18n("Import XMP Metadata")) != KMessageBox::Yes)
+ return;
+
+ KUrl::List imageURLs = images.images();
+ KUrl::List updatedURLs;
+ QStringList errorFiles;
+
+ for( KUrl::List::iterator it = imageURLs.begin() ;
+ it != imageURLs.end(); ++it)
+ {
+ KUrl url = *it;
+ bool ret = false;
+
+ if (!KExiv2Iface::KExiv2::isReadOnly(url.path()))
+ {
+ ret = true;
+ KExiv2Iface::KExiv2 exiv2Iface;
+ ret &= exiv2Iface.load(url.path());
+ ret &= exiv2Iface.setXmp(xmpData);
+ ret &= exiv2Iface.save(url.path());
+ }
+
+ if (!ret)
+ errorFiles.append(url.fileName());
+ else
+ updatedURLs.append(url);
+ }
+
+ // We use kipi interface refreshImages() method to tell to host than
+ // metadata from pictures have changed and need to be re-read.
+
+ m_interface->refreshImages(updatedURLs);
+
+ if (!errorFiles.isEmpty())
+ {
+ KMessageBox::errorList(
+ kapp->activeWindow(),
+ i18n("Unable to set XMP metadata from:"),
+ errorFiles,
+ i18n("Import XMP Metadata"));
+ }
}
void Plugin_MetadataEdit::slotEditComments()
More information about the Kde-imaging
mailing list