3 #include "appcastparser.h"
4 #include "defaultupdater.h"
12 const QString updateCheckKey = "updateCheck";
17 Checker::Checker(DefaultUpdater *updater, QObject *parent) : QObject(parent), updater(updater) {}
19 void Checker::check() {
24 HttpReply *reply = Http::instance().get(updater->getManifestUrl());
25 connect(reply, &HttpReply::finished, this, [this](const HttpReply &reply) {
26 if (reply.isSuccessful()) {
27 invokeParser(reply.body());
29 qWarning() << "Update check failed" << reply.statusCode() << reply.reasonPhrase();
31 errorMessage = reply.reasonPhrase();
36 QNetworkAccessManager *manager = new QNetworkAccessManager(this);
37 QNetworkRequest request;
38 request.setUrl(updater->getManifestUrl());
39 request.setRawHeader("User-Agent",
40 (updater->getAppName() + ' ' + updater->getLocalVersion()).toUtf8());
41 connect(manager, &QNetworkAccessManager::finished, this, [this](QNetworkReply *reply) {
42 int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
43 if (status >= 200 && status < 300) {
44 invokeParser(reply->readAll());
46 QString msg = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
47 qWarning() << "Update check failed" << status << msg;
54 manager->get(request);
56 } // namespace updater
58 qint64 Checker::getLastCheck() {
60 return settings.value(updateCheckKey).toInt();
63 void Checker::invokeParser(const QByteArray &bytes) {
64 auto parser = updater->getParser();
66 AppcastParser defaultParser;
67 defaultParser.setUpdater(updater);
68 defaultParser.parse(bytes);
73 bool versionsDontMatch =
74 !updater->getVersion().isEmpty() && updater->getVersion() != updater->getLocalVersion();
75 if (versionsDontMatch && updater->getStatus() != Updater::Status::UpdateDownloaded) {
76 if (updater->getAutomaticDownload()) {
77 updater->downloadUpdate();
79 updater->setStatus(Updater::Status::UpdateAvailable);
84 settings.setValue(updateCheckKey, QDateTime::currentSecsSinceEpoch());
88 } // namespace updater