[Xfce4-commits] <postler:master> Lookup and render avatars and unify lookup
Christian Dywan
noreply at xfce.org
Wed Jun 29 20:02:01 CEST 2011
Updating branch refs/heads/master
to 8ea33c0649f90a3aea47a41bdb42f991ad9aa046 (commit)
from 15db8304c665640f0c461f730af95c965e514581 (commit)
commit 8ea33c0649f90a3aea47a41bdb42f991ad9aa046
Author: Christian Dywan <christian at twotoasts.de>
Date: Tue Jun 28 22:12:18 2011 +0200
Lookup and render avatars and unify lookup
postler/postler-contact.vala | 8 ++++++
postler/postler-content.vala | 9 +++++++
postler/postler-index.vala | 49 ++++++++++++++++++++++++++++------------
postler/postler-message.vala | 6 +++++
postler/postler-messages.vala | 8 +------
5 files changed, 58 insertions(+), 22 deletions(-)
diff --git a/postler/postler-contact.vala b/postler/postler-contact.vala
index 67c34f0..8bdfb29 100644
--- a/postler/postler-contact.vala
+++ b/postler/postler-contact.vala
@@ -11,6 +11,14 @@
namespace Postler {
public class Contact {
+ public string display_name;
+ public GLib.File? avatar;
+
+ public Contact (string display_name, GLib.File? avatar) {
+ this.display_name = display_name;
+ this.avatar = avatar;
+ }
+
internal static string[] parse (string address)
ensures (result[0] != null && result[1] != null) {
if (address.length < 1) {
diff --git a/postler/postler-content.vala b/postler/postler-content.vala
index 8cdc605..99b2a4a 100644
--- a/postler/postler-content.vala
+++ b/postler/postler-content.vala
@@ -358,6 +358,10 @@ public class Postler.Content : WebKit.WebView {
if (pixbuf == null) {
return null;
}
+ return pixbuf_to_data_uri (pixbuf);
+ }
+
+ static string? pixbuf_to_data_uri (Gdk.Pixbuf pixbuf) {
string buffer;
size_t buffer_size;
try {
@@ -706,6 +710,11 @@ public class Postler.Content : WebKit.WebView {
reply_markup = reply_markup.replace ("\"%sender%\"", ("\"" + child.sender + "\""));
reply_markup = reply_markup.replace ("%sender%", linkify_address (child.sender, null));
reply_markup = reply_markup.replace ("%time{%X}%", format_date (child.date));
+ string avatar_uri = "Incoming/buddy_icon.png";
+ if (child.avatar != null && child.avatar.get_path () != null) {
+ avatar_uri = child.avatar.get_uri ();
+ }
+ reply_markup = reply_markup.replace ("%userIconPath%", avatar_uri);
body_chunk.append (reply_markup);
foreach (var attachment_part in child.parts) {
diff --git a/postler/postler-index.vala b/postler/postler-index.vala
index bb4d1e3..4311860 100644
--- a/postler/postler-index.vala
+++ b/postler/postler-index.vala
@@ -22,7 +22,7 @@ namespace Postler {
static Sqlite.Statement? statement_unread = null;
static Sqlite.Statement? statement_guess = null;
static int64 startup_timestamp = new DateTime.now_utc ().to_unix ();
- static GLib.HashTable<string,string> names;
+ static GLib.HashTable<string,Postler.Contact> names;
#if HAVE_FOLKS
static Folks.IndividualAggregator aggregator;
@@ -30,13 +30,14 @@ namespace Postler {
foreach (var individual in aggregator.get_individuals ().get_values ()) {
string? display_name = individual.full_name ?? individual.alias;
if (display_name != null) {
+ var contact = new Postler.Contact (display_name, individual.avatar);
foreach (string address in individual.email_addresses)
- names.insert (address, display_name);
+ names.insert (address, contact);
/* foreach (string address in individual.im_addresses.get_values ())
- names.insert (address, display_name); */
+ names.insert (address, contact); */
foreach (var persona in individual.personas) {
if (persona.display_id.chr (-1, '@') != null)
- names.insert (persona.display_id, display_name);
+ names.insert (persona.display_id, contact);
}
}
}
@@ -55,7 +56,7 @@ namespace Postler {
if (database != null)
return;
- names = new GLib.HashTable<string,string> (str_hash, str_equal);
+ names = new GLib.HashTable<string,Postler.Contact> (str_hash, str_equal);
#if HAVE_FOLKS
aggregator = new Folks.IndividualAggregator ();
/* FIXME: Connect to aggregator.individuals_changed */
@@ -218,7 +219,17 @@ namespace Postler {
throw new GLib.FileError.FAILED (_("Failed to get message: %s"), database.errmsg ());
}
var message = new Message.from_statement (id, statement_get);
- message.sender = guess_name (message.sender);
+ string address = Postler.Contact.address_from_string (message.sender);
+ try {
+ var contact = guess_name (address);
+ if (contact != null) {
+ message.sender = "%s <%s>".printf (contact.display_name, address);
+ message.avatar = contact.avatar;
+ }
+ }
+ catch (GLib.Error guess_error) {
+ GLib.warning (guess_error.message);
+ }
statement_get.reset ();
return message;
}
@@ -305,10 +316,14 @@ namespace Postler {
return -1;
}
- public string guess_name (string address) throws GLib.Error {
- string? display_name = names.lookup (address);
+ public Postler.Contact? guess_name (string address) throws GLib.Error {
+ Postler.Contact? contact = names.lookup (address);
+ if (contact != null)
+ return contact;
+
+ string? display_name = new Dexter.Dexter ().get_name (address);
if (display_name != null)
- return "%s <%s>".printf (display_name, address);
+ return new Postler.Contact (display_name, null);
if (statement_guess == null) {
if (database.prepare_v2 ("""
@@ -316,19 +331,23 @@ namespace Postler {
GROUP BY sender ORDER BY COUNT (sender) DESC LIMIT 1
""",
-1, out statement_guess) != Sqlite.OK)
- throw new GLib.FileError.FAILED (_("Failed to list messages: %s"), database.errmsg ());
+ throw new GLib.FileError.FAILED (_("Failed to guess name: %s"), database.errmsg ());
}
+ int result = Sqlite.ERROR;
bool success =
- statement_guess.bind_text (1, "%" + address + ">", -1) == Sqlite.OK;
- int result = statement_guess.step ();
- success = success && row_or_done (result);
+ statement_guess.bind_text (1, "%<" + address + ">", -1) == Sqlite.OK
+ && row_or_done (((result = statement_guess.step ())));
if (!success) {
statement_guess.reset ();
throw new GLib.FileError.FAILED (_("Failed to guess name: %s"), database.errmsg ());
}
- string find = result == Sqlite.ROW ? statement_guess.column_text (0) : address;
+ if (result == Sqlite.ROW) {
+ display_name = Postler.Contact.name_from_string (statement_guess.column_text (0));
+ statement_guess.reset ();
+ return new Postler.Contact (display_name, null);
+ }
statement_guess.reset ();
- return find;
+ return null;
}
}
}
diff --git a/postler/postler-message.vala b/postler/postler-message.vala
index eb1675a..5eb1cd5 100644
--- a/postler/postler-message.vala
+++ b/postler/postler-message.vala
@@ -94,6 +94,7 @@ namespace Postler {
public int64 get_timestamp () { return date != null ? date.to_unix () : 0; }
public string? subject { public get; set; }
public string? sender { public get; internal set; }
+ public GLib.File? avatar { public get; internal set; }
public string? recipients { public get; set; }
public string? reply_to { public get; set; }
public bool unread { public get; set; }
@@ -128,6 +129,8 @@ namespace Postler {
message_data.insert ("replies", this.replies);
message_data.insert ("subject", this.subject ?? "");
message_data.insert ("sender", this.sender ?? "");
+ if (avatar != null)
+ message_data.insert ("avatar", avatar.get_uri ());
message_data.insert ("recipients", this.recipients ?? "");
message_data.insert ("unread", this.unread);
message_data.insert ("flagged", this.flagged);
@@ -153,6 +156,9 @@ namespace Postler {
this.replies = message_data.lookup ("replies").get_int64 ();
this.subject = message_data.lookup ("subject").get_string ();
this.sender = message_data.lookup ("sender").get_string ();
+ Variant? avatar = message_data.lookup ("avatar");
+ if (avatar != null)
+ this.avatar = GLib.File.new_for_uri (avatar.get_string ());
this.recipients = message_data.lookup ("recipients").get_string ();
this.unread = message_data.lookup ("unread").get_boolean ();
this.flagged = message_data.lookup ("flagged").get_boolean ();
diff --git a/postler/postler-messages.vala b/postler/postler-messages.vala
index 61c93fd..d277de0 100644
--- a/postler/postler-messages.vala
+++ b/postler/postler-messages.vala
@@ -14,7 +14,6 @@ public class Postler.Messages : Gtk.TreeView {
Gtk.TreeStore store;
Gtk.TreePath defer_select;
Postler.Client? client = null;
- Dexter.Dexter dexter = new Dexter.Dexter ();
public Postler.Content content { get; set; }
public bool hide_read { get; set; }
@@ -150,12 +149,7 @@ public class Postler.Messages : Gtk.TreeView {
for (int j = 0; j < 20 - size; j++)
date = date + " ";
- string from;
- if (message.sender != null)
- from = escape_text (dexter.get_name (message.sender)
- ?? Postler.Contact.name_from_string (message.sender));
- else
- from = _("Unknown");
+ string from = escape_text (Postler.Contact.name_from_string (message.sender));
int weight = message.unread ? Pango.Weight.BOLD : Pango.Weight.NORMAL;
renderer.ellipsize = Pango.EllipsizeMode.MIDDLE;
More information about the Xfce4-commits
mailing list