summaryrefslogtreecommitdiffstats
path: root/common/resourcefacade.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/resourcefacade.cpp')
-rw-r--r--common/resourcefacade.cpp47
1 files changed, 36 insertions, 11 deletions
diff --git a/common/resourcefacade.cpp b/common/resourcefacade.cpp
index aa2f84a..7d42f47 100644
--- a/common/resourcefacade.cpp
+++ b/common/resourcefacade.cpp
@@ -128,6 +128,22 @@ QPair<KAsync::Job<void>, typename Sink::ResultEmitter<Sink::ApplicationDomain::S
128} 128}
129 129
130 130
131
132Q_GLOBAL_STATIC(ConfigNotifier, sConfig);
133
134static Sink::ApplicationDomain::SinkAccount::Ptr readAccountFromConfig(const QByteArray &id, const QByteArray &type)
135{
136 auto account = Sink::ApplicationDomain::SinkAccount::Ptr::create(id);
137
138 account->setProperty("type", type);
139 const auto configurationValues = AccountConfig::getConfiguration(id);
140 for (auto it = configurationValues.constBegin(); it != configurationValues.constEnd(); it++) {
141 account->setProperty(it.key(), it.value());
142 }
143 return account;
144}
145
146
131AccountFacade::AccountFacade(const QByteArray &) : Sink::StoreFacade<Sink::ApplicationDomain::SinkAccount>() 147AccountFacade::AccountFacade(const QByteArray &) : Sink::StoreFacade<Sink::ApplicationDomain::SinkAccount>()
132{ 148{
133} 149}
@@ -155,6 +171,7 @@ KAsync::Job<void> AccountFacade::create(const Sink::ApplicationDomain::SinkAccou
155 } 171 }
156 AccountConfig::configureAccount(identifier, configurationValues); 172 AccountConfig::configureAccount(identifier, configurationValues);
157 } 173 }
174 sConfig->add(readAccountFromConfig(identifier, type));
158 }); 175 });
159} 176}
160 177
@@ -177,6 +194,9 @@ KAsync::Job<void> AccountFacade::modify(const Sink::ApplicationDomain::SinkAccou
177 } 194 }
178 AccountConfig::configureAccount(identifier, configurationValues); 195 AccountConfig::configureAccount(identifier, configurationValues);
179 } 196 }
197
198 const auto type = AccountConfig::getAccounts().value(identifier);
199 sConfig->modify(readAccountFromConfig(identifier, type));
180 }); 200 });
181} 201}
182 202
@@ -189,16 +209,18 @@ KAsync::Job<void> AccountFacade::remove(const Sink::ApplicationDomain::SinkAccou
189 return; 209 return;
190 } 210 }
191 AccountConfig::removeAccount(identifier); 211 AccountConfig::removeAccount(identifier);
212 sConfig->remove(Sink::ApplicationDomain::SinkAccount::Ptr::create(account));
192 }); 213 });
193} 214}
194 215
195QPair<KAsync::Job<void>, typename Sink::ResultEmitter<Sink::ApplicationDomain::SinkAccount::Ptr>::Ptr> AccountFacade::load(const Sink::Query &query) 216QPair<KAsync::Job<void>, typename Sink::ResultEmitter<Sink::ApplicationDomain::SinkAccount::Ptr>::Ptr> AccountFacade::load(const Sink::Query &query)
196{ 217{
218 QObject *guard = new QObject;
197 auto resultProvider = new Sink::ResultProvider<typename Sink::ApplicationDomain::SinkAccount::Ptr>(); 219 auto resultProvider = new Sink::ResultProvider<typename Sink::ApplicationDomain::SinkAccount::Ptr>();
198 auto emitter = resultProvider->emitter(); 220 auto emitter = resultProvider->emitter();
199 resultProvider->setFetcher([](const QSharedPointer<Sink::ApplicationDomain::SinkAccount> &) {}); 221 resultProvider->setFetcher([](const QSharedPointer<Sink::ApplicationDomain::SinkAccount> &) {});
200 resultProvider->onDone([resultProvider]() { delete resultProvider; }); 222 resultProvider->onDone([=]() { delete resultProvider; delete guard; });
201 auto job = KAsync::start<void>([query, resultProvider]() { 223 auto job = KAsync::start<void>([=]() {
202 const auto configuredAccounts = AccountConfig::getAccounts(); 224 const auto configuredAccounts = AccountConfig::getAccounts();
203 for (const auto &res : configuredAccounts.keys()) { 225 for (const auto &res : configuredAccounts.keys()) {
204 const auto type = configuredAccounts.value(res); 226 const auto type = configuredAccounts.value(res);
@@ -206,15 +228,18 @@ QPair<KAsync::Job<void>, typename Sink::ResultEmitter<Sink::ApplicationDomain::S
206 continue; 228 continue;
207 } 229 }
208 230
209 auto account = Sink::ApplicationDomain::SinkAccount::Ptr::create("", res, 0, QSharedPointer<Sink::ApplicationDomain::MemoryBufferAdaptor>::create()); 231 resultProvider->add(readAccountFromConfig(res, type));
210 account->setProperty("type", type); 232 }
211 233 if (query.liveQuery) {
212 const auto configurationValues = AccountConfig::getConfiguration(res); 234 QObject::connect(sConfig, &ConfigNotifier::modified, guard, [resultProvider](const Sink::ApplicationDomain::SinkAccount::Ptr &account) {
213 for (auto it = configurationValues.constBegin(); it != configurationValues.constEnd(); it++) { 235 resultProvider->modify(account);
214 account->setProperty(it.key(), it.value()); 236 });
215 } 237 QObject::connect(sConfig, &ConfigNotifier::added, guard, [resultProvider](const Sink::ApplicationDomain::SinkAccount::Ptr &account) {
216 238 resultProvider->add(account);
217 resultProvider->add(account); 239 });
240 QObject::connect(sConfig, &ConfigNotifier::removed, guard,[resultProvider](const Sink::ApplicationDomain::SinkAccount::Ptr &account) {
241 resultProvider->remove(account);
242 });
218 } 243 }
219 // TODO initialResultSetComplete should be implicit 244 // TODO initialResultSetComplete should be implicit
220 resultProvider->initialResultSetComplete(Sink::ApplicationDomain::SinkAccount::Ptr()); 245 resultProvider->initialResultSetComplete(Sink::ApplicationDomain::SinkAccount::Ptr());