void client_Presence(object sender, XmppPresenceEventArgs e) { Dispatcher.BeginInvoke(new Action(() => { RosterItem ri = RosterMgr.Get(e.Presence.From); if (ri != null) { ri.UpdatePresence(e.Presence); Chat ci = ChatMgr.Get(e.Presence.From, null); if (ci != null) { ci.RefreshPresence(); } RosterMgr.UpdateRosterView(); Log(string.Format("{0} is {2} {3}", ri.Text, e.Presence.From.Bare, e.Presence.Status.ToString().ToLower(), e.Presence.MessageStatus)); } string hash = e.Presence.PhotoHash; if (e.Presence.From.Bare == client.Jid.Bare) { if (!Avatar.Exist(hash)) { client.SendVCardRequest(client.Jid); } else { UpdateAvatar(hash); } } else { if (e.Presence.Status != XmppPresenceStatus.Unavailable && !string.IsNullOrWhiteSpace(hash) && !Avatar.Exist(hash)) { if (!client.HostName.ToLower().Contains("facebook")) // @@@ do not working with facebook... bug? { client.SendVCardRequest(e.Presence.From); } } } }), DispatcherPriority.Normal); }
private void xmppControl_OnPresence(object sender, XmppPresenceEventArgs e) { Console.WriteLine("IM-Presence:" + "(" + e.User + ")" + e.Availability); if (!myBuddyPresence.Contains(e.User)) { myBuddyPresence.Add(e.User, e.Availability); } else { myBuddyPresence[e.User] = e.Availability; } //update the roster imageindex for this buddy myChatWindow.AddToConversation(e.User, "PRESENCE", e.User + " is " + myChatWindow.PRESENCES[e.Availability]); myChatWindow.UpdatePresence(e.User, e.Availability); TreeNode node = GetNode(myRosterListTreeView.TopNode, e.User); if (node != null) { switch (e.Availability) { case 0: node.ImageIndex = 0; node.SelectedImageIndex = 0; break;// 'offline case 1: node.ImageIndex = 1; node.SelectedImageIndex = 1; break;// 'online case 2: node.ImageIndex = 2; node.SelectedImageIndex = 2; break;// 'away case 3: node.ImageIndex = 3; node.SelectedImageIndex = 3; break;// 'extended away case 4: node.ImageIndex = 4; node.SelectedImageIndex = 4; break;// 'Do not disturb } } }