Mercurial > hg > svcore
changeset 915:d75c9e0d5e7e tonioni
Merge from default branch
author | Chris Cannam |
---|---|
date | Thu, 29 May 2014 16:27:52 +0100 |
parents | 515c654770ca (current diff) b9d7352336ce (diff) |
children | c0c679c3b5b9 e88a15c25a4a |
files | |
diffstat | 1 files changed, 23 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/data/fileio/FileSource.cpp Thu May 22 17:49:58 2014 +0100 +++ b/data/fileio/FileSource.cpp Thu May 29 16:27:52 2014 +0100 @@ -485,7 +485,10 @@ if (m_reply) { QNetworkReply *r = m_reply; m_reply = 0; - r->abort(); + // Can only call abort() when there are no errors. + if (r->error() == QNetworkReply::NoError) { + r->abort(); + } r->deleteLater(); } if (m_localFile) { @@ -518,11 +521,14 @@ { waitForStatus(); bool available = true; - if (!m_ok) available = false; - else available = (m_lastStatus / 100 == 2); + if (!m_ok) { + available = false; + } else { + // http 2xx status codes mean success + available = (m_lastStatus / 100 == 2); + } #ifdef DEBUG_FILE_SOURCE - cerr << "FileSource::isAvailable: " << (available ? "yes" : "no") - << endl; + cerr << "FileSource::isAvailable: " << (available ? "yes" : "no") << endl; #endif return available; } @@ -634,9 +640,12 @@ return; } + // Handle http transfer status codes. + int status = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + // If this is a redirection (3xx) code, do the redirect if (status / 100 == 3) { QString location = m_reply->header (QNetworkRequest::LocationHeader).toString(); @@ -665,6 +674,8 @@ } m_lastStatus = status; + + // 400 and up are failures, get the error string if (m_lastStatus / 100 >= 4) { m_errorString = QString("%1 %2") .arg(status) @@ -713,6 +724,13 @@ if (m_done) return; + QString scheme = m_url.scheme().toLower(); + // For ftp transfers, replyFinished() will be called on success. + // metaDataChanged() is never called for ftp transfers. + if (scheme == "ftp") { + m_lastStatus = 200; // http ok + } + bool error = (m_lastStatus / 100 >= 4); cleanup();