diff --git a/Scenes/bugbot_player.gd b/Scenes/bugbot_player.gd index 5dd1508..7ae7b96 100644 --- a/Scenes/bugbot_player.gd +++ b/Scenes/bugbot_player.gd @@ -386,13 +386,14 @@ func __bug_report_form_data_prepared(tag_lists:Array) -> void: __bug_report_form.fill_tags(tag_lists) __bug_report_form.submitted.connect(__form_submitted) __bug_report_form.cancelled.connect(__form_cancelled) -func __form_submitted(map_name:String, bug_position:Vector3, bug_normal:Vector3) -> void: +func __form_submitted(bug:BugbotBugData) -> void: __get_bug_marker_root(get_tree().current_scene) var marker : BugMarker = (load(bug_marker) as PackedScene).instantiate() as BugMarker __bug_marker_root.add_child(marker) - marker.global_position = bug_position - marker.set_rotation_to_normal(bug_normal) + marker.global_position = bug.marker_position + marker.set_rotation_to_normal(bug.marker_normal) marker.marker_status = BugMarker.BugStatus.UNRESOLVED + marker.bug_info = bug __form_cancelled() func __form_cancelled() -> void: __bug_report_form.queue_free() diff --git a/Scripts/server_gitea_api.gd b/Scripts/server_gitea_api.gd index 7208e34..a37a806 100644 --- a/Scripts/server_gitea_api.gd +++ b/Scripts/server_gitea_api.gd @@ -42,76 +42,19 @@ func __return_list_of_bugs_thread(map_name:String, callback:Callable) -> void: return var bug_array : Array - var resolved_labels : Array = ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/resolved_statuses", Array()) - var in_progress_labels : Array = ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/in_progress_statuses", Array()) - var unresolved_labels : Array = ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/unresolved_statuses", Array()) - - var show_resolved : bool = ProjectSettings.get_setting("bugbot/markers/resolved/show_resolved_bugs", false) - var show_in_progress : bool = ProjectSettings.get_setting("bugbot/markers/in_progress/show_in_progress_bugs", true) - var show_unresolved : bool = ProjectSettings.get_setting("bugbot/markers/unresolved/show_unresolved_bugs", true) - + var label_dict : Dictionary = { + "show_unresolved": ProjectSettings.get_setting("bugbot/markers/unresolved/show_unresolved_bugs", true), + "show_in_progress": ProjectSettings.get_setting("bugbot/markers/in_progress/show_in_progress_bugs", true), + "show_resolved": ProjectSettings.get_setting("bugbot/markers/resolved/show_resolved_bugs", false), + + "unresolved_labels": ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/unresolved_statuses", Array()), + "in_progress_labels": ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/in_progress_statuses", Array()), + "resolved_labels": ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/resolved_statuses", Array()), + } for bug_in:Dictionary in response_data: - var bugbot_marker_string : String = bug_in["body"].split("\n")[-1] - if not bugbot_marker_string.begins_with("{") and not bugbot_marker_string.ends_with("}"): - continue - - var bug : BugbotBugData = BugbotBugData.new() - - # Check if the map name is valid for the scene we're in. - var bugbot_marker_data : Dictionary = JSON.parse_string(bugbot_marker_string) - bug.map_name = bugbot_marker_data["map_name"] - if bug.map_name != map_name: - continue - - var marker_location : Array = bugbot_marker_data["bug_position"] - var marker_normal : Array = bugbot_marker_data["bug_normal"] - bug.marker_position = Vector3(marker_location[0], marker_location[1], marker_location[2]) - bug.marker_normal = Vector3(marker_normal[0], marker_normal[1], marker_normal[2]) - - var bug_labels : Array = [] - var resolved_tag_found : bool = false - var in_progress_tag_found : bool = false - var unresolved_tag_found : bool = false - - # Find which resolution statuses apply to this bug. - bug.is_open = (bug_in["state"] == "open") - if not bug.is_open: - resolved_tag_found = true - else: - for labels:Dictionary in bug_in["labels"]: - bug_labels.append(labels["name"] as String) - for label:String in resolved_labels: - if bug_labels.has(label): resolved_tag_found = true - for label:String in in_progress_labels: - if bug_labels.has(label): in_progress_tag_found = true - for label:String in unresolved_labels: - if bug_labels.has(label): unresolved_tag_found = true - - # Figure out which resolution tag to prioritise, and whether we should show the marker. - var show_marker : bool - if resolved_tag_found: - bug.resolution = RESOLVED_TAG - show_marker = show_resolved - elif in_progress_tag_found: - bug.resolution = IN_PROGRESS_TAG - show_marker = show_in_progress - elif unresolved_tag_found or unresolved_labels.is_empty(): - bug.resolution = UNRESOLVED_TAG - show_marker = show_unresolved - if not show_marker: - continue - - bug.id = bug_in["id"] - bug.title = bug_in["title"] - bug.body = bug_in["body"] - bug.component = &"Unused" - bug.platform = &"Unused" - bug.operating_system = &"Unused" - bug.severity = "Severity will go here." - bug.status = bug_in["state"] - bug.duplicate_of = -1 - - bug_array.append(bug) + var bug : BugbotBugData = __create_bug_data_from_server_response(bug_in, map_name, label_dict, true) + if bug: + bug_array.append(bug) callback.call_deferred(bug_array) __bugbot_server_thread.call_deferred("wait_to_finish") @@ -220,7 +163,18 @@ func __send_form_data_thread(data:Dictionary, map_name:String, bug_position:Vect if __validate_server_response(post_response_data) != Error.OK: return - callback.call_deferred(post_response_data) + var label_dict : Dictionary = { + "show_unresolved": ProjectSettings.get_setting("bugbot/markers/unresolved/show_unresolved_bugs", true), + "show_in_progress": ProjectSettings.get_setting("bugbot/markers/in_progress/show_in_progress_bugs", true), + "show_resolved": ProjectSettings.get_setting("bugbot/markers/resolved/show_resolved_bugs", false), + + "unresolved_labels": ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/unresolved_statuses", Array()), + "in_progress_labels": ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/in_progress_statuses", Array()), + "resolved_labels": ProjectSettings.get_setting("bugbot/reporting/gitea/status_labels/resolved_statuses", Array()), + } + var bug_data : BugbotBugData = __create_bug_data_from_server_response(post_response_data, map_name, label_dict, false) + + callback.call_deferred(bug_data) __bugbot_server_thread.call_deferred("wait_to_finish") @@ -259,3 +213,66 @@ func __validate_server_response(_response:Variant) -> int: __bugbot_server_thread.call_deferred("wait_to_finish") return Error.FAILED return Error.OK + +func __create_bug_data_from_server_response(bug_in:Dictionary, map_name:String, label_dict:Dictionary, validate_labels:bool) -> BugbotBugData: + var bugbot_marker_string : String = bug_in["body"].split("\n")[-1] + if not bugbot_marker_string.begins_with("{") and not bugbot_marker_string.ends_with("}"): + return null + + var bug : BugbotBugData = BugbotBugData.new() + + # Check if the map name is valid for the scene we're in. + var bugbot_marker_data : Dictionary = JSON.parse_string(bugbot_marker_string) + bug.map_name = bugbot_marker_data["map_name"] + if bug.map_name != map_name: + return null + + var marker_location : Array = bugbot_marker_data["bug_position"] + var marker_normal : Array = bugbot_marker_data["bug_normal"] + bug.marker_position = Vector3(marker_location[0], marker_location[1], marker_location[2]) + bug.marker_normal = Vector3(marker_normal[0], marker_normal[1], marker_normal[2]) + + var bug_labels : Array = [] + var resolved_tag_found : bool = false + var in_progress_tag_found : bool = false + var unresolved_tag_found : bool = false + + # Find which resolution statuses apply to this bug. + bug.is_open = (bug_in["state"] == "open") + if not bug.is_open: + resolved_tag_found = true + else: + for labels:Dictionary in bug_in["labels"]: + bug_labels.append(labels["name"] as String) + for label:String in label_dict["resolved_labels"] as Array: + if bug_labels.has(label): resolved_tag_found = true + for label:String in label_dict["in_progress_labels"] as Array: + if bug_labels.has(label): in_progress_tag_found = true + for label:String in label_dict["unresolved_labels"] as Array: + if bug_labels.has(label): unresolved_tag_found = true + + # Figure out which resolution tag to prioritise, and whether we should show the marker. + var show_marker : bool + if resolved_tag_found: + bug.resolution = RESOLVED_TAG + show_marker = label_dict["show_resolved"] as bool + elif in_progress_tag_found: + bug.resolution = IN_PROGRESS_TAG + show_marker = label_dict["show_in_progress"] as bool + elif unresolved_tag_found or (label_dict["unresolved_labels"] as Array).is_empty(): + bug.resolution = UNRESOLVED_TAG + show_marker = label_dict["show_unresolved"] as bool + if validate_labels and not show_marker: + return null + + bug.id = bug_in["id"] + bug.title = bug_in["title"] + bug.body = bug_in["body"] + bug.component = &"Unused" + bug.platform = &"Unused" + bug.operating_system = &"Unused" + bug.severity = "Severity will go here." + bug.status = bug_in["state"] + bug.duplicate_of = -1 + + return bug diff --git a/UI/bug_report_form.gd b/UI/bug_report_form.gd index b0a920c..78245d5 100644 --- a/UI/bug_report_form.gd +++ b/UI/bug_report_form.gd @@ -131,8 +131,8 @@ func __get_label_ids_for_submission_data(label_array:Array, label_group_id:int, button.remove_theme_color_override("font_color") return true -func __submission_response(response:Variant) -> void: - submitted.emit(map_name, bug_location, bug_rotation) +func __submission_response(bug:BugbotBugData) -> void: + submitted.emit(bug) queue_free() func _on_cancel_button_pressed() -> void: