Hey, guys. I whipped up a simple MailMessage renderer (attached). Some things that I'll work on when I wake up: * Make the date format function a little more robust. As it stands, I'm using C#'s built-in DateTime.Parse function. I don't know if the EvoMail backend will give me the date in the same format for non-US locales or not. Also, the outputted date format is terribly US-centric (month/day). This should probably take into account the locale and output accordingly. * Add support for the message flags. The renderer could then show whether the message is new, has been read, has been replied to, has been deleted, has attachments, etc. * Sort the messages by date (newest messages first). I'm definitely open to suggestions and comments. You can also download the code from here: http://www.geocities.com/godbyk/MailMessageMatchRenderer.cs.txt And a simple screenshot is here: http://www.geocities.com/godbyk/dashboard-mail-renderer.png -- Kevin Godby <godbyk yahoo com>
//
// GNOME Dashboard
//
// MailMessageMatchRenderer.cs: Knows how to render MailMessage matches.
//
// Author:
// Kevin Godby <godbyk yahoo com>
//
// FIXME: Add support for msg flags
// FIXME: Test with international locales (especially date format)
// FIXME: Implement smarter date display (more info as date is further back in time)
// FIXME: Sort by date, newest mail first
using System;
using System.Collections;
namespace Dashboard {
class MailMessageMatchRenderer : MatchRenderer {
public override void Startup ()
{
Type = "MailMessage";
}
public override string HTMLRenderMatches (ArrayList matches)
{
string html = "";
html += "<u>Email Messages</u>";
html += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">";
foreach (Match m in matches)
html += HTMLRenderSingleMailMessage (m);
html += "</table>";
html += "<br><br>";
return html;
}
private string HTMLRenderSingleMailMessage (Match m)
{
string html;
string maildate = Convert.ToString (m ["sentdate"]);
string ParsedDate = ParseMailDate (maildate);
html = String.Format (
"<tr>" +
" <td><img src=\"{0}\"></td>" +
" <td nowrap>{1}</td>" +
" <td align=\"right\">{2}</td>" +
"</tr>" +
"<tr>" +
" <td> </td>" +
" <td colspan=\"2\"><font color=\"#666666\">{3}</font></td>" +
"</tr>",
m ["icon"],
m ["from"],
ParsedDate,
m ["subject"]
);
/*
Console.WriteLine ("---\nFrom: {0}\nDate: {1}\nSubject: {2}\nFlags: {3}\nParsed Date: {4}",
m ["from"], m ["sentdate"], m ["subject"],
m ["flags"], ParsedDate
);
*/
return html;
}
private string ParseMailDate (string maildate)
{
// I don't know if the date format returned by the EvoMail backend
// is always the same or if it is dependent upon the locale.
// Assuming en-US throughout.
DateTime ParsedDate = DateTime.Parse (maildate);
// FIXME: Not the best date format (esp. for int'l users)
return ParsedDate.ToString ("ddd M/d");
}
}
}
Attachment:
dashboard-mail-renderer.png
Description: PNG image