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

List:       kde-commits
Subject:    kdesupport/akonadi/server
From:       Volker Krause <vkrause () kde ! org>
Date:       2010-04-16 12:44:35
Message-ID: 20100416124435.870B7AC898 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1115430 by vkrause:

Refactor search handling in the Akonadi server to make the support for
multiple search backends (Nepomuk and resources at the moment) much
cleaner. Also, this makes search query modification on existing
persistent search folders work finally.


 M  +13 -11    CMakeLists.txt  
 D             src/abstractsearchmanager.cpp  
 D             src/abstractsearchmanager.h  
 M  +5 -7      src/akonadi.cpp  
 M  +2 -2      src/akonadi.h  
 M  +2 -14     src/handler/delete.cpp  
 M  +7 -25     src/handler/modify.cpp  
 M  +3 -17     src/handler/searchpersistent.cpp  
 M  +3 -3      src/handler/searchpersistentmodify.cpp  
 A             src/nepomuk (directory)  
 A             src/nepomuk/dbusoperators.cpp   src/search/dbusoperators.cpp#1115386 \
[License: LGPL (v2)]  A             src/nepomuk/dbusoperators.h   \
src/search/dbusoperators.h#1115386 [License: LGPL (v2)]  A             \
src/nepomuk/org.kde.nepomuk.Query.xml   src/search/org.kde.nepomuk.Query.xml#1115386  \
A             src/nepomuk/org.kde.nepomuk.QueryService.xml   \
src/search/org.kde.nepomuk.QueryService.xml#1115386  A             \
src/nepomuk/querymetatype.h   src/search/querymetatype.h#1115386 [License: GPL (v2+)] \
A             src/nepomuk/queryserviceclient.cpp   \
src/search/queryserviceclient.cpp#1115386 [License: LGPL (v2)]  A             \
src/nepomuk/queryserviceclient.h   src/search/queryserviceclient.h#1115386 [License: \
LGPL (v2)]  A             src/nepomuk/result.cpp   src/search/result.cpp#1115386 \
[License: LGPL (v2)]  A             src/nepomuk/result.h   \
src/search/result.h#1115386 [License: LGPL (v2)]  D             \
src/nepomukmanager.cpp    D             src/nepomukmanager.h  
 M  +1 -1      src/nepomuksearch.cpp  
 M  +1 -1      src/nepomuksearch.h  
 A             src/search/abstractsearchengine.h   \
src/abstractsearchmanager.h#1115386 [License: LGPL (v2+)]  A             \
src/search/agentsearchengine.cpp   [License: LGPL (v2+)]  A             \
src/search/agentsearchengine.h   [License: LGPL (v2+)]  D             \
src/search/dbusoperators.cpp    D             src/search/dbusoperators.h  
 A             src/search/nepomuksearchengine.cpp   src/nepomukmanager.cpp#1115386 \
[License: LGPL (v2+)]  A             src/search/nepomuksearchengine.h   \
src/nepomukmanager.h#1115386 [License: LGPL (v2+)]  D             \
src/search/org.kde.nepomuk.Query.xml    D             \
src/search/org.kde.nepomuk.QueryService.xml    D             \
src/search/querymetatype.h    D             src/search/queryserviceclient.cpp  
 D             src/search/queryserviceclient.h  
 D             src/search/result.cpp  
 D             src/search/result.h  
 A             src/search/searchmanager.cpp   [License: LGPL (v2+)]
 A             src/search/searchmanager.h   [License: LGPL (v2+)]
 A             src/search/xesamsearchengine.cpp   src/xesammanager.cpp#1115386 \
[License: LGPL (v2+)]  A             src/search/xesamsearchengine.h   \
src/xesammanager.h#1115386 [License: LGPL (v2+)]  D             src/xesammanager.cpp  \
  D             src/xesammanager.h  


--- trunk/kdesupport/akonadi/server/CMakeLists.txt #1115429:1115430
@@ -11,7 +11,7 @@
 include_directories( ${Akonadi_BINARY_DIR}/libs )
 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src )
 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src/handler )
-include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src/search )
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src/nepomuk )
 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/tests )
 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/shared )
 include_directories( ${SOPRANO_INCLUDE_DIR} )
@@ -93,10 +93,15 @@
   src/handler/store.cpp
   src/handler/transaction.cpp
 
