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
00026 #ifndef ALBUMDB_H
00027 #define ALBUMDB_H
00028
00029
00030
00031 #include <QtCore/QString>
00032 #include <QtCore/QList>
00033 #include <QtCore/QStringList>
00034 #include <QtCore/QDateTime>
00035 #include <QtCore/QPair>
00036 #include <QtCore/QMap>
00037 #include <QtCore/QUuid>
00038
00039
00040
00041 #include <kurl.h>
00042
00043
00044
00045 #include "albuminfo.h"
00046 #include "databasefields.h"
00047 #include "databaseaccess.h"
00048 #include "digikam_export.h"
00049
00050 namespace Digikam
00051 {
00052
00053 class DatabaseBackend;
00054 class AlbumDBPriv;
00055
00056 class DIGIKAM_DATABASE_EXPORT AlbumDB
00057 {
00058 public:
00059
00067 void setSetting(const QString& keyword, const QString& value);
00068
00076 QString getSetting(const QString& keyword);
00077
00084 void getFilterSettings(QStringList *imageFilter, QStringList *videoFilter, QStringList *audioFilter);
00085
00090 void getUserFilterSettings(QString *imageFilterString, QString *videoFilterString, QString *audioFilterString);
00091
00095 void setFilterSettings(const QStringList& imageFilter, const QStringList& videoFilter, const QStringList& audioFilter);
00096
00102 void setUserFilterSettings(const QStringList& imageFilter, const QStringList& videoFilter, const QStringList& audioFilter);
00103
00108 void setUserFilterSettings(const QString& imageFilterString, const QString& videoFilterString, const QString& audioFilterString);
00109
00113 void addToUserImageFilterSettings(const QString& filterString);
00114
00119 QUuid databaseUuid();
00120
00121
00122
00127 QList<AlbumRootInfo> getAlbumRoots();
00128
00139 int addAlbumRoot(AlbumRoot::Type type, const QString& identifier, const QString& specificPath, const QString& label);
00140
00145 void deleteAlbumRoot(int rootId);
00146
00152 void migrateAlbumRoot(int rootId, const QString& identifier);
00153
00158 void setAlbumRootLabel(int rootId, const QString& newLabel);
00159
00163 void changeAlbumRootType(int rootId, AlbumRoot::Type newType);
00164
00165
00170 AlbumInfo::List scanAlbums();
00171
00176 TagInfo::List scanTags();
00177
00182 SearchInfo::List scanSearches();
00183
00187 QList<AlbumShortInfo> getAlbumShortInfos();
00188
00189
00190
00200 int addAlbum(int albumRootId, const QString& relativePath,
00201 const QString& caption,
00202 const QDate& date, const QString& collection);
00203
00204
00205
00206
00207
00208
00209
00219 int getAlbumForPath(int albumRootId, const QString& relativePath, bool create = true);
00220
00221
00222
00229 QList<int> getAlbumAndSubalbumsForPath(int albumRootId, const QString& relativePath);
00230
00231
00232
00233
00234
00235
00236
00237
00242 QList<int> getAlbumsOnAlbumRoot(int albumRootId);
00243
00249 void deleteAlbum(int albumID);
00250
00254 void makeStaleAlbum(int albumID);
00255
00260 void deleteStaleAlbums();
00261
00267 bool copyAlbumProperties(int srcAlbumID, int dstAlbumID);
00268
00272 void renameAlbum(int albumID, int newAlbumRootId, const QString& newRelativePath);
00273
00279 void setAlbumCaption(int albumID, const QString& caption);
00280
00286 void setAlbumCategory(int albumID, const QString& category);
00287
00293 void setAlbumDate(int albumID, const QDate& date);
00294
00300 void setAlbumIcon(int albumID, qlonglong iconID);
00301
00309 bool getAlbumIcon(int albumID, int *iconAlbumRootId, QString *iconAlbumRelativePath);
00310
00316 int getAlbumRootId(int albumID);
00317
00323
00324
00331 QString getAlbumRelativePath(int albumID);
00332
00338 QDate getAlbumLowestDate(int albumID);
00339
00345 QDate getAlbumHighestDate(int albumID);
00346
00352 QDate getAlbumAverageDate(int albumID);
00353
00358 QMap<int, int> getNumberOfImagesInAlbums();
00359
00360
00361
00372 int addTag(int parentTagID, const QString& name,
00373 const QString& iconKDE, qlonglong iconID);
00374
00381 QList<int> getTagsFromTagPaths(const QStringList& tagPaths, bool create);
00382
00387
00388 QList<int> getRecentlyAssignedTags() const;
00389
00395 void deleteTag(int tagID);
00396
00402 void setTagName(int tagID, const QString& name);
00403
00412 void setTagIcon(int tagID, const QString& iconKDE, qlonglong iconID);
00413
00424 bool getTagIcon(int tagID, int *iconAlbumRootId, QString *iconAlbumRelativePath, QString *icon);
00425
00432 void setTagParentID(int tagID, int newParentTagID);
00433
00434
00435
00442 int addSearch(DatabaseSearch::Type type, const QString& name, const QString& query);
00443
00450 void updateSearch(int searchID, DatabaseSearch::Type type,
00451 const QString& name, const QString& query);
00452
00457 void deleteSearch(int searchID);
00458
00462 void deleteSearches(DatabaseSearch::Type type);
00463
00467 SearchInfo getSearchInfo(int searchId);
00468
00472 QString getSearchQuery(int searchId);
00473
00474
00479 qlonglong addItem(int albumID, const QString& name,
00480 DatabaseItem::Status status,
00481 DatabaseItem::Category category,
00482 const QDateTime& modificationDate,
00483 int fileSize,
00484 const QString& uniqueHash);
00485
00491 void deleteItem(int albumID, const QString& file);
00492
00501 void removeItemsFromAlbum(int albumID);
00502
00511 void removeItems(QList<qlonglong> itemIDs, QList<int> albumIDs = QList<int>());
00512
00517 void deleteRemovedItems();
00518
00523 void deleteRemovedItems(QList<int> albumIDs);
00524
00525
00526
00533 qlonglong getImageId(int albumID, const QString& name);
00534
00535 enum ItemSortOrder
00536 {
00537 NoItemSorting,
00538 ByItemName,
00539 ByItemPath,
00540 ByItemDate,
00541 ByItemRating
00542 };
00543
00552 QStringList getItemNamesInAlbum(int albumID, bool recurssive=false);
00553
00558 QList<ItemScanInfo> getItemScanInfos(int albumID);
00559
00567 QStringList getItemURLsInAlbum(int albumID, ItemSortOrder order = NoItemSorting);
00568
00574 QList<qlonglong> getItemIDsInAlbum(int albumID);
00575
00583 QMap<qlonglong, QString> getItemIDsAndURLsInAlbum(int albumID);
00584
00593 QStringList getItemURLsInTag(int tagID, bool recursive = false);
00594
00601 QList<qlonglong> getItemIDsInTag(int tagID, bool recursive = false);
00602
00606 QList<QDateTime> getAllCreationDates();
00607
00612 QMap<QDateTime, int> getAllCreationDatesAndNumberOfImages();
00613
00614
00615
00621 int getItemAlbum(qlonglong imageID);
00622
00628 QString getItemName(qlonglong imageID);
00629
00633 ItemShortInfo getItemShortInfo(qlonglong imageID);
00634
00638 ItemShortInfo getItemShortInfo(int albumRootId, const QString& relativePath, const QString& name);
00639
00643 ItemScanInfo getItemScanInfo(qlonglong imageID);
00644
00650 void updateItem(qlonglong imageID,
00651 DatabaseItem::Category category,
00652 const QDateTime& modificationDate,
00653 int fileSize,
00654 const QString& uniqueHash);
00655
00668 QVariantList getImagesFields(qlonglong imageID, DatabaseFields::Images imagesFields);
00669
00687 void addImageInformation(qlonglong imageID, const QVariantList& infos,
00688 DatabaseFields::ImageInformation fields = DatabaseFields::ImageInformationAll);
00689
00696 void changeImageInformation(qlonglong imageID, const QVariantList& infos,
00697 DatabaseFields::ImageInformation fields = DatabaseFields::ImageInformationAll);
00698
00702 QVariantList getImageInformation(qlonglong imageID,
00703 DatabaseFields::ImageInformation infoFields = DatabaseFields::ImageInformationAll);
00704
00729 void addImageMetadata(qlonglong imageID, const QVariantList& infos,
00730 DatabaseFields::ImageMetadata fields = DatabaseFields::ImageMetadataAll);
00731
00737 void changeImageMetadata(qlonglong imageID, const QVariantList& infos,
00738 DatabaseFields::ImageMetadata fields = DatabaseFields::ImageMetadataAll);
00739
00743 QVariantList getImageMetadata(qlonglong imageID,
00744 DatabaseFields::ImageMetadata metadataFields = DatabaseFields::ImageMetadataAll);
00745
00763 void addImagePosition(qlonglong imageID, const QVariantList& infos,
00764 DatabaseFields::ImagePositions fields = DatabaseFields::ImagePositionsAll);
00765
00771 void changeImagePosition(qlonglong imageID, const QVariantList& infos,
00772 DatabaseFields::ImagePositions fields = DatabaseFields::ImagePositionsAll);
00773
00777 QVariantList getImagePosition(qlonglong imageID,
00778 DatabaseFields::ImagePositions positionFields = DatabaseFields::ImagePositionsAll);
00779
00783 void removeImagePosition(qlonglong imageid);
00784
00788 QList<CommentInfo> getImageComments(qlonglong imageID);
00789
00805 int setImageComment(qlonglong imageID, const QString& comment, DatabaseComment::Type type,
00806 const QString& language = QString(), const QString& author = QString(),
00807 const QDateTime& date = QDateTime());
00808
00818 void changeImageComment(int commentId, qlonglong imageID, const QVariantList& infos,
00819 DatabaseFields::ImageComments fields = DatabaseFields::ImageCommentsAll);
00820
00821
00825 void removeImageComment(int commentId, qlonglong imageid);
00826
00830 QString getImageProperty(qlonglong imageID, const QString& property);
00831
00835 void setImageProperty(qlonglong imageID, const QString& property, const QString& value);
00836 void removeImageProperty(qlonglong imageID, const QString& property);
00837
00842 QList<CopyrightInfo> getImageCopyright(qlonglong imageID, const QString& property = QString());
00843
00847 enum CopyrightPropertyUnique
00848 {
00849 PropertyUnique,
00850 PropertyExtraValueUnique,
00851 PropertyNoConstraint
00852 };
00853 void setImageCopyrightProperty(qlonglong imageID, const QString& property,
00854 const QString& value, const QString& extraValue = QString(),
00855 CopyrightPropertyUnique uniqueness = PropertyUnique);
00856
00862 void removeImageCopyrightProperties(qlonglong imageID, const QString& property = QString(),
00863 const QString& extraValue = QString(),
00864 const QString& value = QString() );
00869 bool hasHaarFingerprints();
00870
00877 QList<qlonglong> getDirtyOrMissingFingerprints();
00878 QStringList getDirtyOrMissingFingerprintURLs();
00879
00888 QList<ItemScanInfo> getIdenticalFiles(qlonglong id);
00889 QList<ItemScanInfo> getIdenticalFiles(int fileSize, const QString& uniqueHash, qlonglong sourceId = -1);
00895
00896
00902
00903
00911
00912
00918
00919
00920
00927
00928
00929
00938
00939
00940
00946
00947
00954
00955
00961
00962
00969
00970
00971
00972
00973
00979 void addItemTag(qlonglong imageID, int tagID);
00980
00987 void addItemTag(int albumID, const QString& name, int tagID);
00988
00993 void addTagsToItems(QList<qlonglong> imageIDs, QList<int> tagIDs);
00994
01000 void removeItemTag(qlonglong imageID, int tagID);
01001
01007 void removeItemAllTags(qlonglong imageID, QList<int> currentTagIds);
01008
01013 void removeTagsFromItems(QList<qlonglong> imageIDs, QList<int> tagIDs);
01014
01020 QStringList getItemTagNames(qlonglong imageID);
01021
01027 QList<int> getItemTagIDs(qlonglong imageID);
01028
01035 bool hasTags(const QList<qlonglong>& imageIDList);
01036
01043 QList<int> getItemCommonTagIDs(const QList<qlonglong>& imageIDList);
01044
01049 QMap<int, int> getNumberOfImagesInTags();
01050
01055 QMap<QString,int> getImageFormatStatistics();
01056
01057
01058
01067 void moveItem(int srcAlbumID, const QString& srcName,
01068 int dstAlbumID, const QString& dstName);
01069
01080 int copyItem(int srcAlbumID, const QString& srcName,
01081 int dstAlbumID, const QString& dstName);
01082
01086 void copyImageAttributes(qlonglong srcId, qlonglong destId);
01087
01088
01089
01090
01095 int findInDownloadHistory(const QString& identifier, const QString& name, int fileSize, const QDateTime& date);
01096
01101 int addToDownloadHistory(const QString& identifier, const QString& name, int fileSize, const QDateTime& date);
01102
01103
01104
01105 static QStringList imagesFieldList(DatabaseFields::Images fields);
01106 static QStringList imageInformationFieldList(DatabaseFields::ImageInformation fields);
01107 static QStringList imageMetadataFieldList(DatabaseFields::ImageMetadata fields);
01108 static QStringList imagePositionsFieldList(DatabaseFields::ImagePositions fields);
01109 static QStringList imageCommentsFieldList(DatabaseFields::ImageComments fields);
01110 static void addBoundValuePlaceholders(QString& query, int count);
01111
01112 private:
01113
01114 friend class Digikam::DatabaseAccess;
01115
01119 AlbumDB(DatabaseBackend *backend);
01120
01124 ~AlbumDB();
01125
01126 private:
01127
01128 AlbumDBPriv* const d;
01129 };
01130
01131 }
01132
01133 #endif