Block notifications until the image has been downloaded

This commit is contained in:
Loren Burkholder 2021-03-02 19:42:34 -05:00 committed by Nicolas Werner
parent 64dd10a6a0
commit 98b2fee71b
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9

View file

@ -22,9 +22,11 @@ NotificationsManager::cacheImage(const mtx::events::collections::TimelineEvents
QString path{QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/" +
filename};
bool downloadComplete = false;
http::client()->download(
url,
[&path, url, encryptionInfo](const std::string &data,
[&downloadComplete, &path, url, encryptionInfo](const std::string &data,
const std::string &,
const std::string &,
mtx::http::RequestErr err) {
@ -33,6 +35,9 @@ NotificationsManager::cacheImage(const mtx::events::collections::TimelineEvents
url,
err->matrix_error.error,
static_cast<int>(err->status_code));
// the image doesn't exist, so delete the path
path.clear();
downloadComplete = true;
return;
}
@ -44,8 +49,11 @@ NotificationsManager::cacheImage(const mtx::events::collections::TimelineEvents
QFile file{path};
if (!file.open(QIODevice::WriteOnly))
if (!file.open(QIODevice::WriteOnly)) {
path.clear();
downloadComplete = true;
return;
}
// delete any existing file content
file.resize(0);
@ -53,9 +61,9 @@ NotificationsManager::cacheImage(const mtx::events::collections::TimelineEvents
// resize the image
QImage img{utils::readImage(QByteArray{temp.data()})};
if (img.isNull())
{
if (img.isNull()) {
path.clear();
downloadComplete = true;
return;
}
@ -68,11 +76,15 @@ NotificationsManager::cacheImage(const mtx::events::collections::TimelineEvents
file.close();
downloadComplete = true;
return;
} catch (const std::exception &e) {
nhlog::ui()->warn("Error while caching file to: {}", e.what());
}
});
while (!downloadComplete)
continue;
return path.toHtmlEscaped();
}