more work on synchronizing metadata with xmp sidecars

(cherry picked from commit 81bbff6e6ae87bd35e8050a1cc621297ca24939b)
This commit is contained in:
Alberto Griggio
2019-05-14 07:03:07 -07:00
committed by Lawrence Lee
parent caa23df465
commit 1a771fa211
18 changed files with 611 additions and 173 deletions

View File

@@ -33,6 +33,7 @@
#include <glib/gstdio.h>
#include "../rtengine/dynamicprofile.h"
#include "../rtengine/metadata.h"
#include "../rtengine/profilestore.h"
#include "../rtengine/settings.h"
#include "guiutils.h"
@@ -1026,6 +1027,10 @@ void Thumbnail::updateCache (bool updatePParams, bool updateCacheImageData)
if (updateCacheImageData) {
cfs.save (getCacheFileName ("data", ".txt"));
}
if (updatePParams && pparamsValid) {
saveMetadata();
}
}
Thumbnail::~Thumbnail ()
@@ -1204,6 +1209,33 @@ void Thumbnail::getCamWB(double& temp, double& green) const
}
}
void Thumbnail::saveMetadata()
{
if (options.rtSettings.metadata_xmp_sync != rtengine::Settings::MetadataXmpSync::READ_WRITE) {
return;
}
if (pparams->exif.empty() && pparams->iptc.empty()) {
return;
}
auto fn = rtengine::Exiv2Metadata::xmpSidecarPath(fname);
try {
auto xmp = rtengine::Exiv2Metadata::getXmpSidecar(fname);
rtengine::Exiv2Metadata meta;
meta.xmpData() = std::move(xmp);
meta.setExif(pparams->exif);
meta.setIptc(pparams->iptc);
meta.saveToXmp(fn);
if (options.rtSettings.verbose) {
std::cout << "saved edited metadata for " << fname << " to "
<< fn << std::endl;
}
} catch (Exiv2::AnyError &exc) {
std::cerr << "ERROR saving metadata for " << fname << " to " << fn
<< ": " << exc.what() << std::endl;
}
}
void Thumbnail::getSpotWB(int x, int y, int rect, double& temp, double& green)
{
if (tpp) {