Merge pull request #1630 from FallenValkyrie/allow_sticker_pack_removal

Allow sticker pack removal
This commit is contained in:
DeepBlueV7.X 2023-12-22 01:00:26 +01:00 committed by GitHub
commit 8049297cd1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 85 additions and 21 deletions

View file

@ -766,6 +766,7 @@ set(QML_SOURCES
resources/qml/dialogs/EventExpirationDialog.qml resources/qml/dialogs/EventExpirationDialog.qml
resources/qml/dialogs/ImageOverlay.qml resources/qml/dialogs/ImageOverlay.qml
resources/qml/dialogs/ImagePackEditorDialog.qml resources/qml/dialogs/ImagePackEditorDialog.qml
resources/qml/dialogs/ImagePackDeleteDialog.qml
resources/qml/dialogs/ImagePackSettingsDialog.qml resources/qml/dialogs/ImagePackSettingsDialog.qml
resources/qml/dialogs/InputDialog.qml resources/qml/dialogs/InputDialog.qml
resources/qml/dialogs/InviteDialog.qml resources/qml/dialogs/InviteDialog.qml

View file

@ -0,0 +1,23 @@
// 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: 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
onAccepted: {
console.info("deleting image pack " + imagePack.packname);
imagePack.remove()
}
}

View file

@ -32,7 +32,11 @@ ApplicationWindow {
ImagePackEditorDialog { ImagePackEditorDialog {
} }
}
Component {
id: packDeleteDialog
ImagePackDeleteDialog {}
} }
AdaptiveLayout { AdaptiveLayout {
@ -189,16 +193,30 @@ ApplicationWindow {
} }
Button { RowLayout {
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
text: qsTr("Edit")
enabled: currentPack.canEdit Button {
onClicked: { text: qsTr("Edit")
var dialog = packEditor.createObject(timelineRoot, { enabled: currentPack.canEdit
"imagePack": currentPack onClicked: {
}); var dialog = packEditor.createObject(timelineRoot, {
dialog.show(); "imagePack": currentPack
timelineRoot.destroyOnClose(dialog); });
dialog.show();
timelineRoot.destroyOnClose(dialog);
}
}
Button {
text: qsTr("Remove")
enabled: currentPack.canEdit
onClicked: {
var dialog = packDeleteDialog.createObject(timelineRoot, {
"imagePack": currentPack
});
dialog.open();
timelineRoot.destroyOnClose(dialog);
}
} }
} }

View file

@ -8,6 +8,7 @@
#include <QFileInfo> #include <QFileInfo>
#include <QMimeDatabase> #include <QMimeDatabase>
#include <mtx/events/mscs/image_packs.hpp>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include <unordered_set> #include <unordered_set>
@ -285,18 +286,7 @@ SingleImagePackModel::save()
}); });
} else { } else {
if (old_statekey_ != statekey_) { if (old_statekey_ != statekey_) {
http::client()->send_state_event( this->remove();
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_;
} }
http::client()->send_state_event( http::client()->send_state_event(
@ -314,6 +304,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 void
SingleImagePackModel::addStickers(QList<QUrl> files) SingleImagePackModel::addStickers(QList<QUrl> files)
{ {

View file

@ -70,6 +70,7 @@ public:
void setIsEmotePack(bool val); void setIsEmotePack(bool val);
Q_INVOKABLE void save(); Q_INVOKABLE void save();
Q_INVOKABLE void remove();
Q_INVOKABLE void addStickers(QList<QUrl> files); Q_INVOKABLE void addStickers(QList<QUrl> files);
Q_INVOKABLE void remove(int index); Q_INVOKABLE void remove(int index);
Q_INVOKABLE void setAvatar(QUrl file); Q_INVOKABLE void setAvatar(QUrl file);