20 #include "private/datacontainer_p.h"
21 #include "private/storage_p.h"
32 d(new DataContainerPrivate(this))
48 if (!value.isValid()) {
51 d->data.insert(key, value);
62 d->storageTimer.start(180000,
this);
70 if (d->data.isEmpty()) {
82 return d->relayObjects.contains(visualization);
90 QMap<QObject *, SignalRelay *>::iterator objIt = d->relayObjects.find(visualization);
91 bool connected = objIt != d->relayObjects.end();
99 if (relay->m_interval == pollingInterval) {
105 if (relay->receiverCount() == 1) {
107 d->relays.remove(relay->m_interval);
114 }
else if (pollingInterval < 1) {
125 connect(visualization, SIGNAL(destroyed(
QObject*)),
129 if (pollingInterval < 1) {
131 d->relayObjects[visualization] = 0;
139 bool immediateUpdate = connected || d->relayObjects.count() > 1;
140 SignalRelay *relay = d->signalRelay(
this, visualization, pollingInterval,
141 alignment, immediateUpdate);
149 QTime time = QTime::currentTime();
150 qsrand((uint)time.msec());
151 d->enableStorage = store;
153 QTimer::singleShot(qrand() % (2000 + 1) ,
this, SLOT(retrieve()));
159 return d->enableStorage;
169 d->isStored = !store;
179 o =
dynamic_cast<QObject *
> (o->parent());
188 void DataContainerPrivate::store()
190 if (!q->needsToBeStored() || !q->isStorageEnabled()) {
194 DataEngine* de = q->getDataEngine();
199 q->setNeedsToBeStored(
false);
202 storage =
new Storage(q);
205 KConfigGroup op = storage->operationDescription(
"save");
206 op.writeEntry(
"group", q->objectName());
207 StorageJob *job =
static_cast<StorageJob *
>(storage->startOperationCall(op));
210 QObject::connect(job, SIGNAL(finished(
KJob*)), q, SLOT(storeJobFinished(
KJob*)));
213 void DataContainerPrivate::storeJobFinished(
KJob* )
216 if (storageCount < 1) {
217 storage->deleteLater();
222 void DataContainerPrivate::retrieve()
224 DataEngine* de = q->getDataEngine();
230 storage =
new Storage(q);
233 KConfigGroup retrieveGroup = storage->operationDescription(
"retrieve");
234 retrieveGroup.writeEntry(
"group", q->objectName());
235 ServiceJob* retrieveJob = storage->startOperationCall(retrieveGroup);
236 QObject::connect(retrieveJob, SIGNAL(result(
KJob*)), q,
237 SLOT(populateFromStoredData(
KJob*)));
240 void DataContainerPrivate::populateFromStoredData(
KJob *job)
246 StorageJob *ret =
dynamic_cast<StorageJob*
>(job);
253 if (data.isEmpty() && !ret->data().isEmpty()) {
256 q->forceImmediateUpdate();
259 KConfigGroup expireGroup = storage->operationDescription(
"expire");
261 expireGroup.writeEntry(
"age", 345600);
262 storage->startOperationCall(expireGroup);
267 QMap<QObject *, SignalRelay *>::iterator objIt = d->relayObjects.find(visualization);
268 disconnect(visualization, SIGNAL(destroyed(
QObject*)),
271 if (objIt == d->relayObjects.end() || !objIt.value()) {
278 if (relay->receiverCount() == 1) {
279 d->relays.remove(relay->m_interval);
287 d->relayObjects.erase(objIt);
298 relay->checkQueueing();
313 relay->forceImmediateUpdate();
321 return d->updateTs.elapsed();
331 if (!d->checkUsageTimer.isActive()) {
332 d->checkUsageTimer.start(10,
this);
338 if (event->timerId() == d->checkUsageTimer.timerId()) {
339 if (d->relays.count() < 1 &&
342 kDebug() << objectName() <<
"is unused";
345 d->checkUsageTimer.stop();
346 }
else if (event->timerId() == d->storageTimer.timerId()) {
348 d->storageTimer.stop();
354 #include "datacontainer.moc"