Bug report form can now send summary, description, and labels to the Gitea server when submitting a bug.

This commit is contained in:
Jamie Greunbaum 2024-05-24 19:04:50 -04:00
parent acbdbe413e
commit 5b4dc53a62
5 changed files with 85 additions and 23 deletions

View File

@ -320,6 +320,9 @@ func __bug_report_form_data_prepared(tag_lists:Array):
var bug_report_form : Control = preload("res://addons/Bugbot/UI/bug_report_form.tscn").instantiate()
add_child(bug_report_form)
bug_report_form.fill_tags(tag_lists)
bug_report_form.closed.connect(__form_closed)
func __form_closed():
process_mode = Node.PROCESS_MODE_ALWAYS
func __place_dummy_marker():

View File

@ -19,7 +19,7 @@ func _prepare_form(callback:Callable) -> int:
print("Prepare ", _current_server_api(), " form here.")
return BugbotServerError.OK
func _send_form_data(callback:Callable) -> int:
func _send_form_data(data:Dictionary, callback:Callable) -> int:
print("Send ", _current_server_api(), " form data here.")
return BugbotServerError.OK

View File

@ -27,8 +27,8 @@ func _return_list_of_bugs(callback:Callable) -> int:
func _prepare_form(callback:Callable) -> int:
return __start_thread_with_callback(__prepare_form_thread.bind(callback))
func _send_form_data(callback:Callable) -> int:
return __start_thread_with_callback(__send_form_data_thread.bind(callback))
func _send_form_data(data:Dictionary, callback:Callable) -> int:
return __start_thread_with_callback(__send_form_data_thread.bind(data, callback))
func __return_list_of_bugs_thread(callback:Callable) -> void:
@ -169,7 +169,7 @@ func __prepare_form_thread(callback:Callable) -> void:
callback.call_deferred(tag_lists)
__bugbot_server_thread.call_deferred("wait_to_finish")
func __send_form_data_thread(callback:Callable) -> void:
func __send_form_data_thread(data:Dictionary, callback:Callable) -> void:
var http_client : HTTPClient = HTTPClient.new()
if __connect_to_server(http_client, DEFAULT_SERVER) != HTTPClient.STATUS_CONNECTED:
printerr("Could not connect to server.")
@ -194,14 +194,10 @@ func __send_form_data_thread(callback:Callable) -> void:
for label_in:Dictionary in response_data:
if label_in["name"] == bug_label or label_in["name"] == status_label:
labels.append(label_in["id"])
(data["labels"] as Array).append_array(labels)
api_url = __build_url_string("issues")
var post_data : Dictionary = {
"title": "This is a test bug. Here's some randomness just for fun: " + String.num(randf_range(0.0, 10000000.0)),
"body": "Fusce ornare ut felis quis aliquet. Nullam mollis dictum elit, vitae gravida metus blandit eu. Donec mi ipsum, luctus vel arcu in, suscipit hendrerit mi. Morbi imperdiet tellus pretium mi semper, vel lacinia risus mattis. Ut dapibus sed nibh eget suscipit. Vestibulum posuere pellentesque lectus, ac mollis odio congue tempus. Phasellus nisi nunc, tincidunt et bibendum non, ornare quis felis. Donec finibus mauris eu sollicitudin pharetra. Pellentesque interdum mi in augue imperdiet molestie. Nulla venenatis nec libero in feugiat. Donec nec mauris molestie, euismod magna nec, aliquet felis.\n\nAenean suscipit auctor nulla, ac aliquam purus porttitor ut. Curabitur lacinia ullamcorper ligula, sit amet tempor arcu volutpat et. Nulla eget nisi sem. Etiam pharetra at orci ut fermentum. In eu neque purus. Aliquam condimentum gravida porttitor. Nullam sem sapien, semper at hendrerit nec, lobortis sed magna. Duis non pharetra orci. Quisque faucibus, sem vitae laoreet suscipit, orci massa convallis lorem, ut malesuada dui felis ac eros.\n\nPellentesque felis lorem, volutpat eu ullamcorper eu, ultrices sed nulla. Proin ac nunc sit amet ex pellentesque sagittis non ut libero. Maecenas viverra, odio eu elementum convallis, erat purus tempor tortor, non suscipit est enim quis ligula. Praesent vestibulum orci nec enim vehicula, id commodo erat sollicitudin. Sed mauris eros, sollicitudin sit amet volutpat ac, ullamcorper dignissim erat. Aenean vitae turpis quis lorem ultrices varius. Donec pellentesque suscipit nulla id consectetur. Quisque nibh nisl, posuere in sapien eget, vehicula dapibus magna. Integer faucibus ligula ut metus sollicitudin viverra. Vestibulum elementum vitae leo sit amet ornare. Sed dapibus egestas nisi id tempus. Proin lorem erat, euismod quis porttitor ac, tincidunt faucibus nisl. Sed aliquam sem in vehicula mattis. Fusce eu libero ac eros tempus tempor ut eu nunc. Duis a turpis erat. Morbi rutrum gravida volutpat.",
"labels": labels,
}
var post_data_string : String = JSON.stringify(post_data)
var post_data_string : String = JSON.stringify(data)
header_data = __create_header_data(post_data_string.length())
error = http_client.request(HTTPClient.METHOD_POST, api_url, header_data, post_data_string)
assert(error == Error.OK)
@ -210,7 +206,7 @@ func __send_form_data_thread(callback:Callable) -> void:
assert(http_client.get_status() == HTTPClient.STATUS_BODY or http_client.get_status() == HTTPClient.STATUS_CONNECTED)
response_string = __get_http_client_chunk_response(http_client)
callback.call_deferred([response_string])
callback.call_deferred(JSON.parse_string(response_string))
__bugbot_server_thread.call_deferred("wait_to_finish")

