Mercurial > hg > svapp
comparison framework/VersionTester.cpp @ 290:a3fcaad1a269 tonioni
Merge from the default branch
author | Chris Cannam |
---|---|
date | Fri, 12 Jul 2013 13:26:41 +0100 |
parents | 8cb01cd2441d |
children | 068235cf5bf7 |
comparison
equal
deleted
inserted
replaced
281:cba1e2a3d14b | 290:a3fcaad1a269 |
---|---|
21 #include "VersionTester.h" | 21 #include "VersionTester.h" |
22 #include "base/Debug.h" | 22 #include "base/Debug.h" |
23 | 23 |
24 #include <iostream> | 24 #include <iostream> |
25 | 25 |
26 #include <QHttp> | 26 #include <QNetworkAccessManager> |
27 | |
27 | 28 |
28 VersionTester::VersionTester(QString hostname, QString versionFilePath, | 29 VersionTester::VersionTester(QString hostname, QString versionFilePath, |
29 QString myVersion) : | 30 QString myVersion) : |
31 m_myVersion(myVersion), | |
32 m_reply(0), | |
30 m_httpFailed(false), | 33 m_httpFailed(false), |
31 m_myVersion(myVersion) | 34 m_nm(new QNetworkAccessManager) |
32 { | 35 { |
33 QHttp *http = new QHttp(); | 36 QUrl url(QString("http://%1/%2").arg(hostname).arg(versionFilePath)); |
34 connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), | 37 std::cerr << "VersionTester: URL is " << url << std::endl; |
35 this, SLOT(httpResponseHeaderReceived(const QHttpResponseHeader &))); | 38 m_reply = m_nm->get(QNetworkRequest(url)); |
36 connect(http, SIGNAL(done(bool)), | 39 connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), |
37 this, SLOT(httpDone(bool))); | 40 this, SLOT(error(QNetworkReply::NetworkError))); |
38 http->setHost(hostname); | 41 connect(m_reply, SIGNAL(finished()), this, SLOT(finished())); |
39 http->get(versionFilePath); | |
40 } | 42 } |
41 | 43 |
42 VersionTester::~VersionTester() | 44 VersionTester::~VersionTester() |
43 { | 45 { |
46 if (m_reply) { | |
47 m_reply->abort(); | |
48 m_reply->deleteLater(); | |
49 } | |
50 delete m_nm; | |
44 } | 51 } |
45 | 52 |
46 bool | 53 bool |
47 VersionTester::isVersionNewerThan(QString a, QString b) | 54 VersionTester::isVersionNewerThan(QString a, QString b) |
48 { | 55 { |
67 } | 74 } |
68 return false; | 75 return false; |
69 } | 76 } |
70 | 77 |
71 void | 78 void |
72 VersionTester::httpResponseHeaderReceived(const QHttpResponseHeader &h) | 79 VersionTester::error(QNetworkReply::NetworkError) |
73 { | 80 { |
74 if (h.statusCode() / 100 != 2) m_httpFailed = true; | 81 std::cerr << "VersionTester: error: " << m_reply->errorString() << std::endl; |
82 m_httpFailed = true; | |
75 } | 83 } |
76 | 84 |
77 void | 85 void |
78 VersionTester::httpDone(bool error) | 86 VersionTester::finished() |
79 { | 87 { |
80 QHttp *http = const_cast<QHttp *>(dynamic_cast<const QHttp *>(sender())); | 88 QNetworkReply *r = m_reply; |
81 if (!http) return; | 89 m_reply = 0; |
82 http->deleteLater(); | |
83 if (error || m_httpFailed) return; | |
84 | 90 |
85 QByteArray responseData = http->readAll(); | 91 r->deleteLater(); |
92 if (m_httpFailed) return; | |
93 | |
94 int status = r->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); | |
95 if (status / 100 != 2) { | |
96 std::cerr << "VersionTester: error: http status = " << status << std::endl; | |
97 return; | |
98 } | |
99 | |
100 QByteArray responseData = r->readAll(); | |
86 QString str = QString::fromUtf8(responseData.data()); | 101 QString str = QString::fromUtf8(responseData.data()); |
87 QStringList lines = str.split('\n', QString::SkipEmptyParts); | 102 QStringList lines = str.split('\n', QString::SkipEmptyParts); |
88 if (lines.empty()) return; | 103 if (lines.empty()) return; |
89 | 104 |
90 QString latestVersion = lines[0]; | 105 QString latestVersion = lines[0]; |