diff options
author | Michal Hruby <michal.mhr@gmail.com> | 2012-04-06 10:43:18 +0200 |
---|---|---|
committer | Michal Hruby <michal.mhr@gmail.com> | 2012-04-06 10:43:18 +0200 |
commit | a1d5b19d396d24c4515b731f91f7b9b48092573e (patch) | |
tree | 3e9a9f4a29204936830c45517067643f7a1b72cd /extensions | |
parent | da41a43d7863e70030983b93ed1845e9715e3317 (diff) | |
parent | 6ed90110219c3df15437eac253d91067b9795020 (diff) | |
download | zeitgeist-a1d5b19d396d24c4515b731f91f7b9b48092573e.tar.gz |
Merge lp:~rainct/zeitgeist/rebuild-fts-on-new-db
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/fts++/controller.cpp | 5 | ||||
-rw-r--r-- | extensions/fts++/indexer.cpp | 26 | ||||
-rw-r--r-- | extensions/fts++/indexer.h | 1 |
3 files changed, 32 insertions, 0 deletions
diff --git a/extensions/fts++/controller.cpp b/extensions/fts++/controller.cpp index ece90590..e8ce8f52 100644 --- a/extensions/fts++/controller.cpp +++ b/extensions/fts++/controller.cpp @@ -81,6 +81,11 @@ 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 (); + gchar *creation = g_strdup_printf ("%" G_GINT64_FORMAT, zg_creation_date); + std::string zg_creation_date_str (creation); + PushTask (new MetadataTask ("zg_db_creation_date", zg_creation_date_str)); + g_free (creation); } g_object_unref (time_range); diff --git a/extensions/fts++/indexer.cpp b/extensions/fts++/indexer.cpp index d2a09cd1..af96eac7 100644 --- a/extensions/fts++/indexer.cpp +++ b/extensions/fts++/indexer.cpp @@ -146,6 +146,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 +172,24 @@ 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.empty ()) + metadata_date = -1; + else + metadata_date = g_ascii_strtoll (metadata_date_str.c_str (), NULL, 0); + + // 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, |