summary refs log tree commit diff
path: root/src/SingleImagePackModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SingleImagePackModel.cpp')
-rw-r--r--src/SingleImagePackModel.cpp44
1 files changed, 44 insertions, 0 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)); }