From 83eeaf7f6d09f6247e58ecbd53cbdce226e39bc1 Mon Sep 17 00:00:00 2001 From: iranl Date: Thu, 8 Feb 2024 20:50:16 +0100 Subject: [PATCH] Change to GitHub API URL --- Config.h | 2 +- Network.cpp | 28 +++++++++++++++++----------- Network.h | 3 ++- WebCfgServer.cpp | 2 +- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Config.h b/Config.h index 9c28fa0..aa31c61 100644 --- a/Config.h +++ b/Config.h @@ -2,7 +2,7 @@ #define NUKI_HUB_VERSION "8.32-pre-3" #define GITHUB_LATEST_RELEASE_URL "https://github.com/technyon/nuki_hub/releases/latest" -#define GITHUB_RELEASE_TAG_URL "https://github.com/technyon/nuki_hub/releases/tag/" +#define GITHUB_LATEST_RELEASE_API_URL "https://api.github.com/repos/technyon/nuki_hub/releases/latest" #define MQTT_QOS_LEVEL 1 #define MQTT_CLEAN_SESSIONS false diff --git a/Network.cpp b/Network.cpp index 958bfbf..cb9bfab 100644 --- a/Network.cpp +++ b/Network.cpp @@ -11,7 +11,6 @@ Network* Network::_inst = nullptr; unsigned long Network::_ignoreSubscriptionsTs = 0; bool _versionPublished = false; -const char* headerKeys[] = {"location"}; RTC_NOINIT_ATTR char WiFi_fallbackDetect[14]; @@ -363,16 +362,20 @@ bool Network::update() { _lastUpdateCheckTs = ts; - https.collectHeaders(headerKeys, 1); - https.setFollowRedirects(HTTPC_DISABLE_FOLLOW_REDIRECTS); - https.begin(GITHUB_LATEST_RELEASE_URL); + https.useHTTP10(true); + https.begin(GITHUB_LATEST_RELEASE_API_URL); int httpResponseCode = https.GET(); - if (httpResponseCode==302) { - _latestVersion = https.header("location"); - _latestVersion.replace(GITHUB_RELEASE_TAG_URL, ""); - publishString(_maintenancePathPrefix, mqtt_topic_info_nuki_hub_latest, _latestVersion.c_str()); + if (httpResponseCode == HTTP_CODE_OK || httpResponseCode == HTTP_CODE_MOVED_PERMANENTLY) { + DynamicJsonDocument doc(6144); + DeserializationError jsonError = deserializeJson(doc, https.getStream()); + + if (!jsonError) { + _latestVersion = doc["tag_name"]; + _latestVersionUrl = doc["assets"][0]["browser_download_url"]; + publishString(_maintenancePathPrefix, mqtt_topic_info_nuki_hub_latest, _latestVersion); + } } https.end(); @@ -663,11 +666,16 @@ int Network::mqttConnectionState() return _mqttConnectionState; } -String Network::latestHubVersion() +const char* Network::latestHubVersion() { return _latestVersion; } +const char* Network::latestHubVersionUrl() +{ + return _latestVersionUrl; +} + bool Network::encryptionSupported() { return _device->supportsEncryption(); @@ -1043,8 +1051,6 @@ void Network::publishHASSConfigAdditionalButtons(char *deviceType, const char *b { "pl_prs", "lockNgoUnlatch" }}); } - -//json["cmd_t"] = String("~") + String(mqtt_topic_lock_action); void Network::publishHASSConfigBatLevel(char *deviceType, const char *baseTopic, char *name, char *uidString) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); diff --git a/Network.h b/Network.h index 46e367d..b7b142a 100644 --- a/Network.h +++ b/Network.h @@ -63,7 +63,8 @@ public: void publishPresenceDetection(char* csv); int mqttConnectionState(); // 0 = not connected; 1 = connected; 2 = connected and mqtt processed - String latestHubVersion(); + const char* _latestVersion; + const char* _latestVersionUrl; bool encryptionSupported(); const String networkDeviceName() const; diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index 2416b8b..3315590 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -616,7 +616,7 @@ void WebCfgServer::buildHtml(String& response) String _latestVersion = _network->latestHubVersion(); //if (_latestVersion.toFloat() > atof(NUKI_HUB_VERSION) || (_latestVersion.toFloat() == atof(NUKI_HUB_VERSION) && _latestVersion.c_str() != NUKI_HUB_VERSION)) { - printParameter(response, "Latest Firmware", _latestVersion.c_str(), GITHUB_LATEST_RELEASE_URL); + printParameter(response, "Latest Firmware", _latestVersion, GITHUB_LATEST_RELEASE_URL); //} response.concat("

");