-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdatechecker.cpp
More file actions
65 lines (55 loc) · 2 KB
/
Copy pathupdatechecker.cpp
File metadata and controls
65 lines (55 loc) · 2 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
#include "updatechecker.h"
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
UpdateChecker::UpdateChecker(QObject *parent) : QObject(parent)
{
m_manager = new QNetworkAccessManager(this);
}
void UpdateChecker::checkForUpdates()
{
qDebug() << "Calling function in check updater class";
// Remplace par l'URL raw de ton fichier version.json
QUrl url("https://raw.githubusercontent.com/FranciumSoftware/MusStream/refs/heads/develop/version.json");
QNetworkReply *reply = m_manager->get(QNetworkRequest(url));
connect(reply, &QNetworkReply::finished, this, [this, reply]() {
reply->deleteLater();
if (reply->error() != QNetworkReply::NoError) {
emit checkFailed(reply->errorString());
return;
}
QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
if (doc.isNull() || !doc.isObject()) {
emit checkFailed("Réponse invalide");
return;
}
QJsonObject obj = doc.object();
QString remoteVersion = obj["version"].toString();
QString downloadUrl = obj["download_url"].toString();
QString changelog = obj["changelog"].toString();
if (isNewerVersion(remoteVersion, CURRENT_VERSION)) {
qDebug() << "An update is avalaible !";
emit updateAvailable(remoteVersion, downloadUrl, changelog);
} else {
emit noUpdateAvailable();
}
});
}
// Compare "MAJOR.MINOR.PATCH" — retourne true si remote > local
bool UpdateChecker::isNewerVersion(const QString &remote, const QString &local)
{
auto split = [](const QString &v) {
QStringList parts = v.split('.');
while (parts.size() < 3) parts.append("0");
return parts;
};
QStringList r = split(remote);
QStringList l = split(local);
for (int i = 0; i < 3; ++i) {
int rv = r[i].toInt();
int lv = l[i].toInt();
if (rv > lv) return true;
if (rv < lv) return false;
}
return false;
}