extends Node class_name NewsFetcher ## Fetches news/devlog entries from itch.io signal news_fetched(news_items: Array) signal news_fetch_failed(error: String) var http_request: HTTPRequest # itch.io doesn't have a public devlog API, so we'll fetch from a custom endpoint # You can host this JSON alongside your game files on itch.io func _ready() -> void: http_request = HTTPRequest.new() add_child(http_request) http_request.request_completed.connect(_on_request_completed) func fetch_news() -> void: # Fetch from the version manifest which includes news print("[NewsFetcher] Fetching news from manifest...") var error := http_request.request(Config.VERSION_MANIFEST_URL) if error != OK: emit_signal("news_fetch_failed", "Failed to initiate news request") func _on_request_completed(result: int, response_code: int, _headers: PackedStringArray, body: PackedByteArray) -> void: if result != HTTPRequest.RESULT_SUCCESS: emit_signal("news_fetch_failed", "Network error fetching news") return if response_code != 200: emit_signal("news_fetch_failed", "Server returned error: " + str(response_code)) return var json := JSON.new() var parse_result := json.parse(body.get_string_from_utf8()) if parse_result != OK: emit_signal("news_fetch_failed", "Failed to parse news data") return var data: Dictionary = json.data var news_items: Array = data.get("news", []) # Also include recent releases as news items var releases: Array = data.get("releases", []) for release in releases: news_items.append({ "title": "Version " + release.get("version", "?") + " Released!", "date": release.get("date", ""), "content": _format_changelog(release.get("changelog", [])), "type": "release" }) # Sort by date descending news_items.sort_custom(_sort_by_date) print("[NewsFetcher] Fetched ", news_items.size(), " news items") emit_signal("news_fetched", news_items) func _format_changelog(changelog: Array) -> String: var text := "" for item in changelog: text += "• " + str(item) + "\n" return text.strip_edges() func _sort_by_date(a: Dictionary, b: Dictionary) -> bool: var date_a: String = a.get("date", "") var date_b: String = b.get("date", "") return date_a > date_b # Descending order