digiKam
Loading...
Searching...
No Matches
dmetadata.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2006-02-23
7 * Description : item metadata interface
8 *
9 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2006-2013 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
11 * SPDX-FileCopyrightText: 2013 by Veaceslav Munteanu <veaceslav dot munteanu90 at gmail dot com>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QByteArray>
22#include <QUrl>
23
24// Local includes
25
26#include "digikam_config.h"
27#include "digikam_export.h"
28#include "metaengine.h"
29#include "metaengine_data.h"
31#include "metadatainfo.h"
32#include "captionvalues.h"
33#include "photoinfocontainer.h"
34#include "videoinfocontainer.h"
35#include "dmetadatasettings.h"
36
37namespace Digikam
38{
39
40class Template;
41class IccProfile;
42
43// TODO: merge with MetaEngine class.
44
45class DIGIKAM_EXPORT DMetadata : public MetaEngine
46{
47
48public:
49
55 {
56 VIDEOCOLORMODEL_UNKNOWN = 1000,
60 VIDEOCOLORMODEL_BT601
61 };
62
63public:
64
65 typedef QMap<QString, QString> CountryCodeMap;
66
67public:
68
69 DMetadata();
70 explicit DMetadata(const QString& filePath);
71 explicit DMetadata(const MetaEngineData& data);
72 ~DMetadata() = default;
73
74public: // Settings helpers
75
76 void registerMetadataSettings();
77 void setSettings(const MetaEngineSettingsContainer& settings);
78
79public: // File I/O helpers
80
87 bool load(const QString& filePath, bool videoAll = false, Backend* backend = nullptr);
88 bool save(const QString& filePath, bool setVersion = false) const;
89 bool applyChanges(bool setVersion = false) const;
90
94 bool loadUsingRawEngine(const QString& filePath);
95
96public: // History helpers
97
98 QString getItemHistory() const;
99 bool setItemHistory(const QString& imageHistoryXml) const;
100 bool hasItemHistoryTag() const;
101
102 QString getItemUniqueId() const;
103 bool setItemUniqueId(const QString& uuid) const;
104
105public: // Faces helpers
106
111 bool getItemFacesMap(QMultiMap<QString, QVariant>& facesPath) const;
112
119 bool setItemFacesMap(const QMultiMap<QString, QVariant>& facesPath, bool write, const QSize& size = QSize()) const;
120
124 bool removeItemFacesMap() const;
125
126public: // Tags helpers
127
128 bool getItemTagsPath(QStringList& tagsPath,
129 const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
130 bool setItemTagsPath(const QStringList& tagsPath,
131 const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
132
133 bool getACDSeeTagsPath(QStringList& tagsPath) const;
134
135 bool setACDSeeTagsPath(const QStringList& tagsPath) const;
136
137public: // Comments helpers
138
139 CaptionsMap getItemComments(const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
140 bool setItemComments(const CaptionsMap& comments,
141 const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
142
143 CaptionsMap getItemTitles(const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
144 bool setItemTitles(const CaptionsMap& title,
145 const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
146
147 static MetaEngine::AltLangMap toAltLangMap(const QVariant& var);
148
149public: // Labels helpers
150
151 int getItemRating(const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
152 bool setItemRating(int rating,
153 const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
154
155 int getItemPickLabel(const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
156 bool setItemPickLabel(int pickId,
157 const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
158
159 int getItemColorLabel(const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
160 bool setItemColorLabel(int colorId,
161 const DMetadataSettingsContainer& settings = DMetadataSettings::instance()->settings()) const;
162
163public: // Template helpers
164
165 bool setMetadataTemplate(const Template& t) const;
166 Template getMetadataTemplate() const;
167 bool removeMetadataTemplate() const;
168
173 bool getCopyrightInformation(Template& t) const;
174
175public: // EXIF helpers
176
183 IccProfile getIccProfile() const;
184
188 bool setIccProfile(const IccProfile& profile);
189
193 bool removeExifColorSpace() const;
194
198 int getMSecsInfo() const;
199
204 bool mSecTimeStamp(const char* const exifTagName, int& ms) const;
205
206 bool removeExifTags(const QStringList& tagFilters);
207
208private:
209
210 QString getExifTagStringFromTagsList(const QStringList& tagsList) const;
211
212public: // IPTC helpers
213
214 IptcCoreContactInfo getCreatorContactInfo() const;
215 bool setCreatorContactInfo(const IptcCoreContactInfo& info) const;
216
217 IptcCoreLocationInfo getIptcCoreLocation() const;
218 bool setIptcCoreLocation(const IptcCoreLocationInfo& location) const;
219
220 QStringList getIptcCoreSubjects() const;
221
222 bool removeIptcTags(const QStringList& tagFilters);
223
227 static CountryCodeMap countryCodeMap();
228
232 static CountryCodeMap countryCodeMap2();
233
234private:
235
236 bool setIptcTag(const QString& text,
237 int maxLength,
238 const char* const debugLabel,
239 const char* const tagKey) const;
240
241 QVariant fromIptcEmulateList(const char* const iptcTagName) const;
242 QVariant fromIptcEmulateLangAlt(const char* const iptcTagName) const;
243
244public: // XMP helpers
245
252 bool addToXmpTagStringBag(const char* const xmpTagName, const QStringList& entriesToAdd) const;
253
259 bool removeFromXmpTagStringBag(const char* const xmpTagName, const QStringList& entriesToRemove) const;
260
264 QStringList getXmpKeywords() const;
265
272 bool setXmpKeywords(const QStringList& newKeywords) const;
273
278 bool removeXmpKeywords(const QStringList& keywordsToRemove);
279
283 QStringList getXmpSubjects() const;
284
291 bool setXmpSubjects(const QStringList& newSubjects) const;
292
297 bool removeXmpSubjects(const QStringList& subjectsToRemove);
298
303 QStringList getXmpSubCategories() const;
304
311 bool setXmpSubCategories(const QStringList& newSubCategories) const;
312
317 bool removeXmpSubCategories(const QStringList& categoriesToRemove);
318
319 bool removeXmpTags(const QStringList& tagFilters);
320
321private:
322
323 QVariant fromXmpList(const char* const xmpTagName) const;
324 QVariant fromXmpLangAlt(const char* const xmpTagName) const;
325
326public: // Video helpers
327
331 bool loadUsingFFmpeg(const QString& filePath);
332
336 VideoInfoContainer getVideoInformation() const;
337
341 static QString videoColorModelToString(VIDEOCOLORMODEL videoColorModel);
342
343public: // Photo helpers
344
352 QString getLensDescription() const;
353
357 QString getCameraSerialNumber() const;
358
359 PhotoInfoContainer getPhotographInformation() const;
360
361 static double apexApertureToFNumber(double aperture);
362 static double apexShutterSpeedToExposureTime(double shutterSpeed);
363
364public: // Generic helpers
365
370 QVariant getMetadataField(MetadataInfo::Field field) const;
371 QVariantList getMetadataFields(const MetadataFields& fields) const;
372
377 static QString valueToString (const QVariant& value, MetadataInfo::Field field);
378 static QStringList valuesToString(const QVariantList& list, const MetadataFields& fields);
379
384 static QMap<int, QString> possibleValuesForEnumField(MetadataInfo::Field field);
385
386private:
387
388 QVariant fromExifOrXmp(const char* const exifTagName, const char* const xmpTagName) const;
389 QVariant fromIptcOrXmp(const char* const iptcTagName, const char* const xmpTagName) const;
390 QVariant fromExifOrXmpList(const QStringList& tagList) const;
391 bool hasValidField(const QVariantList& list) const;
392 QVariant toStringListVariant(const QStringList& list) const;
393 QVariant toStringVariant(const QString& str) const;
394
395#ifdef HAVE_HEIF
396
397private:
398
402 bool loadUsingLibheif(const QString& filePath);
403
404#endif
405
406private:
407
411 bool loadUsingImageMagick(const QString& filePath);
412
413private:
414
418 bool loadUsingExifTool(const QString& filePath, bool videoAll = false);
419 bool saveUsingExifTool(const QString& filePath) const;
420};
421
422} // namespace Digikam
Definition captionvalues.h:59
Definition dmetadatasettingscontainer.h:143
Definition dmetadata.h:46
~DMetadata()=default
VIDEOCOLORMODEL
Definition dmetadata.h:55
@ VIDEOCOLORMODEL_BT709
Definition dmetadata.h:59
@ VIDEOCOLORMODEL_SRGB
Definition dmetadata.h:58
@ VIDEOCOLORMODEL_OTHER
Definition dmetadata.h:57
QMap< QString, QString > CountryCodeMap
Definition dmetadata.h:65
Definition iccprofile.h:33
Definition metadatainfo.h:54
Definition metadatainfo.h:31
Definition metaengine_data.h:31
Definition metaenginesettingscontainer.h:38
Definition metaengine.h:48
Backend
Definition metaengine.h:114
QMap< QString, QString > AltLangMap
Definition metaengine.h:135
Definition photoinfocontainer.h:31
Definition template.h:36
Definition videoinfocontainer.h:31
qulonglong value
Definition itemviewutilities.cpp:585
Field
Definition metadatainfo.h:83
Definition datefolderview.cpp:34
QList< MetadataInfo::Field > MetadataFields
Definition metadatainfo.h:183