NOISSUE less jumpy download progress bars and redirect URL fix
This commit is contained in:
parent
1be99b075a
commit
794102b32c
@ -106,6 +106,17 @@ void Download::executeTask()
|
|||||||
|
|
||||||
void Download::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
|
void Download::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
|
||||||
{
|
{
|
||||||
|
// FIXME: ignore unknown size. for now.
|
||||||
|
if(bytesTotal == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// FIXME: ignore redirects... for now.
|
||||||
|
auto redirectURL = getRedirect();
|
||||||
|
if(!redirectURL.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
m_progressTotal = bytesTotal;
|
m_progressTotal = bytesTotal;
|
||||||
m_progress = bytesReceived;
|
m_progress = bytesReceived;
|
||||||
emit progress(bytesReceived, bytesTotal);
|
emit progress(bytesReceived, bytesTotal);
|
||||||
@ -134,7 +145,7 @@ void Download::downloadError(QNetworkReply::NetworkError error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Download::handleRedirect()
|
QString Download::getRedirect()
|
||||||
{
|
{
|
||||||
QVariant redirect = m_reply->header(QNetworkRequest::LocationHeader);
|
QVariant redirect = m_reply->header(QNetworkRequest::LocationHeader);
|
||||||
QString redirectURL;
|
QString redirectURL;
|
||||||
@ -151,10 +162,15 @@ bool Download::handleRedirect()
|
|||||||
redirectURL = m_reply->url().scheme() + ":" + data;
|
redirectURL = m_reply->url().scheme() + ":" + data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return redirectURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Download::handleRedirect()
|
||||||
|
{
|
||||||
|
auto redirectURL = getRedirect();
|
||||||
if (!redirectURL.isEmpty())
|
if (!redirectURL.isEmpty())
|
||||||
{
|
{
|
||||||
m_url = QUrl(redirect.toString());
|
m_url = QUrl(redirectURL);
|
||||||
qDebug() << "Following redirect to " << m_url.toString();
|
|
||||||
start();
|
start();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,7 @@ public: /* methods */
|
|||||||
bool canAbort() const override;
|
bool canAbort() const override;
|
||||||
|
|
||||||
private: /* methods */
|
private: /* methods */
|
||||||
|
QString getRedirect();
|
||||||
bool handleRedirect();
|
bool handleRedirect();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
@ -69,14 +69,16 @@ void NetJob::partProgress(qint64 bytesReceived, qint64 bytesTotal)
|
|||||||
void NetJob::setPartProgress(int index, qint64 bytesReceived, qint64 bytesTotal)
|
void NetJob::setPartProgress(int index, qint64 bytesReceived, qint64 bytesTotal)
|
||||||
{
|
{
|
||||||
auto &slot = m_parts[index];
|
auto &slot = m_parts[index];
|
||||||
|
|
||||||
current_progress -= slot.current_progress;
|
|
||||||
slot.current_progress = bytesReceived;
|
slot.current_progress = bytesReceived;
|
||||||
current_progress += slot.current_progress;
|
|
||||||
|
|
||||||
total_progress -= slot.total_progress;
|
|
||||||
slot.total_progress = bytesTotal;
|
slot.total_progress = bytesTotal;
|
||||||
total_progress += slot.total_progress;
|
qint64 current_progress = m_done.count() * 100;
|
||||||
|
qint64 total_progress = m_parts.count() * 100;
|
||||||
|
for(auto iter = m_doing.begin(); iter != m_doing.end(); iter++)
|
||||||
|
{
|
||||||
|
auto &part = m_parts[*iter];
|
||||||
|
float percentage = (float(part.current_progress) / float(part.total_progress)) * 100.0f;
|
||||||
|
current_progress += (qint64) percentage;
|
||||||
|
}
|
||||||
setProgress(current_progress, total_progress);
|
setProgress(current_progress, total_progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,14 +198,8 @@ void NetJob::addNetAction(NetActionPtr action)
|
|||||||
}
|
}
|
||||||
m_parts.append(pi);
|
m_parts.append(pi);
|
||||||
|
|
||||||
total_progress += pi.total_progress;
|
|
||||||
current_progress += pi.current_progress;
|
|
||||||
|
|
||||||
// if this is already running, the action needs to be started right away!
|
|
||||||
if (isRunning())
|
if (isRunning())
|
||||||
{
|
{
|
||||||
setProgress(current_progress, total_progress);
|
m_todo.enqueue(m_parts.size() - 1);
|
||||||
connectAction(action.get());
|
|
||||||
action->start();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ private:
|
|||||||
QSet<int> m_doing;
|
QSet<int> m_doing;
|
||||||
QSet<int> m_done;
|
QSet<int> m_done;
|
||||||
QSet<int> m_failed;
|
QSet<int> m_failed;
|
||||||
qint64 current_progress = 0;
|
//qint64 current_progress = 0;
|
||||||
qint64 total_progress = 0;
|
//qint64 total_progress = 0;
|
||||||
bool m_aborted = false;
|
bool m_aborted = false;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user