1/*
2 Copyright (c) 2009 Constantin Berzan <exit3219@gmail.com>
3
4 This library is free software; you can redistribute it and/or modify it
5 under the terms of the GNU Library General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or (at your
7 option) any later version.
8
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to the
16 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18*/
19
20#ifndef AKONADI_SPECIALCOLLECTIONS_P_H
21#define AKONADI_SPECIALCOLLECTIONS_P_H
22
23#include <QtCore/QHash>
24#include <QtCore/QString>
25
26#include "akonadiprivate_export.h"
27
28#include "akonadi/collection.h"
29#include <akonadi/collectionstatistics.h>
30#include <akonadi/item.h>
31
32class KCoreConfigSkeleton;
33class KJob;
34
35namespace Akonadi {
36
37class AgentInstance;
38class SpecialCollections;
39class Monitor;
40
41/**
42 @internal
43*/
44class AKONADI_TESTS_EXPORT SpecialCollectionsPrivate
45{
46public:
47 SpecialCollectionsPrivate(KCoreConfigSkeleton *settings, SpecialCollections *qq);
48 ~SpecialCollectionsPrivate();
49
50 QString defaultResourceId() const;
51 void emitChanged(const QString &resourceId);
52 void collectionRemoved(const Collection &collection); // slot
53 void collectionFetchJobFinished(KJob *); // slot
54 void collectionStatisticsChanged(Akonadi::Collection::Id, const Akonadi::CollectionStatistics &); // slot
55
56 /**
57 Forgets all folders owned by the given resource.
58 This method is used by SpecialCollectionsRequestJob.
59 @param resourceId the identifier of the resource for which to forget folders
60 */
61 void forgetFoldersForResource(const QString &resourceId);
62
63 /**
64 Avoids emitting the foldersChanged() signal until endBatchRegister()
65 is called. This is used to avoid emitting repeated signals when multiple
66 folders are registered in a row.
67 This method is used by SpecialCollectionsRequestJob.
68 */
69 void beginBatchRegister();
70
71 /**
72 @see beginBatchRegister()
73 This method is used by SpecialCollectionsRequestJob.
74 */
75 void endBatchRegister();
76
77 AgentInstance defaultResource() const;
78
79 SpecialCollections *q;
80 KCoreConfigSkeleton *mSettings;
81 QHash<QString, QHash<QByteArray, Collection> > mFoldersForResource;
82 bool mBatchMode;
83 QSet<QString> mToEmitChangedFor;
84 Monitor *mMonitor;
85
86 mutable QString mDefaultResourceId;
87};
88
89} // namespace Akonadi
90
91#endif // AKONADI_SPECIALCOLLECTIONS_P_H
92