Bug report form can now send summary, description, and labels to the Gitea server when submitting a bug.
This commit is contained in:
parent
acbdbe413e
commit
5b4dc53a62
@ -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():
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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")
|
||||
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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"]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user