comparison src/versiontester.cpp @ 672:88fa1544b407

Merge from branch qt5. There's much more to be done before we can make another release, but clearly it's going to be done using qt5
author Chris Cannam
date Wed, 05 Dec 2018 09:44:10 +0000
parents f9b805d8cab4
children
comparison
equal deleted inserted replaced
665:88061103b878 672:88fa1544b407
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