4
using System.Collections.Generic;
10
public class EmeseneContactItemSource : ItemSource
12
private List<Item> contacts;
13
private Dictionary<string, int> contactsRelation;
14
private int lastContact;
16
public EmeseneContactItemSource ()
18
this.contacts = new List<Item> ();
19
this.contactsRelation = new Dictionary<string, int>();
20
this.lastContact = -1;
23
public override string Name { get { return "Emesene Buddies"; } }
24
public override string Description { get { return "Buddies on your emesene buddy list."; }}
25
public override string Icon {get { return "emesene"; } }
27
public override IEnumerable<Type> SupportedItemTypes
29
get { yield return typeof (ContactItem); }
32
public override IEnumerable<Item> Items
34
get { return this.contacts; }
37
public void getDisplayFromDB(ContactItem contact)
40
Log<EmeseneContactItemSource>.Debug ("Tryng to get display from DB for: {0}...", contact["email"]);
41
photo = Emesene.get_last_display_picture(contact["email"], false);
42
if (photo != "noImage")
44
//Log<EmeseneContactItemSource>.Debug ("Display found! in: {0}", photo);
45
contact["photo"] = photo;
49
//Log<EmeseneContactItemSource>.Debug ("No display picture in DB for: {0}", contact["email"]);
50
if(this.lastContact == -1)
52
this.lastContact = this.contactsRelation[contact["email"]];
56
ContactItem newContact = (ContactItem)this.contacts[lastContact];
57
string p = newContact["photo"];
63
//Log<EmeseneContactItemSource>.Debug ("Now tryng to get display from DB for: {0}", newContact["email"]);
64
photo = Emesene.get_last_display_picture(newContact["email"], false);
65
if (photo != "noImage")
67
//Log<EmeseneContactItemSource>.Debug ("Display found! in: {0}", photo);
68
newContact["photo"] = photo;
69
//Log<EmeseneContactItemSource>.Debug ("Display picture of user: {0} : {1}", newContact["email"], newContact["photo"]);
73
//Log<EmeseneContactItemSource>.Debug ("No display picture in DB for user: {0}", newContact["email"]);
76
//Log<EmeseneContactItemSource>.Debug ("lastContact: {0}", this.lastContact);
77
}while(photo == "noImage" && this.lastContact > 0);
81
public override void UpdateItems ()
83
Log<EmeseneContactItemSource>.Debug ("Checking for emesene...");
84
if (Emesene.checkForEmesene())
86
Log<EmeseneContactItemSource>.Debug ("emesene Dbus is ON");
90
Log<EmeseneContactItemSource>.Debug ("emesene Dbus is OFF");
93
if (Emesene.checkForEmesene())
95
if (contacts.Count < 1)
97
contactsFile = Emesene.getCurrentEmeseneUser();
98
contactsFile = contactsFile.Replace(".","_");
99
contactsFile = Environment.GetFolderPath
100
(Environment.SpecialFolder.Personal)+
101
"/.config/emesene1.0/"+contactsFile.Replace("@","_")+
102
"/cache/"+Emesene.getCurrentEmeseneUser()+"_di.xml";
103
//Log<EmeseneContactItemSource>.Debug (" ------------------EmeseneContactItemSource------------------");
104
Log<EmeseneContactItemSource>.Debug ("XML file with contacts: {0}", contactsFile);
106
Dictionary<ContactItem, bool> buddies_seen;
107
buddies_seen = new Dictionary<ContactItem, bool> ();
108
blist = new XmlDocument();
112
blist.Load (contactsFile);
116
foreach (XmlNode buddy_node in blist.GetElementsByTagName ("passportName"))
119
mail = buddy_node.InnerText;
120
//Log<EmeseneContactItemSource>.Debug ("===============================================");
121
//Log<EmeseneContactItemSource>.Debug ("Emesene > Node#: {0} - PassportName: {1}", i,mail);
123
buddy = ContactItem.CreateWithEmail(mail);
124
photo = Emesene.get_last_display_picture(mail, true);
125
if (photo != "noImage")
127
buddy["photo"] = photo;
128
//Log<EmeseneContactItemSource>.Debug ("User: {0} - Display: {1}", buddy["email"], photo);
133
//Log<EmeseneContactItemSource>.Debug ("User: {0} - Display: None", buddy["email"]);
135
if (buddy == null) continue;
136
buddies_seen[buddy] = true;
138
Log<EmeseneContactItemSource>.Debug ("Total # of node contacts: {0}", --i);
139
//Log<EmeseneContactItemSource>.Debug ("Total # of buddies seen: {0}", buddies_seen.Keys.Count);
140
//Log<EmeseneContactItemSource>.Debug ("# of buddies with display: {0}", withDP);
144
Log<EmeseneContactItemSource>.Error ("Error reading contact list file: {0}", e.Message);
145
Log<EmeseneContactItemSource>.Debug (e.StackTrace);
147
foreach (ContactItem buddy in buddies_seen.Keys)
149
contacts.Add (buddy);
150
contactsRelation[buddy["email"]]= contacts.Count - 1;
156
Log<EmeseneContactItemSource>.Debug ("Length of the contact list was larger than 0...");
158
ContactItem newContact = null;
159
foreach (ContactItem contact in contacts)
161
if(contact["photo"] == null)
163
//Log<EmeseneContactItemSource>.Debug ("Getting display picture from emesene cache for: {0}...", contact["email"]);
164
photo = Emesene.get_last_display_picture(contact["email"], true);
165
if (photo != "noImage")
167
contact["photo"] = photo;
168
//Log<EmeseneContactItemSource>.Debug ("Display picture found! : {0}", contact["photo"]);
172
newContact = contact;
176
if(newContact != null)
178
this.getDisplayFromDB(newContact);
181
Log<EmeseneContactItemSource>.Debug ("End, waiting to update again...");