From 2836ac669cdf1d8f9ea5e6bb806d02b26091ae15 Mon Sep 17 00:00:00 2001
From: Daniel Gultsch <daniel@gultsch.de>
Date: Fri, 18 Dec 2020 21:18:09 +0100
Subject: [PATCH] catch exception while destroying rooms

---
 .../services/XmppConnectionService.java       | 35 ++++++++++---------
 .../ui/ConversationsActivity.java             | 10 ++++--
 2 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
index a2bd8107b..b4b7d7c20 100644
--- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
@@ -3639,26 +3639,29 @@ public class XmppConnectionService extends Service {
     }
 
     public void destroyRoom(final Conversation conversation, final OnRoomDestroy callback) {
-        IqPacket request = new IqPacket(IqPacket.TYPE.SET);
-        request.setTo(conversation.getJid().asBareJid());
-        request.query("http://jabber.org/protocol/muc#owner").addChild("destroy");
-        sendIqPacket(conversation.getAccount(), request, new OnIqPacketReceived() {
-            @Override
-            public void onIqPacketReceived(Account account, IqPacket packet) {
-                if (packet.getType() == IqPacket.TYPE.RESULT) {
-                    if (callback != null) {
-                        callback.onRoomDestroySucceeded();
-                    }
-                } else if (packet.getType() == IqPacket.TYPE.ERROR) {
-                    if (callback != null) {
-                        callback.onRoomDestroyFailed();
+        try {
+            IqPacket request = new IqPacket(IqPacket.TYPE.SET);
+            request.setTo(conversation.getJid().asBareJid());
+            request.query("http://jabber.org/protocol/muc#owner").addChild("destroy");
+            sendIqPacket(conversation.getAccount(), request, new OnIqPacketReceived() {
+                @Override
+                public void onIqPacketReceived(Account account, IqPacket packet) {
+                    if (packet.getType() == IqPacket.TYPE.RESULT) {
+                        if (callback != null) {
+                            callback.onRoomDestroySucceeded();
+                        }
+                    } else if (packet.getType() == IqPacket.TYPE.ERROR) {
+                        if (callback != null) {
+                            callback.onRoomDestroyFailed();
+                        }
                     }
                 }
-            }
-        });
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
-
     private void disconnect(Account account, boolean force) {
         if ((account.getStatus() == Account.State.ONLINE)
                 || (account.getStatus() == Account.State.DISABLED)) {
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java
index 8981eb488..c0ee76a4e 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java
@@ -648,9 +648,13 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
             if (extras != null && extras.containsKey("MUC_UUID")) {
                 Log.d(Config.LOGTAG, "Get " + intent.getAction() + " intent for " + extras.getString("MUC_UUID"));
                 Conversation conversation = xmppConnectionService.findConversationByUuid(extras.getString("MUC_UUID"));
-                ConversationsActivity.this.xmppConnectionService.clearConversationHistory(conversation);
-                xmppConnectionService.destroyRoom(conversation, ConversationsActivity.this);
-                endConversation(conversation);
+                try {
+                    ConversationsActivity.this.xmppConnectionService.clearConversationHistory(conversation);
+                    xmppConnectionService.destroyRoom(conversation, ConversationsActivity.this);
+                    endConversation(conversation);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         }
         setIntent(createLauncherIntent(this));