| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- extends HTTPRequest
- const GITHUB_API_URL := "https://api.github.com/repos/j-p-higgins/SoundThread/releases/latest"
- var current_version
- func _ready():
- $UpdatePopup.hide()
-
- #get current version from export presets
- var export_config = ConfigFile.new()
- export_config.load("res://export_presets.cfg")
- current_version = export_config.get_value("preset.0.options", "application/product_version", "version unknown")
-
- #call github api
- if not is_connected("request_completed", Callable(self, "_on_request_completed")):
- connect("request_completed", Callable(self, "_on_request_completed"))
- request(GITHUB_API_URL, ["User-Agent: SoundThread0"])
- func _on_request_completed(result, response_code, headers, body):
- if response_code != 200:
- print("Failed to check for updates.")
- return
- var response = JSON.parse_string(body.get_string_from_utf8())
- if typeof(response) != TYPE_DICTIONARY:
- print("Invalid JSON in GitHub response.")
- return
- var latest_version = response.get("tag_name", "")
-
- var update_notes = response.get("body", "")
- if _version_is_newer(latest_version, current_version):
- _show_update_popup(latest_version, update_notes)
-
- func _version_is_newer(latest: String, current: String) -> bool:
- #clean up version tags remove -alpha -beta and v and split the number sup
- latest = trim_suffix(latest, "-alpha")
- latest = trim_suffix(latest, "-beta")
- var latest_parts = latest.trim_prefix("v").split(".")
-
- current = trim_suffix(current, "-alpha")
- current = trim_suffix(current, "-beta")
- var current_parts = current.trim_prefix("v").split(".")
-
- #check if current version < latest
- for i in range(min(latest_parts.size(), current_parts.size())):
- var l = int(latest_parts[i])
- var c = int(current_parts[i])
- if l > c:
- return true
- elif l < c:
- return false
- return latest_parts.size() > current_parts.size()
-
- func trim_suffix(text: String, suffix: String) -> String:
- #used to remove -alpha and -beta tags
- if text.ends_with(suffix):
- return text.substr(0, text.length() - suffix.length())
- return text
-
- func _show_update_popup(new_version: String, update_notes: String):
- $UpdatePopup/Label.text = "A new version of SoundThread (" + new_version + ") is available to download."
- $UpdatePopup/UpdateNotes.text = "[b]Update Details[/b] \n" + update_notes
- $UpdatePopup.popup_centered()
- func _on_open_audio_settings_button_down() -> void:
- $UpdatePopup.hide()
- OS.shell_open("https://github.com/j-p-higgins/SoundThread/releases/latest")
- func _on_update_popup_close_requested() -> void:
- $UpdatePopup.hide()
|