class_name BugbotServerGiteaAPI extends "res://addons/Bugbot/Scripts/server_api.gd" static func _return_list_of_bugs(callback:Callable) -> int: if not __bugbot_server_thread: printerr("Server thread is null.") return BugbotServerError.THREAD_NULL if __bugbot_server_thread.is_started(): printerr("Server thread is currently busy.") return BugbotServerError.THREAD_BUSY; __bugbot_server_thread = Thread.new() __bugbot_server_thread.start(__return_list_of_bugs_thread.bind(callback)) return BugbotServerError.OK #func _prepare_form() -> void: #print("Prepare ", _current_server_api(), " form here.") # #func _send_form_data() -> void: #print("Send ", _current_server_api(), " form data here.") func __return_list_of_bugs_thread(callback:Callable) -> void: var http_client : HTTPClient = HTTPClient.new() var server : String = ProjectSettings.get_setting("bugbot/reporting/gitea/server") var error : int = http_client.connect_to_host(server, 443) assert(error == Error.OK) while http_client.get_status() == HTTPClient.STATUS_CONNECTING or http_client.get_status() == HTTPClient.STATUS_RESOLVING: http_client.poll() assert(http_client.get_status() == HTTPClient.STATUS_CONNECTED) var api_url : String = _build_url_string() var header_data : Array = _create_header_data("application/json", ProjectSettings.get_setting("bugbot/reporting/gitea/API_key","")) error = http_client.request(HTTPClient.METHOD_GET, api_url, header_data) assert(error == Error.OK) while http_client.get_status() == HTTPClient.STATUS_REQUESTING: http_client.poll() assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) var response_string : String = "" if http_client.has_response(): var response_body : PackedByteArray = PackedByteArray() while http_client.get_status() == HTTPClient.STATUS_BODY: http_client.poll() var chunk : PackedByteArray = http_client.read_response_body_chunk() if chunk.size() > 0: response_body = response_body + chunk response_string = response_body.get_string_from_utf8() callback.call_deferred(JSON.parse_string(response_string) as Array) __bugbot_server_thread.call_deferred("wait_to_finish") static func _current_server_api() -> String: return "Gitea" static func _build_url_string() -> String: return "/" + \ ProjectSettings.get_setting("bugbot/reporting/gitea/base_URL", "api/v1/") + \ "/repos/" + \ ProjectSettings.get_setting("bugbot/reporting/gitea/owner_name") + \ "/" + \ ProjectSettings.get_setting("bugbot/reporting/gitea/repo_name") + \ "/issues" static func _create_header_data(mime_type:String, api_key:String) -> Array: return [ "User-Agent: Pirulo/1.0 (Godot)", "Accept: " + mime_type, "Content-Type: " + mime_type, "Authorization: token " + api_key, ]