~tiagosh/history-service/fix-1417353

« back to all changes in this revision

Viewing changes to Ubuntu/History/historythreadmodel.cpp

  • Committer: CI bot
  • Author(s): Gustavo Pichorim Boiko
  • Date: 2014-08-21 19:03:18 UTC
  • mfrom: (160.4.5 history-service-delay_queries)
  • Revision ID: ps-jenkins@lists.canonical.com-20140821190318-h283eh7adqq97mo9
Optimize the history-service by delaying the event and thread views on the
model until the properties are all set. 
Approved by: PS Jenkins bot

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
Q_DECLARE_METATYPE(History::TextEventAttachments)
36
36
 
37
37
HistoryThreadModel::HistoryThreadModel(QObject *parent) :
38
 
    QAbstractListModel(parent), mCanFetchMore(true), mFilter(0), mSort(0), mType(EventTypeText), mFetchTimer(0)
 
38
    QAbstractListModel(parent), mCanFetchMore(true), mFilter(0), mSort(0),
 
39
    mType(EventTypeText), mUpdateTimer(0)
39
40
{
40
41
    // configure the roles
41
42
    mRoles[AccountIdRole] = "accountId";
66
67
    connect(this, SIGNAL(modelReset()), SIGNAL(countChanged()));
67
68
 
68
69
    // create the results view
69
 
    updateQuery();
 
70
    triggerQueryUpdate();
70
71
}
71
72
 
72
73
int HistoryThreadModel::rowCount(const QModelIndex &parent) const
213
214
 
214
215
void HistoryThreadModel::fetchMore(const QModelIndex &parent)
215
216
{
216
 
    if (parent.isValid()) {
 
217
    if (parent.isValid() || mThreadView.isNull()) {
217
218
        return;
218
219
    }
219
220
 
249
250
    if (mFilter) {
250
251
        connect(mFilter,
251
252
                SIGNAL(filterChanged()),
252
 
                SLOT(updateQuery()));
 
253
                SLOT(triggerQueryUpdate()));
253
254
    }
254
255
 
255
256
    Q_EMIT filterChanged();
256
 
    updateQuery();
 
257
    triggerQueryUpdate();
257
258
}
258
259
 
259
260
HistoryQmlSort *HistoryThreadModel::sort() const
272
273
    if (mSort) {
273
274
        connect(mSort,
274
275
                SIGNAL(sortChanged()),
275
 
                SLOT(updateQuery()));
 
276
                SLOT(triggerQueryUpdate()));
276
277
    }
277
278
 
278
279
    Q_EMIT sortChanged();
279
 
    updateQuery();
 
280
    triggerQueryUpdate();
280
281
}
281
282
 
282
283
HistoryThreadModel::EventType HistoryThreadModel::type() const
288
289
{
289
290
    mType = value;
290
291
    Q_EMIT typeChanged();
291
 
    updateQuery();
 
292
    triggerQueryUpdate();
292
293
}
293
294
 
294
295
QString HistoryThreadModel::threadIdForParticipants(const QString &accountId, int eventType, const QStringList &participants, int matchFlags, bool create)
324
325
    return mThreads[row].properties();
325
326
}
326
327
 
 
328
void HistoryThreadModel::triggerQueryUpdate()
 
329
{
 
330
    if (mUpdateTimer) {
 
331
        killTimer(mUpdateTimer);
 
332
    }
 
333
    mUpdateTimer = startTimer(100);
 
334
}
 
335
 
327
336
void HistoryThreadModel::updateQuery()
328
337
{
329
338
    // remove all events from the model
363
372
            SLOT(onThreadsRemoved(History::Threads)));
364
373
    connect(mThreadView.data(),
365
374
            SIGNAL(invalidated()),
366
 
            SLOT(updateQuery()));
 
375
            SLOT(triggerQueryUpdate()));
367
376
 
368
377
    Q_FOREACH(const QVariant &attachment, mAttachmentCache) {
369
378
        HistoryQmlTextEventAttachment *qmlAttachment = attachment.value<HistoryQmlTextEventAttachment *>();
373
382
    }
374
383
    mAttachmentCache.clear();
375
384
 
376
 
    if (mFetchTimer) {
377
 
        killTimer(mFetchTimer);
378
 
    }
379
 
 
380
385
    // and fetch again
381
386
    mCanFetchMore = true;
382
387
    Q_EMIT canFetchMoreChanged();
383
 
 
384
 
    // delay the loading just to give the settings some time to settle down
385
 
    mFetchTimer = startTimer(100);
 
388
    fetchMore(QModelIndex());
386
389
}
387
390
 
388
391
void HistoryThreadModel::onThreadsAdded(const History::Threads &threads)
430
433
 
431
434
void HistoryThreadModel::timerEvent(QTimerEvent *event)
432
435
{
433
 
    if (event->timerId() == mFetchTimer) {
434
 
        killTimer(mFetchTimer);
435
 
        mFetchTimer = 0;
436
 
 
437
 
        fetchMore(QModelIndex());
 
436
    if (event->timerId() == mUpdateTimer) {
 
437
        killTimer(mUpdateTimer);
 
438
        mUpdateTimer = 0;
 
439
        updateQuery();
438
440
    }
439
441
}