A couple of things: a) Loading Galeon Bookmarks failed for me until I upgraded to Mono 0.29. Something you may want to include in the Release Notes. b) Attached is a new version of backend-bookmarks.cs. This version does the following: * Cleaned up Output to a much nicer table * Hack Around FavIcon Cache not using trailing slash * Changed any instances of Bookmarks to Galeon Bookmarks * Probably Added Some Debug that can eventually come out Skadz -- ----------------------------------------------------------------------- Ryan P Skadberg E: skadz stigmata org The Stigmata Organization U: http://www.stigmata.org/ ----------------------------------------------------------------------- GPG fingerprint = 0B97 F771 E7D2 69B2 FF5C 5693 4E25 7E77 DEF0 CA4B -----------------------------------------------------------------------
using System;
using System.IO;
using System.Xml;
using System.Collections;
namespace Dashboard {
	class GaleonBookmarks : BackendSimple {
		XmlDocument         doc;
		XmlNodeList         titles;
		XmlDocument         favicondoc;
		
		public override bool Startup ()
		{
			Name = "Galeon Bookmarks";
			string home_dir = Environment.GetEnvironmentVariable ("HOME");
			string path;
			try {
				path = Path.Combine (home_dir, ".galeon/bookmarks.xbel");
				if (!File.Exists (path)){
					path = Path.Combine (home_dir, ".galeon/bookmarks.xml");
					Console.WriteLine ("Galeon Bookmarks Path: " + path);
					if (!File.Exists (path))
						return false;
				}
				doc = new XmlDocument ();
				doc.Load (path);
				titles = doc.SelectNodes ("//bookmark/title");
				Console.WriteLine ("Galeon Bookmarks backend loaded {0} bookmarks.", titles.Count);
				path = Path.Combine (home_dir, ".galeon/favicon_cache.xml");
				Console.WriteLine ("Galeon FavIcon Path: " + path);
				if (!File.Exists (path)) {
					Console.WriteLine ("Galeon FavIcon Not Found: " + path);
					return false;
				}
				favicondoc = new XmlDocument ();
				favicondoc.Load (path);
 				
				// FIXME: need to subscribe to clues that we
				// should try matching against. Probably
				// textblock and sentence_at_point:
				// this.SubscribeToClues ("textblock", "sentence_at_point");
				this.Initialized = true;
				return true;
			} catch {
				return false;
			}
		}
		protected override Match ProcessClueSimple (Clue clue)
		{
			if (! this.Initialized)
				return null;
			if (clue.Text.Length == 0)
				return null;
			string clue_text = clue.Text.ToLower ();
	
			// Start Outer Table
			string html = String.Format("<table bgcolor=\"#003366\" border=0 cellpadding=1><tr><td>");
			// Start Inner Table
			html += String.Format ("<table bgcolor=\"#003366\" cellpadding=4 cellspacing=1 width=100%>");
			// Show Header
			html += String.Format ("<tr><td bgcolor=\"#aecce2\" valign=center><img height=\"48\" width=\"48\" src=\"internal:bookmark.png\" border=0></td><td bgcolor=\"#aecce2\">  </td><td bgcolor=\"#aecce2\"><h2><u>Galeon Bookmarks</u></h2></td></tr>");
			int match_count = 0;
			string bgcolor = "#dddddd";
			foreach (XmlNode node in titles) {
				string t = node.InnerText;
				string lower = t.ToLower ();
				if (lower.IndexOf (clue_text) == -1)
					continue;
				if (node.ParentNode == null)
					throw new Exception ("Null found");
				if (node.ParentNode.Attributes ["href"] == null) {
					throw new Exception ("Null found222");
				}
                                string uri = node.ParentNode.Attributes ["href"].InnerText;
				// Galeon Saves FavIcon Cache without 
				// Trailing Slash.  Code Around.
				string myurl = uri;
				if (myurl.EndsWith("/")) {
					myurl = myurl.Substring(0,myurl.Length - 1);
				}
				// End Code Around
                                string xpath = "descendant::entry[ url=\"" + myurl + "\"]";
                                Console.WriteLine ("Galeon Xpath: " + xpath);
                                XmlNode favicon = favicondoc.SelectSingleNode (xpath);
                                Console.WriteLine ("Galeon FavIcon: " + favicon);
                                string iconuri;
                                if (favicon != null)
                                        iconuri = favicon.Attributes ["favicon"].InnerText;
                                else
                                        iconuri ="internal:bookmark.png";
	
				html += String.Format (
"<tr>" +
"    <td valign=center align=center bgcolor=\"" + bgcolor + "\">" +
"        <a href=\"{1}\"><img height=\"24\" width=\"24\" src=\"{2}\" border=0></a>" +
"    </td>" +
"<td bgcolor=\"" + bgcolor + "\">  </td>" +
"    <td valign=top bgcolor=\"" + bgcolor + "\">" +
"        <a href=\"{1}\" style=\"text-decoration: none;\">{0}<br>" +
"        <font size=-1 color=#666666>{1}</font></a>" +
"    </td>" +
"</tr>", t, uri, iconuri);
				if (bgcolor == "#dddddd")
					bgcolor = "#ffffff";
				else
					bgcolor = "#dddddd";
				match_count ++;
			}
			if (match_count == 0)
				return null;
			html += String.Format ("</table></tr></td></table>");
			return new Match (this, html, 0, String.Format ("bookmark:{0}", clue_text));
		}
	}
}
Attachment:
signature.asc
Description: This is a digitally signed message part