From 0dcb9e201df8befc02f9d7c3c1c82fbc041ba7f1 Mon Sep 17 00:00:00 2001 From: Matt Vogt Date: Tue, 10 Dec 2013 21:58:18 -0800 Subject: [PATCH] [libcontacts] Report unknown addresses immediately When we are asked to resolve an address that was previously resolved as unknown, report unknown immediately without querying the backend again. --- src/seasidecache.cpp | 29 ++++++++++++++++++++++++++--- src/seasidecache.h | 1 + 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/seasidecache.cpp b/src/seasidecache.cpp index af0a94d..842dcde 100644 --- a/src/seasidecache.cpp +++ b/src/seasidecache.cpp @@ -1406,8 +1406,16 @@ bool SeasideCache::event(QEvent *event) return QObject::event(event); // Test these conditions in priority order - if ((!m_relationshipsToSave.isEmpty() && !m_relationshipSaveRequest.isActive()) || - (!m_relationshipsToRemove.isEmpty() && !m_relationshipRemoveRequest.isActive())) { + if (!m_unknownResolveAddresses.isEmpty()) { + while (!m_unknownResolveAddresses.isEmpty()) { + const ResolveData &resolve = m_unknownResolveAddresses.takeFirst(); + resolve.listener->addressResolved(resolve.first, resolve.second, 0); + } + + // Send another event to trigger further processing + QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); + } else if ((!m_relationshipsToSave.isEmpty() && !m_relationshipSaveRequest.isActive()) || + (!m_relationshipsToRemove.isEmpty() && !m_relationshipRemoveRequest.isActive())) { // this has to be before contact saves are processed so that the disaggregation flow // works properly if (!m_relationshipsToSave.isEmpty()) { @@ -2951,7 +2959,22 @@ void SeasideCache::resolveAddress(ResolveListener *listener, const QString &firs data.requireComplete = requireComplete; data.listener = listener; - m_resolveAddresses.append(data); + // Is this address a known-unknown? + bool knownUnknown = false; + QList::const_iterator it = instancePtr->m_unknownAddresses.constBegin(), end = m_unknownAddresses.constEnd(); + for ( ; it != end; ++it) { + if (it->first == first && it->second == second) { + knownUnknown = true; + break; + } + } + + if (knownUnknown) { + m_unknownResolveAddresses.append(data); + } else { + m_resolveAddresses.append(data); + } + requestUpdate(); } diff --git a/src/seasidecache.h b/src/seasidecache.h index 76b6f7b..ec5c0e7 100644 --- a/src/seasidecache.h +++ b/src/seasidecache.h @@ -510,6 +510,7 @@ private slots: ResolveListener *listener; }; QList m_resolveAddresses; + QList m_unknownResolveAddresses; QList m_unknownAddresses; const ResolveData *m_activeResolve; QSet m_resolvedPhoneNumbers;