-  src/search/dbusoperators.cpp
-  src/search/queryserviceclient.cpp
-  src/search/result.cpp
+  src/search/agentsearchengine.cpp
+  src/search/nepomuksearchengine.cpp
+  src/search/searchmanager.cpp
+  src/search/xesamsearchengine.cpp
 
+  src/nepomuk/dbusoperators.cpp
+  src/nepomuk/queryserviceclient.cpp
+  src/nepomuk/result.cpp
+
   src/storage/collectionqueryhelper.cpp
   src/storage/entity.cpp
   ${CMAKE_CURRENT_BINARY_DIR}/entities.cpp
@@ -125,9 +130,6 @@
   src/notificationmanager.cpp
   src/resourcemanager.cpp
   src/cachecleaner.cpp
-  src/abstractsearchmanager.cpp
-  src/xesammanager.cpp
-  src/nepomukmanager.cpp
   src/nepomuksearch.cpp
   src/debuginterface.cpp
   src/imapstreamparser.cpp
@@ -156,11 +158,11 @@
 
 qt4_add_dbus_interface( libakonadiprivate_SRCS ${xesam_xml} xesaminterface )
 
-set_source_files_properties(src/search/org.kde.nepomuk.QueryService.xml PROPERTIES \
                INCLUDE "querymetatype.h")
-set_source_files_properties(src/search/org.kde.nepomuk.Query.xml PROPERTIES INCLUDE \
"result.h") +set_source_files_properties(src/nepomuk/org.kde.nepomuk.QueryService.xml \
PROPERTIES INCLUDE "querymetatype.h") \
+set_source_files_properties(src/nepomuk/org.kde.nepomuk.Query.xml PROPERTIES INCLUDE \
"result.h")  
-qt4_add_dbus_interface(libakonadiprivate_SRCS \
                src/search/org.kde.nepomuk.QueryService.xml queryserviceinterface)
-qt4_add_dbus_interface(libakonadiprivate_SRCS src/search/org.kde.nepomuk.Query.xml \
queryinterface) +qt4_add_dbus_interface(libakonadiprivate_SRCS \
src/nepomuk/org.kde.nepomuk.QueryService.xml queryserviceinterface) \
+qt4_add_dbus_interface(libakonadiprivate_SRCS src/nepomuk/org.kde.nepomuk.Query.xml \
queryinterface)  
 qt4_add_resources( libakonadiprivate_SRCS src/storage/akonadidb.qrc )
 
--- trunk/kdesupport/akonadi/server/src/akonadi.cpp #1115429:1115430
@@ -29,11 +29,10 @@
 #include "notificationmanager.h"
 #include "resourcemanager.h"
 #include "tracer.h"
-#include "xesammanager.h"
-#include "nepomukmanager.h"
 #include "debuginterface.h"
 #include "storage/itemretrievalthread.h"
 #include "preprocessormanager.h"
+#include "search/searchmanager.h"
 
 #include "libs/xdgbasedirs_p.h"
 #include "libs/protocol_p.h"
@@ -131,11 +130,10 @@
     mItemRetrievalThread = new ItemRetrievalThread( this );
     mItemRetrievalThread->start( QThread::HighPriority );
 
-    const QString searchManager = settings.value( QLatin1String( "Search/Manager" ), \
                QLatin1String( "Nepomuk" ) ).toString();
-    if ( searchManager == QLatin1String( "Nepomuk" ) )
-      mSearchManager = new NepomukManager( this );
-    else
-      mSearchManager = new DummySearchManager;
+    const QStringList searchManagers = settings.value( QLatin1String( \
"Search/Manager" ), +                                                       \
QStringList() << QLatin1String( "Nepomuk" ) +                                         \
<< QLatin1String( "Agent" ) ).toStringList(); +    mSearchManager = new \
SearchManager( searchManagers, this );  
     new ServerAdaptor( this );
     QDBusConnection::sessionBus().registerObject( QLatin1String( "/Server" ), this \
                );
--- trunk/kdesupport/akonadi/server/src/akonadi.h #1115429:1115430
@@ -34,7 +34,7 @@
 
 class AkonadiConnection;
 class CacheCleaner;
-class AbstractSearchManager;
+class SearchManager;
 class ItemRetrievalThread;
 
 class AKONADIPRIVATE_EXPORT AkonadiServer: public QLocalServer
