mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 12:38:48 +03:00
Don't send thumbnails that are larger than the original
- Set PNG compression to maximum - Don't upload thumbnail if it is not at least 10% smaller than the original
This commit is contained in:
parent
c59c8b6f3c
commit
179ae53b40
1 changed files with 39 additions and 31 deletions
|
@ -896,39 +896,47 @@ MediaUpload::startUpload()
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
QBuffer buffer(&ba);
|
QBuffer buffer(&ba);
|
||||||
buffer.open(QIODevice::WriteOnly);
|
buffer.open(QIODevice::WriteOnly);
|
||||||
thumbnail_.save(&buffer, "PNG");
|
thumbnail_.save(&buffer, "PNG", 0);
|
||||||
auto payload = std::string(ba.data(), ba.size());
|
if (ba.size() >= (data.size() - data.size() / 10)) {
|
||||||
if (encrypt_) {
|
nhlog::ui()->info(
|
||||||
mtx::crypto::BinaryBuf buf;
|
"Thumbnail is not a lot smaller than original image, not uploading it");
|
||||||
std::tie(buf, thumbnailEncryptedFile) = mtx::crypto::encrypt_file(std::move(payload));
|
nhlog::ui()->debug(
|
||||||
payload = mtx::crypto::to_string(buf);
|
"\n Image size: {:9d}\nThumbnail size: {:9d}", data.size(), ba.size());
|
||||||
}
|
} else {
|
||||||
thumbnailSize_ = payload.size();
|
auto payload = std::string(ba.data(), ba.size());
|
||||||
|
if (encrypt_) {
|
||||||
|
mtx::crypto::BinaryBuf buf;
|
||||||
|
std::tie(buf, thumbnailEncryptedFile) =
|
||||||
|
mtx::crypto::encrypt_file(std::move(payload));
|
||||||
|
payload = mtx::crypto::to_string(buf);
|
||||||
|
}
|
||||||
|
thumbnailSize_ = payload.size();
|
||||||
|
|
||||||
|
http::client()->upload(
|
||||||
|
payload,
|
||||||
|
encryptedFile ? "application/octet-stream" : "image/png",
|
||||||
|
"",
|
||||||
|
[this](const mtx::responses::ContentURI &res, mtx::http::RequestErr err) mutable {
|
||||||
|
if (err) {
|
||||||
|
emit ChatPage::instance()->showNotification(
|
||||||
|
tr("Failed to upload media. Please try again."));
|
||||||
|
nhlog::net()->warn("failed to upload media: {} {} ({})",
|
||||||
|
err->matrix_error.error,
|
||||||
|
to_string(err->matrix_error.errcode),
|
||||||
|
static_cast<int>(err->status_code));
|
||||||
|
thumbnail_ = QImage();
|
||||||
|
startUpload();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
thumbnailUrl_ = QString::fromStdString(res.content_uri);
|
||||||
|
if (thumbnailEncryptedFile)
|
||||||
|
thumbnailEncryptedFile->url = res.content_uri;
|
||||||
|
|
||||||
http::client()->upload(
|
|
||||||
payload,
|
|
||||||
encryptedFile ? "application/octet-stream" : "image/png",
|
|
||||||
"",
|
|
||||||
[this](const mtx::responses::ContentURI &res, mtx::http::RequestErr err) mutable {
|
|
||||||
if (err) {
|
|
||||||
emit ChatPage::instance()->showNotification(
|
|
||||||
tr("Failed to upload media. Please try again."));
|
|
||||||
nhlog::net()->warn("failed to upload media: {} {} ({})",
|
|
||||||
err->matrix_error.error,
|
|
||||||
to_string(err->matrix_error.errcode),
|
|
||||||
static_cast<int>(err->status_code));
|
|
||||||
thumbnail_ = QImage();
|
|
||||||
startUpload();
|
startUpload();
|
||||||
return;
|
});
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
thumbnailUrl_ = QString::fromStdString(res.content_uri);
|
|
||||||
if (thumbnailEncryptedFile)
|
|
||||||
thumbnailEncryptedFile->url = res.content_uri;
|
|
||||||
|
|
||||||
startUpload();
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto payload = std::string(data.data(), data.size());
|
auto payload = std::string(data.data(), data.size());
|
||||||
|
|
Loading…
Reference in a new issue