Add some code for reading the mime cache
[feedhandler] / feedhandler.vala
index e922b01..eadb220 100644 (file)
@@ -13,6 +13,39 @@ public enum Reader {
     GPODDER,
 }
 
+public class DesktopFile : GLib.KeyFile {
+    public DesktopFile(string basename) {
+        string filename = "/usr/share/applications/" + basename.replace("hildon-", "hildon/");
+        try {
+            load_from_file(filename, KeyFileFlags.NONE);
+        } catch (KeyFileError e) {
+            stderr.printf("Cannot open key file: %s\n", e.message);
+        } catch (FileError e) {
+            stderr.printf("Cannot open key file: %s\n", e.message);
+        }
+    }
+
+    public string get_name() {
+        return get_string("Desktop Entry", "Name");
+    }
+}
+
+public class MimeCache : GLib.KeyFile {
+    public MimeCache(string filename="/usr/share/applications/mimeinfo.cache") {
+        try {
+            load_from_file(filename, KeyFileFlags.NONE);
+        } catch (KeyFileError e) {
+            stderr.printf("Cannot open key file: %s\n", e.message);
+        } catch (FileError e) {
+            stderr.printf("Cannot open key file: %s\n", e.message);
+        }
+    }
+
+    public string [] get_desktop_files(string mimetype="application/news_reader") {
+        return get_string("MIME Cache", mimetype).split(";");
+    }
+}
+
 [DBus (name="org.maemo.garage.feedhandler")]
 public class FeedHandler : GLib.Object {
     private MainLoop loop;
@@ -25,6 +58,12 @@ public class FeedHandler : GLib.Object {
         this.conn = conn;
         this.context = new Osso.Context("feedhandler", "2.0", false, null);
         this.args_url = null;
+
+        foreach (string file in (new MimeCache().get_desktop_files("text/plain"))) {
+            if (file == "") continue;
+            var desktop_file = new DesktopFile(file);
+            stderr.printf("%s\n", desktop_file.get_name());
+        }
     }
 
     [DBus (name = "mime_open")]