X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmain.vala;h=708d00c59de8ff982812a3a27182850ca264769c;hb=3569cfa6de0f5be6f59a572728e8c14f993cfe14;hp=752997c5a7cb24415011bc9f5f43c5b8fbed5f5b;hpb=93b045e1510a7e445079ce14f2f4d3022a77caca;p=cinaest diff --git a/src/main.vala b/src/main.vala index 752997c..708d00c 100644 --- a/src/main.vala +++ b/src/main.vala @@ -19,8 +19,10 @@ using Hildon; public class CinaestProgram : Hildon.Program { - SourceListWindow window; + internal SourceListWindow window; + internal WindowStack secondary_stack; public static List plugins; + public static MovieSource reference; public static Orientation orientation; construct { @@ -29,10 +31,14 @@ public class CinaestProgram : Hildon.Program { window = new SourceListWindow (); window.destroy.connect (Gtk.main_quit); + reference = null; + orientation = new Orientation (); orientation.changed.connect (on_orientation_changed); add_window (window); + + secondary_stack = new WindowStack (); } private void on_orientation_changed () { @@ -71,9 +77,60 @@ public class CinaestProgram : Hildon.Program { } } + static int osso_callback (string iface, string method, GLib.Array arguments, void* data, out Osso.Rpc rpc) { + var app = (CinaestProgram) data; + if (method == "OpenMovie") { + if (arguments.length < 1) { + rpc.type = DBus.RawType.STRING; + ((OssoFix.Rpc) rpc).s = "OpenMovie missing movie parameter"; + return Osso.Status.ERROR; + } + // Vala doesn't support GLib.Array, so we have to cast: + Osso.Rpc* arg = *(Osso.Rpc**) arguments; + if (arg[0].type != DBus.RawType.STRING) { + rpc.type = DBus.RawType.STRING; + ((OssoFix.Rpc) rpc).s = "OpenMovie first parameter must be string"; + return Osso.Status.ERROR; + } + string title = arg[0].s; + int year = 0; + if (arguments.length >= 2) { + if (arg[1].type != DBus.RawType.INT32) { + rpc.type = DBus.RawType.STRING; + ((OssoFix.Rpc) rpc).s = "OpenMovie second parameter must be int"; + return Osso.Status.ERROR; + } + year = arg[1].i; + } + if (reference == null) { + rpc.type = DBus.RawType.STRING; + ((OssoFix.Rpc) rpc).s = "No reference source installed"; + return Osso.Status.ERROR; + } + print ("OpenMovie (\"%s\"", title); + if (year > 0) + print (", %d", year); + print (")\n"); + + var list_window = new MovieListWindow (reference, title, year); + var widget = app.secondary_stack.pop_1 (); + while (widget != null) { + widget.destroy (); + widget = app.secondary_stack.pop_1 (); + } + app.secondary_stack.push_1 (list_window); + } + rpc.type = DBus.RawType.INVALID; + return Osso.Status.OK; + } + public void run () { foreach (Plugin plugin in plugins) { window.add_sources (plugin.get_sources ()); + foreach (MovieSource source in plugin.get_sources ()) { + if (reference == null && SourceFlags.REFERENCE in source.get_flags ()) + reference = source; + } } Gtk.main (); } @@ -92,6 +149,7 @@ public class CinaestProgram : Hildon.Program { CinaestProgram app = new CinaestProgram (); app.register_plugins (osso_context); + osso_context.set_rpc_default_callback (osso_callback, app); app.run (); return 0;