Skip to content

Commit 0bcaeb2

Browse files
game search: match against XML display names, not just filenames
Arcade-type systems use ROM filenames (e.g. sf2.zip) with proper display names in XML files. Search function now checks display names from XML in addition to filenames. Also makes XML file discovery generic instead of hardcoding miyoogamelist.xml.
1 parent 4b93b83 commit 0bcaeb2

5 files changed

Lines changed: 26 additions & 19 deletions

File tree

App/PyUI/main-ui/games/utils/rom_utils.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,14 @@ def _get_valid_suffix(self, system):
3030
#TODO do a git system device file so we can geneically
3131
#support other formats/systems
3232
def get_miyoo_games_file(self,system):
33-
return os.path.join(self.roms_path, self.get_roms_dir_for_emu_dir(system),"miyoogamelist.xml")
33+
system_dir = os.path.join(self.roms_path, self.get_roms_dir_for_emu_dir(system))
34+
try:
35+
for entry in os.scandir(system_dir):
36+
if entry.is_file() and entry.name.endswith('.xml'):
37+
return entry.path
38+
except OSError:
39+
pass
40+
return ""
3441

3542
def has_roms(self, game_system, directory = None):
3643
directories_to_search = []

App/PyUI/main-ui/menus/games/just_games_menu.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class JustGamesMenu(RomsMenuCommon):
1212
def __init__(self):
1313
super().__init__()
1414

15-
def include_rom(self,rom_file_name, rom_file_path):
15+
def include_rom(self,rom_file_name, rom_file_path, display_name=""):
1616
return not os.path.isdir(rom_file_path)
1717

1818
def _get_rom_list(self) -> list[GridOrListEntry]:

App/PyUI/main-ui/menus/games/search_games_for_system_menu.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ def __init__(self, game_system : GameSystem, search_str):
1414
self.game_system = game_system
1515
self.search_str = search_str
1616

17-
def include_rom(self,rom_file_name, rom_file_path):
18-
return self.search_str in rom_file_name.upper() or os.path.isdir(rom_file_path)
17+
def include_rom(self,rom_file_name, rom_file_path, display_name=""):
18+
return self.search_str in rom_file_name.upper() or self.search_str in display_name.upper() or os.path.isdir(rom_file_path)
1919

2020
def _get_rom_list(self) -> list[GridOrListEntry]:
2121
roms = []
@@ -39,7 +39,7 @@ def _collect_roms_recursively(game_system, directory=None):
3939
# Recurse into subdirectory
4040
sub_roms = _collect_roms_recursively(game_system, rom_path)
4141
all_roms.extend(sub_roms)
42-
if(self.search_str in rom_name.upper()):
42+
if(self.search_str in rom_name.upper() or self.search_str in entry.get_primary_text().upper()):
4343
all_roms.append(entry)
4444
else:
4545
all_roms.append(entry)

App/PyUI/main-ui/menus/games/searched_roms_menu.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ def __init__(self, search_str):
1212
super().__init__()
1313
self.search_str = search_str
1414

15-
def include_rom(self,rom_file_name, rom_file_path):
16-
return self.search_str in rom_file_name.upper() or os.path.isdir(rom_file_path)
15+
def include_rom(self,rom_file_name, rom_file_path, display_name=""):
16+
return self.search_str in rom_file_name.upper() or self.search_str in display_name.upper() or os.path.isdir(rom_file_path)
1717

1818
def _get_rom_list(self) -> list[GridOrListEntry]:
1919
roms = []
@@ -38,7 +38,7 @@ def _collect_roms_recursively(game_system, directory=None):
3838
# Recurse into subdirectory
3939
sub_roms = _collect_roms_recursively(game_system, rom_path)
4040
all_roms.extend(sub_roms)
41-
if(self.search_str in rom_name.upper()):
41+
if(self.search_str in rom_name.upper() or self.search_str in entry.get_primary_text().upper()):
4242
all_roms.append(entry)
4343
else:
4444
all_roms.append(entry)

App/PyUI/main-ui/menus/games/utils/rom_select_options_builder.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def _get_favorite_icon(self, rom_info: RomInfo) -> str:
268268
return None
269269

270270

271-
def build_rom_list(self, game_system,filter: Callable[[str, str], bool] = lambda a,b: True, subfolder = None,
271+
def build_rom_list(self, game_system,filter: Callable[[str, str, str], bool] = lambda a,b,c: True, subfolder = None,
272272
prefer_savestate_screenshot: bool = False) -> list[GridOrListEntry]:
273273
file_rom_list = []
274274
folder_rom_list = []
@@ -280,11 +280,11 @@ def build_rom_list(self, game_system,filter: Callable[[str, str], bool] = lambda
280280
for rom_file_path in valid_files:
281281
rom_file_name = os.path.basename(rom_file_path)
282282
game_entry = miyoo_game_list.get_by_file_path(rom_file_path)
283-
if(filter(rom_file_name, rom_file_path)):
284-
if(game_entry is not None):
285-
display_name = game_entry.name
286-
else:
287-
display_name = RomFileNameUtils.get_rom_name_without_extensions(game_system,rom_file_path)
283+
if(game_entry is not None):
284+
display_name = game_entry.name
285+
else:
286+
display_name = RomFileNameUtils.get_rom_name_without_extensions(game_system,rom_file_path)
287+
if(filter(rom_file_name, rom_file_path, display_name)):
288288

289289
rom_info = RomInfo(game_system,rom_file_path, display_name)
290290

@@ -302,11 +302,11 @@ def build_rom_list(self, game_system,filter: Callable[[str, str], bool] = lambda
302302
for rom_file_path in valid_folders:
303303
rom_file_name = os.path.basename(rom_file_path)
304304
game_entry = miyoo_game_list.get_by_file_path(rom_file_path)
305-
if(filter(rom_file_name, rom_file_path)):
306-
if(game_entry is not None):
307-
display_name = game_entry.name
308-
else:
309-
display_name = rom_file_name
305+
if(game_entry is not None):
306+
display_name = game_entry.name
307+
else:
308+
display_name = rom_file_name
309+
if(filter(rom_file_name, rom_file_path, display_name)):
310310

311311
rom_info = RomInfo(game_system, rom_file_path, display_name)
312312

0 commit comments

Comments
 (0)