Ok so here goes the last version. I will not spam any more. L.
--- backends/BeagleBackend.cs.~1.5.~ 2004-06-29 21:23:39.000000000 +0200 +++ backends/BeagleBackend.cs 2004-07-18 21:47:16.000000000 +0200 @@ -5,6 +5,7 @@ // // Author: // Nat Friedman <nat novell com> +// Lukas Lipka <lukas pmad net> // @@ -21,7 +22,6 @@ class BeagleBackend : Backend { private QueryDriver queryDriver; - private static double DECAY = 0.3; // How quickly to decay old files public override bool Startup () { @@ -83,11 +83,74 @@ foreach (string key in hit.Keys) match [key] = hit [key]; break; + + case "IMLog": + match ["SpeakingTo"] = hit ["SpeakingTo"]; + match ["StartTime"] = hit ["StartTime"]; + match ["EndTime"] = hit ["EndTime"]; + break; + } return match; } + class HitTypeLimiter + { + private int File = 0; + private int IMLog = 0; + private int Mail = 0; + private int Contact = 0; + + private const int MAX_FILE = 10; + private const int MAX_IMLOG = 5; + private const int MAX_MAIL = 5; + private const int MAX_CONTACT = 5; + + public HitTypeLimiter () + { + + } + + public bool Limit (Hit hit) + { + switch (hit.Type) { + case "File": + if (File != MAX_FILE) { + File++; + return true; + } + break; + + case "MailMessage": + if (Mail != MAX_MAIL) { + Mail++; + return true; + } + break; + + case "Contact": + if (Contact != MAX_CONTACT) { + Contact++; + return true; + } + break; + + case "IMLog": + if (IMLog != MAX_IMLOG) { + IMLog++; + return true; + } + break; + + default: + return true; + } + + return false; + } + } + public override BackendResult ProcessCluePacket (CluePacket cp) { if (! this.Initialized) @@ -99,23 +162,25 @@ if (! ClueTypeSubscribed (clue)) continue; - string clue_text = clue.Text.ToLower (); + string clue_text = clue.Text; Query query = new Query (clue_text); + query.AddDomain (QueryDomain.Neighorhood); + query.AddDomain (QueryDomain.Global); + QueryResult results = queryDriver.Query (query); // Wait for all results to come back before // preceeding. (FIXME?) results.Wait (); + HitTypeLimiter limiter = new HitTypeLimiter (); - int i = 0; foreach (Hit hit in results.Hits) { - i ++; - if (i > 10) - break; - Match match = HitToMatch (hit, clue); - result.AddMatch (match); + if (limiter.Limit (hit)) { + Match match = HitToMatch (hit, clue); + result.AddMatch (match); + } } } --- engine/Makefile.am.~1.50.~ 2004-06-29 21:23:40.000000000 +0200 +++ engine/Makefile.am 2004-07-18 13:52:26.000000000 +0200 @@ -27,7 +27,8 @@ -resource:$(srcdir)/images/mail-new.png,mail-new.png \ -resource:$(srcdir)/images/mail-replied.png,mail-replied.png \ -resource:$(srcdir)/images/mail-read.png,mail-read.png \ - -resource:$(srcdir)/images/rss.png,rss.png + -resource:$(srcdir)/images/rss.png,rss.png \ + -resource:$(srcdir)/images/gnome-gaim.png,gnome-gaim.png DASHBOARD_CSFILES = \ $(srcdir)/Backend.cs \ --- engine/images/Makefile.am.~1.5.~ 2004-02-19 05:30:23.000000000 +0100 +++ engine/images/Makefile.am 2004-07-18 11:17:27.000000000 +0200 @@ -17,6 +17,7 @@ mail-new.png \ mail-read.png \ mail-replied.png \ - rss.png + rss.png \ + gnome-gaim.png EXTRA_DIST = $(noinst_DATA) --- renderers/IMLogMatchRenderer.cs.~1.7.~ 2004-03-04 08:32:54.000000000 +0100 +++ renderers/IMLogMatchRenderer.cs 2004-07-18 13:56:59.000000000 +0200 @@ -9,6 +9,8 @@ using System; using System.Collections; +using System.Xml; +using System.IO; [assembly:Dashboard.MatchRendererFactory ("Dashboard.IMLogMatchRenderer")] @@ -21,73 +23,95 @@ Type = "IMLog"; } - private class AliasComparer : IComparer { + private class SpeakingToComparer : IComparer { public int Compare (object a, object b) { Match m1 = (Match) a; Match m2 = (Match) b; - return String.Compare ((string) m1 ["Alias"], (string) m2 ["Alias"]); + return String.Compare ((string) m1 ["SpeakingTo"], (string) m2 ["SpeakingTo"]); } } public override string HTMLRenderMatches (ArrayList matches) { - string html = ""; - string current_alias = null; + StringWriter sw = new StringWriter (); + XmlWriter xw = new XmlTextWriter (sw); - // Sort by alias - matches.Sort (new AliasComparer ()); + xw.WriteStartElement ("div"); - foreach (Match m in matches) { - string alias = (string) m ["Alias"]; + // Sort by nickname + matches.Sort (new SpeakingToComparer ()); + + foreach (Match m in matches) + HTMLRenderSingleIm (m, xw); - if (current_alias != null && current_alias != alias) - html += "</table>\n\n"; // Footer + xw.WriteEndElement (); //div + xw.Close (); - if (current_alias != alias) - html += HTMLRenderHeader (m); - - html += HTMLRenderSingleIMConv (m); - - current_alias = alias; - } - - html += "</table>\n\n"; // Footer - - return html; + return sw.ToString (); } - private string HTMLRenderHeader (Match m) + private void HTMLRenderSingleIm (Match m, XmlWriter xw) { - string html; - - html = String.Format ("<table border=0 width=100%>" + - " <tr bgcolor=#ecd953>" + - " <td> <img border=0 src=\"{0}\"> </td>" + - " <td valign=center>" + - " <font size=+1>Conversations with {1}</font>" + - " </td>" + - " </tr>", - m ["Icon"], - m ["Alias"]); - - return html; - } - - private string HTMLRenderSingleIMConv (Match m) - { - string html; - - html = String.Format ("<tr bgcolor=#f7ec93>" + - " <td colspan=2> <font size=-1>" + - " <a style=\"text-decoration: none;\" href=\"{1}\">{0}</a>" + - " </font></td>" + - "</tr>", - m ["Date"], - m ["URL"]); + string speaking_to = Convert.ToString (m ["SpeakingTo"]); + string uri = Convert.ToString (m ["URI"]); + string start_time = Convert.ToString (m ["StartTime"]); + string end_time = Convert.ToString (m ["EndTime"]); + + xw.WriteStartElement ("table"); + xw.WriteAttributeString ("bgcolor", "#dddddd"); + xw.WriteAttributeString ("cellpadding", "0"); + xw.WriteAttributeString ("cellspacing", "1"); + xw.WriteAttributeString ("width", "100%"); + xw.WriteAttributeString ("height", "100%"); + xw.WriteStartElement ("tr"); + xw.WriteAttributeString ("valign", "top"); + xw.WriteStartElement ("td"); + + xw.WriteStartElement ("table"); + xw.WriteAttributeString ("bgcolor", "#e5f5e5"); + xw.WriteAttributeString ("cellpadding", "4"); + xw.WriteAttributeString ("width", "100%"); + xw.WriteAttributeString ("height", "100%"); + xw.WriteStartElement ("tr"); + xw.WriteAttributeString ("valign", "top"); + xw.WriteStartElement ("td"); + xw.WriteStartElement ("a"); + xw.WriteAttributeString ("href", uri); + xw.WriteStartElement ("img"); + xw.WriteAttributeString ("src", "internal:gnome-gaim.png"); + xw.WriteAttributeString ("border", "0"); + xw.WriteEndElement (); // img + xw.WriteEndElement (); // a + xw.WriteEndElement (); // td + + xw.WriteStartElement ("td"); + xw.WriteStartElement ("font"); + xw.WriteAttributeString ("size", "2"); + xw.WriteString ("IM with "); + xw.WriteStartElement ("strong"); + xw.WriteString (speaking_to); + xw.WriteEndElement (); // strong + xw.WriteEndElement (); // font + xw.WriteStartElement ("br"); + xw.WriteEndElement (); // br + xw.WriteStartElement ("font"); + xw.WriteAttributeString ("size", "1"); + xw.WriteString ("Started " + start_time); + xw.WriteStartElement ("br"); + xw.WriteEndElement (); // br + xw.WriteString ("Finished " + end_time); + xw.WriteEndElement (); //font + xw.WriteEndElement (); //td + xw.WriteEndElement (); //tr + xw.WriteEndElement (); //table + xw.WriteEndElement (); //td + xw.WriteEndElement (); //tr + xw.WriteEndElement (); //table + - return html; + } } }
Attachment:
gnome-gaim.png
Description: PNG image