mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +03:00
Merge pull request #1630 from FallenValkyrie/allow_sticker_pack_removal
Allow sticker pack removal
This commit is contained in:
commit
8049297cd1
5 changed files with 85 additions and 21 deletions
|
@ -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
|
||||||
|
|
23
resources/qml/dialogs/ImagePackDeleteDialog.qml
Normal file
23
resources/qml/dialogs/ImagePackDeleteDialog.qml
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,7 +32,11 @@ ApplicationWindow {
|
||||||
|
|
||||||
ImagePackEditorDialog {
|
ImagePackEditorDialog {
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: packDeleteDialog
|
||||||
|
ImagePackDeleteDialog {}
|
||||||
}
|
}
|
||||||
|
|
||||||
AdaptiveLayout {
|
AdaptiveLayout {
|
||||||
|
@ -189,8 +193,10 @@ ApplicationWindow {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
RowLayout {
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
|
||||||
|
Button {
|
||||||
text: qsTr("Edit")
|
text: qsTr("Edit")
|
||||||
enabled: currentPack.canEdit
|
enabled: currentPack.canEdit
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
@ -201,6 +207,18 @@ ApplicationWindow {
|
||||||
timelineRoot.destroyOnClose(dialog);
|
timelineRoot.destroyOnClose(dialog);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Button {
|
||||||
|
text: qsTr("Remove")
|
||||||
|
enabled: currentPack.canEdit
|
||||||
|
onClicked: {
|
||||||
|
var dialog = packDeleteDialog.createObject(timelineRoot, {
|
||||||
|
"imagePack": currentPack
|
||||||
|
});
|
||||||
|
dialog.open();
|
||||||
|
timelineRoot.destroyOnClose(dialog);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GridView {
|
GridView {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue