Add scanners package

This commit is contained in:
Mathieu Comandon 2021-05-10 23:16:15 -07:00
parent d0d5b5fc83
commit 7e000f5cfa
7 changed files with 82 additions and 79 deletions

View file

@ -22,7 +22,7 @@ from lutris.util.jobs import thread_safe_call
from lutris.util.log import logger
from lutris.util.strings import parse_version, split_arguments
from lutris.util.wine import dxvk, nine
from lutris.util.wine.prefix import WinePrefixManager, find_prefix, DEFAULT_DLL_OVERRIDES
from lutris.util.wine.prefix import DEFAULT_DLL_OVERRIDES, WinePrefixManager, find_prefix
from lutris.util.wine.wine import (
POL_PATH, WINE_DIR, WINE_PATHS, detect_arch, display_vulkan_error, esync_display_limit_warning,
esync_display_version_warning, fsync_display_support_warning, fsync_display_version_warning, get_default_version,

View file

View file

View file

@ -0,0 +1,79 @@
import os
from lutris.config import write_game_config
from lutris.database.games import add_game, get_games
from lutris.game import Game
from lutris.util.retroarch.core_config import RECOMMENDED_CORES
from lutris.util.strings import slugify
ROM_FLAGS = [
"USA",
"Europe",
"World",
"Japan",
"Japan, USA",
"USA, Europe",
"Proto",
"SGB Enhanced",
"Rev A",
"V1.1",
"F",
"U",
"E",
"W",
"M3"
]
EXTRA_FLAGS = [
"!",
"S"
]
def scan_directory(dirname):
files = os.listdir(dirname)
folder_extentions = {os.path.splitext(filename)[1] for filename in files}
core_matches = {}
for core in RECOMMENDED_CORES:
for ext in RECOMMENDED_CORES[core].get("extensions", []):
if ext in folder_extentions:
core_matches[ext] = core
added_games = []
for filename in files:
name, ext = os.path.splitext(filename)
if ext not in core_matches:
continue
for flag in ROM_FLAGS:
name = name.replace(" (%s)" % flag, "")
for flag in EXTRA_FLAGS:
name = name.replace("[%s]" % flag, "")
if ", The" in name:
name = "The %s" % name.replace(", The", "")
name = name.strip()
print("Importing '%s'" % name)
slug = slugify(name)
core = core_matches[ext]
config = {
"game": {
"core": core_matches[ext],
"main_file": os.path.join(dirname, filename)
}
}
installer_slug = "%s-libretro-%s" % (slug, core)
existing_game = get_games(filters={"installer_slug": installer_slug, "installed": "1"})
if existing_game:
game = Game(existing_game[0]["id"])
game.remove()
configpath = write_game_config(slug, config)
game_id = add_game(
name=name,
runner="libretro",
slug=slug,
directory=dirname,
installed=1,
installer_slug=installer_slug,
configpath=configpath
)
print("Imported %s" % name)
added_games.append(game_id)
return added_games

View file

@ -18,6 +18,7 @@ DEFAULT_DLL_OVERRIDES = {
"nvapi64": "d"
}
def is_prefix(path):
"""Return True if the path is prefix"""
return os.path.isdir(os.path.join(path, "drive_c")) \

View file

@ -39,6 +39,7 @@ setup(
'lutris.migrations',
'lutris.runners',
'lutris.runners.commands',
'lutris.scanners',
'lutris.services',
'lutris.util',
'lutris.util.dolphin',

View file

@ -1,78 +0,0 @@
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
from lutris.game import Game
from lutris.util.retroarch.core_config import RECOMMENDED_CORES
from lutris.util.strings import slugify
from lutris.database.games import add_game, get_games
from lutris.config import write_game_config
ROM_FLAGS = [
"USA",
"Europe",
"World",
"Japan",
"Japan, USA",
"USA, Europe",
"Proto",
"SGB Enhanced",
"Rev A",
"V1.1",
"F",
"U",
"E",
"W",
"M3"
]
EXTRA_FLAGS = [
"!",
"S"
]
dirname = sys.argv[1]
files = os.listdir(dirname)
folder_extentions = {os.path.splitext(filename)[1] for filename in files}
core_matches = {}
for core in RECOMMENDED_CORES:
for ext in RECOMMENDED_CORES[core].get("extensions", []):
if ext in folder_extentions:
core_matches[ext] = core
game_names = {}
for filename in files:
name, ext = os.path.splitext(filename)
if ext not in core_matches:
continue
for flag in ROM_FLAGS:
name = name.replace(" (%s)" % flag, "")
for flag in EXTRA_FLAGS:
name = name.replace("[%s]" % flag, "")
if ", The" in name:
name = "The %s" % name.replace(", The", "")
name = name.strip()
print("Importing '%s'" % name)
slug = slugify(name)
core = core_matches[ext]
config = {
"game": {
"core": core_matches[ext],
"main_file": os.path.join(dirname, filename)
}
}
installer_slug = "%s-libretro-%s" % (slug, core)
existing_game = get_games(filters={"installer_slug": installer_slug, "installed": "1"})
if existing_game:
game = Game(existing_game[0]["id"])
game.remove()
configpath = write_game_config(slug, config)
game_id = add_game(
name=name,
runner="libretro",
slug=slug,
directory=dirname,
installed=1,
installer_slug=installer_slug,
configpath=configpath
)
print("Imported %s" % name)