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];