@@ -74,7 +74,7 @@
     ItemRetrievalThread *mItemRetrievalThread;
     QProcess *mDatabaseProcess;
     QList< QPointer<AkonadiConnection> > mConnections;
-    AbstractSearchManager *mSearchManager;
+    SearchManager* mSearchManager;
     bool mAlreadyShutdown;
 };
 
--- trunk/kdesupport/akonadi/server/src/handler/delete.cpp #1115429:1115430
@@ -25,7 +25,7 @@
 #include <storage/datastore.h>
 #include <storage/entity.h>
 #include <storage/transaction.h>
-#include "abstractsearchmanager.h"
+#include <search/searchmanager.h>
 #include "imapstreamparser.h"
 #include <storage/selectquerybuilder.h>
 #include <storage/collectionqueryhelper.h>
@@ -81,19 +81,7 @@
     if ( collection.parentId() == 0 )
       return failureResponse( "Cannot delete virtual root collection" );
 
-    AbstractSearchManager::instance()->removeSearch( collection.id() );
-
-    // disable remote searches
-    QDBusInterface agentMgr( QLatin1String( AKONADI_DBUS_CONTROL_SERVICE ),
-                             QLatin1String( AKONADI_DBUS_AGENTMANAGER_PATH ),
-                             QLatin1String( \
                "org.freedesktop.Akonadi.AgentManagerInternal" ) );
-    if ( agentMgr.isValid() ) {
-      QList<QVariant> args;
-      args << collection.id();
-      agentMgr.callWithArgumentList( QDBus::NoBlock, QLatin1String( "removeSearch" \
                ), args );
-    } else {
-      akError() << "Failed to connect to agent manager: " << agentMgr.lastError();
-    }
+    SearchManager::instance()->removeSearch( collection.id() );
   }
 
   if ( !deleteRecursive( collection ) )
--- trunk/kdesupport/akonadi/server/src/handler/modify.cpp #1115429:1115430
@@ -31,8 +31,7 @@
 #include <storage/selectquerybuilder.h>
 #include <storage/collectionqueryhelper.h>
 #include <libs/protocol_p.h>
-#include <abstractsearchmanager.h>
-#include <QDBusInterface>
+#include <search/searchmanager.h>
 #include <akdebug.h>
 
 using namespace Akonadi;
@@ -146,8 +145,10 @@
       collection.setRemoteRevision( remoteRevision );
       changes.append( AKONADI_PARAM_REMOTEREVISION );
     } else if ( type == AKONADI_PARAM_PERSISTENTSEARCH ) {
+      QByteArray tmp;
       QList<QByteArray> queryArgs;
-      pos = ImapParser::parseParenthesizedList( line, queryArgs, pos );
+      pos = ImapParser::parseString( line, tmp, pos );
+      ImapParser::parseParenthesizedList( tmp, queryArgs );
       QString queryLang, queryString;
       for ( int i = 0; i < queryArgs.size() - 1; i += 2 ) {
         const QByteArray key = queryArgs.at( i );
@@ -161,28 +162,9 @@
         collection.setQueryLanguage( queryLang );
         collection.setQueryString( queryString );
 
-        // TODO get rid of the code duplication here, in delete and search
-        //BEGIN temporary
-        AbstractSearchManager::instance()->removeSearch( collection.id() );
-        AbstractSearchManager::instance()->addSearch( collection );
+        SearchManager::instance()->removeSearch( collection.id() );
+        SearchManager::instance()->addSearch( collection );
 
-        QDBusInterface agentMgr( QLatin1String( AKONADI_DBUS_CONTROL_SERVICE ),
-                                QLatin1String( AKONADI_DBUS_AGENTMANAGER_PATH ),
-                                QLatin1String( \
                "org.freedesktop.Akonadi.AgentManagerInternal" ) );
-        if ( agentMgr.isValid() ) {
-          QList<QVariant> args;
-          args << collection.id();
-          agentMgr.callWithArgumentList( QDBus::NoBlock, QLatin1String( \
                "removeSearch" ), args );
-          args.clear();
-          args << collection.queryString()
-              << collection.queryLanguage()
-              << collection.id();
-          agentMgr.callWithArgumentList( QDBus::NoBlock, QLatin1String( "addSearch" \
                ), args );
-        } else {
-          akError() << "Failed to connect to agent manager: " << \
                agentMgr.lastError();
-        }
-        //END temporary
-
         changes.append( AKONADI_PARAM_PERSISTENTSEARCH );
       }
     } else if ( type.isEmpty() ) {
@@ -199,7 +181,7 @@
         pos = ImapParser::parseString( line, value, pos );
 
         SelectQueryBuilder<CollectionAttribute> qb;
-        qb.addValueCondition( CollectionAttribute::collectionIdColumn(), \
Query::Equals, collection.id() ); +          qb.addValueCondition( \
                CollectionAttribute::collectionIdColumn(), Query::Equals, \
                collection.id() );
         qb.addValueCondition( CollectionAttribute::typeColumn(), Query::Equals, type \
);  if ( !qb.exec() )
           throw HandlerException( "Unable to retrieve collection attribute" );
--- trunk/kdesupport/akonadi/server/src/handler/searchpersistent.cpp #1115429:1115430
@@ -26,7 +26,7 @@
 #include "storage/entity.h"
 #include "storage/transaction.h"
 #include "handlerhelper.h"
-#include "abstractsearchmanager.h"
+#include "search/searchmanager.h"
 #include "imapstreamparser.h"
 #include "libs/protocol_p.h"
 #include <akdebug.h>
@@ -78,25 +78,11 @@
     col.addMimeType( mt );
   }
 
