21#include "exiv2extractor.h" 
   23#include <KExiv2/KExiv2> 
   33#include "geolocation/cities.h" 
   34#include "geolocation/city.h" 
   52Exiv2Extractor::~Exiv2Extractor()
 
   58void Exiv2Extractor::setUrl(
const QUrl &url)
 
   60    qDebug() << 
"Start parsing image file url for metadata";
 
   63    if (!
QFileInfo::exists(m_url.toLocalFile()) || m_url.isEmpty() || !m_url.isValid()) {
 
   64        qDebug() << 
"Image file is not valid or does not exists.";
 
   68    m_error = !m_exiv2->load(m_url.toLocalFile());
 
   70        qWarning() << 
"Failed to load Exiv2 metadata";
 
   73Coordinates Exiv2Extractor::extractGPS()
 const 
   78    if(!m_exiv2->initializeGPSInfo(
true))
 
   80        qWarning() << 
"failed to initialized GPS data";
 
   88    m_exiv2->getGPSLatitudeNumber(&latitude);
 
   89    m_exiv2->getGPSLongitudeNumber(&longitude);
 
   90    m_exiv2->getGPSAltitude(&altitude);
 
   92    return {altitude, latitude, longitude};
 
   96bool Exiv2Extractor::error()
 const 
  101QString Exiv2Extractor::getExifTagString(
const char* exifTagName, 
bool escapeCR)
 const 
  106    return m_exiv2->getExifTagString(exifTagName, escapeCR);
 
  109QByteArray Exiv2Extractor::getExifTagData(
const char* exifTagName)
 const 
  114    return m_exiv2->getExifTagData(exifTagName);
 
  117QVariant Exiv2Extractor::getExifTagVariant(
const char* exifTagName, 
bool rationalAsListOfInts, 
bool stringEscapeCR, 
int component)
 const 
  121    return m_exiv2->getExifTagVariant(exifTagName, rationalAsListOfInts, stringEscapeCR, component);
 
  124MetaDataMap Exiv2Extractor::getExifTagsDataList(
const QStringList& exifKeysFilter, 
bool invertSelection)
 const 
  128    return m_exiv2->getExifTagsDataList(exifKeysFilter, invertSelection);
 
  131QString Exiv2Extractor::getExifComment()
 const 
  135    return m_exiv2->getExifComment();
 
  138QString Exiv2Extractor::GPSString()
 const 
  145    if(!m_city.isValid())
 
  150    return m_city.name();
 
  153QString Exiv2Extractor::cityId()
 const 
  161City Exiv2Extractor::city()
 const 
  166    auto c = extractGPS();
 
  168    if(c.latitude == 0.0 || c.longitude == 0.0)
 
  173    return Cities::getInstance()->findCity(c.latitude, c.longitude);
 
  176QSize Exiv2Extractor::getPixelSize()
 
  181    return m_exiv2->getPixelSize();
 
  184bool Exiv2Extractor::applyChanges()
 
  188    return m_exiv2->applyChanges();
 
  191bool Exiv2Extractor::setGpsData(
const double latitude, 
const double longitude, 
const double altitude)
 
  195    qDebug() << 
"Setting gps data as:" << latitude << longitude << altitude;
 
  196    return m_exiv2->setGPSInfo(altitude,latitude, longitude);
 
  201bool Exiv2Extractor::removeGpsData()
 
  205    return m_exiv2->removeGPSInfo();
 
  208bool Exiv2Extractor::clearData()
 
  213    if(m_exiv2->isEmpty())
 
  217    ok = m_exiv2->clearExif ( );
 
  221bool Exiv2Extractor::writeTag(
const char *tagName, 
const QVariant &value)
 
  225    return m_exiv2->setExifTagVariant(tagName, value);
 
  228bool Exiv2Extractor::removeTag(
const char *tagName)
 
  232    return m_exiv2->removeExifTag(tagName);
 
  235bool Exiv2Extractor::setComment(
const QString &comment)
 
  239    return m_exiv2->setExifComment(comment);
 
  242QString Exiv2Extractor::getComments()
 const 
  246    return m_exiv2->getCommentsDecoded();
 
  249bool Exiv2Extractor::removeComment()
 const 
  253    auto ok = m_exiv2->removeExifTag(
"Exif.Image.ImageDescription");
 
  254    ok = m_exiv2->removeExifTag(
"Exif.Photo.UserComment");
 
A class for representing the GPS coordinates and information of a city.
 
static bool cleanupExiv2()
 
bool exists() const const