Hello community, here is the log from the commit of package akonadi-search for openSUSE:Factory checked in at 2016-08-29 14:30:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/akonadi-search (Old) and /work/SRC/openSUSE:Factory/.akonadi-search.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "akonadi-search" Changes: -------- --- /work/SRC/openSUSE:Factory/akonadi-search/akonadi-search.changes 2016-08-08 13:57:19.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.akonadi-search.new/akonadi-search.changes 2016-08-29 14:30:20.000000000 +0200 @@ -1,0 +2,16 @@ +Fri Aug 12 10:00:27 UTC 2016 - [email protected] + +- Update to KDE Applications 16.08.0 + * KDE Applications 16.08.0 + * https://www.kde.org/announcements/announce-applications-16.08.0.php + + +------------------------------------------------------------------- +Mon Aug 8 14:20:08 UTC 2016 - [email protected] + +- Update to KDE Applications 16.07.90 + * KDE Applications 16.07.90 (16.08-RC) + * https://www.kde.org/announcements/announce-applications-16.07.90.php + + +------------------------------------------------------------------- Old: ---- akonadi-search-16.04.3.tar.xz New: ---- akonadi-search-16.08.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ akonadi-search.spec ++++++ --- /var/tmp/diff_new_pack.X6Mx8E/_old 2016-08-29 14:30:22.000000000 +0200 +++ /var/tmp/diff_new_pack.X6Mx8E/_new 2016-08-29 14:30:22.000000000 +0200 @@ -17,15 +17,15 @@ Name: akonadi-search -Version: 16.04.3 +Version: 16.08.0 Release: 0 Summary: Framework for searching and managing PIM metadata License: GPL-2.0+ and LGPL-2.1+ and LGPL-3.0 Group: System/GUI/KDE Url: http://www.kde.org Source0: %{name}-%{version}.tar.xz -BuildRequires: akonadi-mime-devel -BuildRequires: akonadi-server-devel +BuildRequires: akonadi-mime-devel = %{version} +BuildRequires: akonadi-server-devel = %{version} BuildRequires: extra-cmake-modules >= 5.17.0 BuildRequires: kcalcore-devel BuildRequires: kcmutils-devel >= 5.19.0 ++++++ akonadi-search-16.04.3.tar.xz -> akonadi-search-16.08.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/.gitignore new/akonadi-search-16.08.0/.gitignore --- old/akonadi-search-16.04.3/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/akonadi-search-16.08.0/.gitignore 2016-08-06 20:08:58.000000000 +0200 @@ -0,0 +1,3 @@ +# Ignore the following files +/build/ +CMakeLists.txt.user* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/CMakeLists.txt new/akonadi-search-16.08.0/CMakeLists.txt --- old/akonadi-search-16.04.3/CMakeLists.txt 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/CMakeLists.txt 2016-08-06 20:08:58.000000000 +0200 @@ -3,7 +3,8 @@ project(AkonadiSearch) # ECM setup -find_package(ECM 5.17.0 REQUIRED NO_MODULE) +set(KF5_VERSION "5.23.0") +find_package(ECM ${KF5_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) include(GenerateExportHeader) @@ -19,14 +20,15 @@ include(ECMQtDeclareLoggingCategory) -set(AKONADISEARCH_VERSION "5.2.3") -set(KF5_VERSION "5.19.0") +set(PIM_VERSION "5.3.0") -set(AKONADI_VERSION "5.2.0") -set(KDEPIMLIBS_LIB_VERSION "5.2.0") -set(KCONTACTS_LIB_VERSION "5.2.0") -set(KCALENDARCORE_LIB_VERSION "5.2.0") -set(KMIME_LIB_VERSION "5.2.0") +set(AKONADISEARCH_VERSION ${PIM_VERSION}) + +set(AKONADI_VERSION "5.3.0") +set(AKONADI_MIMELIB_VERSION "5.3.0") +set(KCONTACTS_LIB_VERSION "5.3.0") +set(KCALENDARCORE_LIB_VERSION "5.3.0") +set(KMIME_LIB_VERSION "5.3.0") find_package(Qt5 REQUIRED NO_MODULE COMPONENTS Core Test) @@ -43,7 +45,7 @@ find_package(KF5Akonadi ${AKONADI_VERSION} CONFIG REQUIRED) find_package(KF5Contacts ${KCONTACTS_LIB_VERSION} CONFIG REQUIRED) find_package(KF5Mime ${KMIME_LIB_VERSION} CONFIG REQUIRED) -find_package(KF5AkonadiMime ${KDEPIMLIBS_LIB_VERSION} CONFIG REQUIRED) +find_package(KF5AkonadiMime ${AKONADI_MIMELIB_VERSION} CONFIG REQUIRED) find_package(KF5CalendarCore ${KCALENDARCORE_LIB_VERSION} CONFIG REQUIRED) ecm_setup_version(${AKONADISEARCH_VERSION} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/CMakeLists.txt new/akonadi-search-16.08.0/agent/CMakeLists.txt --- old/akonadi-search-16.04.3/agent/CMakeLists.txt 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/CMakeLists.txt 2016-08-06 20:08:58.000000000 +0200 @@ -37,6 +37,7 @@ KF5::AkonadiAgentBase KF5::CalendarCore KF5::AkonadiSearchXapian + KF5::AkonadiSearchPIM ) install(TARGETS akonadi_indexing_agent ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/agent.cpp new/akonadi-search-16.08.0/agent/agent.cpp --- old/akonadi-search-16.04.3/agent/agent.cpp 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/agent.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -117,7 +117,7 @@ void AkonadiIndexingAgent::reindexAll() { - //qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Reindexing everything"; + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Reindexing everything"; m_scheduler.abort(); m_index.removeDatabase(); m_index.createIndexers(); @@ -126,11 +126,18 @@ void AkonadiIndexingAgent::reindexCollection(const qlonglong id) { - - //qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Reindexing collection " << id; + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Reindexing collection " << id; m_scheduler.scheduleCollection(Akonadi::Collection(id), true); } +void AkonadiIndexingAgent::reindexCollections(const QList<qlonglong> &ids) +{ + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Reindexing collections " << ids; + Q_FOREACH(qlonglong id, ids) { + m_scheduler.scheduleCollection(Akonadi::Collection(id), true); + } +} + qlonglong AkonadiIndexingAgent::indexedItems(const qlonglong id) { return m_index.indexedItems(id); @@ -186,6 +193,7 @@ void AkonadiIndexingAgent::collectionAdded(const Akonadi::Collection &collection, const Akonadi::Collection &parent) { + Q_UNUSED(parent); m_index.index(collection); m_index.scheduleCommit(); } @@ -222,6 +230,9 @@ const Akonadi::Collection &collectionSource, const Akonadi::Collection &collectionDestination) { + Q_UNUSED(collectionSource); + Q_UNUSED(collectionDestination); + m_index.remove(collection); CollectionUpdateJob *job = new CollectionUpdateJob(m_index, collection, this); job->start(); @@ -233,6 +244,11 @@ Akonadi::AgentBase::cleanup(); } +int AkonadiIndexingAgent::numberOfCollectionQueued() +{ + return m_scheduler.numberOfCollectionQueued(); +} + void AkonadiIndexingAgent::onAbortRequested() { KConfig config(QStringLiteral("baloorc")); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/agent.h new/akonadi-search-16.08.0/agent/agent.h --- old/akonadi-search-16.04.3/agent/agent.h 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/agent.h 2016-08-06 20:08:58.000000000 +0200 @@ -51,7 +51,9 @@ void reindexAll(); void reindexCollection(const qlonglong id); + void reindexCollections(const QList<qlonglong> &ids); qlonglong indexedItems(const qlonglong id); + int numberOfCollectionQueued(); void itemAdded(const Akonadi::Item &item, const Akonadi::Collection &collection) Q_DECL_OVERRIDE; void itemChanged(const Akonadi::Item &item, const QSet<QByteArray> &partIdentifiers) Q_DECL_OVERRIDE; @@ -72,6 +74,7 @@ // Remove the entire db void cleanup() Q_DECL_OVERRIDE; + private Q_SLOTS: void onAbortRequested(); void onOnlineChanged(bool online); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/autotests/unittestenv/xdgconfig/kdebugrc new/akonadi-search-16.08.0/agent/autotests/unittestenv/xdgconfig/kdebugrc --- old/akonadi-search-16.04.3/agent/autotests/unittestenv/xdgconfig/kdebugrc 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/autotests/unittestenv/xdgconfig/kdebugrc 1970-01-01 01:00:00.000000000 +0100 @@ -1,80 +0,0 @@ -DisableAll=false - -[0] -AbortFatal=true -ErrorFilename[$e]=kdebug.dbg -ErrorOutput=2 -FatalFilename[$e]=kdebug.dbg -FatalOutput=2 -InfoFilename[$e]=kdebug.dbg -InfoOutput=2 -WarnFilename[$e]=kdebug.dbg -WarnOutput=2 - -[264] -AbortFatal=true -ErrorFilename[$e]=kdebug.dbg -ErrorOutput=4 -FatalFilename[$e]=kdebug.dbg -FatalOutput=4 -InfoFilename[$e]=kdebug.dbg -WarnFilename[$e]=kdebug.dbg -WarnOutput=4 - -[5250] -InfoOutput=2 - -[7009] -AbortFatal=true -ErrorFilename[$e]=kdebug.dbg -ErrorOutput=4 -FatalFilename[$e]=kdebug.dbg -FatalOutput=4 -InfoFilename[$e]=kdebug.dbg -InfoOutput=4 -WarnFilename[$e]=kdebug.dbg -WarnOutput=4 - -[7011] -AbortFatal=true -ErrorFilename[$e]=kdebug.dbg -ErrorOutput=4 -FatalFilename[$e]=kdebug.dbg -FatalOutput=4 -InfoFilename[$e]=kdebug.dbg -InfoOutput=4 -WarnFilename[$e]=kdebug.dbg -WarnOutput=4 - -[7012] -AbortFatal=true -ErrorFilename[$e]=kdebug.dbg -ErrorOutput=4 -FatalFilename[$e]=kdebug.dbg -FatalOutput=4 -InfoFilename[$e]=kdebug.dbg -InfoOutput=4 -WarnFilename[$e]=kdebug.dbg -WarnOutput=4 - -[7014] -AbortFatal=true -ErrorFilename[$e]=kdebug.dbg -ErrorOutput=0 -FatalFilename[$e]=kdebug.dbg -FatalOutput=0 -InfoFilename[$e]=kdebug.dbg -InfoOutput=0 -WarnFilename[$e]=kdebug.dbg -WarnOutput=0 - -[7021] -AbortFatal=true -ErrorFilename[$e]=kdebug.dbg -ErrorOutput=4 -FatalFilename[$e]=kdebug.dbg -FatalOutput=4 -InfoFilename[$e]=kdebug.dbg -InfoOutput=4 -WarnFilename[$e]=kdebug.dbg -WarnOutput=4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/autotests/unittestenv/xdgconfig/kdedrc new/akonadi-search-16.08.0/agent/autotests/unittestenv/xdgconfig/kdedrc --- old/akonadi-search-16.04.3/agent/autotests/unittestenv/xdgconfig/kdedrc 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/autotests/unittestenv/xdgconfig/kdedrc 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -[General] -CheckSycoca=false -CheckFileStamps=false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/calendarindexer.cpp new/akonadi-search-16.08.0/agent/calendarindexer.cpp --- old/akonadi-search-16.04.3/agent/calendarindexer.cpp 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/calendarindexer.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -163,14 +163,19 @@ void CalendarIndexer::indexJournalItem(const Akonadi::Item &item, const KCalCore::Journal::Ptr &journal) { //TODO + Q_UNUSED(item); + Q_UNUSED(journal); } void CalendarIndexer::indexTodoItem(const Akonadi::Item &item, const KCalCore::Todo::Ptr &todo) { //TODO + Q_UNUSED(item); + Q_UNUSED(todo); } void CalendarIndexer::updateIncidenceItem(const KCalCore::Incidence::Ptr &calInc) { //TODO + Q_UNUSED(calInc); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/collectionindexer.cpp new/akonadi-search-16.08.0/agent/collectionindexer.cpp --- old/akonadi-search-16.04.3/agent/collectionindexer.cpp 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/collectionindexer.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -23,10 +23,6 @@ #include <QString> #include <QStringList> #include <xapian.h> -#include <xapian/database.h> -#include <xapian/query.h> -#include <xapian/enquire.h> -#include <xapian/termgenerator.h> #include <AkonadiCore/collectionidentificationattribute.h> #include <AkonadiCore/AttributeFactory> #include <xapiandocument.h> @@ -159,6 +155,8 @@ const Akonadi::Collection &from, const Akonadi::Collection &to) { + Q_UNUSED(from); + Q_UNUSED(to); index(collection); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/collectionindexingjob.cpp new/akonadi-search-16.08.0/agent/collectionindexingjob.cpp --- old/akonadi-search-16.04.3/agent/collectionindexingjob.cpp 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/collectionindexingjob.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -94,6 +94,7 @@ void CollectionIndexingJob::indexItems(const QList<Akonadi::Item::Id> &itemIds) { + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "collectionIndexingJob::indexItems(const QList<Akonadi::Item::Id> &itemIds) count " << itemIds.count(); Akonadi::Item::List items; items.reserve(itemIds.size()); Q_FOREACH (const Akonadi::Item::Id id, itemIds) { @@ -121,7 +122,9 @@ void CollectionIndexingJob::slotPendingItemsReceived(const Akonadi::Item::List &items) { + qCDebug(AKONADI_INDEXER_AGENT_LOG)<<" CollectionIndexingJob::slotPendingItemsReceived " <<items.count(); Q_FOREACH (const Akonadi::Item &item, items) { + qCDebug(AKONADI_INDEXER_AGENT_LOG)<<" void CollectionIndexingJob::slotPendingItemsReceived(const Akonadi::Item::List &items)"<<item.id(); m_index.index(item); } m_progressCounter++; @@ -130,6 +133,7 @@ void CollectionIndexingJob::slotPendingIndexed(KJob *job) { + qCDebug(AKONADI_INDEXER_AGENT_LOG)<<" CollectionIndexingJob::slotPendingIndexed "; if (job->error()) { qCWarning(AKONADI_INDEXER_AGENT_LOG) << "Failed to fetch items: " << job->errorString(); setError(KJob::UserDefinedError); @@ -152,11 +156,14 @@ const qlonglong indexedItemsCount = m_index.indexedItems(m_collection.id()); qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Indexed items count took (ms): " << m_time.elapsed() - start; qCDebug(AKONADI_INDEXER_AGENT_LOG) << "In index: " << indexedItemsCount; - qCDebug(AKONADI_INDEXER_AGENT_LOG) << "In collection: " << m_collection.statistics().count(); + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Number of Items in collection: " << m_collection.statistics().count() << " In collection "<< m_collection.id(); + if (m_collection.statistics().count() == indexedItemsCount) { qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Index up to date"; emitResult(); return; + } else { + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Need to find unindexed items"; } findUnindexed(); @@ -168,7 +175,7 @@ m_needsIndexing.clear(); const int start = m_time.elapsed(); m_index.findIndexed(m_indexedItems, m_collection.id()); - qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Found " << m_indexedItems.size() << " indexed items. Took (ms): " << m_time.elapsed() - start; + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Found " << m_indexedItems.size() << " indexed items. Took (ms): " << m_time.elapsed() - start << " collection id :"<<m_collection.id(); Akonadi::ItemFetchJob *job = new Akonadi::ItemFetchJob(m_collection, this); job->fetchScope().fetchFullPayload(false); @@ -187,6 +194,7 @@ void CollectionIndexingJob::slotUnindexedItemsReceived(const Akonadi::Item::List &items) { + //qCDebug(AKONADI_INDEXER_AGENT_LOG) << "CollectionIndexingJob::slotUnindexedItemsReceived found number items :"<<items.count(); Q_FOREACH (const Akonadi::Item &item, items) { if (!m_indexedItems.remove(item.id())) { m_needsIndexing << item.id(); @@ -196,6 +204,7 @@ void CollectionIndexingJob::slotFoundUnindexed(KJob *job) { + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "CollectionIndexingJob::slotFoundUnindexed :m_needsIndexing.isEmpty() : " << m_needsIndexing.isEmpty() << " count :"<< m_needsIndexing.count() << " m_reindexingLock :"<<m_reindexingLock << "m_collection.id() "<<m_collection.id(); if (job->error()) { qCWarning(AKONADI_INDEXER_AGENT_LOG) << "Failed to fetch items: " << job->errorString(); setError(KJob::UserDefinedError); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/emailindexer.cpp new/akonadi-search-16.08.0/agent/emailindexer.cpp --- old/akonadi-search-16.04.3/agent/emailindexer.cpp 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/emailindexer.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -74,6 +74,7 @@ void EmailIndexer::index(const Akonadi::Item &item) { + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Indexing item" << item.id(); if (!m_db) { return; } @@ -116,6 +117,7 @@ m_doc = 0; m_termGen = 0; + qCDebug(AKONADI_INDEXER_AGENT_LOG) << "DONE Indexing item" << item.id(); } void EmailIndexer::insert(const QByteArray &key, KMime::Headers::Base *unstructured) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/index.cpp new/akonadi-search-16.08.0/agent/index.cpp --- old/akonadi-search-16.04.3/agent/index.cpp 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/index.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -24,18 +24,19 @@ #include "contactindexer.h" #include "akonotesindexer.h" #include "calendarindexer.h" + +#include "indexeditems.h" #include <AkonadiCore/ServerManager> #include <QDir> #include <QStandardPaths> -#include <xapian/error.h> -#include <xapian/database.h> -#include <xapian/query.h> -#include <xapian/enquire.h> +#include <xapian.h> +using namespace Akonadi::Search::PIM; Index::Index(QObject *parent) : QObject(parent), m_collectionIndexer(Q_NULLPTR) { + m_indexedItems = new IndexedItems(this); m_commitTimer.setInterval(1000); m_commitTimer.setSingleShot(true); connect(&m_commitTimer, &QTimer::timeout, this, &Index::commit); @@ -72,12 +73,12 @@ m_indexer.clear(); qCDebug(AKONADI_INDEXER_AGENT_LOG) << "Removing database"; - removeDir(emailIndexingPath()); - removeDir(contactIndexingPath()); - removeDir(emailContactsIndexingPath()); - removeDir(akonotesIndexingPath()); - removeDir(calendarIndexingPath()); - removeDir(collectionIndexingPath()); + removeDir(m_indexedItems->emailIndexingPath()); + removeDir(m_indexedItems->contactIndexingPath()); + removeDir(m_indexedItems->emailContactsIndexingPath()); + removeDir(m_indexedItems->akonotesIndexingPath()); + removeDir(m_indexedItems->calendarIndexingPath()); + removeDir(m_indexedItems->collectionIndexingPath()); } AbstractIndexer *Index::indexerForItem(const Akonadi::Item &item) const @@ -106,6 +107,7 @@ { AbstractIndexer *indexer = indexerForItem(item); if (!indexer) { + qCWarning(AKONADI_INDEXER_AGENT_LOG) << " No indexer found for item"; return; } @@ -233,9 +235,9 @@ { AbstractIndexer *indexer = Q_NULLPTR; try { - QDir().mkpath(emailIndexingPath()); - QDir().mkpath(emailContactsIndexingPath()); - indexer = new EmailIndexer(emailIndexingPath(), emailContactsIndexingPath()); + QDir().mkpath(m_indexedItems->emailIndexingPath()); + QDir().mkpath(m_indexedItems->emailContactsIndexingPath()); + indexer = new EmailIndexer(m_indexedItems->emailIndexingPath(), m_indexedItems->emailContactsIndexingPath()); addIndexer(indexer); } catch (const Xapian::DatabaseError &e) { delete indexer; @@ -246,8 +248,8 @@ } try { - QDir().mkpath(contactIndexingPath()); - indexer = new ContactIndexer(contactIndexingPath()); + QDir().mkpath(m_indexedItems->contactIndexingPath()); + indexer = new ContactIndexer(m_indexedItems->contactIndexingPath()); addIndexer(indexer); } catch (const Xapian::DatabaseError &e) { delete indexer; @@ -258,8 +260,8 @@ } try { - QDir().mkpath(akonotesIndexingPath()); - indexer = new AkonotesIndexer(akonotesIndexingPath()); + QDir().mkpath(m_indexedItems->akonotesIndexingPath()); + indexer = new AkonotesIndexer(m_indexedItems->akonotesIndexingPath()); addIndexer(indexer); } catch (const Xapian::DatabaseError &e) { delete indexer; @@ -270,8 +272,8 @@ } try { - QDir().mkpath(calendarIndexingPath()); - indexer = new CalendarIndexer(calendarIndexingPath()); + QDir().mkpath(m_indexedItems->calendarIndexingPath()); + indexer = new CalendarIndexer(m_indexedItems->calendarIndexingPath()); addIndexer(indexer); } catch (const Xapian::DatabaseError &e) { delete indexer; @@ -282,8 +284,8 @@ } try { - QDir().mkpath(collectionIndexingPath()); - m_collectionIndexer = new CollectionIndexer(collectionIndexingPath()); + QDir().mkpath(m_indexedItems->collectionIndexingPath()); + m_collectionIndexer = new CollectionIndexer(m_indexedItems->collectionIndexingPath()); } catch (const Xapian::DatabaseError &e) { delete m_collectionIndexer; m_collectionIndexer = Q_NULLPTR; @@ -316,118 +318,17 @@ } } -void Index::findIndexedInDatabase(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId, const QString &dbPath) -{ - Xapian::Database db; - try { - db = Xapian::Database(QFile::encodeName(dbPath).constData()); - } catch (const Xapian::DatabaseError &e) { - qCCritical(AKONADI_INDEXER_AGENT_LOG) << "Failed to open database" << dbPath << ":" << QString::fromStdString(e.get_msg()); - return; - } - const std::string term = QString::fromLatin1("C%1").arg(collectionId).toStdString(); - Xapian::Query query(term); - Xapian::Enquire enquire(db); - enquire.set_query(query); - - Xapian::MSet mset = enquire.get_mset(0, UINT_MAX); - Xapian::MSetIterator it = mset.begin(); - for (; it != mset.end(); it++) { - indexed << *it; - } -} - void Index::findIndexed(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId) { - findIndexedInDatabase(indexed, collectionId, emailIndexingPath()); - findIndexedInDatabase(indexed, collectionId, contactIndexingPath()); - findIndexedInDatabase(indexed, collectionId, akonotesIndexingPath()); - findIndexedInDatabase(indexed, collectionId, calendarIndexingPath()); + m_indexedItems->findIndexed(indexed, collectionId); } qlonglong Index::indexedItems(const qlonglong id) { - const std::string term = QString::fromLatin1("C%1").arg(id).toStdString(); - return indexedItemsInDatabase(term, emailIndexingPath()) - + indexedItemsInDatabase(term, contactIndexingPath()) - + indexedItemsInDatabase(term, akonotesIndexingPath()) - + indexedItemsInDatabase(term, calendarIndexingPath()); -} - -qlonglong Index::indexedItemsInDatabase(const std::string &term, const QString &dbPath) const -{ - Xapian::Database db; - try { - db = Xapian::Database(QFile::encodeName(dbPath).constData()); - } catch (const Xapian::DatabaseError &e) { - qCCritical(AKONADI_INDEXER_AGENT_LOG) << "Failed to open database" << dbPath << ":" << QString::fromStdString(e.get_msg()); - return 0; - } - return db.get_termfreq(term); + return m_indexedItems->indexedItems(id); } void Index::setOverrideDbPrefixPath(const QString &path) { - m_overridePrefixPath = path; -} - -QString Index::dbPath(const QString &dbName) const -{ - if (!m_overridePrefixPath.isEmpty()) { - return QString::fromLatin1("%1/%2/").arg(m_overridePrefixPath, dbName); - } - - // First look into the old location from Baloo times in ~/.local/share/baloo, - // because we don't migrate the database files automatically. - QString basePath; - if (Akonadi::ServerManager::hasInstanceIdentifier()) { - basePath = QStringLiteral("baloo/instances/%1").arg(Akonadi::ServerManager::instanceIdentifier()); - } else { - basePath = QStringLiteral("baloo"); - } - QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/%1/%2/").arg(basePath, dbName); - if (QDir(dbPath).exists()) { - return dbPath; - } - - // If the database does not exist in old Baloo folders, than use the new - // location in Akonadi's datadir in ~/.local/share/akonadi/search_db. - if (Akonadi::ServerManager::hasInstanceIdentifier()) { - basePath = QStringLiteral("akonadi/instance/%1/search_db").arg(Akonadi::ServerManager::instanceIdentifier()); - } else { - basePath = QStringLiteral("akonadi/search_db"); - } - dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/%1/%2/").arg(basePath, dbName); - QDir().mkpath(dbPath); - return dbPath; -} - -QString Index::emailIndexingPath() const -{ - return dbPath(QStringLiteral("email")); -} - -QString Index::contactIndexingPath() const -{ - return dbPath(QStringLiteral("contacts")); -} - -QString Index::emailContactsIndexingPath() const -{ - return dbPath(QStringLiteral("emailContacts")); -} - -QString Index::akonotesIndexingPath() const -{ - return dbPath(QStringLiteral("notes")); -} - -QString Index::calendarIndexingPath() const -{ - return dbPath(QStringLiteral("calendars")); -} - -QString Index::collectionIndexingPath() const -{ - return dbPath(QStringLiteral("collections")); + m_indexedItems->setOverrideDbPrefixPath(path); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/index.h new/akonadi-search-16.08.0/agent/index.h --- old/akonadi-search-16.04.3/agent/index.h 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/index.h 2016-08-06 20:08:58.000000000 +0200 @@ -28,7 +28,16 @@ #include <AkonadiCore/item.h> #include "abstractindexer.h" #include "collectionindexer.h" - +namespace Akonadi +{ +namespace Search +{ +namespace PIM +{ +class IndexedItems; +} +} +} /** * Maintains the variuous indexers and databases */ @@ -74,20 +83,10 @@ void addIndexer(AbstractIndexer *indexer); AbstractIndexer *indexerForItem(const Akonadi::Item &item) const; QList<AbstractIndexer *> indexersForMimetypes(const QStringList &mimeTypes) const; - virtual qlonglong indexedItemsInDatabase(const std::string &term, const QString &dbPath) const; - virtual void findIndexedInDatabase(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId, const QString &dbPath); - - QString dbPath(const QString &dbName) const; - QString emailIndexingPath() const; - QString contactIndexingPath() const; - QString emailContactsIndexingPath() const; - QString akonotesIndexingPath() const; - QString calendarIndexingPath() const; - QString collectionIndexingPath() const; - QString m_overridePrefixPath; QList<AbstractIndexer *> m_listIndexer; QHash<QString, AbstractIndexer *> m_indexer; + Akonadi::Search::PIM::IndexedItems *m_indexedItems; QTimer m_commitTimer; CollectionIndexer *m_collectionIndexer; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/org.freedesktop.Akonadi.Indexer.xml new/akonadi-search-16.08.0/agent/org.freedesktop.Akonadi.Indexer.xml --- old/akonadi-search-16.04.3/agent/org.freedesktop.Akonadi.Indexer.xml 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/org.freedesktop.Akonadi.Indexer.xml 2016-08-06 20:08:58.000000000 +0200 @@ -10,5 +10,13 @@ <arg name="item" type="x" direction="in"/> <arg type="x" direction="out"/> </method> + <method name="numberOfCollectionQueued" > + <arg type="i" direction="out"/> + </method> + <method name="reindexCollections"> + <arg name="ids" type="ax" direction="in"/> + <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="const QList<qlonglong> &"/> + </method> + </interface> </node> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/scheduler.cpp new/akonadi-search-16.08.0/agent/scheduler.cpp --- old/akonadi-search-16.04.3/agent/scheduler.cpp 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/scheduler.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -87,13 +87,19 @@ m_busyTimeout = timeout; } +int Scheduler::numberOfCollectionQueued() const +{ + return m_collectionQueue.count(); +} + void Scheduler::collectDirtyCollections() { KConfig config(Akonadi::ServerManager::addNamespace(QStringLiteral("baloorc"))); KConfigGroup group = config.group("Akonadi"); //Store collections where we did not manage to index all, we'll need to do a full sync for them the next time - QHash<Akonadi::Collection::Id, QQueue<Akonadi::Item::Id>>::iterator it = m_queues.begin(); - for (; it != m_queues.end(); it++) { + QHash<Akonadi::Collection::Id, QQueue<Akonadi::Item::Id>>::ConstIterator it = m_queues.constBegin(); + QHash<Akonadi::Collection::Id, QQueue<Akonadi::Item::Id>>::ConstIterator end = m_queues.constEnd(); + for (; it != end; ++it) { if (!it.value().isEmpty()) { m_dirtyCollections.insert(it.key()); } @@ -236,7 +242,9 @@ if (job->error()) { qCWarning(AKONADI_INDEXER_AGENT_LOG) << "Indexing failed: " << job->errorString(); } else { - m_dirtyCollections.remove(job->property("collection").value<Akonadi::Collection::Id>()); + const Akonadi::Collection::Id collectionId = job->property("collection").value<Akonadi::Collection::Id>(); + m_dirtyCollections.remove(collectionId); + status(Akonadi::AgentBase::Idle, i18n("Collection \"%1\" indexed", collectionId)); } m_currentJob = 0; m_processTimer.start(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/agent/scheduler.h new/akonadi-search-16.08.0/agent/scheduler.h --- old/akonadi-search-16.04.3/agent/scheduler.h 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/agent/scheduler.h 2016-08-06 20:08:58.000000000 +0200 @@ -63,6 +63,8 @@ */ void setBusyTimeout(int); + int numberOfCollectionQueued() const; + Q_SIGNALS: void status(int status, const QString &message = QString()); void percent(int); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/akonadi-search.categories new/akonadi-search-16.08.0/akonadi-search.categories --- old/akonadi-search-16.04.3/akonadi-search.categories 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/akonadi-search.categories 2016-08-06 20:08:58.000000000 +0200 @@ -2,3 +2,4 @@ log_akonadiplugin_indexer (akonadi plugin indexer) log_akonadi_search_xapian (akonadi indexer xapian) log_akonadi_krunner_plugin (akonadi plugin krunner) +log_akonadi_search_pim (akonadi pim lib) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/lib/CMakeLists.txt new/akonadi-search-16.08.0/lib/CMakeLists.txt --- old/akonadi-search-16.04.3/lib/CMakeLists.txt 2016-06-15 06:34:51.000000000 +0200 +++ new/akonadi-search-16.08.0/lib/CMakeLists.txt 2016-08-06 20:08:58.000000000 +0200 @@ -11,10 +11,13 @@ notequery.cpp contactcompleter.cpp collectionquery.cpp + indexeditems.cpp ../search/email/agepostingsource.cpp ) +ecm_qt_declare_logging_category(AKONADI_SEARCH_PIM_LIB_SRCS HEADER akonadi_search_pim_debug.h IDENTIFIER AKONADI_SEARCH_PIM_LOG CATEGORY_NAME log_akonadi_search_pim) + add_library(KF5AkonadiSearchPIM ${AKONADI_SEARCH_PIM_LIB_SRCS}) add_library(KF5::AkonadiSearchPIM ALIAS KF5AkonadiSearchPIM) @@ -46,6 +49,7 @@ contactcompleter.h notequery.h collectionquery.h + indexeditems.h resultiterator.h ${CMAKE_CURRENT_BINARY_DIR}/search_pim_export.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/lib/indexeditems.cpp new/akonadi-search-16.08.0/lib/indexeditems.cpp --- old/akonadi-search-16.04.3/lib/indexeditems.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/akonadi-search-16.08.0/lib/indexeditems.cpp 2016-08-06 20:08:58.000000000 +0200 @@ -0,0 +1,237 @@ +/* + * This file is part of the KDE Akonadi Search Project + * Copyright (C) 2016 Laurent Montel <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) version 3, or any + * later version accepted by the membership of KDE e.V. (or its + * successor approved by the membership of KDE e.V.), which shall + * act as a proxy defined in Section 6 of version 3 of the license. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ +#include "indexeditems.h" +#include "akonadi_search_pim_debug.h" +#include <QStandardPaths> +#include <QHash> +#include <QDir> +#include <AkonadiCore/ServerManager> +#include <xapian.h> + + +using namespace Akonadi::Search::PIM; + +class Akonadi::Search::PIM::IndexedItemsPrivate +{ +public: + IndexedItemsPrivate() + { + + } + QString dbPath(const QString &dbName) const; + QString emailIndexingPath() const; + QString collectionIndexingPath() const; + QString calendarIndexingPath() const; + QString akonotesIndexingPath() const; + QString emailContactsIndexingPath() const; + QString contactIndexingPath() const; + + mutable QHash<QString, QString> m_cachePath; + QString m_overridePrefixPath; + qlonglong indexedItems(const qlonglong id); + qlonglong indexedItemsInDatabase(const std::string &term, const QString &dbPath) const; + void findIndexedInDatabase(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId, const QString &dbPath); + void findIndexed(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId); +}; + + +QString IndexedItemsPrivate::dbPath(const QString &dbName) const +{ + const QString cachedPath = m_cachePath.value(dbName); + if (!cachedPath.isEmpty()) { + return cachedPath; + } + if (!m_overridePrefixPath.isEmpty()) { + const QString path = QString::fromLatin1("%1/%2/").arg(m_overridePrefixPath, dbName); + m_cachePath.insert(dbName, path); + return path; + } + + // First look into the old location from Baloo times in ~/.local/share/baloo, + // because we don't migrate the database files automatically. + QString basePath; + if (Akonadi::ServerManager::hasInstanceIdentifier()) { + basePath = QStringLiteral("baloo/instances/%1").arg(Akonadi::ServerManager::instanceIdentifier()); + } else { + basePath = QStringLiteral("baloo"); + } + QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/%1/%2/").arg(basePath, dbName); + if (QDir(dbPath).exists()) { + m_cachePath.insert(dbName, dbPath); + return dbPath; + } + + // If the database does not exist in old Baloo folders, than use the new + // location in Akonadi's datadir in ~/.local/share/akonadi/search_db. + if (Akonadi::ServerManager::hasInstanceIdentifier()) { + basePath = QStringLiteral("akonadi/instance/%1/search_db").arg(Akonadi::ServerManager::instanceIdentifier()); + } else { + basePath = QStringLiteral("akonadi/search_db"); + } + dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/%1/%2/").arg(basePath, dbName); + QDir().mkpath(dbPath); + m_cachePath.insert(dbName, dbPath); + return dbPath; +} + +QString IndexedItemsPrivate::emailIndexingPath() const +{ + return dbPath(QStringLiteral("email")); +} + +QString IndexedItemsPrivate::contactIndexingPath() const +{ + return dbPath(QStringLiteral("contacts")); +} + +QString IndexedItemsPrivate::emailContactsIndexingPath() const +{ + return dbPath(QStringLiteral("emailContacts")); +} + +QString IndexedItemsPrivate::akonotesIndexingPath() const +{ + return dbPath(QStringLiteral("notes")); +} + +QString IndexedItemsPrivate::calendarIndexingPath() const +{ + return dbPath(QStringLiteral("calendars")); +} + +QString IndexedItemsPrivate::collectionIndexingPath() const +{ + return dbPath(QStringLiteral("collections")); +} + +qlonglong IndexedItemsPrivate::indexedItemsInDatabase(const std::string &term, const QString &dbPath) const +{ + Xapian::Database db; + try { + db = Xapian::Database(QFile::encodeName(dbPath).constData()); + } catch (const Xapian::DatabaseError &e) { + qCCritical(AKONADI_SEARCH_PIM_LOG) << "Failed to open database" << dbPath << ":" << QString::fromStdString(e.get_msg()); + return 0; + } + return db.get_termfreq(term); +} + +qlonglong IndexedItemsPrivate::indexedItems(const qlonglong id) +{ + const std::string term = QString::fromLatin1("C%1").arg(id).toStdString(); + return indexedItemsInDatabase(term, emailIndexingPath()) + + indexedItemsInDatabase(term, contactIndexingPath()) + + indexedItemsInDatabase(term, akonotesIndexingPath()) + + indexedItemsInDatabase(term, calendarIndexingPath()); +} + +void IndexedItemsPrivate::findIndexedInDatabase(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId, const QString &dbPath) +{ + Xapian::Database db; + try { + db = Xapian::Database(QFile::encodeName(dbPath).constData()); + } catch (const Xapian::DatabaseError &e) { + qCCritical(AKONADI_SEARCH_PIM_LOG) << "Failed to open database" << dbPath << ":" << QString::fromStdString(e.get_msg()); + return; + } + const std::string term = QString::fromLatin1("C%1").arg(collectionId).toStdString(); + Xapian::Query query(term); + Xapian::Enquire enquire(db); + enquire.set_query(query); + + Xapian::MSet mset = enquire.get_mset(0, UINT_MAX); + Xapian::MSetIterator it = mset.begin(); + for (; it != mset.end(); it++) { + indexed << *it; + } +} + +void IndexedItemsPrivate::findIndexed(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId) +{ + findIndexedInDatabase(indexed, collectionId, emailIndexingPath()); + findIndexedInDatabase(indexed, collectionId, contactIndexingPath()); + findIndexedInDatabase(indexed, collectionId, akonotesIndexingPath()); + findIndexedInDatabase(indexed, collectionId, calendarIndexingPath()); +} + +IndexedItems::IndexedItems(QObject *parent) + : QObject(parent), + d(new Akonadi::Search::PIM::IndexedItemsPrivate()) +{ + +} + +IndexedItems::~IndexedItems() +{ + delete d; +} + +void IndexedItems::setOverrideDbPrefixPath(const QString &path) +{ + d->m_overridePrefixPath = path; + d->m_cachePath.clear(); +} + +qlonglong IndexedItems::indexedItems(const qlonglong id) +{ + return d->indexedItems(id); +} + +void IndexedItems::findIndexedInDatabase(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId, const QString &dbPath) +{ + d->findIndexedInDatabase(indexed, collectionId, dbPath); +} + +void IndexedItems::findIndexed(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId) +{ + d->findIndexed(indexed, collectionId); +} + +QString IndexedItems::emailIndexingPath() const +{ + return d->emailIndexingPath(); +} + +QString IndexedItems::collectionIndexingPath() const +{ + return d->collectionIndexingPath(); +} + +QString IndexedItems::calendarIndexingPath() const +{ + return d->calendarIndexingPath(); +} + +QString IndexedItems::akonotesIndexingPath() const +{ + return d->akonotesIndexingPath(); +} + +QString IndexedItems::emailContactsIndexingPath() const +{ + return d->emailContactsIndexingPath(); +} + +QString IndexedItems::contactIndexingPath() const +{ + return d->contactIndexingPath(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-search-16.04.3/lib/indexeditems.h new/akonadi-search-16.08.0/lib/indexeditems.h --- old/akonadi-search-16.04.3/lib/indexeditems.h 1970-01-01 01:00:00.000000000 +0100 +++ new/akonadi-search-16.08.0/lib/indexeditems.h 2016-08-06 20:08:58.000000000 +0200 @@ -0,0 +1,63 @@ +/* + * This file is part of the KDE Akonadi Search Project + * Copyright (C) 2016 Laurent Montel <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) version 3, or any + * later version accepted by the membership of KDE e.V. (or its + * successor approved by the membership of KDE e.V.), which shall + * act as a proxy defined in Section 6 of version 3 of the license. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ +#ifndef INDEXEDITEMS_H +#define INDEXEDITEMS_H + +#include <QObject> +#include "search_pim_export.h" +#include <AkonadiCore/Item> + +namespace Akonadi +{ +namespace Search +{ +namespace PIM +{ +class IndexedItemsPrivate; +class AKONADI_SEARCH_PIM_EXPORT IndexedItems : public QObject +{ + Q_OBJECT +public: + explicit IndexedItems(QObject *parent = Q_NULLPTR); + ~IndexedItems(); + + void setOverrideDbPrefixPath(const QString &path); + + qlonglong indexedItems(const qlonglong id); + + void findIndexedInDatabase(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId, const QString &dbPath); + void findIndexed(QSet<Akonadi::Item::Id> &indexed, Akonadi::Collection::Id collectionId); + + QString emailIndexingPath() const; + QString collectionIndexingPath() const; + QString calendarIndexingPath() const; + QString akonotesIndexingPath() const; + QString emailContactsIndexingPath() const; + QString contactIndexingPath() const; + +private: + IndexedItemsPrivate *const d; +}; +} +} +} +#endif // INDEXEDITEMS_H