-  if ( !AbstractSearchManager::instance()->addSearch( col ) )
-    return failureResponse( "Unable to add search to search manager" );
-
   if ( !transaction.commit() )
     return failureResponse( "Unable to commit transaction" );
 
-  // distribute to remote search agents
-  QDBusInterface agentMgr( QLatin1String( AKONADI_DBUS_CONTROL_SERVICE ),
-                           QLatin1String( AKONADI_DBUS_AGENTMANAGER_PATH ),
-                           QLatin1String( \
                "org.freedesktop.Akonadi.AgentManagerInternal" ) );
-  if ( agentMgr.isValid() ) {
-    QList<QVariant> args;
-    args << col.queryString()
-         << col.queryLanguage()
-         << col.id();
-    agentMgr.callWithArgumentList( QDBus::NoBlock, QLatin1String( "addSearch" ), \
                args );
-  } else {
-    akError() << "Failed to connect to agent manager: " << agentMgr.lastError();
-  }
+  if ( !SearchManager::instance()->addSearch( col ) )
+    return failureResponse( "Unable to add search to search manager" );
 
   const QByteArray b = HandlerHelper::collectionToByteArray( col );
 
--- trunk/kdesupport/akonadi/server/src/handler/searchpersistentmodify.cpp \
#1115429:1115430 @@ -26,7 +26,7 @@
 #include "storage/entity.h"
 #include "storage/transaction.h"
 #include "handlerhelper.h"
-#include "abstractsearchmanager.h"
+#include <search/searchmanager.h>
 #include "imapstreamparser.h"
 #include "libs/protocol_p.h"
 #include <akdebug.h>
@@ -90,10 +90,10 @@
   }
 
 
-  if ( !AbstractSearchManager::instance()->removeSearch( existingCollection.id() ) )
+  if ( !SearchManager::instance()->removeSearch( existingCollection.id() ) )
     return failureResponse( "Unable to remove the original search from the search \
manager" );  
-  if ( !AbstractSearchManager::instance()->addSearch( col ) )
+  if ( !SearchManager::instance()->addSearch( col ) )
     return failureResponse( "Unable to add search to search manager" );
 
   if ( !transaction.commit() )
--- trunk/kdesupport/akonadi/server/src/nepomuksearch.cpp #1115429:1115430
@@ -23,7 +23,7 @@
 #include <QtCore/QStringList>
 #include <QtCore/QUrl>
 
-#include "search/result.h"
+#include "nepomuk/result.h"
 
 using namespace Akonadi;
 
--- trunk/kdesupport/akonadi/server/src/nepomuksearch.h #1115429:1115430
@@ -24,7 +24,7 @@
 #include <QtCore/QSet>
 #include <QtCore/QString>
 
-#include "search/queryserviceclient.h"
+#include "nepomuk/queryserviceclient.h"
 
 namespace Akonadi {
 


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

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