From e8b9d92e8e84df51dfce386e722f0de398b198bd Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Thu, 7 Dec 2023 00:56:24 +0100 Subject: [PATCH 1/8] Factor out the logic to delete an ImagePack --- src/SingleImagePackModel.cpp | 30 ++++++++++++++++++------------ src/SingleImagePackModel.h | 1 + 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/SingleImagePackModel.cpp b/src/SingleImagePackModel.cpp index 1adfdaa2..daec135f 100644 --- a/src/SingleImagePackModel.cpp +++ b/src/SingleImagePackModel.cpp @@ -285,18 +285,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( @@ -314,6 +303,23 @@ SingleImagePackModel::save() } } +void +SingleImagePackModel::remove() +{ + 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 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 files); Q_INVOKABLE void remove(int index); Q_INVOKABLE void setAvatar(QUrl file); From e3fe1703faa6560cfb6f830b0b676a7844567a7e Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Thu, 7 Dec 2023 00:59:03 +0100 Subject: [PATCH 2/8] Create ImagePackDeleteDialog component --- CMakeLists.txt | 1 + .../qml/dialogs/ImagePackDeleteDialog.qml | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 resources/qml/dialogs/ImagePackDeleteDialog.qml diff --git a/CMakeLists.txt b/CMakeLists.txt index af50aff8..54dda226 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -766,6 +766,7 @@ set(QML_SOURCES resources/qml/dialogs/EventExpirationDialog.qml resources/qml/dialogs/ImageOverlay.qml resources/qml/dialogs/ImagePackEditorDialog.qml + resources/qml/dialogs/ImagePackDeleteDialog.qml resources/qml/dialogs/ImagePackSettingsDialog.qml resources/qml/dialogs/InputDialog.qml resources/qml/dialogs/InviteDialog.qml diff --git a/resources/qml/dialogs/ImagePackDeleteDialog.qml b/resources/qml/dialogs/ImagePackDeleteDialog.qml new file mode 100644 index 00000000..b674de2b --- /dev/null +++ b/resources/qml/dialogs/ImagePackDeleteDialog.qml @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +import Qt.labs.platform 1.1 as P +import QtQuick +import im.nheko + +P.MessageDialog { + id: deleteStickerPackRoot + + property SingleImagePackModel imagePack + + text: "This will delete the sticker pack: " + imagePack.packname + informativeText: "Are you sure you wish to delete the Sticker pack?" + modality: Qt.ApplicationModal + flags: Qt.Tool | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint + buttons: P.MessageDialog.Yes | P.MessageDialog.No + + onAccepted: { + console.info("DELETE PACK: " + imagePack.packname); + imagePack.remove() + timelineRoot.destroyOnClose(dialog); + } +} From 2aefe78a63ef7cbb03f46e20273564c2c74f9464 Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Thu, 7 Dec 2023 01:00:06 +0100 Subject: [PATCH 3/8] Integrate ImagePackDeleteDialog in ImagePackSettingsDialog as delete confirmation --- .../qml/dialogs/ImagePackSettingsDialog.qml | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml index 9f807e65..12b4fd37 100644 --- a/resources/qml/dialogs/ImagePackSettingsDialog.qml +++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml @@ -32,7 +32,11 @@ ApplicationWindow { ImagePackEditorDialog { } + } + Component { + id: packDeleteDialog + ImagePackDeleteDialog {} } AdaptiveLayout { @@ -189,16 +193,30 @@ ApplicationWindow { } - Button { + RowLayout { Layout.alignment: Qt.AlignHCenter - text: qsTr("Edit") - enabled: currentPack.canEdit - onClicked: { - var dialog = packEditor.createObject(timelineRoot, { - "imagePack": currentPack - }); - dialog.show(); - timelineRoot.destroyOnClose(dialog); + + Button { + text: qsTr("Edit") + enabled: currentPack.canEdit + onClicked: { + var dialog = packEditor.createObject(timelineRoot, { + "imagePack": currentPack + }); + dialog.show(); + timelineRoot.destroyOnClose(dialog); + } + } + Button { + text: qsTr("Remove") + enabled: currentPack.canEdit + onClicked: { + var dialog = packDeleteDialog.createObject(timelineRoot, { + "imagePack": currentPack + }); + dialog.open(); + timelineRoot.destroyOnClose(packDeleteDialog); + } } } From adc7fb8655ee5dda2b22d6a010ca752149bf1254 Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Thu, 7 Dec 2023 02:08:28 +0100 Subject: [PATCH 4/8] remove unnecessary destryoOnClose --- resources/qml/dialogs/ImagePackSettingsDialog.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml index 12b4fd37..d2e58db6 100644 --- a/resources/qml/dialogs/ImagePackSettingsDialog.qml +++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml @@ -215,7 +215,6 @@ ApplicationWindow { "imagePack": currentPack }); dialog.open(); - timelineRoot.destroyOnClose(packDeleteDialog); } } } From b91c70a8eadca602e2920ab5158ae60497880bd1 Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Thu, 7 Dec 2023 15:48:24 +0100 Subject: [PATCH 5/8] Fix review issues --- resources/qml/dialogs/ImagePackDeleteDialog.qml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/resources/qml/dialogs/ImagePackDeleteDialog.qml b/resources/qml/dialogs/ImagePackDeleteDialog.qml index b674de2b..38d2ab98 100644 --- a/resources/qml/dialogs/ImagePackDeleteDialog.qml +++ b/resources/qml/dialogs/ImagePackDeleteDialog.qml @@ -11,14 +11,13 @@ P.MessageDialog { property SingleImagePackModel imagePack - text: "This will delete the sticker pack: " + imagePack.packname - informativeText: "Are you sure you wish to delete the Sticker pack?" + text: "Are you sure you wish to delete the sticker pack \"" + imagePack.packname + "\"?" modality: Qt.ApplicationModal flags: Qt.Tool | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint buttons: P.MessageDialog.Yes | P.MessageDialog.No onAccepted: { - console.info("DELETE PACK: " + imagePack.packname); + console.info("deleting image pack " + imagePack.packname); imagePack.remove() timelineRoot.destroyOnClose(dialog); } From c605fb6ca8a9338caeccceca8b40459fd07ba3ca Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Thu, 7 Dec 2023 15:56:18 +0100 Subject: [PATCH 6/8] make ImagePackDialog text translatable --- resources/qml/dialogs/ImagePackDeleteDialog.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/dialogs/ImagePackDeleteDialog.qml b/resources/qml/dialogs/ImagePackDeleteDialog.qml index 38d2ab98..7ac96b91 100644 --- a/resources/qml/dialogs/ImagePackDeleteDialog.qml +++ b/resources/qml/dialogs/ImagePackDeleteDialog.qml @@ -11,7 +11,7 @@ P.MessageDialog { property SingleImagePackModel imagePack - text: "Are you sure you wish to delete the sticker pack \"" + imagePack.packname + "\"?" + text: qsTr("Are you sure you wish to delete the sticker pack '%1'?").arg(imagePack.packname) modality: Qt.ApplicationModal flags: Qt.Tool | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint buttons: P.MessageDialog.Yes | P.MessageDialog.No From 31623000a8a7043697d4d1698004b8471b8c1ebc Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Tue, 19 Dec 2023 16:12:38 +0100 Subject: [PATCH 7/8] Implement account pack deletion --- src/SingleImagePackModel.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/SingleImagePackModel.cpp b/src/SingleImagePackModel.cpp index daec135f..95a863d3 100644 --- a/src/SingleImagePackModel.cpp +++ b/src/SingleImagePackModel.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -306,6 +307,20 @@ 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), From c254697eaaa411870d130b3ccba8989219ed2699 Mon Sep 17 00:00:00 2001 From: FallenValkyrie Date: Tue, 19 Dec 2023 16:20:29 +0100 Subject: [PATCH 8/8] move destroyOnClose into ImagePackSettingsDialog --- resources/qml/dialogs/ImagePackDeleteDialog.qml | 1 - resources/qml/dialogs/ImagePackSettingsDialog.qml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/dialogs/ImagePackDeleteDialog.qml b/resources/qml/dialogs/ImagePackDeleteDialog.qml index 7ac96b91..91407a9e 100644 --- a/resources/qml/dialogs/ImagePackDeleteDialog.qml +++ b/resources/qml/dialogs/ImagePackDeleteDialog.qml @@ -19,6 +19,5 @@ P.MessageDialog { onAccepted: { console.info("deleting image pack " + imagePack.packname); imagePack.remove() - timelineRoot.destroyOnClose(dialog); } } diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml index d2e58db6..69068405 100644 --- a/resources/qml/dialogs/ImagePackSettingsDialog.qml +++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml @@ -215,6 +215,7 @@ ApplicationWindow { "imagePack": currentPack }); dialog.open(); + timelineRoot.destroyOnClose(dialog); } } }