00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00028 #ifndef ALBUMDB_H
00029 #define ALBUMDB_H
00030
00031
00032
00033 #include <QString>
00034 #include <QList>
00035 #include <QStringList>
00036 #include <QDateTime>
00037 #include <QPair>
00038 #include <QMap>
00039 #include <QUuid>
00040
00041
00042
00043 #include <kurl.h>
00044
00045
00046
00047 #include "albuminfo.h"
00048 #include "databasefields.h"
00049 #include "databaseaccess.h"
00050 #include "digikam_export.h"
00051
00052 namespace Digikam
00053 {
00054
00055 class DatabaseBackend;
00056 class AlbumDBPriv;
00057
00058 class DIGIKAM_EXPORT AlbumDB
00059 {
00060 public:
00061
00069 void setSetting(const QString& keyword, const QString& value);
00070
00078 QString getSetting(const QString& keyword);
00079
00086 void getFilterSettings(QStringList *imageFilter, QStringList *videoFilter, QStringList *audioFilter);
00087
00092 void getUserFilterSettings(QString *imageFilterString, QString *videoFilterString, QString *audioFilterString);
00093
00097 void setFilterSettings(const QStringList &imageFilter, const QStringList &videoFilter, const QStringList &audioFilter);
00098
00104 void setUserFilterSettings(const QStringList &imageFilter, const QStringList &videoFilter, const QStringList &audioFilter);
00105
00110 void setUserFilterSettings(const QString &imageFilterString, const QString &videoFilterString, const QString &audioFilterString);
00111
00115 void addToUserImageFilterSettings(const QString &filterString);
00116
00121 QUuid databaseUuid();
00122
00123
00124
00129 QList<AlbumRootInfo> getAlbumRoots();
00130
00141 int addAlbumRoot(AlbumRoot::Type type, const QString &identifier, const QString &specificPath, const QString &label);
00142
00147 void deleteAlbumRoot(int rootId);
00148
00153 void setAlbumRootLabel(int rootId, const QString &newLabel);
00154
00158 void changeAlbumRootType(int rootId, AlbumRoot::Type newType);
00159
00160
00165 AlbumInfo::List scanAlbums();
00166
00171 TagInfo::List scanTags();
00172
00177 SearchInfo::List scanSearches();
00178
00182 QList<AlbumShortInfo> getAlbumShortInfos();
00183
00184
00185
00195 int addAlbum(int albumRootId, const QString& relativePath,
00196 const QString& caption,
00197 const QDate& date, const QString& collection);
00198
00199
00200
00201
00202
00203
00204
00214 int getAlbumForPath(int albumRootId, const QString& relativePath, bool create = true);
00215
00216
00217
00224 QList<int> getAlbumAndSubalbumsForPath(int albumRootId, const QString& relativePath);
00225
00226
00227
00228
00229
00230
00231
00232
00238 void deleteAlbum(int albumID);
00239
00245 bool copyAlbumProperties(int srcAlbumID, int dstAlbumID);
00246
00254 void renameAlbum(int albumID, const QString& url, bool renameSubalbums);
00255
00261 void setAlbumCaption(int albumID, const QString& caption);
00262
00268 void setAlbumCollection(int albumID, const QString& collection);
00269
00275 void setAlbumDate(int albumID, const QDate& date);
00276
00282 void setAlbumIcon(int albumID, qlonglong iconID);
00283
00291 bool getAlbumIcon(int albumID, int *iconAlbumRootId, QString *iconAlbumRelativePath);
00292
00298 int getAlbumRootId(int albumID);
00299
00305
00306
00313 QString getAlbumRelativePath(int albumID);
00314
00320 QDate getAlbumLowestDate(int albumID);
00321
00327 QDate getAlbumHighestDate(int albumID);
00328
00334 QDate getAlbumAverageDate(int albumID);
00335
00340 QMap<int, int> getNumberOfImagesInAlbums();
00341
00342
00343
00354 int addTag(int parentTagID, const QString& name,
00355 const QString& iconKDE, qlonglong iconID);
00356
00363 QList<int> getTagsFromTagPaths(const QStringList &tagPaths, bool create);
00364
00369
00370 QList<int> getRecentlyAssignedTags() const;
00371
00377 void deleteTag(int tagID);
00378
00384 void setTagName(int tagID, const QString& name);
00385
00394 void setTagIcon(int tagID, const QString& iconKDE, qlonglong iconID);
00395
00406 bool getTagIcon(int tagID, int *iconAlbumRootId, QString *iconAlbumRelativePath, QString *icon);
00407
00414 void setTagParentID(int tagID, int newParentTagID);
00415
00416
00417
00424 int addSearch(DatabaseSearch::Type type, const QString& name, const QString &query);
00425
00432 void updateSearch(int searchID, DatabaseSearch::Type type,
00433 const QString& name, const QString &query);
00434
00439 void deleteSearch(int searchID);
00440
00444 void deleteSearches(DatabaseSearch::Type type);
00445
00449 SearchInfo getSearchInfo(int searchId);
00450
00454 QString getSearchQuery(int searchId);
00455
00456
00461 qlonglong addItem(int albumID, const QString& name,
00462 DatabaseItem::Status status,
00463 DatabaseItem::Category category,
00464 const QDateTime& modificationDate,
00465 int fileSize,
00466 const QString& uniqueHash);
00467
00473 void deleteItem(int albumID, const QString& file);
00474
00483 void removeItemsFromAlbum(int albumID);
00484
00493 void removeItems(QList<qlonglong> itemIDs, QList<int> albumIDs = QList<int>());
00494
00499 void deleteRemovedItems();
00500
00505 void deleteRemovedItems(QList<int> albumIDs);
00506
00507
00508
00515 qlonglong getImageId(int albumID, const QString& name);
00516
00517 enum ItemSortOrder
00518 {
00519 NoItemSorting,
00520 ByItemName,
00521 ByItemPath,
00522 ByItemDate,
00523 ByItemRating
00524 };
00525
00534 QStringList getItemNamesInAlbum(int albumID, bool recurssive=false);
00535
00540 QList<ItemScanInfo> getItemScanInfos(int albumID);
00541
00549 QStringList getItemURLsInAlbum(int albumID, ItemSortOrder order = NoItemSorting);
00550
00556 QList<qlonglong> getItemIDsInAlbum(int albumID);
00557
00565 QMap<qlonglong, QString> getItemIDsAndURLsInAlbum(int albumID);
00566
00575 QStringList getItemURLsInTag(int tagID, bool recursive = false);
00576
00583 QList<qlonglong> getItemIDsInTag(int tagID, bool recursive = false);
00584
00588 QList<QDateTime> getAllCreationDates();
00589
00594 QMap<QDateTime, int> getAllCreationDatesAndNumberOfImages();
00595
00596
00597
00603 int getItemAlbum(qlonglong imageID);
00604
00610 QString getItemName(qlonglong imageID);
00611
00615 ItemShortInfo getItemShortInfo(qlonglong imageID);
00616
00620 ItemScanInfo getItemScanInfo(qlonglong imageID);
00621
00627 void updateItem(qlonglong imageID,
00628 DatabaseItem::Category category,
00629 const QDateTime& modificationDate,
00630 int fileSize,
00631 const QString& uniqueHash);
00632
00645 QVariantList getImagesFields(qlonglong imageID, DatabaseFields::Images imagesFields);
00646
00664 void addImageInformation(qlonglong imageID, const QVariantList &infos,
00665 DatabaseFields::ImageInformation fields = DatabaseFields::ImageInformationAll);
00666
00673 void changeImageInformation(qlonglong imageID, const QVariantList &infos,
00674 DatabaseFields::ImageInformation fields = DatabaseFields::ImageInformationAll);
00675
00679 QVariantList getImageInformation(qlonglong imageID,
00680 DatabaseFields::ImageInformation infoFields = DatabaseFields::ImageInformationAll);
00681
00706 void addImageMetadata(qlonglong imageID, const QVariantList &infos,
00707 DatabaseFields::ImageMetadata fields = DatabaseFields::ImageMetadataAll);
00708
00714 void changeImageMetadata(qlonglong imageID, const QVariantList &infos,
00715 DatabaseFields::ImageMetadata fields = DatabaseFields::ImageMetadataAll);
00716
00720 QVariantList getImageMetadata(qlonglong imageID,
00721 DatabaseFields::ImageMetadata metadataFields = DatabaseFields::ImageMetadataAll);
00722
00740 void addImagePosition(qlonglong imageID, const QVariantList &infos,
00741 DatabaseFields::ImagePositions fields = DatabaseFields::ImagePositionsAll);
00742
00748 void changeImagePosition(qlonglong imageID, const QVariantList &infos,
00749 DatabaseFields::ImagePositions fields = DatabaseFields::ImagePositionsAll);
00750
00754 QVariantList getImagePosition(qlonglong imageID,
00755 DatabaseFields::ImagePositions positionFields = DatabaseFields::ImagePositionsAll);
00756
00760 void removeImagePosition(qlonglong imageid);
00761
00765 QList<CommentInfo> getImageComments(qlonglong imageID);
00766
00782 int setImageComment(qlonglong imageID, const QString &comment, DatabaseComment::Type type,
00783 const QString &language = QString(), const QString &author = QString(),
00784 const QDateTime &date = QDateTime());
00785
00795 void changeImageComment(int commentId, qlonglong imageID, const QVariantList &infos,
00796 DatabaseFields::ImageComments fields = DatabaseFields::ImageCommentsAll);
00797
00798
00802 void removeImageComment(int commentId, qlonglong imageid);
00803
00807 QString getImageProperty(qlonglong imageID, const QString &property);
00808
00812 void setImageProperty(qlonglong imageID, const QString &property, const QString &value);
00813
00818 QList<CopyrightInfo> getImageCopyright(qlonglong imageID, const QString &property = QString());
00819
00823 enum CopyrightPropertyUnique
00824 {
00825 PropertyUnique,
00826 PropertyExtraValueUnique,
00827 PropertyNoConstraint
00828 };
00829 void setImageCopyrightProperty(qlonglong imageID, const QString &property,
00830 const QString &value, const QString &extraValue = QString(),
00831 CopyrightPropertyUnique uniqueness = PropertyUnique);
00832
00837 bool hasHaarFingerprints();
00838
00845 QList<qlonglong> getDirtyOrMissingFingerprints();
00846 QStringList getDirtyOrMissingFingerprintURLs();
00847
00853
00854
00860
00861
00869
00870
00876
00877
00878
00885
00886
00887
00896
00897
00898
00904
00905
00912
00913
00919
00920
00927
00928
00929
00930
00931
00937 void addItemTag(qlonglong imageID, int tagID);
00938
00945 void addItemTag(int albumID, const QString& name, int tagID);
00946
00951 void addTagsToItems(QList<qlonglong> imageIDs, QList<int> tagIDs);
00952
00958 void removeItemTag(qlonglong imageID, int tagID);
00959
00964 void removeItemAllTags(qlonglong imageID);
00965
00970 void removeTagsFromItems(QList<qlonglong> imageIDs, QList<int> tagIDs);
00971
00977 QStringList getItemTagNames(qlonglong imageID);
00978
00984 QList<int> getItemTagIDs(qlonglong imageID);
00985
00992 bool hasTags(const QList<qlonglong>& imageIDList);
00993
01000 QList<int> getItemCommonTagIDs(const QList<qlonglong>& imageIDList);
01001
01006 QMap<int, int> getNumberOfImagesInTags();
01007
01008
01009
01018 void moveItem(int srcAlbumID, const QString& srcName,
01019 int dstAlbumID, const QString& dstName);
01020
01031 int copyItem(int srcAlbumID, const QString& srcName,
01032 int dstAlbumID, const QString& dstName);
01033
01037 void copyImageAttributes(qlonglong srcId, qlonglong destId);
01038
01039
01040
01041
01046 int findInDownloadHistory(const QString &identifier, const QString &name, int fileSize, const QDateTime &date);
01047
01052 int addToDownloadHistory(const QString &identifier, const QString &name, int fileSize, const QDateTime &date);
01053
01054
01055
01056 static QStringList imagesFieldList(DatabaseFields::Images fields);
01057 static QStringList imageInformationFieldList(DatabaseFields::ImageInformation fields);
01058 static QStringList imageMetadataFieldList(DatabaseFields::ImageMetadata fields);
01059 static QStringList imagePositionsFieldList(DatabaseFields::ImagePositions fields);
01060 static QStringList imageCommentsFieldList(DatabaseFields::ImageComments fields);
01061 static void addBoundValuePlaceholders(QString &query, int count);
01062
01063 private:
01064
01065 friend class Digikam::DatabaseAccess;
01066
01070 AlbumDB(DatabaseBackend *backend);
01071
01075 ~AlbumDB();
01076
01077 private:
01078
01079 AlbumDBPriv* d;
01080 };
01081
01082 }
01083
01084 #endif