Fix issues with cached images being accessed while the download is still running
This commit is contained in:
parent
044dbf5f23
commit
de954f644a
@ -109,7 +109,7 @@ void Fetcher::fetch(const QStringList &urls)
|
|||||||
qCDebug(kastsFetcher) << "end of Fetcher::fetch";
|
qCDebug(kastsFetcher) << "end of Fetcher::fetch";
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Fetcher::image(const QString &url) const
|
QString Fetcher::image(const QString &url)
|
||||||
{
|
{
|
||||||
if (url.isEmpty()) {
|
if (url.isEmpty()) {
|
||||||
return QLatin1String("no-image");
|
return QLatin1String("no-image");
|
||||||
@ -123,18 +123,35 @@ QString Fetcher::image(const QString &url) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// avoid restarting an image download if it's already running
|
||||||
|
if (m_ongoingImageDownloads.contains(url)) {
|
||||||
|
return QLatin1String("fetching");
|
||||||
|
}
|
||||||
|
|
||||||
// if image has not yet been cached, then check for network connectivity if
|
// if image has not yet been cached, then check for network connectivity if
|
||||||
// possible; and download the image
|
// possible; and download the image
|
||||||
if (canCheckNetworkStatus()) {
|
if (canCheckNetworkStatus()) {
|
||||||
if (networkConnected() && (!isMeteredConnection() || SettingsManager::self()->allowMeteredImageDownloads())) {
|
if (!networkConnected() || (isMeteredConnection() && !SettingsManager::self()->allowMeteredImageDownloads())) {
|
||||||
download(url, path);
|
|
||||||
} else {
|
|
||||||
return QLatin1String("no-image");
|
return QLatin1String("no-image");
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
download(url, path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_ongoingImageDownloads.insert(url);
|
||||||
|
QNetworkRequest request((QUrl(url)));
|
||||||
|
request.setTransferTimeout();
|
||||||
|
QNetworkReply *reply = get(request);
|
||||||
|
connect(reply, &QNetworkReply::finished, this, [=]() {
|
||||||
|
if (reply->isOpen() && !reply->error()) {
|
||||||
|
QByteArray data = reply->readAll();
|
||||||
|
QFile file(path);
|
||||||
|
file.open(QIODevice::WriteOnly);
|
||||||
|
file.write(data);
|
||||||
|
file.close();
|
||||||
|
Q_EMIT downloadFinished(url);
|
||||||
|
}
|
||||||
|
m_ongoingImageDownloads.remove(url);
|
||||||
|
reply->deleteLater();
|
||||||
|
});
|
||||||
return QLatin1String("fetching");
|
return QLatin1String("fetching");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
Q_INVOKABLE void fetch(const QString &url);
|
Q_INVOKABLE void fetch(const QString &url);
|
||||||
Q_INVOKABLE void fetch(const QStringList &urls);
|
Q_INVOKABLE void fetch(const QStringList &urls);
|
||||||
Q_INVOKABLE void fetchAll();
|
Q_INVOKABLE void fetchAll();
|
||||||
Q_INVOKABLE QString image(const QString &url) const;
|
Q_INVOKABLE QString image(const QString &url);
|
||||||
Q_INVOKABLE QNetworkReply *download(const QString &url, const QString &fileName) const;
|
Q_INVOKABLE QNetworkReply *download(const QString &url, const QString &fileName) const;
|
||||||
|
|
||||||
QNetworkReply *get(QNetworkRequest &request) const;
|
QNetworkReply *get(QNetworkRequest &request) const;
|
||||||
@ -74,6 +74,8 @@ private:
|
|||||||
QNetworkReply *head(QNetworkRequest &request) const;
|
QNetworkReply *head(QNetworkRequest &request) const;
|
||||||
void setHeader(QNetworkRequest &request) const;
|
void setHeader(QNetworkRequest &request) const;
|
||||||
|
|
||||||
|
QSet<QString> m_ongoingImageDownloads;
|
||||||
|
|
||||||
QNetworkAccessManager *manager;
|
QNetworkAccessManager *manager;
|
||||||
int m_updateProgress;
|
int m_updateProgress;
|
||||||
int m_updateTotal;
|
int m_updateTotal;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user