diff options
author | Seif Lotfy <seif@lotfy.com> | 2013-02-25 15:34:11 +0100 |
---|---|---|
committer | Seif Lotfy <seif@lotfy.com> | 2013-02-27 00:45:27 +0100 |
commit | bfc2371d83176e25a07992373f11eb006a2db556 (patch) | |
tree | 8546d72145ccace4eed979d3fbb54c2d2448ee8e /libzeitgeist | |
parent | 8eac6806c593eb14058ebceb09879a02e3e93b7c (diff) | |
download | zeitgeist-bfc2371d83176e25a07992373f11eb006a2db556.tar.gz |
Integrate dbreader into Log directly
Diffstat (limited to 'libzeitgeist')
-rw-r--r-- | libzeitgeist/Makefile.am | 3 | ||||
-rw-r--r-- | libzeitgeist/log.vala | 115 | ||||
-rw-r--r-- | libzeitgeist/remote.vala | 3 | ||||
-rw-r--r-- | libzeitgeist/sql.vala | 2 | ||||
-rw-r--r-- | libzeitgeist/utils.vala | 4 |
5 files changed, 112 insertions, 15 deletions
diff --git a/libzeitgeist/Makefile.am b/libzeitgeist/Makefile.am index 8b4786a6..e2a03297 100644 --- a/libzeitgeist/Makefile.am +++ b/libzeitgeist/Makefile.am @@ -66,7 +66,6 @@ libzeitgeist_2_0_la_LDFLAGS = -version-info $(LIBZEITGEIST_LT_VERSION) libzeitgeist_internal_la_VALASOURCES = \ db-reader.vala \ - errors.vala \ sql.vala \ sql-schema.vala \ table-lookup.vala \ @@ -94,6 +93,7 @@ nodist_libzeitgeist_2_0_la_SOURCES = \ libzeitgeist_datamodel_2_0_la_VALASOURCES = \ data-source.vala \ + errors.vala \ mimetype.vala \ enumerations.vala \ event.vala \ @@ -196,6 +196,7 @@ libzeitgeist_2_0_gir_VALASOURCES = \ --gir Zeitgeist-2.0.gir \ --basedir $(builddir)/.gir \ --directory $(builddir)/.gir \ + $(builddir)/zeitgeist-internal.vapi \ $(filter %.vala %.c,$^) Zeitgeist-2.0.gir: $(builddir)/.gir/Zeitgeist-2.0.gir diff --git a/libzeitgeist/log.vala b/libzeitgeist/log.vala index d8aa7b02..85dc381a 100644 --- a/libzeitgeist/log.vala +++ b/libzeitgeist/log.vala @@ -54,6 +54,21 @@ namespace Zeitgeist * variants that are "fire and forget" ignoring the normal return value, so * that callbacks does not have to be set up. */ + +internal class DbWorker { + public SourceFunc func; + + public DbWorker(SourceFunc func) { + this.func = func; + } +} + + +internal void run_func (DbWorker worker) { + worker.func(); +} + + public class Log : QueuedProxyWrapper { private static Log default_instance; @@ -61,10 +76,14 @@ public class Log : QueuedProxyWrapper private RemoteLog proxy; private Variant? engine_version; private HashTable<Monitor, uint> monitors; + private DbReader dbreader; + private ThreadPool<void*> threads; public Log () { monitors = new HashTable<Monitor, int>(direct_hash, direct_equal); + threads = new ThreadPool<DbWorker> ((Func<DbWorker>)run_func, 4, true); + MainLoop mainloop = new MainLoop(); Bus.get_proxy.begin<RemoteLog> (BusType.SESSION, Utils.ENGINE_DBUS_NAME, Utils.ENGINE_DBUS_PATH, 0, null, (obj, res) => { @@ -72,6 +91,11 @@ public class Log : QueuedProxyWrapper { proxy = Bus.get_proxy.end (res); proxy_acquired (proxy); + if (proxy.datapath != null && proxy.datapath != ":memory:" && + FileUtils.test (proxy.datapath, GLib.FileTest.EXISTS)) { + Utils.set_database_file_path(proxy.datapath); + dbreader = new DbReader (); + } } catch (IOError err) { @@ -79,7 +103,9 @@ public class Log : QueuedProxyWrapper err.message); proxy_unavailable (err); } + mainloop.quit(); }); + mainloop.run(); } @@ -109,6 +135,13 @@ public class Log : QueuedProxyWrapper // Update our cached version property engine_version = proxy.version; warn_if_fail (engine_version.get_type_string () == "(iii)"); + if (proxy.datapath != null && proxy.datapath != ":memory:" && + FileUtils.test (proxy.datapath, GLib.FileTest.EXISTS)) { + Utils.set_database_file_path (proxy.datapath); + dbreader = new DbReader (); + } + else + dbreader = null; } protected override void on_connection_lost () { @@ -140,9 +173,9 @@ public class Log : QueuedProxyWrapper public async Array<uint32> insert_events (GenericArray<Event> events, Cancellable? cancellable=null) throws Error { - var events_cp = new GenericArray<Event>(); + var events_cp = new GenericArray<Event> (); for (int i = 0; i < events.length; i++) - events_cp.add(events.get(i)); + events_cp.add (events.get (i)); yield wait_for_proxy (); uint32[] ids = yield proxy.insert_events (Events.to_variant (events_cp), cancellable); var result = new Array<uint32> (); @@ -219,9 +252,23 @@ public class Log : QueuedProxyWrapper ResultType result_type, Cancellable? cancellable=null) throws Error { - var event_templates_cp = new GenericArray<Event>(); + if (dbreader != null) { + SourceFunc callback = find_events.callback; + SimpleResultSet result_set = null; + SourceFunc run = () => { + var result = dbreader.find_events (time_range, event_templates, + storage_state, num_events, result_type); + result_set = new SimpleResultSet (result); + Idle.add ((owned) callback); + return true; + }; + threads.push (new DbWorker (run)); + yield; + return result_set; + } + var event_templates_cp = new GenericArray<Event> (); for (int i = 0; i < event_templates.length; i++) - event_templates_cp.add(event_templates.get(i)); + event_templates_cp.add (event_templates.get (i)); yield wait_for_proxy (); var result = yield proxy.find_events (time_range.to_variant (), Events.to_variant (event_templates_cp), storage_state, @@ -259,9 +306,22 @@ public class Log : QueuedProxyWrapper ResultType result_type, Cancellable? cancellable=null) throws Error { - var event_templates_cp = new GenericArray<Event>(); + if (dbreader != null) { + SourceFunc callback = find_event_ids.callback; + uint32[] ids = null; + SourceFunc run = () => { + ids = dbreader.find_event_ids (time_range, event_templates, + storage_state, num_events, result_type); + Idle.add ((owned) callback); + return true; + }; + threads.push (new DbWorker (run)); + yield; + return ids; + } + var event_templates_cp = new GenericArray<Event> (); for (int i = 0; i < event_templates.length; i++) - event_templates_cp.add(event_templates.get(i)); + event_templates_cp.add(event_templates.get (i)); yield wait_for_proxy (); return yield proxy.find_event_ids (time_range.to_variant (), Events.to_variant (event_templates_cp), storage_state, @@ -291,9 +351,23 @@ public class Log : QueuedProxyWrapper uint32[] simple_event_ids = new uint32[event_ids.length]; for (int i = 0; i < event_ids.length; i++) simple_event_ids[i] = event_ids.index (i); + if (dbreader != null) + { + SourceFunc callback = get_events.callback; + SimpleResultSet result_set = null; + SourceFunc run = () => { + var result = dbreader.get_events (simple_event_ids); + result_set = new SimpleResultSet (result); + Idle.add ((owned) callback); + return true; + }; + threads.push (new DbWorker (run)); + yield; + return result_set; + } yield wait_for_proxy (); var result = yield proxy.get_events (simple_event_ids, cancellable); - return new SimpleResultSet(Events.from_variant (result)); + return new SimpleResultSet (Events.from_variant (result)); } /** @@ -320,13 +394,28 @@ public class Log : QueuedProxyWrapper ResultType result_type, Cancellable? cancellable=null) throws Error { - var events_cp = new GenericArray<Event>(); + + if (dbreader != null) { + SourceFunc callback = find_related_uris.callback; + string[] uris = null; + SourceFunc run = () => { + uris = dbreader.find_related_uris (time_range, event_templates, + result_event_templates, storage_state, num_events, result_type); + Idle.add ((owned) callback); + return true; + }; + threads.push (new DbWorker (run)); + yield; + return uris; + } + + var events_cp = new GenericArray<Event> (); for (int i = 0; i < event_templates.length; i++) - events_cp.add(event_templates.get(i)); + events_cp.add (event_templates.get (i)); - var results_cp = new GenericArray<Event>(); + var results_cp = new GenericArray<Event> (); for (int i = 0; i < result_event_templates.length; i++) - results_cp.add(result_event_templates.get(i)); + results_cp.add (result_event_templates.get (i)); yield wait_for_proxy (); return yield proxy.find_related_uris (time_range.to_variant (), @@ -349,10 +438,10 @@ public class Log : QueuedProxyWrapper { uint32[] _ids = new uint32 [event_ids.length]; for (int i=0; i<event_ids.length; i++) - _ids[i] = event_ids.index(i); + _ids[i] = event_ids.index (i); yield wait_for_proxy (); Variant time_range = yield proxy.delete_events (_ids, cancellable); - return new TimeRange.from_variant(time_range); + return new TimeRange.from_variant (time_range); } /** * @param cancellable a {@link GLib.Cancellable} to cancel the operation or %NULL diff --git a/libzeitgeist/remote.vala b/libzeitgeist/remote.vala index cccaa7ec..20127e4e 100644 --- a/libzeitgeist/remote.vala +++ b/libzeitgeist/remote.vala @@ -97,6 +97,9 @@ namespace Zeitgeist [DBus (name = "version")] public abstract VersionStruct version { owned get; } + [DBus (name = "datapath")] + public abstract string datapath { owned get; } + } [DBus (name = "org.gnome.zeitgeist.Monitor")] diff --git a/libzeitgeist/sql.vala b/libzeitgeist/sql.vala index 1bb24685..6c804006 100644 --- a/libzeitgeist/sql.vala +++ b/libzeitgeist/sql.vala @@ -337,7 +337,7 @@ namespace Zeitgeist.SQLite * * @param rc error code returned by a SQLite call * @param msg message to print if `rc' indicates an error - * @throws EngineError + * @throws EngineError err */ [Diagnostics] public void assert_query_success (int rc, string msg, diff --git a/libzeitgeist/utils.vala b/libzeitgeist/utils.vala index 31141982..d3ace4bf 100644 --- a/libzeitgeist/utils.vala +++ b/libzeitgeist/utils.vala @@ -85,6 +85,10 @@ namespace Zeitgeist return DATABASE_FILE_PATH; } + public void set_database_file_path (string path) { + DATABASE_FILE_PATH = path; + } + public unowned string get_database_file_backup_path () { if (DATABASE_FILE_BACKUP_PATH != null) |