diff options
author | Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com> | 2012-04-05 21:08:10 +0200 |
---|---|---|
committer | Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com> | 2012-04-05 21:08:10 +0200 |
commit | 302e75c51a9e308e2854c4b8418c176b7871a565 (patch) | |
tree | c9c12ad85787b926f06ad83be9db63249fd4889d /extensions | |
parent | da41a43d7863e70030983b93ed1845e9715e3317 (diff) | |
download | zeitgeist-302e75c51a9e308e2854c4b8418c176b7871a565.tar.gz |
FTS++: rebuild index when ZG database is re-created
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/fts++/controller.cpp | 8 | ||||
-rw-r--r-- | extensions/fts++/indexer.cpp | 32 | ||||
-rw-r--r-- | extensions/fts++/indexer.h | 1 |
3 files changed, 41 insertions, 0 deletions
diff --git a/extensions/fts++/controller.cpp b/extensions/fts++/controller.cpp index ece90590..75808a9b 100644 --- a/extensions/fts++/controller.cpp +++ b/extensions/fts++/controller.cpp @@ -17,6 +17,8 @@ */ #include "controller.h" +#include <string> +#include <sstream> namespace ZeitgeistFTS { @@ -81,6 +83,12 @@ void Controller::RebuildIndex () // Set the db metadata key only once we're done PushTask (new MetadataTask ("fts_index_version", INDEX_VERSION)); + gint64 zg_creation_date = indexer->GetZeitgeistCreationDate (); + std::stringstream tmpstream; + std::string zg_creation_date_str; + tmpstream << zg_creation_date; + tmpstream >> zg_creation_date_str; + PushTask (new MetadataTask ("zg_db_creation_date", zg_creation_date_str)); } g_object_unref (time_range); diff --git a/extensions/fts++/indexer.cpp b/extensions/fts++/indexer.cpp index d2a09cd1..c3b736ff 100644 --- a/extensions/fts++/indexer.cpp +++ b/extensions/fts++/indexer.cpp @@ -23,6 +23,8 @@ #include <xapian.h> #include <queue> #include <vector> +#include <string> +#include <sstream> #include <gio/gio.h> #include <gio/gdesktopappinfo.h> @@ -146,6 +148,14 @@ void Indexer::Initialize (GError **error) } } +gint64 Indexer::GetZeitgeistCreationDate () +{ + ZeitgeistSQLiteDatabase *database = zeitgeist_db_reader_get_database ( + zg_reader); + return zeitgeist_sq_lite_database_schema_get_creation_date ( + database->database); +} + /** * Returns true if and only if the index is good. * Otherwise the index should be rebuild. @@ -164,6 +174,28 @@ bool Indexer::CheckIndex () return false; } + // Get stored Zeitgeist DB creation date + gint64 metadata_date; + std::string metadata_date_str (db->get_metadata ("zg_db_creation_date")); + if (metadata_date_str == "") + metadata_date = -1; + else + { + std::stringstream tmpstream; + tmpstream << metadata_date_str; + tmpstream >> metadata_date; + } + + // In case the Zeitgeist DB is newer than Xapian, we need to re-build. + // This may happen if the Zeitgeist DB gets corrupt and is re-created + // from scratch. + gint64 database_creation_date = GetZeitgeistCreationDate (); + if (database_creation_date > metadata_date) + { + g_message ("Zeitgeist database has been replaced. Doing full rebuild"); + return false; + } + return true; } diff --git a/extensions/fts++/indexer.h b/extensions/fts++/indexer.h index 309ca5df..cc00fe66 100644 --- a/extensions/fts++/indexer.h +++ b/extensions/fts++/indexer.h @@ -80,6 +80,7 @@ public: void IndexEvent (ZeitgeistEvent *event); void DeleteEvent (guint32 event_id); void SetDbMetadata (std::string const& key, std::string const& value); + gint64 GetZeitgeistCreationDate (); GPtrArray* Search (const gchar *search, ZeitgeistTimeRange *time_range, |