diff --git a/Scripts/server_api.gd b/Scripts/server_api.gd index 7623354..ac13c53 100644 --- a/Scripts/server_api.gd +++ b/Scripts/server_api.gd @@ -12,21 +12,25 @@ const UNRESOLVED_TAG : StringName = &"UNRESOLVED" const IN_PROGRESS_TAG : StringName = &"IN_PROGRESS" 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(): - __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: - 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: - 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: - 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: @@ -58,18 +62,17 @@ func __get_http_client_chunk_response(http_client:HTTPClient) -> String: return response_body.get_string_from_utf8() return "" -func __start_thread_with_callback(thread_function:Callable) -> int: - if not __bugbot_server_thread: +func __start_thread_with_callback(thread:Thread, thread_function:Callable) -> int: + if not thread: printerr("Server thread is null.") return BugbotServerError.THREAD_NULL - if __bugbot_server_thread.is_started(): + if thread.is_started(): printerr("Server thread is currently busy.") return BugbotServerError.THREAD_BUSY; - __bugbot_server_thread = Thread.new() - __bugbot_server_thread.start(thread_function) + thread.start(thread_function) return BugbotServerError.OK -func __validate_server_response(_response:Variant) -> int: +func __validate_server_response(_thread:Thread, _response:Variant) -> int: return Error.OK @@ -89,17 +92,17 @@ func __create_header_data(content_length:int = -1) -> Array: 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.") 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.") 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.") callback.call_deferred([]) - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") diff --git a/Scripts/server_bugzilla_api.gd b/Scripts/server_bugzilla_api.gd index 99caabf..3f1ce66 100644 --- a/Scripts/server_bugzilla_api.gd +++ b/Scripts/server_bugzilla_api.gd @@ -17,7 +17,7 @@ const DEFAULT_RESOLVED_STATUSES : Array = [&"RESOLVED", &"VERIFIED"] #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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: 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_data := JSON.parse_string(response_string) - if __validate_server_response(response_data) != Error.OK: + if __validate_server_response(thread, response_data) != Error.OK: return var bug_array : Array = [] @@ -76,9 +76,9 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void: bug_array.append(bug) 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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: 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) var product_response_string : String = __get_http_client_chunk_response(http_client) 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 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) var fields_response_string : String = __get_http_client_chunk_response(http_client) 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 var tag_lists : Array @@ -123,7 +123,7 @@ func __prepare_form_thread(callback:Callable) -> void: var product_info : Dictionary = product_response["products"][0] if product_info["name"] != product_name: printerr("Incorrect product found.") - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") return 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"] }) 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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/bugzilla/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: 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) var post_response_string : String = __get_http_client_chunk_response(http_client) 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 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) callback.call_deferred(bug_data) - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") 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)) 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 # because the response was an error code. if (_response.has("error") and _response["error"] == true) or _response.has("message"): var error_data : BugbotErrorData = BugbotErrorData.new() error_data.message = _response["message"] printerr(error_data.message) - __bugbot_server_thread.call_deferred("wait_to_finish") + _thread.call_deferred("wait_to_finish") return Error.FAILED return Error.OK diff --git a/Scripts/server_gitea_api.gd b/Scripts/server_gitea_api.gd index 4a76104..47fcf9b 100644 --- a/Scripts/server_gitea_api.gd +++ b/Scripts/server_gitea_api.gd @@ -22,7 +22,7 @@ const DEFAULT_RESOLVED_STATUSES : Array = [] #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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: 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_data := JSON.parse_string(response_string) - if __validate_server_response(response_data) != Error.OK: + if __validate_server_response(thread, response_data) != Error.OK: return var bug_array : Array @@ -59,9 +59,9 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void: bug_array.append(bug) 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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: 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_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 var tag_lists : Array @@ -113,9 +113,9 @@ func __prepare_form_thread(callback:Callable) -> void: tag_lists[BugbotTagArray.SEVERITY].append(label_in) 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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/gitea/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: 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() 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)) - if __validate_server_response(response_data) != Error.OK: + if __validate_server_response(thread, response_data) != Error.OK: return # 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() 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)) - if __validate_server_response(post_response_data) != Error.OK: + if __validate_server_response(thread, post_response_data) != Error.OK: return 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) callback.call_deferred(bug_data) - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") 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)) 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 # because the response was an error code. if _response.has("message"): @@ -231,7 +231,7 @@ func __validate_server_response(_response:Variant) -> int: error_data.message = _response["message"] error_data.url = _response["url"] printerr(error_data.message) - __bugbot_server_thread.call_deferred("wait_to_finish") + _thread.call_deferred("wait_to_finish") return Error.FAILED return Error.OK diff --git a/Scripts/server_jira_api.gd b/Scripts/server_jira_api.gd index 6cacb7d..e9a18e8 100644 --- a/Scripts/server_jira_api.gd +++ b/Scripts/server_jira_api.gd @@ -25,16 +25,16 @@ const DEFAULT_RESOLVED_STATUSES : Array = [&"Done"] #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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: printerr("Could not connect to server.") return 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: - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") return 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) var issue_response_string : String = __get_http_client_chunk_response(http_client) 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 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) 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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: printerr("Could not connect to server.") return 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: - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") return var tag_lists : Array @@ -165,18 +165,18 @@ func __prepare_form_thread(callback:Callable) -> void: continue 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() if __connect_to_server(http_client, ProjectSettings.get_setting("bugbot/reporting/jira/server", DEFAULT_SERVER)) != HTTPClient.STATUS_CONNECTED: printerr("Could not connect to server.") return 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: - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") return 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() 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)) - if __validate_server_response(post_response_data) != Error.OK: + if __validate_server_response(thread, post_response_data) != Error.OK: return 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 callback.call_deferred(bug_data) - __bugbot_server_thread.call_deferred("wait_to_finish") + thread.call_deferred("wait_to_finish") 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) 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 # is because the response was an error code. if _response.has("errors"): @@ -274,7 +274,7 @@ func __validate_server_response(_response:Variant) -> int: error_data.code = 1 error_data.message = message printerr(error_data.message) - __bugbot_server_thread.call_deferred("wait_to_finish") + _thread.call_deferred("wait_to_finish") return Error.FAILED if _response.has("errorMessages"): for message:String in _response["errorMessages"]: @@ -282,7 +282,7 @@ func __validate_server_response(_response:Variant) -> int: error_data.code = 1 error_data.message = message printerr(error_data.message) - __bugbot_server_thread.call_deferred("wait_to_finish") + _thread.call_deferred("wait_to_finish") return Error.FAILED return Error.OK @@ -356,7 +356,7 @@ func __create_bug_data_from_server_response(bug_in:Dictionary, map_name:String, 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() 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) var project_response_string : String = __get_http_client_chunk_response(http_client) 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 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) var issue_response_string : String = __get_http_client_chunk_response(http_client) 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 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) var fields_response_string : String = __get_http_client_chunk_response(http_client) 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 var map_name_field_name : String = ProjectSettings.get_setting("bugbot/reporting/jira/map_name_field", DEFAULT_MAP_NAME_FIELD)