1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the QtOrganizer module of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** Commercial License Usage
10
** Licensees holding valid commercial Qt licenses may use this file in
11
** accordance with the commercial license agreement provided with the
12
** Software or, alternatively, in accordance with the terms contained in
13
** a written agreement between you and Digia. For licensing terms and
14
** conditions see http://qt.digia.com/licensing. For further information
15
** use the contact form at http://qt.digia.com/contact-us.
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 2.1 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 2.1 requirements
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25
** In addition, as a special exception, Digia gives you certain additional
26
** rights. These rights are described in the Digia Qt LGPL Exception
27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29
** GNU General Public License Usage
30
** Alternatively, this file may be used under the terms of the GNU
31
** General Public License version 3.0 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file. Please review the following information to
34
** ensure the GNU General Public License version 3.0 requirements will be
35
** met: http://www.gnu.org/copyleft/gpl.html.
40
****************************************************************************/
42
#ifndef QORGANIZERMANAGERENGINE_H
43
#define QORGANIZERMANAGERENGINE_H
45
#include <qorganizermanager.h>
46
#include <qorganizerabstractrequest.h>
47
#include <qorganizerrecurrencerule.h>
49
QT_BEGIN_NAMESPACE_ORGANIZER
51
class QOrganizerCollectionFetchRequest;
52
class QOrganizerCollectionRemoveRequest;
53
class QOrganizerCollectionSaveRequest;
54
class QOrganizerItemIdFetchRequest;
55
class QOrganizerItemFetchByIdRequest;
56
class QOrganizerItemFetchRequest;
57
class QOrganizerItemOccurrenceFetchRequest;
58
class QOrganizerItemRemoveRequest;
59
class QOrganizerItemRemoveByIdRequest;
60
class QOrganizerItemSaveRequest;
61
class QOrganizerItemFetchForExportRequest;
63
class Q_ORGANIZER_EXPORT QOrganizerManagerEngine : public QObject
68
QOrganizerManagerEngine(QObject *parent = 0);
70
virtual QString managerName() const;
71
virtual QMap<QString, QString> managerParameters() const;
72
QString managerUri() const;
75
virtual QList<QOrganizerItem> items(const QList<QOrganizerItemId> &itemIds, const QOrganizerItemFetchHint &fetchHint,
76
QMap<int, QOrganizerManager::Error> *errorMap, QOrganizerManager::Error *error);
78
virtual QList<QOrganizerItem> items(const QOrganizerItemFilter &filter, const QDateTime &startDateTime,
79
const QDateTime &endDateTime, int maxCount,
80
const QList<QOrganizerItemSortOrder> &sortOrders,
81
const QOrganizerItemFetchHint &fetchHint, QOrganizerManager::Error *error);
83
virtual QList<QOrganizerItemId> itemIds(const QOrganizerItemFilter &filter, const QDateTime &startDateTime,
84
const QDateTime &endDateTime, const QList<QOrganizerItemSortOrder> &sortOrders,
85
QOrganizerManager::Error *error);
87
virtual QList<QOrganizerItem> itemOccurrences(const QOrganizerItem &parentItem, const QDateTime &startDateTime,
88
const QDateTime &endDateTime, int maxCount,
89
const QOrganizerItemFetchHint &fetchHint, QOrganizerManager::Error *error);
91
virtual QList<QOrganizerItem> itemsForExport(const QDateTime &startDateTime, const QDateTime &endDateTime,
92
const QOrganizerItemFilter &filter,
93
const QList<QOrganizerItemSortOrder> &sortOrders,
94
const QOrganizerItemFetchHint &fetchHint, QOrganizerManager::Error *error);
96
virtual bool saveItems(QList<QOrganizerItem> *items, const QList<QOrganizerItemDetail::DetailType> &detailMask,
97
QMap<int, QOrganizerManager::Error> *errorMap, QOrganizerManager::Error *error);
99
virtual bool removeItems(const QList<QOrganizerItemId> &itemIds, QMap<int, QOrganizerManager::Error> *errorMap,
100
QOrganizerManager::Error *error);
102
virtual bool removeItems(const QList<QOrganizerItem> *items, QMap<int, QOrganizerManager::Error> *errorMap, QOrganizerManager::Error *error);
105
virtual QOrganizerCollection defaultCollection(QOrganizerManager::Error *error);
106
virtual QOrganizerCollection collection(const QOrganizerCollectionId &collectionId, QOrganizerManager::Error *error);
107
virtual QList<QOrganizerCollection> collections(QOrganizerManager::Error *error);
108
virtual bool saveCollection(QOrganizerCollection *collection, QOrganizerManager::Error *error);
109
virtual bool removeCollection(const QOrganizerCollectionId &collectionId, QOrganizerManager::Error *error);
111
// asynchronous request support
112
virtual void requestDestroyed(QOrganizerAbstractRequest *request);
113
virtual bool startRequest(QOrganizerAbstractRequest *request);
114
virtual bool cancelRequest(QOrganizerAbstractRequest *request);
115
virtual bool waitForRequestFinished(QOrganizerAbstractRequest *request, int msecs);
117
static void updateRequestState(QOrganizerAbstractRequest *request, QOrganizerAbstractRequest::State state);
119
static void updateItemOccurrenceFetchRequest(QOrganizerItemOccurrenceFetchRequest *request, const QList<QOrganizerItem> &result,
120
QOrganizerManager::Error error, QOrganizerAbstractRequest::State newState);
122
static void updateItemIdFetchRequest(QOrganizerItemIdFetchRequest *request, const QList<QOrganizerItemId> &result,
123
QOrganizerManager::Error error, QOrganizerAbstractRequest::State newState);
125
static void updateItemFetchByIdRequest(QOrganizerItemFetchByIdRequest *request, const QList<QOrganizerItem> &result,
126
QOrganizerManager::Error error, const QMap<int, QOrganizerManager::Error> &errorMap,
127
QOrganizerAbstractRequest::State);
129
static void updateItemFetchRequest(QOrganizerItemFetchRequest *request, const QList<QOrganizerItem> &result,
130
QOrganizerManager::Error error, QOrganizerAbstractRequest::State newState);
132
static void updateItemFetchForExportRequest(QOrganizerItemFetchForExportRequest *request, const QList<QOrganizerItem> &result,
133
QOrganizerManager::Error error, QOrganizerAbstractRequest::State newState);
135
static void updateItemRemoveRequest(QOrganizerItemRemoveRequest *request, QOrganizerManager::Error error,
136
const QMap<int, QOrganizerManager::Error> &errorMap, QOrganizerAbstractRequest::State newState);
138
static void updateItemRemoveByIdRequest(QOrganizerItemRemoveByIdRequest *request, QOrganizerManager::Error error,
139
const QMap<int, QOrganizerManager::Error> &errorMap, QOrganizerAbstractRequest::State newState);
141
static void updateItemSaveRequest(QOrganizerItemSaveRequest *request, const QList<QOrganizerItem> &result, QOrganizerManager::Error error,
142
const QMap<int, QOrganizerManager::Error> &errorMap, QOrganizerAbstractRequest::State newState);
144
static void updateCollectionFetchRequest(QOrganizerCollectionFetchRequest *request, const QList<QOrganizerCollection> &result,
145
QOrganizerManager::Error error, QOrganizerAbstractRequest::State newState);
147
static void updateCollectionRemoveRequest(QOrganizerCollectionRemoveRequest *request, QOrganizerManager::Error error,
148
const QMap<int, QOrganizerManager::Error> &errorMap, QOrganizerAbstractRequest::State newState);
150
static void updateCollectionSaveRequest(QOrganizerCollectionSaveRequest *request, const QList<QOrganizerCollection> &result,
151
QOrganizerManager::Error error, const QMap<int, QOrganizerManager::Error> &errorMap,
152
QOrganizerAbstractRequest::State newState);
154
// functionality reporting
155
virtual QList<QOrganizerItemFilter::FilterType> supportedFilters() const;
156
virtual QList<QOrganizerItemDetail::DetailType> supportedItemDetails(QOrganizerItemType::ItemType itemType) const;
157
virtual QList<QOrganizerItemType::ItemType> supportedItemTypes() const;
160
static const QOrganizerItemEngineId *engineItemId(const QOrganizerItemId &itemId);
161
static const QOrganizerCollectionEngineId *engineCollectionId(const QOrganizerCollectionId &collectionId);
163
static int addSorted(QList<QOrganizerItem> *sorted, const QOrganizerItem &toAdd, const QList<QOrganizerItemSortOrder> &sortOrders);
164
static bool addDefaultSorted(QMultiMap<QDateTime, QOrganizerItem> *defaultSorted, const QOrganizerItem &toAdd);
165
static int compareItem(const QOrganizerItem &a, const QOrganizerItem &b, const QList<QOrganizerItemSortOrder> &sortOrders);
166
static int compareVariant(const QVariant &a, const QVariant &b, Qt::CaseSensitivity sensitivity);
167
static bool isItemBetweenDates(const QOrganizerItem &item, const QDateTime &startPeriod, const QDateTime &endPeriod);
168
static bool itemLessThan(const QOrganizerItem &a, const QOrganizerItem &b);
169
static bool testFilter(const QOrganizerItemFilter &filter, const QOrganizerItem &item);
170
static QOrganizerItemFilter canonicalizedFilter(const QOrganizerItemFilter &filter);
173
static QOrganizerItem generateOccurrence(const QOrganizerItem &parentItem, const QDateTime &rdate);
174
static QList<QDateTime> generateDateTimes(const QDateTime &initialDateTime, QOrganizerRecurrenceRule rrule, const QDateTime &periodStart, const QDateTime &periodEnd, int maxCount);
175
static void inferMissingCriteria(QOrganizerRecurrenceRule *rrule, const QDate &initialDate);
176
static bool inMultipleOfInterval(const QDate &date, const QDate &initialDate, QOrganizerRecurrenceRule::Frequency frequency, int interval, Qt::DayOfWeek firstDayOfWeek);
177
static QDate firstDateInPeriod(const QDate &date, QOrganizerRecurrenceRule::Frequency frequency, Qt::DayOfWeek firstDayOfWeek);
178
static QDate firstDateInNextPeriod(const QDate &date, QOrganizerRecurrenceRule::Frequency frequency, Qt::DayOfWeek firstDayOfWeek);
179
static QList<QDate> matchingDates(const QDate &periodStart, const QDate &periodEnd, const QOrganizerRecurrenceRule &rrule);
180
static QList<QDate> filterByPosition(const QList<QDate> &dates, const QSet<int> positions);
181
static bool itemHasReccurence(const QOrganizerItem &oi);
185
void itemsAdded(const QList<QOrganizerItemId> &itemIds);
186
void itemsChanged(const QList<QOrganizerItemId> &itemIds);
187
void itemsRemoved(const QList<QOrganizerItemId> &itemIds);
188
void itemsModified(const QList<QPair<QOrganizerItemId, QOrganizerManager::Operation> > &itemIds);
189
void collectionsAdded(const QList<QOrganizerCollectionId> &collectionIds);
190
void collectionsChanged(const QList<QOrganizerCollectionId> &collectionIds);
191
void collectionsRemoved(const QList<QOrganizerCollectionId> &collectionIds);
192
void collectionsModified(const QList<QPair<QOrganizerCollectionId, QOrganizerManager::Operation> > &collectionIds);
195
Q_DISABLE_COPY(QOrganizerManagerEngine)
196
friend class QOrganizerItemChangeSet;
197
friend class QOrganizerCollectionChangeSet;
200
QT_END_NAMESPACE_ORGANIZER
202
#endif // QORGANIZERMANAGERENGINE_H