From ec4f60d6fa6a27ef38de0b63ea179057dc6797d0 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 20 Nov 2018 23:34:25 +0000 Subject: [PATCH] Allow to exclude folders, exclude folders starting by '.', show progress --- .../tools/extractor.gd | 43 ++++-- .../tools/extractor_dialog.gd | 29 ++-- .../tools/extractor_dialog.tscn | 142 ++++++++++++++---- 3 files changed, 160 insertions(+), 54 deletions(-) diff --git a/addons/zylann.translation_editor/tools/extractor.gd b/addons/zylann.translation_editor/tools/extractor.gd index 9b530ea..1f72821 100644 --- a/addons/zylann.translation_editor/tools/extractor.gd +++ b/addons/zylann.translation_editor/tools/extractor.gd @@ -3,11 +3,13 @@ const STATE_SEARCHING = 0 const STATE_READING_TEXT = 1 signal finished(results) +signal progress_reported(ratio) var _strings = {} var _thread = null var _time_before = 0.0 var _ignored_paths = {} +var _paths = [] func extract(root, ignored_paths=[]): @@ -23,10 +25,31 @@ func extract(root, ignored_paths=[]): func _extract(root): - _walk(root, funcref(self, "_process_file"), funcref(self, "_filter")) + _walk(root, funcref(self, "_index_file"), funcref(self, "_filter")) + + for i in len(_paths): + var fpath = _paths[i] + var f = File.new() + var err = f.open(fpath, File.READ) + if err != OK: + printerr("Could not open '", fpath, "', for read, error ", err) + continue + var ext = fpath.get_extension() + match ext: + "tscn": + _process_tscn(f, fpath) + "gd": + _process_gd(f, fpath) + f.close() + call_deferred("_report_progress", float(i) / float(len(_paths))) + call_deferred("_finished") +func _report_progress(ratio): + emit_signal("progress_reported", ratio) + + func _finished(): _thread.wait_to_finish() _thread = null @@ -38,27 +61,17 @@ func _finished(): func _filter(path): if path in _ignored_paths: return false + if path[0] == ".": + return false return true -func _process_file(fpath): +func _index_file(fpath): var ext = fpath.get_extension() #print("File ", fpath) - if ext != "tscn" and ext != "gd": return - - var f = File.new() - var err = f.open(fpath, File.READ) - if err != OK: - printerr("Could not open '", fpath, "', for read, error ", err) - return - - match ext: - "tscn": - _process_tscn(f, fpath) - "gd": - _process_gd(f, fpath) + _paths.append(fpath) func _process_tscn(f, fpath): diff --git a/addons/zylann.translation_editor/tools/extractor_dialog.gd b/addons/zylann.translation_editor/tools/extractor_dialog.gd index 4fcaf12..757379a 100644 --- a/addons/zylann.translation_editor/tools/extractor_dialog.gd +++ b/addons/zylann.translation_editor/tools/extractor_dialog.gd @@ -6,9 +6,10 @@ const Extractor = preload("extractor.gd") signal import_selected(strings) onready var _root_path_edit = get_node("VBoxContainer/HBoxContainer/RootPathEdit") -onready var _summary_label = get_node("VBoxContainer/SummaryLabel") +onready var _excluded_dirs_edit = get_node("VBoxContainer/Options/ExcludedDirsEdit") +onready var _summary_label = get_node("VBoxContainer/StatusBar/SummaryLabel") onready var _results_list = get_node("VBoxContainer/Results") -onready var _progress_bar = get_node("VBoxContainer/ProgressBar") +onready var _progress_bar = get_node("VBoxContainer/StatusBar/ProgressBar") onready var _extract_button = get_node("VBoxContainer/Buttons/ExtractButton") onready var _import_button = get_node("VBoxContainer/Buttons/ImportButton") @@ -48,18 +49,21 @@ func _on_ExtractButton_pressed(): printerr("Directory `", root, "` does not exist") return - _extractor = Extractor.new() - _extractor.connect("finished", self, "_on_Extractor_finished") - #_extractor.extract("res://", ["addons"]) - _extractor.extract("res://", []) + var excluded_dirs = _excluded_dirs_edit.text.split(";", false) + for i in len(excluded_dirs): + excluded_dirs[i] = excluded_dirs[i].strip_edges() - # TODO Progress reporting - _progress_bar.value = 50 + _extractor = Extractor.new() + _extractor.connect("progress_reported", self, "_on_Extractor_progress_reported") + _extractor.connect("finished", self, "_on_Extractor_finished") + _extractor.extract(root, excluded_dirs) + + _progress_bar.value = 0 + _progress_bar.show() + _summary_label.text = "" _extract_button.disabled = true _import_button.disabled = true - - _summary_label.text = "Extracting..." func _on_ImportButton_pressed(): @@ -73,9 +77,14 @@ func _on_CancelButton_pressed(): hide() +func _on_Extractor_progress_reported(ratio): + _progress_bar.value = 100.0 * ratio + + func _on_Extractor_finished(results): print("Extractor finished") _progress_bar.value = 100 + _progress_bar.hide() _results_list.clear() diff --git a/addons/zylann.translation_editor/tools/extractor_dialog.tscn b/addons/zylann.translation_editor/tools/extractor_dialog.tscn index 7932e20..14c9f92 100644 --- a/addons/zylann.translation_editor/tools/extractor_dialog.tscn +++ b/addons/zylann.translation_editor/tools/extractor_dialog.tscn @@ -106,7 +106,7 @@ caret_blink_speed = 0.65 caret_position = 0 _sections_unfolded = [ "Size Flags" ] -[node name="SummaryLabel" type="Label" parent="VBoxContainer" index="1"] +[node name="Options" type="HBoxContainer" parent="VBoxContainer" index="1"] anchor_left = 0.0 anchor_top = 0.0 @@ -114,26 +114,133 @@ anchor_right = 0.0 anchor_bottom = 0.0 margin_top = 28.0 margin_right = 624.0 -margin_bottom = 42.0 +margin_bottom = 52.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="ExcludedDirsLabel" type="Label" parent="VBoxContainer/Options" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 122.0 +margin_bottom = 19.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 2 mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 4 +text = "Ignored directories" percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="Results" type="Tree" parent="VBoxContainer" index="2"] +[node name="ExcludedDirsEdit" type="LineEdit" parent="VBoxContainer/Options" index="1"] anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 -margin_top = 46.0 +margin_left = 126.0 margin_right = 624.0 -margin_bottom = 396.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +hint_tooltip = "Directories seperated by semicolons `;`" +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 3 +size_flags_vertical = 1 +text = "addons" +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Hint" ] + +[node name="StatusBar" type="Control" parent="VBoxContainer" index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 56.0 +margin_right = 624.0 +margin_bottom = 80.0 +rect_min_size = Vector2( 0, 24 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +_sections_unfolded = [ "Rect" ] + +[node name="SummaryLabel" type="Label" parent="VBoxContainer/StatusBar" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 4.0 +margin_right = 624.0 +margin_bottom = 18.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +align = 1 +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="ProgressBar" type="ProgressBar" parent="VBoxContainer/StatusBar" index="1"] + +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 624.0 +margin_bottom = 16.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 0 +min_value = 0.0 +max_value = 100.0 +step = 1.0 +page = 0.0 +value = 0.0 +exp_edit = false +rounded = false +percent_visible = true +_sections_unfolded = [ "Rect" ] + +[node name="Results" type="Tree" parent="VBoxContainer" index="3"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 84.0 +margin_right = 624.0 +margin_bottom = 416.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = true focus_mode = 2 @@ -150,30 +257,6 @@ drop_mode_flags = 0 select_mode = 1 _sections_unfolded = [ "Size Flags" ] -[node name="ProgressBar" type="ProgressBar" parent="VBoxContainer" index="3"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 400.0 -margin_right = 624.0 -margin_bottom = 416.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 0 -min_value = 0.0 -max_value = 100.0 -step = 1.0 -page = 0.0 -value = 0.0 -exp_edit = false -rounded = false -percent_visible = true - [node name="Spacer" type="Control" parent="VBoxContainer" index="4"] anchor_left = 0.0 @@ -252,6 +335,7 @@ mouse_filter = 0 mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 +disabled = true toggle_mode = false enabled_focus_mode = 2 shortcut = null