Multiple server threads are now used, allowing simultaneous fetching of form data and loading of bug markers, etc.

This commit is contained in:
Jamie Greunbaum 2024-06-19 15:37:17 -04:00
parent 0fbb9a0fbe
commit fba901b368
4 changed files with 66 additions and 63 deletions

View File

@ -12,21 +12,25 @@ const UNRESOLVED_TAG : StringName = &"UNRESOLVED"
const IN_PROGRESS_TAG : StringName = &"IN_PROGRESS" const IN_PROGRESS_TAG : StringName = &"IN_PROGRESS"
const RESOLVED_TAG : StringName = &"RESOLVED" const RESOLVED_TAG : StringName = &"RESOLVED"
var __bugbot_server_thread : Thread var __bugbot_return_list_of_bugs_thread : Thread
var __bugbot_prepare_form_thread : Thread
var __bugbot_send_form_data_thread : Thread
func _init(): func _init():
__bugbot_server_thread = Thread.new() __bugbot_return_list_of_bugs_thread = Thread.new()
__bugbot_prepare_form_thread = Thread.new()
__bugbot_send_form_data_thread = Thread.new()
func _return_list_of_bugs(map_name:String, callback:Callable) -> int: func _return_list_of_bugs(map_name:String, callback:Callable) -> int:
return __start_thread_with_callback(__return_list_of_bugs_thread.bind(map_name, callback)) return __start_thread_with_callback(__bugbot_return_list_of_bugs_thread, __return_list_of_bugs_thread.bind(__bugbot_return_list_of_bugs_thread, map_name, callback))
func _prepare_form(callback:Callable) -> int: func _prepare_form(callback:Callable) -> int:
return __start_thread_with_callback(__prepare_form_thread.bind(callback)) return __start_thread_with_callback(__bugbot_prepare_form_thread, __prepare_form_thread.bind(__bugbot_prepare_form_thread, callback))
func _send_form_data(data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> int: func _send_form_data(data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> int:
return __start_thread_with_callback(__send_form_data_thread.bind(data, map_name, bug_position, bug_normal, callback)) return __start_thread_with_callback(__bugbot_send_form_data_thread, __send_form_data_thread.bind(__bugbot_send_form_data_thread, data, map_name, bug_position, bug_normal, callback))
static func _create_new_server_api() -> BugbotServerAPI: static func _create_new_server_api() -> BugbotServerAPI:
@ -58,18 +62,17 @@ func __get_http_client_chunk_response(http_client:HTTPClient) -> String:
return response_body.get_string_from_utf8() return response_body.get_string_from_utf8()
return "" return ""
func __start_thread_with_callback(thread_function:Callable) -> int: func __start_thread_with_callback(thread:Thread, thread_function:Callable) -> int:
if not __bugbot_server_thread: if not thread:
printerr("Server thread is null.") printerr("Server thread is null.")
return BugbotServerError.THREAD_NULL return BugbotServerError.THREAD_NULL
if __bugbot_server_thread.is_started(): if thread.is_started():
printerr("Server thread is currently busy.") printerr("Server thread is currently busy.")
return BugbotServerError.THREAD_BUSY; return BugbotServerError.THREAD_BUSY;
__bugbot_server_thread = Thread.new() thread.start(thread_function)
__bugbot_server_thread.start(thread_function)
return BugbotServerError.OK return BugbotServerError.OK
func __validate_server_response(_response:Variant) -> int: func __validate_server_response(_thread:Thread, _response:Variant) -> int:
return Error.OK return Error.OK
@ -89,17 +92,17 @@ func __create_header_data(content_length:int = -1) -> Array:
return [] return []
func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void: func __return_list_of_bugs_thread(thread:Thread, map_name:String, callback:Callable) -> void:
print("Insert list of ", _current_server_api(), " bugs here.") print("Insert list of ", _current_server_api(), " bugs here.")
callback.call_deferred([]) callback.call_deferred([])
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __prepare_form_thread(callback:Callable) -> void: func __prepare_form_thread(thread:Thread, callback:Callable) -> void:
print("Prepare ", _current_server_api(), " form here.") print("Prepare ", _current_server_api(), " form here.")
callback.call_deferred([]) callback.call_deferred([])
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void: func __send_form_data_thread(thread:Thread, data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void:
print("Send ", _current_server_api(), " form data here.") print("Send ", _current_server_api(), " form data here.")
callback.call_deferred([]) callback.call_deferred([])
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")

View File

@ -17,7 +17,7 @@ const DEFAULT_RESOLVED_STATUSES : Array = [&"RESOLVED", &"VERIFIED"]
#endregion #endregion
func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void: func __return_list_of_bugs_thread(thread:Thread, map_name:String, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
@ -54,7 +54,7 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void:
var response_string : String = __get_http_client_chunk_response(http_client) var response_string : String = __get_http_client_chunk_response(http_client)
var response_data := JSON.parse_string(response_string) var response_data := JSON.parse_string(response_string)
if __validate_server_response(response_data) != Error.OK: if __validate_server_response(thread, response_data) != Error.OK:
return return
var bug_array : Array = [] var bug_array : Array = []
@ -76,9 +76,9 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void:
bug_array.append(bug) bug_array.append(bug)
callback.call_deferred(bug_array) callback.call_deferred(bug_array)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __prepare_form_thread(callback:Callable) -> void: func __prepare_form_thread(thread:Thread, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
@ -97,7 +97,7 @@ func __prepare_form_thread(callback:Callable) -> void:
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var product_response_string : String = __get_http_client_chunk_response(http_client) var product_response_string : String = __get_http_client_chunk_response(http_client)
var product_response : Dictionary = JSON.parse_string(product_response_string) var product_response : Dictionary = JSON.parse_string(product_response_string)
if __validate_server_response(product_response) != Error.OK: if __validate_server_response(thread, product_response) != Error.OK:
return return
api_url = "field/bug?" api_url = "field/bug?"
@ -109,7 +109,7 @@ func __prepare_form_thread(callback:Callable) -> void:
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var fields_response_string : String = __get_http_client_chunk_response(http_client) var fields_response_string : String = __get_http_client_chunk_response(http_client)
var fields_response : Dictionary = JSON.parse_string(fields_response_string) var fields_response : Dictionary = JSON.parse_string(fields_response_string)
if __validate_server_response(fields_response) != Error.OK: if __validate_server_response(thread, fields_response) != Error.OK:
return return
var tag_lists : Array var tag_lists : Array
@ -123,7 +123,7 @@ func __prepare_form_thread(callback:Callable) -> void:
var product_info : Dictionary = product_response["products"][0] var product_info : Dictionary = product_response["products"][0]
if product_info["name"] != product_name: if product_info["name"] != product_name:
printerr("Incorrect product found.") printerr("Incorrect product found.")
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
return return
for component:Dictionary in product_info["components"]: for component:Dictionary in product_info["components"]:
@ -146,9 +146,9 @@ func __prepare_form_thread(callback:Callable) -> void:
tag_lists[BugbotTagArray.OS].append({ "name": os["name"], "id": os["sort_key"] }) tag_lists[BugbotTagArray.OS].append({ "name": os["name"], "id": os["sort_key"] })
callback.call_deferred(tag_lists) callback.call_deferred(tag_lists)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void: func __send_form_data_thread(thread:Thread, data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
@ -188,7 +188,7 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var post_response_string : String = __get_http_client_chunk_response(http_client) var post_response_string : String = __get_http_client_chunk_response(http_client)
var post_response : Dictionary = JSON.parse_string(post_response_string) var post_response : Dictionary = JSON.parse_string(post_response_string)
if __validate_server_response(post_response) != Error.OK: if __validate_server_response(thread, post_response) != Error.OK:
return return
post_data["id"] = post_response["id"] post_data["id"] = post_response["id"]
@ -209,7 +209,7 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect
var bug_data : BugbotBugData = __create_bug_data_from_server_response(post_data, map_name, label_dict, false) var bug_data : BugbotBugData = __create_bug_data_from_server_response(post_data, map_name, label_dict, false)
callback.call_deferred(bug_data) callback.call_deferred(bug_data)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func _current_server_api() -> String: func _current_server_api() -> String:
@ -238,14 +238,14 @@ func __create_header_data(content_length:int = -1) -> Array:
header.append("Content-Length: " + String.num_uint64(content_length)) header.append("Content-Length: " + String.num_uint64(content_length))
return header return header
func __validate_server_response(_response:Variant) -> int: func __validate_server_response(_thread:Thread, _response:Variant) -> int:
# If the response has a message field, make the assumption that this is # If the response has a message field, make the assumption that this is
# because the response was an error code. # because the response was an error code.
if (_response.has("error") and _response["error"] == true) or _response.has("message"): if (_response.has("error") and _response["error"] == true) or _response.has("message"):
var error_data : BugbotErrorData = BugbotErrorData.new() var error_data : BugbotErrorData = BugbotErrorData.new()
error_data.message = _response["message"] error_data.message = _response["message"]
printerr(error_data.message) printerr(error_data.message)
__bugbot_server_thread.call_deferred("wait_to_finish") _thread.call_deferred("wait_to_finish")
return Error.FAILED return Error.FAILED
return Error.OK return Error.OK

View File

@ -22,7 +22,7 @@ const DEFAULT_RESOLVED_STATUSES : Array = []
#endregion #endregion
func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void: func __return_list_of_bugs_thread(thread:Thread, map_name:String, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
@ -39,7 +39,7 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void:
var response_string : String = __get_http_client_chunk_response(http_client) var response_string : String = __get_http_client_chunk_response(http_client)
var response_data := JSON.parse_string(response_string) var response_data := JSON.parse_string(response_string)
if __validate_server_response(response_data) != Error.OK: if __validate_server_response(thread, response_data) != Error.OK:
return return
var bug_array : Array var bug_array : Array
@ -59,9 +59,9 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void:
bug_array.append(bug) bug_array.append(bug)
callback.call_deferred(bug_array) callback.call_deferred(bug_array)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __prepare_form_thread(callback:Callable) -> void: func __prepare_form_thread(thread:Thread, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
@ -78,7 +78,7 @@ func __prepare_form_thread(callback:Callable) -> void:
var response_string : String = __get_http_client_chunk_response(http_client) var response_string : String = __get_http_client_chunk_response(http_client)
var response_data : Variant = JSON.parse_string(response_string) var response_data : Variant = JSON.parse_string(response_string)
if __validate_server_response(response_data) != Error.OK: if __validate_server_response(thread, response_data) != Error.OK:
return return
var tag_lists : Array var tag_lists : Array
@ -113,9 +113,9 @@ func __prepare_form_thread(callback:Callable) -> void:
tag_lists[BugbotTagArray.SEVERITY].append(label_in) tag_lists[BugbotTagArray.SEVERITY].append(label_in)
callback.call_deferred(tag_lists) callback.call_deferred(tag_lists)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void: func __send_form_data_thread(thread:Thread, data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
@ -130,7 +130,7 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect
http_client.poll() http_client.poll()
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var response_data : Variant = JSON.parse_string(__get_http_client_chunk_response(http_client)) var response_data : Variant = JSON.parse_string(__get_http_client_chunk_response(http_client))
if __validate_server_response(response_data) != Error.OK: if __validate_server_response(thread, response_data) != Error.OK:
return return
# Collect the label IDs for each label we want to apply to this issue # Collect the label IDs for each label we want to apply to this issue
@ -171,7 +171,7 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect
http_client.poll() http_client.poll()
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var post_response_data : Variant = JSON.parse_string(__get_http_client_chunk_response(http_client)) var post_response_data : Variant = JSON.parse_string(__get_http_client_chunk_response(http_client))
if __validate_server_response(post_response_data) != Error.OK: if __validate_server_response(thread, post_response_data) != Error.OK:
return return
var label_dict : Dictionary = { var label_dict : Dictionary = {
@ -187,7 +187,7 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect
var bug_data : BugbotBugData = __create_bug_data_from_server_response(post_response_data, map_name, label_dict, false, assigned_as_in_progress) var bug_data : BugbotBugData = __create_bug_data_from_server_response(post_response_data, map_name, label_dict, false, assigned_as_in_progress)
callback.call_deferred(bug_data) callback.call_deferred(bug_data)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func _current_server_api() -> String: func _current_server_api() -> String:
@ -222,7 +222,7 @@ func __create_header_data(content_length:int = -1) -> Array:
header.append("Content-Length: " + String.num_uint64(content_length)) header.append("Content-Length: " + String.num_uint64(content_length))
return header return header
func __validate_server_response(_response:Variant) -> int: func __validate_server_response(_thread:Thread, _response:Variant) -> int:
# If the response has a message field, make the assumption that this is # If the response has a message field, make the assumption that this is
# because the response was an error code. # because the response was an error code.
if _response.has("message"): if _response.has("message"):
@ -231,7 +231,7 @@ func __validate_server_response(_response:Variant) -> int:
error_data.message = _response["message"] error_data.message = _response["message"]
error_data.url = _response["url"] error_data.url = _response["url"]
printerr(error_data.message) printerr(error_data.message)
__bugbot_server_thread.call_deferred("wait_to_finish") _thread.call_deferred("wait_to_finish")
return Error.FAILED return Error.FAILED
return Error.OK return Error.OK

View File

@ -25,16 +25,16 @@ const DEFAULT_RESOLVED_STATUSES : Array = [&"Done"]
#endregion #endregion
func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void: func __return_list_of_bugs_thread(thread:Thread, map_name:String, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
return return
var header_data : Array = __create_header_data() var header_data : Array = __create_header_data()
var server_data : BugbotJiraServerData = __get_server_data(http_client, header_data) var server_data : BugbotJiraServerData = __get_server_data(thread, http_client, header_data)
if not server_data: if not server_data:
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
return return
var map_name_field : String = ProjectSettings.get_setting("bugbot/reporting/jira/map_name_field", DEFAULT_MAP_NAME_FIELD) var map_name_field : String = ProjectSettings.get_setting("bugbot/reporting/jira/map_name_field", DEFAULT_MAP_NAME_FIELD)
@ -89,7 +89,7 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void:
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var issue_response_string : String = __get_http_client_chunk_response(http_client) var issue_response_string : String = __get_http_client_chunk_response(http_client)
var issue_response : Dictionary = JSON.parse_string(issue_response_string) var issue_response : Dictionary = JSON.parse_string(issue_response_string)
if __validate_server_response(issue_response) != Error.OK: if __validate_server_response(thread, issue_response) != Error.OK:
return return
var bug_array : Array var bug_array : Array
@ -109,18 +109,18 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void:
if bug: bug_array.append(bug) if bug: bug_array.append(bug)
callback.call_deferred(bug_array) callback.call_deferred(bug_array)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __prepare_form_thread(callback:Callable) -> void: func __prepare_form_thread(thread:Thread, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
return return
var header_data : Array = __create_header_data() var header_data : Array = __create_header_data()
var server_data : BugbotJiraServerData = __get_server_data(http_client, header_data) var server_data : BugbotJiraServerData = __get_server_data(thread, http_client, header_data)
if not server_data: if not server_data:
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
return return
var tag_lists : Array var tag_lists : Array
@ -165,18 +165,18 @@ func __prepare_form_thread(callback:Callable) -> void:
continue continue
callback.call_deferred(tag_lists) callback.call_deferred(tag_lists)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void: func __send_form_data_thread(thread:Thread, data:Dictionary, map_name:String, bug_position:Vector3, bug_normal:Vector3, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new() var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.") printerr("Could not connect to server.")
return return
var header_data : Array = __create_header_data() var header_data : Array = __create_header_data()
var server_data : BugbotJiraServerData = __get_server_data(http_client, header_data) var server_data : BugbotJiraServerData = __get_server_data(thread, http_client, header_data)
if not server_data: if not server_data:
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
return return
var bug_issue_type : String = ProjectSettings.get_setting("bugbot/reporting/jira/bug_issue_type", DEFAULT_BUG_ISSUE_TYPE) var bug_issue_type : String = ProjectSettings.get_setting("bugbot/reporting/jira/bug_issue_type", DEFAULT_BUG_ISSUE_TYPE)
@ -212,7 +212,7 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect
http_client.poll() http_client.poll()
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var post_response_data : Variant = JSON.parse_string(__get_http_client_chunk_response(http_client)) var post_response_data : Variant = JSON.parse_string(__get_http_client_chunk_response(http_client))
if __validate_server_response(post_response_data) != Error.OK: if __validate_server_response(thread, post_response_data) != Error.OK:
return return
var bug_data : BugbotBugData = BugbotBugData.new() var bug_data : BugbotBugData = BugbotBugData.new()
@ -227,7 +227,7 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect
bug_data.resolution = BugbotServerAPI.UNRESOLVED_TAG bug_data.resolution = BugbotServerAPI.UNRESOLVED_TAG
callback.call_deferred(bug_data) callback.call_deferred(bug_data)
__bugbot_server_thread.call_deferred("wait_to_finish") thread.call_deferred("wait_to_finish")
func _current_server_api() -> String: func _current_server_api() -> String:
@ -261,7 +261,7 @@ func __generate_auth_string() -> String:
var api_key : String = ProjectSettings.get_setting("bugbot/reporting/jira/API_key", DEFAULT_API_KEY) var api_key : String = ProjectSettings.get_setting("bugbot/reporting/jira/API_key", DEFAULT_API_KEY)
return Marshalls.utf8_to_base64(email.to_lower() + ":" + api_key) return Marshalls.utf8_to_base64(email.to_lower() + ":" + api_key)
func __validate_server_response(_response:Variant) -> int: func __validate_server_response(_thread:Thread, _response:Variant) -> int:
# If the response has an errorMessages field, make the assumption that this # If the response has an errorMessages field, make the assumption that this
# is because the response was an error code. # is because the response was an error code.
if _response.has("errors"): if _response.has("errors"):
@ -274,7 +274,7 @@ func __validate_server_response(_response:Variant) -> int:
error_data.code = 1 error_data.code = 1
error_data.message = message error_data.message = message
printerr(error_data.message) printerr(error_data.message)
__bugbot_server_thread.call_deferred("wait_to_finish") _thread.call_deferred("wait_to_finish")
return Error.FAILED return Error.FAILED
if _response.has("errorMessages"): if _response.has("errorMessages"):
for message:String in _response["errorMessages"]: for message:String in _response["errorMessages"]:
@ -282,7 +282,7 @@ func __validate_server_response(_response:Variant) -> int:
error_data.code = 1 error_data.code = 1
error_data.message = message error_data.message = message
printerr(error_data.message) printerr(error_data.message)
__bugbot_server_thread.call_deferred("wait_to_finish") _thread.call_deferred("wait_to_finish")
return Error.FAILED return Error.FAILED
return Error.OK return Error.OK
@ -356,7 +356,7 @@ func __create_bug_data_from_server_response(bug_in:Dictionary, map_name:String,
return bug return bug
func __get_server_data(http_client:HTTPClient, header_data:Array) -> BugbotJiraServerData: func __get_server_data(thread:Thread, http_client:HTTPClient, header_data:Array) -> BugbotJiraServerData:
var server_data : BugbotJiraServerData = BugbotJiraServerData.new() var server_data : BugbotJiraServerData = BugbotJiraServerData.new()
server_data.timestamp = Time.get_ticks_msec() server_data.timestamp = Time.get_ticks_msec()
@ -368,7 +368,7 @@ func __get_server_data(http_client:HTTPClient, header_data:Array) -> BugbotJiraS
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var project_response_string : String = __get_http_client_chunk_response(http_client) var project_response_string : String = __get_http_client_chunk_response(http_client)
var project_response : Array = JSON.parse_string(project_response_string) var project_response : Array = JSON.parse_string(project_response_string)
if __validate_server_response(project_response) != Error.OK: if __validate_server_response(thread, project_response) != Error.OK:
return return
server_data.project_name = _get_project_name() server_data.project_name = _get_project_name()
@ -392,7 +392,7 @@ func __get_server_data(http_client:HTTPClient, header_data:Array) -> BugbotJiraS
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var issue_response_string : String = __get_http_client_chunk_response(http_client) var issue_response_string : String = __get_http_client_chunk_response(http_client)
var issue_response : Dictionary = JSON.parse_string(issue_response_string) var issue_response : Dictionary = JSON.parse_string(issue_response_string)
if __validate_server_response(issue_response) != Error.OK: if __validate_server_response(thread, issue_response) != Error.OK:
return return
var bug_issue_type : String = ProjectSettings.get_setting("bugbot/reporting/jira/bug_issue_type", DEFAULT_BUG_ISSUE_TYPE) var bug_issue_type : String = ProjectSettings.get_setting("bugbot/reporting/jira/bug_issue_type", DEFAULT_BUG_ISSUE_TYPE)
@ -411,7 +411,7 @@ func __get_server_data(http_client:HTTPClient, header_data:Array) -> BugbotJiraS
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED) assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
var fields_response_string : String = __get_http_client_chunk_response(http_client) var fields_response_string : String = __get_http_client_chunk_response(http_client)
var fields_response : Dictionary = JSON.parse_string(fields_response_string) var fields_response : Dictionary = JSON.parse_string(fields_response_string)
if __validate_server_response(fields_response) != Error.OK: if __validate_server_response(thread, fields_response) != Error.OK:
return return
var map_name_field_name : String = ProjectSettings.get_setting("bugbot/reporting/jira/map_name_field", DEFAULT_MAP_NAME_FIELD) var map_name_field_name : String = ProjectSettings.get_setting("bugbot/reporting/jira/map_name_field", DEFAULT_MAP_NAME_FIELD)