-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdatechecker.cpp
More file actions
80 lines (64 loc) · 2.35 KB
/
updatechecker.cpp
File metadata and controls
80 lines (64 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "updatechecker.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
UpdateChecker::UpdateChecker(QObject *parent)
: QObject(parent),
m_networkManager(new QNetworkAccessManager(this))
{}
UpdateChecker::~UpdateChecker()
{
if (m_networkManager) {
m_networkManager->deleteLater();
m_networkManager = nullptr;
}
}
void UpdateChecker::checkForUpdates(const QString ¤tVersion)
{
m_currentVersion = currentVersion;
qDebug() << "Checking for updates. Current version:" << currentVersion;
QNetworkRequest request((QUrl(UPDATE_CHECK_URL)));
request.setHeader(QNetworkRequest::UserAgentHeader, "PhoneAudioLink/" + currentVersion);
request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
QNetworkReply *reply = m_networkManager->get(request);
connect(reply, &QNetworkReply::finished, this, &UpdateChecker::onVersionCheckFinished);
}
void UpdateChecker::onVersionCheckFinished()
{
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
if (!reply) {
return;
}
if (reply->error() != QNetworkReply::NoError) {
qWarning() << "Update check failed:" << reply->errorString();
emit checkFailed(reply->errorString());
return;
}
QByteArray data = reply->readAll();
reply->deleteLater();
QJsonDocument doc = QJsonDocument::fromJson(data);
if (doc.isNull() || !doc.isObject()) {
qWarning() << "Invalid JSON response from update server";
emit checkFailed("Invalid response from server");
return;
}
QJsonObject obj = doc.object();
QString remoteVersion = obj["version"].toString();
QString releaseNotesUrl = obj["releaseNotesUrl"].toString();
if (remoteVersion.isEmpty()) {
qWarning() << "No version found in response";
emit checkFailed("Invalid version data");
return;
}
qDebug() << "Remote version:" << remoteVersion;
// Compare versions
QVersionNumber current = QVersionNumber::fromString(m_currentVersion);
QVersionNumber remote = QVersionNumber::fromString(remoteVersion);
if (remote > current) {
qDebug() << "Update available:" << remoteVersion;
emit updateAvailable(remoteVersion, releaseNotesUrl);
} else {
qDebug() << "No update available";
emit noUpdateAvailable();
}
}