3 * Copyright © 2009 Thomas Perl <thp@thpinfo.com>
17 [DBus (name="org.maemo.garage.feedhandler")]
18 public class FeedHandler : GLib.Object {
19 private MainLoop loop;
20 private DBus.Connection conn;
21 private Context context;
22 private string args_url;
24 public FeedHandler(MainLoop loop, DBus.Connection conn) {
27 this.context = new Osso.Context("feedhandler", "2.0", false, null);
31 [DBus (name = "mime_open")]
32 public void mime_open(string url) {
35 Gtk.Dialog dlg = new Gtk.Dialog();
36 dlg.add_button("RSS Reader", Reader.RSS);
37 dlg.add_button("Google Reader", Reader.GOOGLE);
38 dlg.add_button("gPodder", Reader.GPODDER);
39 dlg.add_button("Cancel", Gtk.ResponseType.CLOSE);
40 dlg.title = "Select application for handling this feed";
41 dlg.vbox.add(new Gtk.Label(url));
48 add_to_rss_reader(url);
55 GLib.Process.spawn_async(null,
59 url}, null, GLib.SpawnFlags.SEARCH_PATH, null, null);
60 } catch (GLib.SpawnError e) {
61 stderr.printf("Can't launch: %s\n", e.message);
66 message("URL received: %s", url);
70 private void add_to_google(string url)
72 open_browser("http://fusion.google.com/add?feedurl=" +
73 URI.encode(url, null));
76 private void add_to_rss_reader(string url)
78 dynamic DBus.Object obj = conn.get_object(
79 "com.nokia.osso_rss_feed_reader_refresh",
80 "/com/nokia/osso_rss_feed_reader_refresh",
81 "com.nokia.osso_rss_feed_reader_refresh");
85 private void open_browser(string url)
87 context.rpc_run_with_defaults("osso_browser",
92 /* DBUS_TYPE_STRING is (int)'s' */
93 /* DBUS_TYPE_INVALID is (int)'\0' */
96 public void set_args_url(string url)
101 public bool open_url_later()
108 static int main(string [] args) {
109 MainLoop loop = new MainLoop(null, false);
111 if (args.length != 1 && args.length != 2) {
112 stderr.printf("Usage: %s [URL]\n", args[0]);
116 DBus.Connection conn = DBus.Bus.get(DBus.BusType.SESSION);
117 dynamic DBus.Object bus = conn.get_object("org.freedesktop.DBus",
118 "/org/freedesktop/DBus",
119 "org.freedesktop.DBus");
120 uint request_name_result = bus.RequestName(
121 "org.maemo.garage.feedhandler", (uint)0);
122 if (request_name_result == DBus.RequestNameReply.PRIMARY_OWNER) {
123 FeedHandler server = new FeedHandler(loop, conn);
124 conn.register_object("/org/maemo/garage/feedhandler", server);
125 if (args.length == 2) {
126 /* Add URL when the main loop is running */
127 server.set_args_url(args[1]);
128 Idle.add(server.open_url_later);
132 stderr.printf("feedhandler is already running.\n");
136 stderr.printf("OOps: %s\n", e.message);