[smuxi: 1/5] Engine-XMPP: wasn't able to close unsynced (not fully joined) mucs
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi: 1/5] Engine-XMPP: wasn't able to close unsynced (not fully joined) mucs
- Date: Fri, 4 Apr 2014 10:19:19 +0000 (UTC)
commit 5f8caa5c103df432a250e2cbe7268a2a0e8897e2
Author: Oliver Schneider <mail oli-obk de>
Date: Fri Dec 6 22:06:13 2013 +0100
Engine-XMPP: wasn't able to close unsynced (not fully joined) mucs
in case of long delays this could easily happen
also, regression-danger due to nonexisting chat windows that the server might send messages for
.../Protocols/Xmpp/XmppProtocolManager.cs | 28 ++++++++++++++++---
1 files changed, 23 insertions(+), 5 deletions(-)
---
diff --git a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
index 205d499..57e6d70 100644
--- a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
+++ b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
@@ -616,7 +616,12 @@ namespace Smuxi.Engine
ContactChat = null;
} else if (chat.ChatType == ChatType.Group) {
if (IsConnected) {
- MucManager.LeaveRoom(chat.ID, ((XmppGroupChatModel)chat).OwnNickname);
+ var groupchat = (XmppGroupChatModel)chat;
+ if (!groupchat.IsSynced) {
+ Session.RemoveChat(chat);
+ } else {
+ MucManager.LeaveRoom(chat.ID, ((XmppGroupChatModel)chat).OwnNickname);
+ }
} else {
Session.RemoveChat(chat);
}
@@ -2053,10 +2058,16 @@ namespace Smuxi.Engine
RequestCapabilities(jid, pres.Capabilities);
}
- var groupChat = (XmppGroupChatModel) Session.GetChat(jid.Bare, ChatType.Group, this);
-
- if (groupChat != null) {
- OnGroupChatPresence(groupChat, pres);
+ 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());
+ } else {
+ OnGroupChatPresence(groupChat, pres);
+ }
} else {
OnPrivateChatPresence(pres);
}
@@ -2067,6 +2078,13 @@ namespace Smuxi.Engine
{
string group_jid = msg.From.Bare;
XmppGroupChatModel groupChat = (XmppGroupChatModel) Session.GetChat(group_jid, ChatType.Group,
this);
+ if (groupChat == null) {
+ var builder = CreateMessageBuilder();
+ builder.AppendEventPrefix();
+ builder.AppendErrorText(_("Received a groupchat message from {0} but there's no
corresponding chat window: {1}"), msg.From, msg.Body);
+ Session.AddMessageToChat(NetworkChat, builder.ToMessage());
+ return;
+ }
// resource can be empty for room messages
var sender_id = msg.From.Resource ?? msg.From.Bare;
var person = groupChat.GetPerson(sender_id);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]