summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/SingleImagePackModel.cpp45
-rw-r--r--src/SingleImagePackModel.h1
2 files changed, 34 insertions, 12 deletions
diff --git a/src/SingleImagePackModel.cpp b/src/SingleImagePackModel.cpp
index 1adfdaa2..95a863d3 100644
--- a/src/SingleImagePackModel.cpp
+++ b/src/SingleImagePackModel.cpp
@@ -8,6 +8,7 @@
 #include <QFileInfo>
 #include <QMimeDatabase>
 
+#include <mtx/events/mscs/image_packs.hpp>
 #include <nlohmann/json.hpp>
 
 #include <unordered_set>
@@ -285,18 +286,7 @@ SingleImagePackModel::save()
         });
     } else {
         if (old_statekey_ != statekey_) {
-            http::client()->send_state_event(
-              roomid_,
-              to_string(mtx::events::EventType::ImagePackInRoom),
-              old_statekey_,
-              nlohmann::json::object(),
-              [](const mtx::responses::EventId &, mtx::http::RequestErr e) {
-                  if (e)
-                      ChatPage::instance()->showNotification(
-                        tr("Failed to delete old image pack: %1")
-                          .arg(QString::fromStdString(e->matrix_error.error)));
-              });
-            old_statekey_ = statekey_;
+            this->remove();
         }
 
         http::client()->send_state_event(
@@ -315,6 +305,37 @@ SingleImagePackModel::save()
 }
 
 void
+SingleImagePackModel::remove()
+{
+    // handle account pack deletion.
+    // Sadly we cannot actually delete the pack,
+    // so we just send an empty pack to clear out its information.
+    if (roomid_.empty()) {
+        http::client()->put_account_data(
+          mtx::events::msc2545::ImagePack(), [](mtx::http::RequestErr e) {
+              if (e)
+                  ChatPage::instance()->showNotification(
+                    tr("Failed to update image pack: %1")
+                      .arg(QString::fromStdString(e->matrix_error.error)));
+          });
+        return;
+    }
+
+    http::client()->send_state_event(
+      roomid_,
+      to_string(mtx::events::EventType::ImagePackInRoom),
+      old_statekey_,
+      nlohmann::json::object(),
+      [](const mtx::responses::EventId &, mtx::http::RequestErr e) {
+          if (e)
+              ChatPage::instance()->showNotification(
+                tr("Failed to delete old image pack: %1")
+                  .arg(QString::fromStdString(e->matrix_error.error)));
+      });
+    old_statekey_ = statekey_;
+}
+
+void
 SingleImagePackModel::addStickers(QList<QUrl> files)
 {
     for (const auto &f : files) {
diff --git a/src/SingleImagePackModel.h b/src/SingleImagePackModel.h
index e1ab98fb..d5cc818e 100644
--- a/src/SingleImagePackModel.h
+++ b/src/SingleImagePackModel.h
@@ -70,6 +70,7 @@ public:
     void setIsEmotePack(bool val);
 
     Q_INVOKABLE void save();
+    Q_INVOKABLE void remove();
     Q_INVOKABLE void addStickers(QList<QUrl> files);
     Q_INVOKABLE void remove(int index);
     Q_INVOKABLE void setAvatar(QUrl file);