Skip to content

Commit 5ca3190

Browse files
committed
Add custom gamemedia dir in first time setup
1 parent cccf916 commit 5ca3190

File tree

4 files changed

+104
-3
lines changed

4 files changed

+104
-3
lines changed

scenes/popups/first_time/GamesSection.gd

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,19 @@ signal advance_section
55
@onready var n_intro_lbl := %IntroLabel
66
@onready var n_path := %Path
77
@onready var n_choose_dir := %ChooseDir
8+
@onready var n_custom_media_container := %CustomMediaContainer
9+
@onready var n_use_custom_media := %UseCustomMedia
10+
@onready var n_media_path := %MediaPath
11+
@onready var n_media_choose_dir := %MediaChooseDir
12+
@onready var n_media_warning_empty := %MediaWarningEmpty
13+
814
@onready var n_next_button := %NextButton
915

1016
func _ready():
1117
set_path(RetroHubConfig.config.games_dir)
18+
set_media_path(RetroHubConfig.config.custom_gamemedia_dir)
19+
n_use_custom_media.set_pressed_no_signal(RetroHubConfig.config.custom_gamemedia_dir.is_empty())
20+
_on_use_custom_media_toggled(n_use_custom_media.button_pressed)
1221

1322
func grab_focus():
1423
if RetroHubConfig.config.accessibility_screen_reader_enabled:
@@ -18,6 +27,7 @@ func grab_focus():
1827

1928
func _on_NextButton_pressed():
2029
RetroHubConfig.config.games_dir = n_path.text
30+
RetroHubConfig.config.custom_gamemedia_dir = n_media_path.text if not n_use_custom_media.button_pressed else ""
2131
RetroHubConfig.load_game_data_files()
2232
emit_signal("advance_section")
2333

@@ -28,4 +38,31 @@ func _on_ChooseDir_pressed():
2838
func set_path(path: String):
2939
if not path.is_empty():
3040
n_path.text = path
31-
n_next_button.disabled = n_path.text.is_empty()
41+
query_next_btn()
42+
43+
func _on_use_custom_media_toggled(toggled_on: bool):
44+
n_custom_media_container.visible = not toggled_on
45+
check_empty_media()
46+
query_next_btn()
47+
48+
func check_empty_media():
49+
if n_use_custom_media.button_pressed:
50+
n_media_warning_empty.visible = false
51+
return
52+
var dir := DirAccess.open(n_media_path.text)
53+
dir.include_navigational = false
54+
n_media_warning_empty.visible = not (dir.get_files().is_empty() and dir.get_directories().is_empty())
55+
56+
func query_next_btn():
57+
n_next_button.disabled = n_path.text.is_empty() or \
58+
(not n_use_custom_media.button_pressed and (n_media_path.text.is_empty() or not DirAccess.dir_exists_absolute(n_media_path.text)))
59+
60+
func _on_media_choose_dir_pressed():
61+
RetroHubUI.request_folder_load(n_media_path.text)
62+
set_media_path(await RetroHubUI.path_selected)
63+
64+
func set_media_path(path: String):
65+
if not path.is_empty():
66+
n_media_path.text = path
67+
check_empty_media()
68+
query_next_btn()

scenes/popups/first_time/GamesSection.tscn

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,59 @@ focus_neighbor_top = NodePath("../../NextButton")
5050
text = "Choose directory"
5151
icon = ExtResource("2")
5252

