diff options
| author | Marvin W <git@larma.de> | 2025-04-11 11:51:36 +0200 |
|---|---|---|
| committer | Marvin W <git@larma.de> | 2025-04-11 11:51:36 +0200 |
| commit | f5fde137bbe30749e0e7391ada2ebfcb7d389acf (patch) | |
| tree | 2811c33496917ee7580e0d9daceacfadce76aa10 | |
| parent | 643a31535b44c369edc8c5d601b1b14a3db2f207 (diff) | |
Fix potential crashes during account disabling
| -rw-r--r-- | libdino/src/service/connection_manager.vala | 1 | ||||
| -rw-r--r-- | libdino/src/service/conversation_manager.vala | 14 | ||||
| -rw-r--r-- | main/src/ui/conversation_selector/conversation_selector.vala | 8 |
3 files changed, 14 insertions, 9 deletions
diff --git a/libdino/src/service/connection_manager.vala b/libdino/src/service/connection_manager.vala index f5f5aaa5..c8b5c4ed 100644 --- a/libdino/src/service/connection_manager.vala +++ b/libdino/src/service/connection_manager.vala @@ -254,6 +254,7 @@ public class ConnectionManager : Object { debug("[%s %p] Connection error: %s", account.bare_jid.to_string(), stream, e.message); change_connection_state(account, ConnectionState.DISCONNECTED); + if (!connections.has_key(account)) return; connections[account].reset(); StreamError.Flag? flag = stream.get_flag(StreamError.Flag.IDENTITY); diff --git a/libdino/src/service/conversation_manager.vala b/libdino/src/service/conversation_manager.vala index a757e8af..e7c315a2 100644 --- a/libdino/src/service/conversation_manager.vala +++ b/libdino/src/service/conversation_manager.vala @@ -62,12 +62,14 @@ public class ConversationManager : StreamInteractionModule, Object { } public Conversation? get_conversation_for_message(Entities.Message message) { - if (message.type_ == Entities.Message.Type.CHAT) { - return create_conversation(message.counterpart.bare_jid, message.account, Conversation.Type.CHAT); - } else if (message.type_ == Entities.Message.Type.GROUPCHAT) { - return create_conversation(message.counterpart.bare_jid, message.account, Conversation.Type.GROUPCHAT); - } else if (message.type_ == Entities.Message.Type.GROUPCHAT_PM) { - return create_conversation(message.counterpart, message.account, Conversation.Type.GROUPCHAT_PM); + if (conversations.has_key(message.account)) { + if (message.type_ == Entities.Message.Type.CHAT) { + return create_conversation(message.counterpart.bare_jid, message.account, Conversation.Type.CHAT); + } else if (message.type_ == Entities.Message.Type.GROUPCHAT) { + return create_conversation(message.counterpart.bare_jid, message.account, Conversation.Type.GROUPCHAT); + } else if (message.type_ == Entities.Message.Type.GROUPCHAT_PM) { + return create_conversation(message.counterpart, message.account, Conversation.Type.GROUPCHAT_PM); + } } return null; } diff --git a/main/src/ui/conversation_selector/conversation_selector.vala b/main/src/ui/conversation_selector/conversation_selector.vala index d16ef3ee..4439f443 100644 --- a/main/src/ui/conversation_selector/conversation_selector.vala +++ b/main/src/ui/conversation_selector/conversation_selector.vala @@ -120,9 +120,11 @@ public class ConversationSelector : Widget { if (rows.has_key(conversation)) { conversation.notify["pinned"].disconnect(list_box.invalidate_sort); - yield rows[conversation].colapse(); - list_box.remove(rows[conversation]); - rows.unset(conversation); + ConversationSelectorRow conversation_row; + rows.unset(conversation, out conversation_row); + + yield conversation_row.colapse(); + list_box.remove(conversation_row); } } |
