[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/runtime/nepomuk/services/queryservice
From:       Sebastian Trueg <sebastian () trueg ! de>
Date:       2011-01-10 16:31:57
Message-ID: 20110110163157.23298AC8B2 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1213499 by trueg:

Use a hash for the results in order to ensure that no duplicates are emitted.

 M  +19 -13    folder.cpp  
 M  +5 -3      folder.h  


--- trunk/KDE/kdebase/runtime/nepomuk/services/queryservice/folder.cpp #1213498:1213499
@@ -104,7 +104,7 @@
 
 QList<Nepomuk::Query::Result> Nepomuk::Query::Folder::entries() const
 {
-    return m_results.values();
+    return m_results.toList();
 }
 
 
@@ -135,23 +135,22 @@
 // called from SearchRunnable in the search thread
 void Nepomuk::Query::Folder::addResults( const QList<Nepomuk::Query::Result>& results )
 {
-    if ( m_initialListingDone ) {
-        QList<Result> newResults;
+    QSet<Result> newResults;
         Q_FOREACH( const Result& result, results ) {
-            m_newResults.insert( result.resource().resourceUri(), result );
-            if ( !m_results.contains( result.resource().resourceUri() ) ) {
-                newResults << result;
+        if ( !m_results.contains( result ) ) {
+            newResults.insert( result );
             }
         }
-        if( !newResults.isEmpty() ) {
-            emit newEntries( newResults );
+
+    if ( m_initialListingDone ) {
+        m_newResults += newResults;
         }
-    }
     else {
-        Q_FOREACH( const Result& result, results ) {
-            m_results.insert( result.resource().resourceUri(), result );
+        m_results += newResults;
         }
-        emit newEntries( results );
+
+    if( !newResults.isEmpty() ) {
+        emit newEntries( newResults.toList() );
     }
 }
 
@@ -167,7 +166,7 @@
 
         // legacy removed results
         foreach( const Result& result, m_results ) {
-            if ( !m_newResults.contains( result.resource().resourceUri() ) ) {
+            if ( !m_newResults.contains( result ) ) {
                 removedResults << result;
                 emit entriesRemoved( QList<QUrl>() << KUrl(result.resource().resourceUri()).url() );
             }
@@ -257,4 +256,11 @@
     return m_connections;
 }
 
+
+uint Nepomuk::Query::qHash( const Result& result )
+{
+    // we only use this to ensure that we do not emit duplicates
+    return qHash(result.resource().resourceUri());
+}
+
 #include "folder.moc"
--- trunk/KDE/kdebase/runtime/nepomuk/services/queryservice/folder.h #1213498:1213499
@@ -24,7 +24,7 @@
 #include <Nepomuk/Query/Result>
 #include <Nepomuk/Query/Query>
 
-#include <QtCore/QHash>
+#include <QtCore/QSet>
 #include <QtCore/QTimer>
 #include <QtCore/QPointer>
 
@@ -39,6 +39,8 @@
 namespace Nepomuk {
     namespace Query {
 
+        uint qHash( const Result& );
+
         class SearchRunnable;
         class CountQueryRunnable;
         class FolderConnection;
@@ -157,10 +159,10 @@
             bool m_initialListingDone;
 
             /// the actual current results
-            QHash<QUrl, Result> m_results;
+            QSet<Result> m_results;
 
             /// the results gathered during an update, needed to find removed items
-            QHash<QUrl, Result> m_newResults;
+            QSet<Result> m_newResults;
 
             /// the runnable doing work at the moment or 0 if idle
             SearchRunnable* m_currentSearchRunnable;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic