summaryrefslogtreecommitdiff
path: root/libzeitgeist
diff options
context:
space:
mode:
authorSeif Lotfy <seif@lotfy.com>2013-02-25 15:34:11 +0100
committerSeif Lotfy <seif@lotfy.com>2013-02-27 00:45:27 +0100
commitbfc2371d83176e25a07992373f11eb006a2db556 (patch)
tree8546d72145ccace4eed979d3fbb54c2d2448ee8e /libzeitgeist
parent8eac6806c593eb14058ebceb09879a02e3e93b7c (diff)
downloadzeitgeist-bfc2371d83176e25a07992373f11eb006a2db556.tar.gz
Integrate dbreader into Log directly
Diffstat (limited to 'libzeitgeist')
-rw-r--r--libzeitgeist/Makefile.am3
-rw-r--r--libzeitgeist/log.vala115
-rw-r--r--libzeitgeist/remote.vala3
-rw-r--r--libzeitgeist/sql.vala2
-rw-r--r--libzeitgeist/utils.vala4
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)