Well, another update
This one allows to directly subscribe to a feed when right clicking on it’s link in the page (feature asked by “nud” on IRC)
Beside that I started looking at the epiphany-mono package, to allow mono extensions be easily written for epiphany, the binding is quite complete, but very buggy at the moment, so i’ll help fixing that eventually.
It can be fetched from the gnome cvs:
cvs -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co epiphany-mono
Then the extension itself is something like:
using System; using Gtk; using Epiphany; namespace EphyRssExtension { public class RssExtension : GLib.Object, EphyExtension { private Hashtable feeds = new Hashtable(); public RssExtension () : base (IntPtr.Zero) { Console.WriteLine ("New EphyRss Extension"); } public void AttachWindow (EphyWindow window) { Console.WriteLine ("EphyWindow Attached"); //Do anything you like with he window } public void DetachWindow (EphyWindow window) { Console.WriteLine ("EphyWindow Detached"); //Do anything you like when the window is discarded } public void DetachTab (EphyWindow window, EphyTab tab) { System.Console.WriteLine ("Detach tab"); feeds.Remove(tab.Embed); tab.Embed.GeFeedLink -= OnFeedReceived; tab.Embed.GeContentChange -= OnContentChange; } public void AttachTab (EphyWindow window, EphyTab tab) { System.Console.WriteLine ("Attach tab: {0}", tab.DocumentType ); feeds[tab.Embed] = new ArrayList(); tab.Embed.GeFeedLink += OnFeedReceived; tab.Embed.GeContentChange += OnContentChange; } private void OnFeedReceived (object o, GeFeedLinkArgs args) { Console.WriteLine ("Feed {0}: '{1}' @ {2}", args.Type, args.Title, args.Address); IList l = feeds[o] as IList; Feed f = new Feed(); f.Title = args.Title; f.Type = args.Type; f.Address = args.Address; l.Add(f); } private void OnContentChange (object obj, EventArgs args) { (feeds[obj] as IList).Clear (); } private struct Feed { public string Title; public string Type; public string Address; } } }
Which does pretty much nothing except that it stores in a hashtable the feeds corresponding to each opened tabs. It requires now little effort to make a nice gtk UI, like a dialog or integrating menu items or statusbar icons in epiphany via the GtkUiManager.