summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-12-13 06:00:32 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2021-12-13 06:00:32 +0100
commitbb600dd3d187bfc94ac30ad7ddd5d85507a781b1 (patch)
tree71138f524ff88f9b5d5807a72fcecf4793b2603a /src
parentAdd recently used reactions (diff)
downloadnheko-bb600dd3d187bfc94ac30ad7ddd5d85507a781b1.tar.xz
Show some avatar for image packs
Diffstat (limited to 'src')
-rw-r--r--src/SingleImagePackModel.cpp44
-rw-r--r--src/SingleImagePackModel.h4
2 files changed, 47 insertions, 1 deletions
diff --git a/src/SingleImagePackModel.cpp b/src/SingleImagePackModel.cpp

index 978a0480..2c1b833a 100644 --- a/src/SingleImagePackModel.cpp +++ b/src/SingleImagePackModel.cpp
@@ -33,6 +33,7 @@ SingleImagePackModel::SingleImagePackModel(ImagePackInfo pack_, QObject *parent) shortcodes.push_back(e.first); connect(this, &SingleImagePackModel::addImage, this, &SingleImagePackModel::addImageCb); + connect(this, &SingleImagePackModel::avatarUploaded, this, &SingleImagePackModel::setAvatarUrl); } int @@ -215,6 +216,17 @@ SingleImagePackModel::setAvatarUrl(QString val) } } +QString +SingleImagePackModel::avatarUrl() const +{ + if (!pack.pack->avatar_url.empty()) + return QString::fromStdString(pack.pack->avatar_url); + else if (!pack.images.empty()) + return QString::fromStdString(pack.images.begin()->second.url); + else + return ""; +} + void SingleImagePackModel::setStatekey(QString val) { @@ -332,6 +344,35 @@ SingleImagePackModel::addStickers(QList<QUrl> files) } void +SingleImagePackModel::setAvatar(QUrl f) +{ + auto file = QFile(f.toLocalFile()); + if (!file.open(QFile::ReadOnly)) { + ChatPage::instance()->showNotification(tr("Failed to open image: %1").arg(f.toLocalFile())); + return; + } + + auto bytes = file.readAll(); + auto img = utils::readImage(bytes); + + auto filename = f.fileName().toStdString(); + http::client()->upload( + bytes.toStdString(), + QMimeDatabase().mimeTypeForFile(f.toLocalFile()).name().toStdString(), + filename, + [this, filename](const mtx::responses::ContentURI &uri, mtx::http::RequestErr e) { + if (e) { + ChatPage::instance()->showNotification( + tr("Failed to upload image: %1") + .arg(QString::fromStdString(e->matrix_error.error))); + return; + } + + emit avatarUploaded(QString::fromStdString(uri.content_uri)); + }); +} + +void SingleImagePackModel::remove(int idx) { if (idx < (int)shortcodes.size() && idx >= 0) { @@ -356,4 +397,7 @@ SingleImagePackModel::addImageCb(std::string uri, std::string filename, mtx::com shortcodes.push_back(filename); endInsertRows(); + + if (this->pack.pack->avatar_url.empty()) + this->setAvatarUrl(QString::fromStdString(uri)); } diff --git a/src/SingleImagePackModel.h b/src/SingleImagePackModel.h
index cd8b0547..f658a8e5 100644 --- a/src/SingleImagePackModel.h +++ b/src/SingleImagePackModel.h
@@ -49,7 +49,7 @@ public: QString statekey() const { return QString::fromStdString(statekey_); } QString packname() const { return QString::fromStdString(pack.pack->display_name); } QString attribution() const { return QString::fromStdString(pack.pack->attribution); } - QString avatarUrl() const { return QString::fromStdString(pack.pack->avatar_url); } + QString avatarUrl() const; bool isStickerPack() const { return pack.pack->is_sticker(); } bool isEmotePack() const { return pack.pack->is_emoji(); } @@ -67,6 +67,7 @@ public: Q_INVOKABLE void save(); Q_INVOKABLE void addStickers(QList<QUrl> files); Q_INVOKABLE void remove(int index); + Q_INVOKABLE void setAvatar(QUrl file); signals: void globallyEnabledChanged(); @@ -78,6 +79,7 @@ signals: void isStickerPackChanged(); void addImage(std::string uri, std::string filename, mtx::common::ImageInfo info); + void avatarUploaded(QString uri); private slots: void addImageCb(std::string uri, std::string filename, mtx::common::ImageInfo info);