summaryrefslogtreecommitdiffstats
path: root/common/synchronizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/synchronizer.h')
-rw-r--r--common/synchronizer.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/common/synchronizer.h b/common/synchronizer.h
index c03c425..47518ee 100644
--- a/common/synchronizer.h
+++ b/common/synchronizer.h
@@ -90,11 +90,42 @@ protected:
90 void modify(const DomainType &entity); 90 void modify(const DomainType &entity);
91 // template <typename DomainType> 91 // template <typename DomainType>
92 // void remove(const DomainType &entity); 92 // void remove(const DomainType &entity);
93 QByteArrayList resolveFilter(const QueryBase::Comparator &filter);
93 94
94 virtual KAsync::Job<void> synchronizeWithSource(const Sink::QueryBase &query) = 0; 95 virtual KAsync::Job<void> synchronizeWithSource(const Sink::QueryBase &query) = 0;
95 96
97 struct SyncRequest {
98 SyncRequest(const Sink::QueryBase &q)
99 : flushQueue(false),
100 query(q)
101 {
102 }
103
104 bool flushQueue;
105 Sink::QueryBase query;
106 };
107
108 /**
109 * This allows the synchronizer to turn a single query into multiple synchronization requests.
110 *
111 * The idea is the following;
112 * The input query is a specification by the application of what data needs to be made available.
113 * Requests could be:
114 * * Give me everything (signified by the default constructed/empty query)
115 * * Give me all mails of folder X
116 * * Give me all mails of folders matching some constraints
117 *
118 * getSyncRequests allows the resource implementation to apply it's own defaults to that request;
119 * * While a maildir resource might give you always all emails of a folder, an IMAP resource might have a date limit, to i.e. only retrieve the last 14 days worth of data.
120 * * A resource get's to define what "give me everything" means. For email that may be turned into first a requests for folders, and then a request for all emails in those folders.
121 *
122 * This will allow synchronizeWithSource to focus on just getting to the content.
123 */
124 virtual QList<Synchronizer::SyncRequest> getSyncRequests(const Sink::QueryBase &query);
125
96private: 126private:
97 void modifyIfChanged(Storage::EntityStore &store, const QByteArray &bufferType, const QByteArray &sinkId, const Sink::ApplicationDomain::ApplicationDomainType &entity); 127 void modifyIfChanged(Storage::EntityStore &store, const QByteArray &bufferType, const QByteArray &sinkId, const Sink::ApplicationDomain::ApplicationDomainType &entity);
128 KAsync::Job<void> processSyncQueue();
98 129
99 Sink::ResourceContext mResourceContext; 130 Sink::ResourceContext mResourceContext;
100 Sink::Storage::EntityStore::Ptr mEntityStore; 131 Sink::Storage::EntityStore::Ptr mEntityStore;
@@ -102,6 +133,7 @@ private:
102 Sink::Storage::DataStore mSyncStorage; 133 Sink::Storage::DataStore mSyncStorage;
103 Sink::Storage::DataStore::Transaction mSyncTransaction; 134 Sink::Storage::DataStore::Transaction mSyncTransaction;
104 std::function<void(int commandId, const QByteArray &data)> mEnqueue; 135 std::function<void(int commandId, const QByteArray &data)> mEnqueue;
136 QList<SyncRequest> mSyncRequestQueue;
105 MessageQueue *mMessageQueue; 137 MessageQueue *mMessageQueue;
106 bool mSyncInProgress; 138 bool mSyncInProgress;
107}; 139};