summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorSiegfried-Angel Gevatter Pujals <siegfried@gevatter.com>2012-04-05 21:08:10 +0200
committerSiegfried-Angel Gevatter Pujals <siegfried@gevatter.com>2012-04-05 21:08:10 +0200
commit302e75c51a9e308e2854c4b8418c176b7871a565 (patch)
treec9c12ad85787b926f06ad83be9db63249fd4889d /extensions
parentda41a43d7863e70030983b93ed1845e9715e3317 (diff)
downloadzeitgeist-302e75c51a9e308e2854c4b8418c176b7871a565.tar.gz
FTS++: rebuild index when ZG database is re-created
Diffstat (limited to 'extensions')
-rw-r--r--extensions/fts++/controller.cpp8
-rw-r--r--extensions/fts++/indexer.cpp32
-rw-r--r--extensions/fts++/indexer.h1
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,