3 * Copyright © 2009 Thomas Perl <thp@thpinfo.com>
16 [DBus (name="org.maemo.garage.feedhandler")]
17 public class FeedHandler : GLib.Object {
18 private MainLoop loop;
19 private DBus.Connection conn;
20 private Context context;
21 private string args_url;
23 public FeedHandler(MainLoop loop, DBus.Connection conn) {
26 this.context = new Osso.Context("feedhandler", "2.0", false, null);
30 [DBus (name = "mime_open")]
31 public void mime_open(string url) {
34 Gtk.Dialog dlg = new Gtk.Dialog();
35 dlg.add_button("RSS Reader", Reader.RSS);
36 dlg.add_button("Google Reader", Reader.GOOGLE);
37 dlg.add_button("gPodder", Reader.GPODDER);
38 dlg.add_button("Cancel", Gtk.ResponseType.CLOSE);
39 dlg.title = "Select application for handling this feed";
40 dlg.vbox.add(new Gtk.Label(url));
47 add_to_rss_reader(url);
54 GLib.Process.spawn_async(null,
58 url}, null, GLib.SpawnFlags.SEARCH_PATH, null, null);
59 } catch (GLib.SpawnError e) {
60 stderr.printf("Can't launch: %s\n", e.message);
65 message("URL received: %s", url);
69 private void add_to_google(string url)
71 open_browser("http://fusion.google.com/add?feedurl=" +
72 Uri.escape_string(url, "", false));
75 private void add_to_rss_reader(string url)
77 dynamic DBus.Object obj = conn.get_object(
78 "com.nokia.osso_rss_feed_reader_refresh",
79 "/com/nokia/osso_rss_feed_reader_refresh",
80 "com.nokia.osso_rss_feed_reader_refresh");
84 private void open_browser(string url)
86 context.rpc_run_with_defaults("osso_browser",
91 /* DBUS_TYPE_STRING is (int)'s' */
92 /* DBUS_TYPE_INVALID is (int)'\0' */
95 public void set_args_url(string url)
100 public bool open_url_later()
107 static int main(string [] args) {
108 MainLoop loop = new MainLoop(null, false);
110 if (args.length != 1 && args.length != 2) {
111 stderr.printf("Usage: %s [URL]\n", args[0]);
115 DBus.Connection conn = DBus.Bus.get(DBus.BusType.SESSION);
116 dynamic DBus.Object bus = conn.get_object("org.freedesktop.DBus",
117 "/org/freedesktop/DBus",
118 "org.freedesktop.DBus");
119 uint request_name_result = bus.RequestName(
120 "org.maemo.garage.feedhandler", (uint)0);
121 if (request_name_result == DBus.RequestNameReply.PRIMARY_OWNER) {
122 FeedHandler server = new FeedHandler(loop, conn);
123 conn.register_object("/org/maemo/garage/feedhandler", server);
124 if (args.length == 2) {
125 /* Add URL when the main loop is running */
126 server.set_args_url(args[1]);
127 Idle.add(server.open_url_later);
131 stderr.printf("feedhandler is already running.\n");
135 stderr.printf("OOps: %s\n", e.message);