Allow to exclude folders, exclude folders starting by '.', show progress

This commit is contained in:
Marc Gilleron 2018-11-20 23:34:25 +00:00
parent 126acb0247
commit ec4f60d6fa
3 changed files with 160 additions and 54 deletions

View File

@ -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):

View File

@ -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()

View File

@ -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