using DBus; // [DBus (name = "org.gnome.evolution.metadata.Manager")] // public interface Manager : GLib.Object { // public abstract void Register (DBus.ObjectPath registrar_path, int last_checkout); // } [DBus (name = "org.gnome.evolution.metadata.Registrar")] public class Registrar: GLib.Object { public void Set (string subject, string[] predicates, string[] values) { message ("set:" + subject + "\n"); } public void Cleanup () { message ("cleanup\n"); } public void SetMany (string[] subjects, string[][] predicates, string[][] values) { message ("setmany\n"); foreach (weak string subject in subjects) { message ("setmany:" + subject + "\n"); } } public void UnsetMany (string[] subjects) { message ("unsetmany\n"); foreach (weak string subject in subjects) { message ("unsetmany:" + subject + "\n"); } } public void Unset (string subject) { message ("unset:" + subject + "\n"); } } public class MyApplication : GLib.Object { private DBus.Connection conn; private Registrar registrar; private void on_reply (GLib.Error e) { message ("done"); } public void setup () throws DBus.Error, GLib.Error { dynamic DBus.Object obj; DBus.ObjectPath path; int stored_time = 0; conn = DBus.Bus.get (DBus.BusType.SESSION); registrar = new Registrar (); path = new DBus.ObjectPath ("/my/application/evolution_registrar"); obj = conn.get_object ("org.gnome.evolution", "/org/gnome/evolution/metadata/Manager", "org.gnome.evolution.metadata.Manager"); conn.register_object (path, registrar); obj.Register (path, stored_time, on_reply); } static int main (string[] args) { var loop = new MainLoop (null, false); var app = new MyApplication (); try { app.setup (); } catch (DBus.Error e) { stderr.printf ("Failed to initialise"); return 1; } catch { stderr.printf ("Dynamic method failure"); return 1; } loop.run (); return 0; } }