digiKam
Loading...
Searching...
No Matches
albummanager.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-15
7 * Description : Albums manager interface.
8 *
9 * SPDX-FileCopyrightText: 2004 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-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QList>
22#include <QObject>
23#include <QString>
24#include <QMap>
25#include <QUrl>
26#include <QDate>
27#include <QFileInfo>
28
29// Local includes
30
31#include "album.h"
32#include "coredbalbuminfo.h"
33#include "dbengineparameters.h"
34#include "digikam_export.h"
35#include "itemlisterrecord.h"
36
37namespace Digikam
38{
39
40class FAlbum;
41class CollectionLocation;
42class AlbumChangeset;
43class TagChangeset;
44class SearchChangeset;
45class CollectionImageChangeset;
46class ImageTagChangeset;
47
62class DIGIKAM_GUI_EXPORT AlbumManager : public QObject
63{
64 Q_OBJECT
65
66public:
67
71 static AlbumManager* instance();
72
79 void startScan();
80
84 void cleanUp();
85
93 void refresh();
94
98 void prepareItemCounts();
99
100 bool isShowingOnlyAvailableAlbums() const;
101 void setShowOnlyAvailableAlbums(bool onlyAvailable);
102
103private Q_SLOTS:
104
105 void slotImagesDeleted(const QList<qlonglong>& imageIds);
106
107 // -----------------------------------------------------------------------------
108
114
115public:
116
126 bool setDatabase(const DbEngineParameters& params, bool priority,
127 const QString& suggestedAlbumRoot = QString(), bool ignoreDisappearedLocations = false);
128
134 void changeDatabase(const DbEngineParameters& params);
135
139 bool databaseEqual(const DbEngineParameters& parameters) const;
140
144 static void checkDatabaseDirsAfterFirstRun(const QString& dbPath, const QString& albumPath);
145
146private:
147
148 static bool moveToBackup(const QFileInfo& info);
149 static bool copyToNewLocation(const QFileInfo& oldFile,
150 const QFileInfo& newFile,
151 const QString& otherMessage = QString());
152
154
155 // -----------------------------------------------------------------------------
156
162
163private:
164
168 bool handleCollectionStatusChange(const CollectionLocation& location, int oldStatus);
169
170 void addAlbumRoot(const CollectionLocation& location);
171 void removeAlbumRoot(const CollectionLocation& location);
172
173private Q_SLOTS:
174
175 void slotCollectionLocationStatusChanged(const CollectionLocation&, int);
176 void slotCollectionLocationPropertiesChanged(const CollectionLocation& location);
177 void slotCollectionImageChange(const CollectionImageChangeset& changeset);
178
180
181 // -----------------------------------------------------------------------------
182
188
189public:
190
194 void setCurrentAlbums(const QList<Album*>& albums);
195
199 AlbumList currentAlbums() const;
200
204 void clearCurrentAlbums();
205
210 Album* findAlbum(int gid) const;
211
216 Album* findAlbum(Album::Type type, int id) const;
217
221 QHash<int, QString> albumTitles() const;
222
230 bool isMovingAlbum(Album* album) const;
231
239 qlonglong getItemFromAlbum(Album* const album, const QString& fileName);
240
241private:
242
243 bool hasDirectChildAlbumWithTitle(Album* parent, const QString& title);
244 void notifyAlbumDeletion(Album* album);
245 void updateAlbumPathHash();
246 void addGuardedPointer(Album* a, Album** pointer);
247 void removeGuardedPointer(Album* a, Album** pointer);
248 void changeGuardedPointer(Album* oldAlbum, Album* a, Album** pointer);
249 void invalidateGuardedPointers(Album* album);
250
251private Q_SLOTS:
252
253 void slotAlbumsJobResult();
254 void slotAlbumsJobData(const QHash<int, int>& albumsStatHash);
255 void slotAlbumChange(const AlbumChangeset& changeset);
256 void getAlbumItemsCount();
257
258Q_SIGNALS:
259
264 void signalAlbumAboutToBeAdded(Album* album, Album* parent, Album* prev);
265
270
275
280
286
288 void signalAlbumCurrentChanged(const QList<Album*>& albums);
290
294
300
306 void signalAlbumsUpdated(int type);
307
312 void signalShowOnlyAvailableAlbumsChanged(bool showsOnlyAvailableAlbums);
313
315
316 // -----------------------------------------------------------------------------
317
323
324public:
325
329 AlbumList allDAlbums() const;
330
335 DAlbum* findDAlbum(int id) const;
336
343 QMap<YearMonth, int> getDAlbumsCount() const;
344
345private Q_SLOTS:
346
347 void slotDatesJobResult();
348 void slotDatesJobData(const QHash<QDateTime, int>& datesStatHash);
349
353 void scanDAlbumsScheduled();
354 void scanDAlbums();
355
356Q_SIGNALS:
357
358 void signalDAlbumsDirty(const QMap<YearMonth, int>&);
359 void signalDatesHashDirty(const QHash<QDateTime, int>&);
361
363
364 // -----------------------------------------------------------------------------
365
371
372public:
373
377 AlbumList allPAlbums() const;
378
382 PAlbum* currentPAlbum() const;
383
391 PAlbum* findPAlbum(const QUrl& url) const;
392
397 PAlbum* findPAlbum(int id) const;
398
405 QHash<int, int> getPAlbumsCount() const;
406
407 void removeWatchedPAlbums(const PAlbum* const album);
408
426 PAlbum* createPAlbum(PAlbum* parent, const QString& name,
427 const QString& caption, const QDate& date,
428 const QString& category,
429 QString& errMsg);
430
435 PAlbum* createPAlbum(const QString& albumRootPath, const QString& name,
436 const QString& caption, const QDate& date,
437 const QString& category,
438 QString& errMsg);
439
446 PAlbum* createPAlbum(const CollectionLocation& location, const QString& name,
447 const QString& caption, const QDate& date,
448 const QString& category,
449 QString& errMsg);
450
460 bool renamePAlbum(PAlbum* album, const QString& newName,
461 QString& errMsg);
462
472 bool updatePAlbumIcon(PAlbum* album, qlonglong iconID, QString& errMsg);
473
474private:
475
476 bool showDatabaseSetupPage(const QString& error, bool priority, const QString& suggestedAlbumRoot);
477 void insertPAlbum(PAlbum* album, PAlbum* parent);
478 void removePAlbum(PAlbum* album);
479
480private Q_SLOTS:
481
487 void scanPAlbums();
488 void updateChangedPAlbums();
489
490Q_SIGNALS:
491
492 void signalPAlbumsDirty(const QHash<int, int>&);
494
496
497 // -----------------------------------------------------------------------------
498
504
505public:
506
510 AlbumList allTAlbums() const;
511
515 QList<TAlbum*> currentTAlbums() const;
516
521 TAlbum* findTAlbum(int id) const;
522
527 TAlbum* findTAlbum(const QString& tagPath) const;
528
535 QHash<int, int> getTAlbumsCount() const;
536
550 TAlbum* createTAlbum(TAlbum* parent, const QString& name,
551 const QString& iconkde, QString& errMsg);
552
559 AlbumList findOrCreateTAlbums(const QStringList& tagPaths);
560
572 bool deleteTAlbum(TAlbum* album, QString& errMsg, QList<qlonglong>* imageIds = nullptr);
573
583 bool renameTAlbum(TAlbum* album, const QString& name, QString& errMsg);
584
594 bool moveTAlbum(TAlbum* album, TAlbum* newParent, QString& errMsg);
595
607 bool mergeTAlbum(TAlbum* album, TAlbum* destAlbum, bool dialog, QString& errMsg);
608
621 bool updateTAlbumIcon(TAlbum* album, const QString& iconKDE,
622 qlonglong iconID, QString& errMsg);
623
629 AlbumList getRecentlyAssignedTags(bool includeInternal = false) const;
630
637 QStringList tagPaths(const QList<int>& tagIDs, bool leadingSlash=true, bool includeInternal = false) const;
638
643 QStringList tagNames(const QList<int>& tagIDs, bool includeInternal = false) const;
644
648 QHash<int, QString> tagPaths(bool leadingSlash=true, bool includeInternal = false) const;
649
653 QHash<int, QString> tagNames(bool includeInternal = false) const;
654
659 AlbumList findTagsWithProperty(const QString& property);
660 AlbumList findTagsWithProperty(const QString& property, const QString& value);
661
665 QList<int> subTags(int tagId, bool recursive = false) const;
666 int findTopId(int tagId) const;
667
668 void askUserForWriteChangedTAlbumToFiles(TAlbum* const album);
669 void askUserForWriteChangedTAlbumToFiles(const QList<qlonglong>& imageIds);
670
671private:
672
681 void insertTAlbum(TAlbum* album, TAlbum* parent);
682 void removeTAlbum(TAlbum* album);
683
684private Q_SLOTS:
685
691 void scanTAlbums();
692
693 void slotTagsJobResult();
694 void slotTagsJobData(const QHash<int, int>& tagsStatHash);
695 void slotTagChange(const TagChangeset& changeset);
696 void slotImageTagChange(const ImageTagChangeset& changeset);
697
698 void getTagItemsCount();
699 void tagItemsCount();
700
701Q_SIGNALS:
702
703 void signalTAlbumsDirty(const QHash<int, int>&);
705
707
708 // -----------------------------------------------------------------------------
709
715
716public:
717
721 AlbumList allSAlbums() const;
722
727 SAlbum* findSAlbum(int id) const;
728
733 SAlbum* findSAlbum(const QString& name) const;
734
739 QList<SAlbum*> findSAlbumsBySearchType(int searchType) const;
740
753 SAlbum* createSAlbum(const QString& name,
755 const QString& query);
756
765 bool updateSAlbum(SAlbum* album,
766 const QString& changedQuery,
767 const QString& changedName = QString(),
768 DatabaseSearch::Type type = DatabaseSearch::UndefinedType);
769
777 bool deleteSAlbum(SAlbum* album);
778
779private Q_SLOTS:
780
786 void scanSAlbums();
787
788 void slotSearchChange(const SearchChangeset& changeset);
789
790Q_SIGNALS:
791
792 void signalUpdateDuplicatesAlbums(const QList<SAlbum*>& modifiedAlbums,
793 const QList<qlonglong>& deletedImages);
795
797
798 // -----------------------------------------------------------------------------
799
805
806public:
807
814 QHash<int, int> getFaceCount() const;
815
822 QHash<int, int> getUnconfirmedFaceCount() const;
823
824private Q_SLOTS:
825
826 void slotPeopleJobResult();
827 void slotPeopleJobData(const QMap<QString,
828 QHash<int, int> >& facesStatHash);
829 void personItemsCount();
830
831Q_SIGNALS:
832
833 void signalFaceCountsDirty(const QHash<int, int>& faceCount,
834 const QHash<int, int>& uFaceCount,
835 const QList<int>& toUpdatedFaces);
836
838
839private:
840
841 // Disable
842 AlbumManager();
843 explicit AlbumManager(QObject*) = delete;
844 ~AlbumManager() override;
845
847
848 static AlbumManager* internalInstance;
849
850public:
851
852 // Declared public because it used in ChangingDB class.
853 class Private;
854
855private:
856
857 Private* const d = nullptr;
858
859 template <class T> friend class AlbumPointer;
860 friend class Album;
861};
862
863} // namespace Digikam
Definition coredbchangesets.h:252
Definition albummanager_p.h:226
Definition albummanager_p.h:150
Definition albummanager.h:63
void signalPAlbumsDirty(const QHash< int, int > &)
void signalAlbumAboutToBeMoved(Album *album)
void signalAlbumAboutToBeAdded(Album *album, Album *parent, Album *prev)
void signalUpdateDuplicatesAlbums(const QList< SAlbum * > &modifiedAlbums, const QList< qlonglong > &deletedImages)
void signalAlbumDeleted(Album *album)
void signalDAlbumsDirty(const QMap< YearMonth, int > &)
void signalFaceCountsDirty(const QHash< int, int > &faceCount, const QHash< int, int > &uFaceCount, const QList< int > &toUpdatedFaces)
void signalDatesHashDirty(const QHash< QDateTime, int > &)
void signalShowOnlyAvailableAlbumsChanged(bool showsOnlyAvailableAlbums)
void signalAlbumCurrentChanged(const QList< Album * > &albums)
void signalTagPropertiesChanged(TAlbum *album)
void signalTAlbumsDirty(const QHash< int, int > &)
void signalAlbumMoved(Album *album)
void signalAlbumIconChanged(Album *album)
void signalAlbumRenamed(Album *album)
void signalAlbumNewPath(Album *album)
void signalAlbumHasBeenDeleted(Album *album)
void signalAlbumsUpdated(int type)
void signalAlbumAdded(Album *album)
void signalSearchUpdated(SAlbum *album)
void signalAlbumAboutToBeDeleted(Album *album)
Definition albumpointer.h:38
Abstract base class for all album types.
Definition album.h:57
Type
Definition album.h:61
Definition coredbchangesets.h:142
Definition collectionlocation.h:31
Definition album.h:461
Definition dbengineparameters.h:39
Definition coredbchangesets.h:70
Definition album.h:357
Definition album.h:494
Definition coredbchangesets.h:362
Definition album.h:421
Definition coredbchangesets.h:288
qulonglong value
Definition itemviewutilities.cpp:585
Type
Definition coredbconstants.h:34
Definition datefolderview.cpp:34
QList< Album * > AlbumList
Definition album.h:41