View File

@ -1,19 +1,20 @@
class_name BugReportForm
extends ColorRect
signal closed
@onready var __version_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/VersionButton
@onready var __hardware_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/HardwareButton
@onready var __os_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/OSButton
@onready var __component_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/ComponentButton
@onready var __severity_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/SeverityButton
var __version_items : Array
var __hardware_items : Array
var __os_items : Array
var __component_items : Array
var __severity_items : Array
@onready var __summary_text : LineEdit = $Form/VBoxContainerRight/GridContainer/SummaryText
@onready var __description_text : TextEdit = $Form/VBoxContainerRight/GridContainer/DescriptionText
var __label_groups : Array
var __stored_mouse_mode : int
var __server_api : BugbotServerAPI
const __button_disabled_message : StringName = &"Not available"
@ -21,19 +22,25 @@ const __button_disabled_message : StringName = &"Not available"
func _enter_tree():
__stored_mouse_mode = Input.mouse_mode
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
__server_api = BugbotServerAPI._create_new_server_api()
func _exit_tree():
Input.mouse_mode = __stored_mouse_mode
func fill_tags(tag_list:Array):
__fill_item_list(__version_button, __version_items, tag_list[BugbotServerAPI.BugbotTagArray.VERSION])
__fill_item_list(__hardware_button, __hardware_items, tag_list[BugbotServerAPI.BugbotTagArray.HARDWARE])
__fill_item_list(__os_button, __os_items, tag_list[BugbotServerAPI.BugbotTagArray.OS])
__fill_item_list(__component_button, __component_items, tag_list[BugbotServerAPI.BugbotTagArray.COMPONENT])
__fill_item_list(__severity_button, __severity_items, tag_list[BugbotServerAPI.BugbotTagArray.SEVERITY])
func __fill_item_list(menu_button:MenuButton, menu_options:Array, tag_list:Array):
menu_options = tag_list
__label_groups.resize(BugbotServerAPI.BugbotTagArray.MAX)
__label_groups = tag_list
__fill_item_list(__version_button, BugbotServerAPI.BugbotTagArray.VERSION)
__fill_item_list(__hardware_button, BugbotServerAPI.BugbotTagArray.HARDWARE)
__fill_item_list(__os_button, BugbotServerAPI.BugbotTagArray.OS)
__fill_item_list(__component_button, BugbotServerAPI.BugbotTagArray.COMPONENT)
__fill_item_list(__severity_button, BugbotServerAPI.BugbotTagArray.SEVERITY)
func __fill_item_list(menu_button:MenuButton, label_group:int):
var menu_options : Array = __label_groups[label_group]
if menu_options.is_empty():
menu_button.text = __button_disabled_message
menu_button.disabled = true
@ -42,3 +49,56 @@ func __fill_item_list(menu_button:MenuButton, menu_options:Array, tag_list:Array
for i in menu_options.size():
menu.add_item(menu_options[i]["name"], i)
menu.id_pressed.connect(func(id:int): menu_button.text = menu_options[id]["name"])
func _on_submit_button_pressed() -> void:
var error_detected : bool = false
var summary_text : String = __summary_text.text
var description_text : String = __description_text.text
if summary_text.is_empty():
printerr("You must fill in a summary.")
error_detected = true
if description_text.is_empty():
printerr("You must fill in a description.")
error_detected = true
var labels_to_be_added : Array
# Check severity first, since this is a requirement.
__get_label_ids_for_submission_data(labels_to_be_added, BugbotServerAPI.BugbotTagArray.SEVERITY)
if labels_to_be_added.is_empty():
printerr("You must select a severity level.")
error_detected = true
if error_detected: return
__get_label_ids_for_submission_data(labels_to_be_added, BugbotServerAPI.BugbotTagArray.VERSION)
__get_label_ids_for_submission_data(labels_to_be_added, BugbotServerAPI.BugbotTagArray.HARDWARE)
__get_label_ids_for_submission_data(labels_to_be_added, BugbotServerAPI.BugbotTagArray.OS)
__get_label_ids_for_submission_data(labels_to_be_added, BugbotServerAPI.BugbotTagArray.COMPONENT)
var bug_report_form_data : Dictionary = {
"title": summary_text,
"body": description_text,
"labels": labels_to_be_added,
}
__server_api._send_form_data(bug_report_form_data, __form_data_response)
func __form_data_response(response:Variant):
print(response)
func __get_label_ids_for_submission_data(label_array:Array, label_group_id:int):
for label in __label_groups[label_group_id]:
if label["name"] == __severity_button.text:
label_array.append(label["id"])
break
func __submission_response(response:Array):
print(response)
queue_free()
closed.emit()
func _on_cancel_button_pressed() -> void:
queue_free()
closed.emit()

View File

@ -151,3 +151,6 @@ wrap_mode = 1
[node name="SubmitButton" type="Button" parent="Form/VBoxContainerRight"]
layout_mode = 2
text = "Submit"
[connection signal="pressed" from="Form/VBoxContainerLeft/CancelButton" to="." method="_on_cancel_button_pressed"]
[connection signal="pressed" from="Form/VBoxContainerRight/SubmitButton" to="." method="_on_submit_button_pressed"]