void OnPresence(object sender, Presence pres)
{
Trace.Call(sender, pres);
Jid jid = pres.From;
if (jid == JabberClient.MyJID) return; // we don't care about ourself
if (pres.Capabilities != null && pres.Type == PresenceType.available) {
// only test capabilities of users going online or changing something in their online state
RequestCapabilities(jid, pres.Capabilities);
}
if (pres.MucUser != null || pres.Muc != null) {
var groupChat = (XmppGroupChatModel) Session.GetChat(jid.Bare, ChatType.Group, this);
if (groupChat == null) {
var builder = CreateMessageBuilder();
builder.AppendEventPrefix();
builder.AppendErrorText(_("Received a presence update from {0}, but there's no corresponding chat window"), pres.From.Bare);
Session.AddMessageToChat(NetworkChat, builder.ToMessage());
if (pres.Type == PresenceType.error) {
var msg = CreateGroupChatPresenceErrorMessage(pres);
Session.AddMessageToChat(NetworkChat, msg);
} else {
MucManager.LeaveRoom(jid.Bare, jid.Resource);
}
} else {
OnGroupChatPresence(groupChat, pres);
}
} else {
OnPrivateChatPresence(pres);
}
}