Bugbot/Scripts/server_gitea_api.gd

75 lines
2.8 KiB
GDScript

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,
]