From e8f59aaf9fadace29e73e355fec538ce159c7c4c Mon Sep 17 00:00:00 2001 From: r37r05p3C7 <153987701+r37r05p3C7@users.noreply.github.com> Date: Tue, 13 Feb 2024 01:26:39 +0200 Subject: [PATCH 1/2] Added fuzzy finder for game folders --- modules/callbacks.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/callbacks.py b/modules/callbacks.py index e96a79c..66d0fe8 100644 --- a/modules/callbacks.py +++ b/modules/callbacks.py @@ -4,6 +4,7 @@ import plistlib import pathlib import asyncio +import difflib import typing import string import shlex @@ -109,11 +110,17 @@ def popup_content(): start_dir = globals.settings.default_exe_dir.get(globals.os) if start_dir: start_dir = pathlib.Path(start_dir) - game_dir = "".join(char for char in game.name.replace("&", "and") if char in (string.ascii_letters + string.digits + " ")) - game_dir = re.sub(r" +", r" ", game_dir).strip() - game_dir = start_dir / game_dir - if game_dir.is_dir(): - start_dir = game_dir + clean_dir = "".join(char for char in game.name.replace("&", "and") if char in (string.ascii_letters + string.digits + " ")) + clean_dir = re.sub(r" +", r" ", clean_dir).strip() + if (start_dir / clean_dir).is_dir(): + start_dir /= clean_dir + else: + similarity = lambda a, b: difflib.SequenceMatcher(None, a.lower(), b.lower()).quick_ratio() + dirs = [node for node in os.listdir(start_dir) if os.path.isdir(start_dir / node)] + similarity = {d: similarity(d, game.name) for d in dirs} + best_match = max(similarity, key=similarity.get) + if similarity[best_match] > 0.85: + start_dir /= best_match utils.push_popup(filepicker.FilePicker( title=f"Select or drop executable for {game.name}", start_dir=start_dir, From 6cf61224ab2ae3d4385884833f421a9b4a3c11e7 Mon Sep 17 00:00:00 2001 From: r37r05p3C7 <153987701+r37r05p3C7@users.noreply.github.com> Date: Tue, 13 Feb 2024 01:44:32 +0200 Subject: [PATCH 2/2] oops --- modules/callbacks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/callbacks.py b/modules/callbacks.py index 66d0fe8..0dfe0ff 100644 --- a/modules/callbacks.py +++ b/modules/callbacks.py @@ -115,9 +115,9 @@ def popup_content(): if (start_dir / clean_dir).is_dir(): start_dir /= clean_dir else: - similarity = lambda a, b: difflib.SequenceMatcher(None, a.lower(), b.lower()).quick_ratio() + ratio = lambda a, b: difflib.SequenceMatcher(None, a.lower(), b.lower()).quick_ratio() dirs = [node for node in os.listdir(start_dir) if os.path.isdir(start_dir / node)] - similarity = {d: similarity(d, game.name) for d in dirs} + similarity = {d: ratio(d, game.name) for d in dirs} best_match = max(similarity, key=similarity.get) if similarity[best_match] > 0.85: start_dir /= best_match