Skip to content
This repository has been archived by the owner on Sep 4, 2021. It is now read-only.

Commit

Permalink
[libcontacts] Sort online model by presence state
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewvogt committed Aug 22, 2013
1 parent 66853e2 commit eb5c4fc
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
26 changes: 21 additions & 5 deletions src/seasidecache.cpp
Expand Up @@ -1163,11 +1163,13 @@ bool SeasideCache::event(QEvent *event)

// Find candidates to merge with this contact
m_contactIdRequest.setFilter(filterForMergeCandidates(contact));
m_contactIdRequest.setSorting(m_sortOrder);
m_contactIdRequest.start();
} else if ((m_populateProgress == Unpopulated) && m_keepPopulated && !m_fetchRequest.isActive()) {
// Start a query to fully populate the cache, starting with favorites
m_fetchRequest.setFilter(favoriteFilter());
m_fetchRequest.setFetchHint(favoriteFetchHint(m_fetchTypes));
m_fetchRequest.setSorting(m_sortOrder);
m_fetchRequest.start();

m_appendIndex = 0;
Expand All @@ -1176,6 +1178,7 @@ bool SeasideCache::event(QEvent *event)
// We need to refetch the metadata for all contacts (because the required data changed)
m_fetchRequest.setFilter(favoriteFilter());
m_fetchRequest.setFetchHint(favoriteFetchHint(m_fetchTypes));
m_fetchRequest.setSorting(m_sortOrder);
m_fetchRequest.start();

m_fetchTypesChanged = false;
Expand All @@ -1195,6 +1198,7 @@ bool SeasideCache::event(QEvent *event)
// we only want to retrieve aggregate contacts that have changed
m_fetchRequest.setFilter(filter & aggregateFilter());
m_fetchRequest.setFetchHint(basicFetchHint());
m_fetchRequest.setSorting(m_sortOrder);
m_fetchRequest.start();
} else if (!m_resolveAddresses.isEmpty() && !m_fetchRequest.isActive()) {
const ResolveData &resolve = m_resolveAddresses.first();
Expand Down Expand Up @@ -1228,13 +1232,15 @@ bool SeasideCache::event(QEvent *event)
// as the favorites store, so we don't update any favorite with a smaller data subset
m_activeResolve = &resolve;
m_fetchRequest.setFetchHint(resolve.requireComplete ? basicFetchHint() : favoriteFetchHint(m_fetchTypes));
m_fetchRequest.setSorting(m_sortOrder);
m_fetchRequest.start();
} else if (m_refreshRequired && !m_contactIdRequest.isActive()) {
m_refreshRequired = false;

m_resultsRead = 0;
m_syncFilter = FilterFavorites;
m_contactIdRequest.setFilter(favoriteFilter());
m_contactIdRequest.setSorting(m_sortOrder);
m_contactIdRequest.start();
} else {
m_updatesPending = false;
Expand Down Expand Up @@ -1841,13 +1847,15 @@ void SeasideCache::requestStateChanged(QContactAbstractRequest::State state)
// Next, query for all contacts (including favorites)
m_syncFilter = FilterAll;
m_contactIdRequest.setFilter(allFilter());
m_contactIdRequest.setSorting(m_sortOrder);
m_contactIdRequest.start();

activityCompleted = false;
} else if (m_syncFilter == FilterAll) {
// Next, query for online contacts
m_syncFilter = FilterOnline;
m_contactIdRequest.setFilter(onlineFilter());
m_contactIdRequest.setSorting(m_onlineSortOrder);
m_contactIdRequest.start();

activityCompleted = false;
Expand Down Expand Up @@ -1876,6 +1884,7 @@ void SeasideCache::requestStateChanged(QContactAbstractRequest::State state)
// Start a query to fully populate the cache, starting with favorites
m_fetchRequest.setFilter(favoriteFilter());
m_fetchRequest.setFetchHint(favoriteFetchHint(m_fetchTypes));
m_fetchRequest.setSorting(m_sortOrder);
m_fetchRequest.start();

m_appendIndex = 0;
Expand All @@ -1889,6 +1898,7 @@ void SeasideCache::requestStateChanged(QContactAbstractRequest::State state)
// Request the metadata of all contacts (only data from the primary table)
m_fetchRequest.setFilter(allFilter());
m_fetchRequest.setFetchHint(metadataFetchHint(m_fetchTypes));
m_fetchRequest.setSorting(m_sortOrder);
m_fetchRequest.start();

m_fetchTypesChanged = false;
Expand All @@ -1903,6 +1913,7 @@ void SeasideCache::requestStateChanged(QContactAbstractRequest::State state)
// Now query for online contacts
m_fetchRequest.setFilter(onlineFilter());
m_fetchRequest.setFetchHint(onlineFetchHint(m_fetchTypes));
m_fetchRequest.setSorting(m_onlineSortOrder);
m_fetchRequest.start();

m_appendIndex = 0;
Expand All @@ -1917,6 +1928,7 @@ void SeasideCache::requestStateChanged(QContactAbstractRequest::State state)
// Re-fetch the non-favorites
m_fetchRequest.setFilter(nonfavoriteFilter());
m_fetchRequest.setFetchHint(onlineFetchHint(m_fetchTypes));
m_fetchRequest.setSorting(m_sortOrder);
m_fetchRequest.start();

m_populateProgress = RefetchOthers;
Expand Down Expand Up @@ -1967,12 +1979,16 @@ void SeasideCache::setSortOrder(DisplayLabelOrder order)
lastNameOrder.setDirection(Qt::AscendingOrder);
lastNameOrder.setBlankPolicy(QContactSortOrder::BlanksFirst);

QList<QContactSortOrder> sorting = (order == FirstNameFirst)
? (QList<QContactSortOrder>() << firstNameOrder << lastNameOrder)
: (QList<QContactSortOrder>() << lastNameOrder << firstNameOrder);
m_sortOrder = (order == FirstNameFirst) ? (QList<QContactSortOrder>() << firstNameOrder << lastNameOrder)
: (QList<QContactSortOrder>() << lastNameOrder << firstNameOrder);

m_fetchRequest.setSorting(sorting);
m_contactIdRequest.setSorting(sorting);
m_onlineSortOrder = m_sortOrder;

QContactSortOrder onlineOrder;
setDetailType<QContactGlobalPresence>(onlineOrder, QContactGlobalPresence::FieldPresenceState);
onlineOrder.setDirection(Qt::AscendingOrder);

m_onlineSortOrder.prepend(onlineOrder);
}

void SeasideCache::displayLabelOrderChanged()
Expand Down
2 changes: 2 additions & 0 deletions src/seasidecache.h
Expand Up @@ -452,6 +452,8 @@ private slots:
QContactSaveRequest m_saveRequest;
QContactRelationshipSaveRequest m_relationshipSaveRequest;
QContactRelationshipRemoveRequest m_relationshipRemoveRequest;
QList<QContactSortOrder> m_sortOrder;
QList<QContactSortOrder> m_onlineSortOrder;
#ifdef HAS_MLITE
MGConfItem m_displayLabelOrderConf;
#endif
Expand Down

0 comments on commit eb5c4fc

Please sign in to comment.