diff options
Diffstat (limited to 'libzeitgeist/data-source-registry.vala')
| -rw-r--r-- | libzeitgeist/data-source-registry.vala | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/libzeitgeist/data-source-registry.vala b/libzeitgeist/data-source-registry.vala new file mode 100644 index 00000000..f3831655 --- /dev/null +++ b/libzeitgeist/data-source-registry.vala @@ -0,0 +1,159 @@ +/* data-source-registry.vala + * + * Copyright © 2012 Collabora Ltd. + * By Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Zeitgeist +{ + + [DBus (name = "org.gnome.zeitgeist.DataSourceRegistry")] + protected interface RemoteRegistry: Object + { + [DBus (signature = "a(sssa(asaasay)bxb)")] + public abstract async Variant get_data_sources ( + Cancellable? cancellable=null) throws Error; + public abstract async bool register_data_source (string unique_id, + string name, string description, + [DBus (signature = "a(asaasay)")] Variant event_templates, + Cancellable? cancellable=null, BusName? sender=null) throws Error; + public abstract async void set_data_source_enabled (string unique_id, + bool enabled, Cancellable? cancellable=null) throws Error; + [DBus (signature = "(sssa(asaasay)bxb)")] + public abstract async Variant get_data_source_from_id ( + string unique_id, Cancellable? cancellable=null) throws Error; + + public signal void data_source_disconnected ( + [DBus (signature = "(sssa(asaasay)bxb)")] Variant data_source); + public signal void data_source_enabled (string unique_id, + bool enabled); + public signal void data_source_registered ( + [DBus (signature = "(sssa(asaasay)bxb)")] Variant data_source); + } + + /** + * Query the Zeitgeist Data-Source Registry extension + */ + public class DataSourceRegistry : QueuedProxyWrapper + { + + private RemoteRegistry proxy; + + public signal void source_disconnected (DataSource data_source); + public signal void source_enabled (string unique_id, bool enabled); + public signal void source_registered (DataSource data_source); + + public DataSourceRegistry () + { + Bus.get_proxy<RemoteRegistry> (BusType.SESSION, + Utils.ENGINE_DBUS_NAME, + "/org/gnome/zeitgeist/data_source_registry", 0, null, + (obj, res) => + { + try + { + proxy = Bus.get_proxy.end (res); + proxy_acquired (proxy); + } + catch (IOError err) + { + critical ( + "Unable to connect to Zeitgeist's " + + "DataSourceRegistry: %s", err.message); + proxy_unavailable (err); + } + }); + } + + protected override void on_connection_established () + { + proxy.data_source_disconnected.connect ((data_source) => { + try + { + var source = new DataSource.from_variant (data_source); + source_disconnected (source); + } + catch (DataModelError err) + { + warning ("Error parsing data-source: %s", err.message); + } + }); + proxy.data_source_enabled.connect ((unique_id, enabled) => { + // FIXME: why don't we return DataSource here too? :( + source_enabled (unique_id, enabled); + }); + proxy.data_source_registered.connect ((data_source) => { + try + { + var source = new DataSource.from_variant (data_source); + source_registered (source); + } + catch (DataModelError err) + { + warning ("Error parsing data-source: %s", err.message); + } + }); + } + + protected override void on_connection_lost () + { + } + + public async GenericArray<DataSource> get_data_sources ( + Cancellable? cancellable=null) throws Error + { + yield wait_for_proxy (); + var result = yield proxy.get_data_sources (cancellable); + return DataSources.from_variant (result); + } + + public async DataSource get_data_source_from_id ( + string unique_id, Cancellable? cancellable=null) throws Error + { + yield wait_for_proxy (); + var result = yield proxy.get_data_source_from_id (unique_id, + cancellable); + + return new DataSource.from_variant (result); + } + + public async bool register_data_source ( + DataSource data_source, Cancellable? cancellable=null) throws Error + { + yield wait_for_proxy (); + return yield proxy.register_data_source ( + data_source.unique_id, data_source.name, + data_source.description, + Events.to_variant(data_source.event_templates), + cancellable); + } + + // FIXME: return bool with false if error? (+ rethrow error) + public async void set_data_source_enabled ( + string unique_id, bool enabled, Cancellable? cancellable=null) + throws Error + { + yield wait_for_proxy (); + yield proxy.set_data_source_enabled (unique_id, enabled, + cancellable); + } + + } + +} + +// vim:expandtab:ts=4:sw=4 |
