comparison src/versiontester.cpp @ 663:f9b805d8cab4 qt5

build with qt5 (in branch currently)
author Chris Cannam
date Thu, 14 Mar 2013 16:43:30 +0000
parents ae67ea0af696
children
comparison
equal deleted inserted replaced
662:43c61fd6fea4 663:f9b805d8cab4
18 #include "versiontester.h" 18 #include "versiontester.h"
19 #include "debug.h" 19 #include "debug.h"
20 20
21 #include <iostream> 21 #include <iostream>
22 22
23 #include <QHttp> 23 #include <QNetworkAccessManager>
24
25 static QNetworkAccessManager nm;
24 26
25 VersionTester::VersionTester(QString hostname, QString versionFilePath, 27 VersionTester::VersionTester(QString hostname, QString versionFilePath,
26 QString myVersion) : 28 QString myVersion) :
27 m_httpFailed(false), 29 m_myVersion(myVersion),
28 m_myVersion(myVersion) 30 m_reply(0),
31 m_httpFailed(false)
29 { 32 {
30 QHttp *http = new QHttp(); 33 QUrl url(QString("http://%1/%2").arg(hostname).arg(versionFilePath));
31 connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), 34 std::cerr << "VersionTester: URL is " << url << std::endl;
32 this, SLOT(httpResponseHeaderReceived(const QHttpResponseHeader &))); 35 m_reply = nm.get(QNetworkRequest(url));
33 connect(http, SIGNAL(done(bool)), 36 connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),
34 this, SLOT(httpDone(bool))); 37 this, SLOT(error(QNetworkReply::NetworkError)));
35 http->setHost(hostname); 38 connect(m_reply, SIGNAL(finished()), this, SLOT(finished()));
36 http->get(versionFilePath);
37 } 39 }
38 40
39 VersionTester::~VersionTester() 41 VersionTester::~VersionTester()
40 { 42 {
43 if (m_reply) {
44 m_reply->abort();
45 m_reply->deleteLater();
46 }
41 } 47 }
42 48
43 bool 49 bool
44 VersionTester::isVersionNewerThan(QString a, QString b) 50 VersionTester::isVersionNewerThan(QString a, QString b)
45 { 51 {
64 } 70 }
65 return false; 71 return false;
66 } 72 }
67 73
68 void 74 void
69 VersionTester::httpResponseHeaderReceived(const QHttpResponseHeader &h) 75 VersionTester::error(QNetworkReply::NetworkError)
70 { 76 {
71 if (h.statusCode() / 100 != 2) m_httpFailed = true; 77 std::cerr << "VersionTester: error: " << m_reply->errorString() << std::endl;
78 m_httpFailed = true;
72 } 79 }
73 80
74 void 81 void
75 VersionTester::httpDone(bool error) 82 VersionTester::finished()
76 { 83 {
77 QHttp *http = const_cast<QHttp *>(dynamic_cast<const QHttp *>(sender())); 84 m_reply->deleteLater();
78 if (!http) return; 85 if (m_httpFailed) return;
79 http->deleteLater();
80 if (error || m_httpFailed) return;
81 86
82 QByteArray responseData = http->readAll(); 87 int status = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
88 if (status / 100 != 2) {
89 std::cerr << "VersionTester: error: http status = " << status << std::endl;
90 return;
91 }
92
93 QByteArray responseData = m_reply->readAll();
83 QString str = QString::fromUtf8(responseData.data()); 94 QString str = QString::fromUtf8(responseData.data());
84 QStringList lines = str.split('\n', QString::SkipEmptyParts); 95 QStringList lines = str.split('\n', QString::SkipEmptyParts);
85 if (lines.empty()) return; 96 if (lines.empty()) return;
86 97
87 QString latestVersion = lines[0]; 98 QString latestVersion = lines[0];
88 DEBUG << "Comparing current version \"" << m_myVersion 99 DEBUG << "Comparing current version \"" << m_myVersion
89 << "\" with latest version \"" << latestVersion 100 << "\" with latest version \"" << latestVersion
90 << "\"" << endl; 101 << "\"" << endl;
91 if (isVersionNewerThan(latestVersion, m_myVersion)) { 102 if (isVersionNewerThan(latestVersion, m_myVersion)) {
92 emit newerVersionAvailable(latestVersion); 103 emit newerVersionAvailable(latestVersion);
93 } 104 }
94 } 105 }
95 106
96