Allow creating new packs

pull/669/head
Nicolas Werner 3 years ago
parent 16d0190f4e
commit e5a6b2b6ef
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
  1. 8
      resources/qml/dialogs/ImagePackEditorDialog.qml
  2. 28
      resources/qml/dialogs/ImagePackSettingsDialog.qml
  3. 2
      src/Cache.cpp
  4. 18
      src/ImagePackListModel.cpp
  5. 4
      src/ImagePackListModel.h
  6. 4
      src/SingleImagePackModel.cpp

@ -186,7 +186,7 @@ ApplicationWindow {
ToggleButton {
checked: imagePack.isEmotePack
onToggled: imagePack.isEmotePack = checked
onClicked: imagePack.isEmotePack = checked
Layout.alignment: Qt.AlignRight
}
@ -196,7 +196,7 @@ ApplicationWindow {
ToggleButton {
checked: imagePack.isStickerPack
onToggled: imagePack.isStickerPack = checked
onClicked: imagePack.isStickerPack = checked
Layout.alignment: Qt.AlignRight
}
@ -251,7 +251,7 @@ ApplicationWindow {
ToggleButton {
checked: imagePack.data(imagePack.index(currentImageIndex, 0), SingleImagePackModel.IsEmote)
onToggled: imagePack.setData(imagePack.index(currentImageIndex, 0), text, SingleImagePackModel.IsEmote)
onClicked: imagePack.setData(imagePack.index(currentImageIndex, 0), checked, SingleImagePackModel.IsEmote)
Layout.alignment: Qt.AlignRight
}
@ -261,7 +261,7 @@ ApplicationWindow {
ToggleButton {
checked: imagePack.data(imagePack.index(currentImageIndex, 0), SingleImagePackModel.IsSticker)
onToggled: imagePack.setData(imagePack.index(currentImageIndex, 0), text, SingleImagePackModel.IsSticker)
onClicked: imagePack.setData(imagePack.index(currentImageIndex, 0), checked, SingleImagePackModel.IsSticker)
Layout.alignment: Qt.AlignRight
}

@ -62,6 +62,34 @@ ApplicationWindow {
enabled: !Settings.mobileMode
}
footer: ColumnLayout {
Button {
palette: Nheko.colors
onClicked: {
var dialog = packEditor.createObject(timelineRoot, {
"imagePack": packlist.newPack(false)
});
dialog.show();
}
width: packlist.width
visible: !packlist.containsAccountPack
text: qsTr("Create account pack")
}
Button {
palette: Nheko.colors
onClicked: {
var dialog = packEditor.createObject(timelineRoot, {
"imagePack": packlist.newPack(true)
});
dialog.show();
}
width: packlist.width
text: qsTr("New room pack")
}
}
delegate: AvatarListTile {
id: packItem

@ -3401,7 +3401,7 @@ Cache::getImagePacks(const std::string &room_id, std::optional<bool> stickers)
info.pack.pack = pack.pack;
for (const auto &img : pack.images) {
if (img.second.overrides_usage() &&
if (stickers.has_value() && img.second.overrides_usage() &&
(stickers ? !img.second.is_sticker() : !img.second.is_emoji()))
continue;

@ -74,3 +74,21 @@ ImagePackListModel::packAt(int row)
QQmlEngine::setObjectOwnership(e, QQmlEngine::CppOwnership);
return e;
}
SingleImagePackModel *
ImagePackListModel::newPack(bool inRoom)
{
ImagePackInfo info{};
if (inRoom)
info.source_room = room_id;
return new SingleImagePackModel(info);
}
bool
ImagePackListModel::containsAccountPack() const
{
for (const auto &p : packs)
if (p->roomid().isEmpty())
return true;
return false;
}

@ -12,6 +12,7 @@ class SingleImagePackModel;
class ImagePackListModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(bool containsAccountPack READ containsAccountPack CONSTANT)
public:
enum Roles
{
@ -29,6 +30,9 @@ public:
QVariant data(const QModelIndex &index, int role) const override;
Q_INVOKABLE SingleImagePackModel *packAt(int row);
Q_INVOKABLE SingleImagePackModel *newPack(bool inRoom);
bool containsAccountPack() const;
private:
std::string room_id;

@ -15,7 +15,7 @@
#include "timeline/Permissions.h"
#include "timeline/TimelineModel.h"
Q_DECLARE_METATYPE(mtx::common::ImageInfo);
Q_DECLARE_METATYPE(mtx::common::ImageInfo)
SingleImagePackModel::SingleImagePackModel(ImagePackInfo pack_, QObject *parent)
: QAbstractListModel(parent)
@ -285,6 +285,8 @@ SingleImagePackModel::save()
ChatPage::instance()->showNotification(
tr("Failed to update image pack: {}")
.arg(QString::fromStdString(e->matrix_error.error)));
nhlog::net()->info("Uploaded image pack: {}", statekey_);
});
}
}

Loading…
Cancel
Save