53+
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer"]
54+
layout_mode = 2
55+
56+
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer2"]
57+
layout_mode = 2
58+
size_flags_horizontal = 3
59+
text = "Store downloaded media in the configuration directory?"
60+
61+
[node name="UseCustomMedia" type="CheckButton" parent="VBoxContainer/HBoxContainer2"]
62+
unique_name_in_owner = true
63+
layout_mode = 2
64+
button_pressed = true
65+
66+
[node name="CustomMediaContainer" type="MarginContainer" parent="VBoxContainer"]
67+
unique_name_in_owner = true
68+
layout_mode = 2
69+
theme_override_constants/margin_left = 3
70+
theme_override_constants/margin_top = 10
71+
theme_override_constants/margin_right = 3
72+
73+
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/CustomMediaContainer"]
74+
layout_mode = 2
75+
76+
[node name="Label" type="Label" parent="VBoxContainer/CustomMediaContainer/VBoxContainer"]
77+
layout_mode = 2
78+
text = "Game media location"
79+
80+
[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/CustomMediaContainer/VBoxContainer"]
81+
layout_mode = 2
82+
theme_override_constants/separation = 15
83+
84+
[node name="MediaPath" type="LineEdit" parent="VBoxContainer/CustomMediaContainer/VBoxContainer/HBoxContainer3"]
85+
unique_name_in_owner = true
86+
layout_mode = 2
87+
size_flags_horizontal = 3
88+
focus_mode = 0
89+
placeholder_text = "<empty>"
90+
editable = false
91+
92+
[node name="MediaChooseDir" type="Button" parent="VBoxContainer/CustomMediaContainer/VBoxContainer/HBoxContainer3"]
93+
unique_name_in_owner = true
94+
layout_mode = 2
95+
focus_neighbor_top = NodePath("../../../../NextButton")
96+
text = "Choose directory"
97+
icon = ExtResource("2")
98+
99+
[node name="MediaWarningEmpty" type="RichTextLabel" parent="VBoxContainer/CustomMediaContainer/VBoxContainer"]
100+
unique_name_in_owner = true
101+
layout_mode = 2
102+
bbcode_enabled = true
103+
text = "[img]assets/icons/warning.svg[/img] The selected directory isn't currently empty."
104+
fit_content = true
105+
53106
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
54107
layout_mode = 2
55108

@@ -60,7 +113,7 @@ text = "This directory will contain all your games. It has a special structure:
60113
61114
To add games, simply create the system folder if it doesn't exist (either from RetroHub in the next section or manually) and drop your games inside it.
62115
63-
RetroHub will automatically filter files based on common extensions per system and _recognize your game files. This is configurable per system if tweaks are needed."
116+
RetroHub will automatically filter files based on common extensions per system and recognize your game files. This is configurable per system if tweaks are needed."
64117
autowrap_mode = 2
65118

66119
[node name="AccessibilityFocus" type="Node" parent="VBoxContainer/Label2"]
@@ -74,4 +127,6 @@ disabled = true
74127
text = "Next"
75128

76129
[connection signal="pressed" from="VBoxContainer/HBoxContainer/ChooseDir" to="." method="_on_ChooseDir_pressed"]
130+
[connection signal="toggled" from="VBoxContainer/HBoxContainer2/UseCustomMedia" to="." method="_on_use_custom_media_toggled"]
131+
[connection signal="pressed" from="VBoxContainer/CustomMediaContainer/VBoxContainer/HBoxContainer3/MediaChooseDir" to="." method="_on_media_choose_dir_pressed"]
77132
[connection signal="pressed" from="VBoxContainer/NextButton" to="." method="_on_NextButton_pressed"]

source/Config.gd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,4 +721,6 @@ func get_gamelists_dir() -> String:
721721
return get_config_dir() + "/gamelists"
722722

723723
func get_gamemedia_dir() -> String:
724+
if not config.custom_gamemedia_dir.is_empty():
725+
return config.custom_gamemedia_dir
724726
return get_config_dir() + "/gamemedia"

source/data/ConfigData.gd

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ var virtual_keyboard_type : String = ConfigData.default_virtual_keyboard_type():
3535
var virtual_keyboard_show_on_controller : bool = true: set = _set_virtual_keyboard_show_on_controller
3636
var virtual_keyboard_show_on_mouse : bool = false: set = _set_virtual_keyboard_show_on_mouse
3737
var accessibility_screen_reader_enabled : bool = true: set = _set_accessibility_screen_reader_enabled
38+
var custom_gamemedia_dir : String = "": set = _set_custom_gamemedia_dir
3839

3940
const KEY_CONFIG_VERSION = "config_version"
4041
const KEY_IS_FIRST_TIME = "is_first_time"
@@ -64,6 +65,7 @@ const KEY_VIRTUAL_KEYBOARD_TYPE = "virtual_keyboard_type"
6465
const KEY_VIRTUAL_KEYBOARD_SHOW_ON_CONTROLLER = "virtual_keyboard_show_on_controller"
6566
const KEY_VIRTUAL_KEYBOARD_SHOW_ON_MOUSE = "virtual_keyboard_show_on_mouse"
6667
const KEY_ACCESSIBILITY_SCREEN_READER_ENABLED = "accessibility_screen_reader_enabled"
68+
const KEY_CUSTOM_GAMEMEDIA_DIR = "custom_gamemedia_dir"
6769

6870

6971
const _keys = [
@@ -94,7 +96,8 @@ const _keys = [
9496
KEY_VIRTUAL_KEYBOARD_TYPE,
9597
KEY_VIRTUAL_KEYBOARD_SHOW_ON_CONTROLLER,
9698
KEY_VIRTUAL_KEYBOARD_SHOW_ON_MOUSE,
97-
KEY_ACCESSIBILITY_SCREEN_READER_ENABLED
99+
KEY_ACCESSIBILITY_SCREEN_READER_ENABLED,
100+
KEY_CUSTOM_GAMEMEDIA_DIR
98101
]
99102

100103
var _should_save : bool = true
@@ -296,6 +299,10 @@ func _set_accessibility_screen_reader_enabled(_accessibility_screen_reader_enabl
296299
mark_for_saving()
297300
accessibility_screen_reader_enabled = _accessibility_screen_reader_enabled
298301

302+
func _set_custom_gamemedia_dir(_custom_gamemedia_dir):
303+
mark_for_saving()
304+
custom_gamemedia_dir = _custom_gamemedia_dir
305+
299306
func mark_for_saving():
300307
if _should_save:
301308
_config_changed = true

0 commit comments

Comments
 (0)