init
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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
|
||||
Reference in New Issue
Block a user