digiKam
Loading...
Searching...
No Matches
coredb.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 : 2004-06-18
7 * Description : Core database interface.
8 *
9 * SPDX-FileCopyrightText: 2004-2005 by Renchi Raju <renchi dot raju at gmail dot com>
10 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * SPDX-FileCopyrightText: 2006-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
12 * SPDX-FileCopyrightText: 2012 by Andi Clemens <andi dot clemens at gmail dot com>
13 *
14 * SPDX-License-Identifier: GPL-2.0-or-later
15 *
16 * ============================================================ */
17
18#pragma once
19
20// Qt includes
21
22#include <QStringList>
23#include <QDateTime>
24#include <QVariant>
25#include <QString>
26#include <QList>
27#include <QPair>
28#include <QUuid>
29#include <QMap>
30
31// Local includes
32
33#include "digikam_export.h"
34#include "collectionlocation.h"
35#include "coredbalbuminfo.h"
36#include "coredbfields.h"
37#include "coredbaccess.h"
38#include "coredbconstants.h"
39#include "dbenginesqlquery.h"
40#include "album.h"
41
42namespace Digikam
43{
44
45class CoreDbBackend;
46
47class DIGIKAM_DATABASE_EXPORT CoreDB
48{
49public:
50
58 void setSetting(const QString& keyword, const QString& value);
59
67 QString getSetting(const QString& keyword) const;
68
75 void getFilterSettings(QStringList* imageFilter, QStringList* videoFilter, QStringList* audioFilter);
76
81 void getUserFilterSettings(QString* imageFilterString, QString* videoFilterString, QString* audioFilterString);
82
86 void setFilterSettings(const QStringList& imageFilter, const QStringList& videoFilter, const QStringList& audioFilter);
87
93 void setUserFilterSettings(const QStringList& imageFilter, const QStringList& videoFilter, const QStringList& audioFilter);
94
95 void setIgnoreDirectoryFilterSettings(const QStringList& ignoreDirectoryFilter);
96
97 void setUserIgnoreDirectoryFilterSettings(const QStringList& ignoreDirectoryFilters);
98
99 void getUserIgnoreDirectoryFilterSettings(QString* ignoreDirectoryFilterString);
100
101 void getIgnoreDirectoryFilterSettings(QStringList* ignoreDirectoryFilter);
102
107 QUuid databaseUuid();
108
114 QString getDatabaseEncoding() const;
115
120 int getUniqueHashVersion() const;
121
122 void setUniqueHashVersion(int version);
123
124 // ----------- AlbumRoot operations -----------
125
130 QList<AlbumRootInfo> getAlbumRoots() const;
131
139 int addAlbumRoot(CollectionLocation::Type type, const QString& identifier,
140 const QString& specificPath, const QString& label) const;
141
146 void deleteAlbumRoot(int rootId);
147
153 void migrateAlbumRoot(int rootId, const QString& identifier);
154
160 void setAlbumRootLabel(int rootId, const QString& newLabel);
161
167 void setAlbumRootPath(int rootId, const QString& newPath);
168
172 void setAlbumRootType(int rootId, CollectionLocation::Type newType);
173
177 void setAlbumRootCaseSensitivity(int rootId, CollectionLocation::CaseSensitivity caseSensitivity);
178
179 // ----------- Album Listing operations -----------
184 AlbumInfo::List scanAlbums() const;
185
190 TagInfo::List scanTags() const;
191 TagInfo getTagInfo(int tagId) const;
192
197 SearchInfo::List scanSearches() const;
198
203 QList<AlbumShortInfo> getAlbumShortInfos() const;
204
209 QList<TagShortInfo> getTagShortInfos() const;
210
211 // ----------- Operations on PAlbums -----------
212
222 int addAlbum(int albumRootId, const QString& relativePath,
223 const QString& caption,
224 const QDate& date, const QString& collection) const;
225
235 int getAlbumForPath(int albumRootId, const QString& relativePath, bool create = true) const;
236
243 QList<int> getAlbumAndSubalbumsForPath(int albumRootId, const QString& relativePath) const;
244
249 QList<int> getAlbumsOnAlbumRoot(int albumRootId) const;
250
256 void deleteAlbum(int albumID);
257
261 void makeStaleAlbum(int albumID);
262
267 void deleteStaleAlbums();
268
274 bool copyAlbumProperties(int srcAlbumID, int dstAlbumID) const;
275
279 void renameAlbum(int albumID, int newAlbumRootId, const QString& newRelativePath);
280
286 void setAlbumCaption(int albumID, const QString& caption);
287
293 void setAlbumCategory(int albumID, const QString& category);
294
300 void setAlbumDate(int albumID, const QDate& date);
301
307 void setAlbumModificationDate(int albumID, const QDateTime& modificationDate);
308
314 void setAlbumIcon(int albumID, qlonglong iconID);
315
321 int getAlbumRootId(int albumID) const;
322
329 QString getAlbumRelativePath(int albumID) const;
330
336 QDate getAlbumLowestDate(int albumID) const;
337
343 QDate getAlbumHighestDate(int albumID) const;
344
350 QDate getAlbumAverageDate(int albumID) const;
351
357 QPair<int, int> getNumberOfAllItemsAndAlbums(int albumID) const;
358
363 int getNumberOfItemsInAlbum(int albumID) const;
364
369 QDateTime getAlbumModificationDate(int albumID) const;
370
375 QMap<QString, QDateTime> getAlbumModificationMap(int albumRootId) const;
376
381 QHash<int, int> getNumberOfImagesInAlbums() const;
382
383 // ----------- Operations on TAlbums -----------
384
395 int addTag(int parentTagID, const QString& name,
396 const QString& iconKDE, qlonglong iconID) const;
397
402 // TODO move to other place (AlbumManager)
403 QList<int> getRecentlyAssignedTags() const;
404
410 void deleteTag(int tagID);
411
417 void setTagName(int tagID, const QString& name);
418
427 void setTagIcon(int tagID, const QString& iconKDE, qlonglong iconID);
428
435 void setTagParentID(int tagID, int newParentTagID);
436
440 QList<TagProperty> getTagProperties() const;
441
445 QList<TagProperty> getTagProperties(int tagID) const;
446
450 QList<TagProperty> getTagProperties(const QString& property) const;
451
457 void addTagProperty(int tagId, const QString& property, const QString& value);
458 void addTagProperty(const TagProperty& property);
459
466 void removeTagProperties(int tagId, const QString& property = QString(), const QString& value = QString());
467
472 QList<int> getTagsWithProperty(const QString& property) const;
473
474 // ----------- Operations on SAlbums -----------
475
483 int addSearch(DatabaseSearch::Type type, const QString& name, const QString& query) const;
484
491 void updateSearch(int searchID, DatabaseSearch::Type type,
492 const QString& name, const QString& query);
493
498 void deleteSearch(int searchID);
499
503 void deleteSearches(DatabaseSearch::Type type);
504
508 SearchInfo getSearchInfo(int searchId) const;
509
513 QString getSearchQuery(int searchId) const;
514
515 // ----------- Adding and deleting Items -----------
520 qlonglong addItem(int albumID, const QString& name,
522 DatabaseItem::Category category,
523 const QDateTime& modificationDate,
524 qlonglong fileSize,
525 const QString& uniqueHash) const;
526
532 void deleteItem(int albumID, const QString& file);
533
539 void deleteItem(qlonglong imageId);
540
545 void deleteObsoleteItem(qlonglong imageId);
546
557 void removeItemsFromAlbum(int albumID, const QList<qlonglong>& ids_forInformation = QList<qlonglong>());
558
567 void removeItems(const QList<qlonglong>& itemIDs, const QList<int>& albumIDs = QList<int>());
568
577 void removeItemsPermanently(const QList<qlonglong>& itemIDs, const QList<int>& albumIDs = QList<int>());
578
583 void deleteRemovedItems();
584
585 // ----------- Finding items -----------
586
593 qlonglong getImageId(int albumID, const QString& name) const;
594
602 QList<qlonglong> getImageIds(int albumID, const QString& name,
603 DatabaseItem::Status status) const;
604
610 QList<qlonglong> getImageIds(DatabaseItem::Status status) const;
611
618 QList<qlonglong> getImageIds(DatabaseItem::Status status,
619 DatabaseItem::Category category) const;
620
631 qlonglong findImageId(int albumID, const QString& name,
633 DatabaseItem::Category category,
634 qlonglong fileSize,
635 const QString& uniqueHash) const;
636
645
654 QStringList getItemNamesInAlbum(int albumID, bool recursive = false) const;
655
659 QList<qlonglong> getAllItems() const;
660
666 QHash<qlonglong, QPair<int, int> > getAllItemsWithAlbum() const;
667
675 qlonglong getItemFromAlbum(int albumID, const QString& fileName) const;
676
681 QList<ItemScanInfo> getItemScanInfos(int albumID) const;
682
691 QStringList getItemURLsInAlbum(int albumID, ItemSortOrder order = NoItemSorting) const;
692
698 QList<qlonglong> getItemIDsInAlbum(int albumID) const;
699
707 QMap<qlonglong, QString> getItemIDsAndURLsInAlbum(int albumID) const;
708
717 QStringList getItemURLsInTag(int tagID, bool recursive = false) const;
718
725 QList<qlonglong> getItemIDsInTag(int tagID, bool recursive = false) const;
726
730 QVariantList getAllCreationDates() const;
731
735 QList<qlonglong> getObsoleteItemIds() const;
736
737 // ----------- Item properties -----------
738
744 int getItemAlbum(qlonglong imageID) const;
745
751 QString getItemName(qlonglong imageID) const;
752
756 ItemShortInfo getItemShortInfo(qlonglong imageID) const;
757
761 ItemShortInfo getItemShortInfo(int albumRootId, const QString& relativePath,
762 const QString& name) const;
763
767 ItemScanInfo getItemScanInfo(qlonglong imageID) const;
768
774 void updateItem(qlonglong imageID,
775 DatabaseItem::Category category,
776 const QDateTime& modificationDate,
777 qlonglong fileSize,
778 const QString& uniqueHash);
779
784 void setItemStatus(qlonglong imageID, DatabaseItem::Status status);
785
791 void setItemAlbum(qlonglong imageID, qlonglong albumId);
792
796 void setItemManualOrder(qlonglong imageID, qlonglong value);
797
801 void setItemModificationDate(qlonglong imageID, const QDateTime& modificationDate);
802
807 void renameItem(qlonglong imageID, const QString& newName);
808
821 QVariantList getImagesFields(qlonglong imageID,
822 DatabaseFields::Images imagesFields) const;
823
841 void addItemInformation(qlonglong imageID, const QVariantList& infos,
842 DatabaseFields::ItemInformation fields = DatabaseFields::ItemInformationAll);
843
850 void changeItemInformation(qlonglong imageID, const QVariantList& infos,
851 DatabaseFields::ItemInformation fields = DatabaseFields::ItemInformationAll);
852
856 QVariantList getItemInformation(qlonglong imageID,
857 DatabaseFields::ItemInformation infoFields
858 = DatabaseFields::ItemInformationAll) const;
859
884 void addImageMetadata(qlonglong imageID, const QVariantList& infos,
885 DatabaseFields::ImageMetadata fields = DatabaseFields::ImageMetadataAll);
886
892 void changeImageMetadata(qlonglong imageID, const QVariantList& infos,
893 DatabaseFields::ImageMetadata fields = DatabaseFields::ImageMetadataAll);
894
898 QVariantList getImageMetadata(qlonglong imageID,
899 DatabaseFields::ImageMetadata metadataFields = DatabaseFields::ImageMetadataAll) const;
900
915 void addVideoMetadata(qlonglong imageID, const QVariantList& infos,
916 DatabaseFields::VideoMetadata fields = DatabaseFields::VideoMetadataAll);
917
923 void changeVideoMetadata(qlonglong imageID, const QVariantList& infos,
924 DatabaseFields::VideoMetadata fields = DatabaseFields::VideoMetadataAll);
925
929 QVariantList getVideoMetadata(qlonglong imageID,
930 DatabaseFields::VideoMetadata metadataFields = DatabaseFields::VideoMetadataAll) const;
931
949 void addItemPosition(qlonglong imageID, const QVariantList& infos,
950 DatabaseFields::ItemPositions fields = DatabaseFields::ItemPositionsAll);
951
957 void changeItemPosition(qlonglong imageID, const QVariantList& infos,
958 DatabaseFields::ItemPositions fields = DatabaseFields::ItemPositionsAll);
959
963 QVariantList getItemPosition(qlonglong imageID,
964 DatabaseFields::ItemPositions positionFields = DatabaseFields::ItemPositionsAll) const;
965
966 QVariantList getItemPositions(const QList<qlonglong>& imageIDs, DatabaseFields::ItemPositions fields) const;
967
971 void removeItemPosition(qlonglong imageid);
972
976 void removeItemPositionAltitude(qlonglong imageid);
977
981 QList<CommentInfo> getItemComments(qlonglong imageID) const;
982
998 int setImageComment(qlonglong imageID, const QString& comment, DatabaseComment::Type type,
999 const QString& language = QString(), const QString& author = QString(),
1000 const QDateTime& date = QDateTime()) const;
1001
1011 void changeImageComment(int commentId, qlonglong imageID, const QVariantList& infos,
1012 DatabaseFields::ItemComments fields = DatabaseFields::ItemCommentsAll);
1013
1017 void removeImageComment(int commentId, qlonglong imageID);
1018
1022 void removeAllImageComments(qlonglong imageID);
1023
1027 QString getImageProperty(qlonglong imageID, const QString& property) const;
1028
1032 void setImageProperty(qlonglong imageID, const QString& property, const QString& value);
1033 void removeImageProperty(qlonglong imageID, const QString& property);
1034 void removeImagePropertyByName(const QString& property);
1035 void removeAllImageProperties(qlonglong imageID);
1036
1037 QStringList getAllImagePropertiesByName(const QString& property) const;
1038
1043 QList<CopyrightInfo> getItemCopyright(qlonglong imageID, const QString& property = QString()) const;
1044
1051
1055 void setItemCopyrightProperty(qlonglong imageID, const QString& property,
1056 const QString& value, const QString& extraValue = QString(),
1057 CopyrightPropertyUnique uniqueness = PropertyUnique);
1058
1065 void removeItemCopyrightProperties(qlonglong imageID, const QString& property = QString(),
1066 const QString& extraValue = QString(),
1067 const QString& value = QString() /* NOTE parameter order */);
1068
1072 void removeAllItemCopyrightProperties(qlonglong imageID);
1073
1077 QList<qlonglong> findByNameAndCreationDate(const QString& fileName, const QDateTime& creationDate) const;
1078
1082 ImageHistoryEntry getItemHistory(qlonglong imageId) const;
1083
1087 QString getImageUuid(qlonglong imageId) const;
1088
1092 QList<qlonglong> getItemsForUuid(const QString& uuid) const;
1093
1097 void setItemHistory(qlonglong imageId, const QString& history);
1098 void setImageUuid(qlonglong imageId, const QString& uuid);
1099
1104 bool hasImageHistory(qlonglong imageId) const;
1105
1109 void addImageRelation(qlonglong subjectId, qlonglong objectId, DatabaseRelation::Type type);
1110 void addImageRelation(const ImageRelation& relation);
1111
1115 void addImageRelations(const QList<qlonglong>& subjectIds, const QList<qlonglong>& objectIds,
1117
1122 void removeImageRelation(qlonglong subjectId, qlonglong objectId, DatabaseRelation::Type type);
1123 void removeImageRelation(const ImageRelation& relation);
1124
1125 QList<qlonglong> removeAllImageRelationsTo(qlonglong objectId, DatabaseRelation::Type type) const;
1126 QList<qlonglong> removeAllImageRelationsFrom(qlonglong subjectId, DatabaseRelation::Type type) const;
1127
1133 QList<qlonglong> getImagesRelatedFrom(qlonglong subjectId,
1134 DatabaseRelation::Type type = DatabaseRelation::UndefinedType) const;
1135 bool hasImagesRelatedFrom(qlonglong subjectId,
1136 DatabaseRelation::Type type = DatabaseRelation::UndefinedType) const;
1137 QVector<QList<qlonglong> > getImagesRelatedFrom(const QList<qlonglong>& subjectIds,
1138 DatabaseRelation::Type type = DatabaseRelation::UndefinedType) const;
1144 QList<qlonglong> getImagesRelatingTo(qlonglong objectId,
1145 DatabaseRelation::Type type = DatabaseRelation::UndefinedType) const;
1146 bool hasImagesRelatingTo(qlonglong objectId,
1147 DatabaseRelation::Type type = DatabaseRelation::UndefinedType) const;
1148 QVector<QList<qlonglong> > getImagesRelatingTo(const QList<qlonglong>& objectIds,
1149 DatabaseRelation::Type type = DatabaseRelation::UndefinedType) const;
1150
1157 QList<QPair<qlonglong, qlonglong> > getRelationCloud(qlonglong imageId,
1159 = DatabaseRelation::UndefinedType) const;
1160
1165 QList<qlonglong> getOneRelatedImageEach(const QList<qlonglong>& ids,
1166 DatabaseRelation::Type type = DatabaseRelation::UndefinedType) const;
1167
1171 QList<qlonglong> getRelatedImagesToByType(DatabaseRelation::Type type) const;
1172
1179 QStringList getDirtyOrMissingFaceImageUrls() const;
1180
1189 QList<ItemScanInfo> getIdenticalFiles(qlonglong id) const;
1190 QList<ItemScanInfo> getIdenticalFiles(const QString& uniqueHash, qlonglong fileSize, qlonglong sourceId = -1) const;
1191
1196 QStringList getItemsURLsWithTag(int tagId) const;
1197
1201 qlonglong getFirstItemWithFaceTag(int tagId) const;
1202
1203 // ----------- Items and their tags -----------
1204
1211 void addItemTag(qlonglong imageID, int tagID, bool newTag = false);
1212
1219 void addItemTag(int albumID, const QString& name, int tagID);
1220
1225 void addTagsToItems(const QList<qlonglong>& imageIDs, const QList<int>& tagIDs);
1226
1232 void removeItemTag(qlonglong imageID, int tagID);
1233
1239 void removeItemAllTags(qlonglong imageID, const QList<int>& currentTagIds);
1240
1245 void removeTagsFromItems(const QList<qlonglong>& imageIDs, const QList<int>& tagIDs);
1246
1252 QStringList getItemTagNames(qlonglong imageID) const;
1253
1259 QList<int> getItemTagIDs(qlonglong imageID) const;
1260
1265 QVector<QList<int> > getItemsTagIDs(const QList<qlonglong>& imageIds) const;
1266
1271 QList<ImageTagProperty> getImageTagProperties(qlonglong imageId, int tagId = -1) const;
1272
1276 QList<int> getTagIdsWithProperties(qlonglong imageId) const;
1277
1283 void addImageTagProperty(qlonglong imageId, int tagId, const QString& property, const QString& value);
1284 void addImageTagProperty(const ImageTagProperty& property);
1285
1294 void removeImageTagProperties(qlonglong imageId, int tagId = -1, const QString& property = QString(),
1295 const QString& value = QString());
1296
1303 bool hasTags(const QList<qlonglong>& imageIDList) const;
1304
1311 QList<int> getItemCommonTagIDs(const QList<qlonglong>& imageIDList) const;
1312
1317 QHash<int, int> getNumberOfImagesInTags() const;
1318
1323 QHash<int, int> getNumberOfImagesInTagProperties(const QString& property) const;
1324
1328 int getNumberOfImagesInTagProperties(int tagId, const QString& property) const;
1329
1333 QList<qlonglong> getImagesWithImageTagProperty(int tagId, const QString& property) const;
1334
1338 QList<qlonglong> getImagesWithProperty(const QString& property) const;
1339
1344 QMap<QString, int> getFormatStatistics() const;
1345 QMap<QString, int> getFormatStatistics(DatabaseItem::Category category) const;
1346
1350 QStringList getListFromImageMetadata(DatabaseFields::ImageMetadata field) const;
1351
1352 // ----------- Moving and Copying Items -----------
1353
1362 void moveItem(int srcAlbumID, const QString& srcName,
1363 int dstAlbumID, const QString& dstName);
1364
1375 qlonglong copyItem(int srcAlbumID, const QString& srcName,
1376 int dstAlbumID, const QString& dstName);
1377
1381 void copyImageAttributes(qlonglong srcId, qlonglong destId);
1382
1386 void copyImageProperties(qlonglong srcId, qlonglong dstId);
1387
1391 void copyImageTags(qlonglong srcId, qlonglong dstId);
1392
1393 // ----------- Download history methods -----------
1394
1399 int findInDownloadHistory(const QString& identifier, const QString& name,
1400 qlonglong fileSize, const QDateTime& date) const;
1401
1406 int addToDownloadHistory(const QString& identifier, const QString& name,
1407 qlonglong fileSize, const QDateTime& date) const;
1408
1409 QList<QVariant> getImageIdsFromArea(qreal lat1, qreal lat2, qreal lng1, qreal lng2,
1410 int sortMode, const QString& sortBy) const;
1411
1412 // ----------- Database shrinking methods ----------
1413
1417 bool integrityCheck() const;
1418
1422 void vacuum();
1423
1424 // ----------- Static helper methods for constructing SQL queries -----------
1425
1426 static QStringList imagesFieldList(DatabaseFields::Images fields);
1427 static QStringList imageInformationFieldList(DatabaseFields::ItemInformation fields);
1428 static QStringList videoMetadataFieldList(DatabaseFields::VideoMetadata fields);
1429 static QStringList imageMetadataFieldList(DatabaseFields::ImageMetadata fields);
1430 static QStringList imagePositionsFieldList(DatabaseFields::ItemPositions fields);
1431 static QStringList imageCommentsFieldList(DatabaseFields::ItemComments fields);
1432 static void addBoundValuePlaceholders(QString& query, int count);
1433
1434public:
1435
1437
1441 explicit CoreDB(CoreDbBackend* const backend);
1442
1446 ~CoreDB();
1447
1448protected:
1449
1450 QList<qlonglong> getRelatedImages(qlonglong id, bool fromOrTo,
1451 DatabaseRelation::Type type, bool boolean) const;
1452 QVector<QList<qlonglong> > getRelatedImages(QList<qlonglong> ids, bool fromOrTo,
1453 DatabaseRelation::Type type, bool boolean) const;
1454
1455private:
1456
1457 // Disable
1458 CoreDB(const CoreDB&) = delete;
1459 CoreDB& operator=(const CoreDB&) = delete;
1460
1461 void readSettings();
1462 void writeSettings();
1463
1464private:
1465
1466 class Private;
1467 Private* const d = nullptr;
1468};
1469
1470} // namespace Digikam
QList< AlbumInfo > List
Definition coredbalbuminfo.h:65
CaseSensitivity
Definition collectionlocation.h:100
Type
Definition collectionlocation.h:70
Definition coredb.h:48
CopyrightPropertyUnique
Definition coredb.h:1046
@ PropertyUnique
Definition coredb.h:1047
@ PropertyExtraValueUnique
Definition coredb.h:1048
ItemSortOrder
Definition coredb.h:638
@ ByItemPath
Definition coredb.h:641
@ ByItemDate
Definition coredb.h:642
@ NoItemSorting
Definition coredb.h:639
@ ByItemName
Definition coredb.h:640
Definition coredbaccess.h:46
Definition coredbbackend.h:32
Definition coredbalbuminfo.h:306
Definition coredbalbuminfo.h:326
Definition coredbalbuminfo.h:361
Definition coredbalbuminfo.h:236
Definition coredbalbuminfo.h:214
Definition coredbalbuminfo.h:141
QList< SearchInfo > List
Definition coredbalbuminfo.h:144
Definition coredbalbuminfo.h:105
QList< TagInfo > List
Definition coredbalbuminfo.h:108
Definition coredbalbuminfo.h:341
qulonglong value
Definition itemviewutilities.cpp:585
Type
Definition coredbconstants.h:106
Category
Definition coredbconstants.h:69
Status
Definition coredbconstants.h:59
Type
Definition coredbconstants.h:86
Type
Definition coredbconstants.h:34
Definition datefolderview.cpp:34