mirror of
https://github.com/tcsenpai/UWINE.git
synced 2025-06-03 01:50:06 +00:00
185 lines
5.7 KiB
Python
Executable File
185 lines
5.7 KiB
Python
Executable File
#!/bin/python
|
|
|
|
import os
|
|
import argparse
|
|
from tabulate import tabulate
|
|
import dotenv
|
|
import json
|
|
|
|
import libs.ids_loader as ids_loader
|
|
import libs.gameid_loader as gameid_loader
|
|
import libs.protonpath_loader as protonpath_loader
|
|
import libs.wineprefix_loader as wineprefix_loader
|
|
import libs.filepath_loader as filepath_loader
|
|
import libs.ulwgl_loader as ulwgl_loader
|
|
import libs.customvars_loader as customvars_loader
|
|
import libs.predirectives_loader as predirectives_loader
|
|
import libs.postdirectives_loader as postdirectives_loader
|
|
import libs.ulwlg_runner as ulwlg_runner
|
|
import libs.wine_runner as wine_runner
|
|
import libs.ulauncher_creator as ulauncher_creator
|
|
|
|
# SECTION Constants
|
|
LAUNCHDIR = os.getcwd()
|
|
print("[*] Launching in " + LAUNCHDIR)
|
|
UWINEDIR = os.path.dirname(os.path.realpath(__file__))
|
|
print("[*] UWINE is installed in " + UWINEDIR)
|
|
|
|
# SECTION Default values
|
|
ulwgl_dir = UWINEDIR + "/launcher"
|
|
proton_path = UWINEDIR + "/protons/current"
|
|
use_wine = False
|
|
wine_prefix = UWINEDIR + "/PREFIX"
|
|
ids_json_path = UWINEDIR + "/ids.json"
|
|
ids = {}
|
|
game_id = 0
|
|
filepath = ""
|
|
|
|
envfile = UWINEDIR + "/.env"
|
|
|
|
# NOTE Parsing the arguments
|
|
parser = argparse.ArgumentParser(
|
|
prog="uwine",
|
|
description="ULWGL Launcher Wrapper for human beings",
|
|
epilog="https://github.com/thecookingsenpai/UWINE",
|
|
)
|
|
parser.add_argument(
|
|
"filepath",
|
|
help="Path to the file to be launched",
|
|
type=str,
|
|
nargs="?",
|
|
default=None,
|
|
)
|
|
parser.add_argument(
|
|
"-l", "--load", help="Load a specific env file", type=str, dest="envfile"
|
|
)
|
|
parser.add_argument(
|
|
"-g", "--game-id", dest="gameid", help="Game ID to be used", type=int
|
|
)
|
|
parser.add_argument(
|
|
"-p", "--proton-path", dest="protonpath", help="Path to the Proton installation"
|
|
)
|
|
parser.add_argument("-i", "--ids-json", dest="ids", help="Path to the ids.json file")
|
|
parser.add_argument(
|
|
"-w", "--wine-prefix", dest="wineprefix", help="Path to the Wine prefix"
|
|
)
|
|
parser.add_argument(
|
|
"-u", "--ulwgl", dest="ulwlgdir", help="Path to the ULWGL installation"
|
|
)
|
|
parser.add_argument(
|
|
"-a",
|
|
"--additionalargs",
|
|
dest="additionalargs",
|
|
help="Additional arguments to be passed to the software (at the end, as a string)",
|
|
type=str,
|
|
default="",
|
|
)
|
|
|
|
parser.add_argument("-v", "--version", action="version", version="%(prog)s 0.1")
|
|
|
|
args = parser.parse_args()
|
|
print(args.ulwlgdir)
|
|
|
|
# Loading the .env file
|
|
if args.envfile:
|
|
envfile = args.envfile
|
|
print("[*] Loading the env file: " + envfile)
|
|
# Which is mandatory
|
|
if not os.path.isfile(envfile):
|
|
print(
|
|
"[FATAL] env file not found: "
|
|
+ envfile
|
|
+ "\nTry to copy env.example to .env in your UWINE installation directory."
|
|
)
|
|
exit(1)
|
|
dotenv.load_dotenv(dotenv_path=envfile)
|
|
|
|
# Ensuring we support either none or some customvars
|
|
if os.environ["CUSTOMVARS"]:
|
|
print("[INFO] [CUSTOMVARS] " + os.environ["CUSTOMVARS"])
|
|
env_defined_customvars = os.environ["CUSTOMVARS"]
|
|
else:
|
|
env_defined_customvars = {}
|
|
|
|
if "USE_WINE" not in os.environ:
|
|
use_wine = False
|
|
elif os.environ["USE_WINE"] == "True":
|
|
use_wine = True
|
|
else:
|
|
use_wine = False
|
|
print("[INFO] [USE_WINE] " + str(use_wine))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# SECTION Loading methods
|
|
ulwgl_dir = ulwgl_loader.set_ulwgldir(args.ulwlgdir, UWINEDIR)
|
|
ids, ids_json_path = ids_loader.load_ids(args.ids, ids, ids_json_path)
|
|
loaded_customvars = customvars_loader.set_customvars(env_defined_customvars, {})
|
|
os.environ["GAMEID"] = str(gameid_loader.load_gameid(args.gameid, game_id, ids))
|
|
os.environ["PROTONPATH"] = protonpath_loader.set_protonpath(
|
|
args.protonpath, proton_path, UWINEDIR
|
|
)
|
|
os.environ["WINEPREFIX"] = wineprefix_loader.set_wineprefix(
|
|
args.wineprefix, wine_prefix
|
|
)
|
|
original_filepath = args.filepath
|
|
filepath = filepath_loader.set_filepath(args.filepath, LAUNCHDIR)
|
|
# Directives support
|
|
predirectives = predirectives_loader.set_predirectives(
|
|
""
|
|
) # Future support for postdirectives in cli
|
|
postdirectives = postdirectives_loader.set_postdirectives(args.additionalargs)
|
|
# SECTION Launching the game
|
|
print("\n[*] Launching the game...")
|
|
|
|
# ANCHOR Recap
|
|
# Lets make a nice table to show the user what we are going to do
|
|
|
|
print(
|
|
tabulate(
|
|
[
|
|
["ULWGLDIR", ulwgl_dir],
|
|
["WINEPREFIX", os.environ["WINEPREFIX"]],
|
|
["PROTONPATH", os.environ["PROTONPATH"]],
|
|
["USE_WINE", use_wine],
|
|
["IDS_JSON", ids_json_path],
|
|
["GAMEID", os.environ["GAMEID"]],
|
|
["PREDIRECTIVES", predirectives],
|
|
["FILEPATH", filepath],
|
|
["POSTDIRECTIVES", postdirectives],
|
|
["CUSTOMVARS", loaded_customvars],
|
|
],
|
|
headers=["Variable", "Value"],
|
|
tablefmt="fancy_grid",
|
|
)
|
|
)
|
|
|
|
print("[+] Creating the launcher...")
|
|
# Creating a launcher with all the variables in the table above
|
|
ulauncher_creator.create_launcher(
|
|
os.environ["GAMEID"],
|
|
os.environ["PROTONPATH"],
|
|
os.environ["WINEPREFIX"],
|
|
ulwgl_dir,
|
|
predirectives,
|
|
original_filepath,
|
|
postdirectives,
|
|
loaded_customvars,
|
|
use_wine,
|
|
)
|
|
print("[+] Launcher created successfully at " + ulwgl_dir + "/launcher.uwine")
|
|
|
|
# Launching with ulwlg_runner or wine depending on the use_wine variable
|
|
if use_wine:
|
|
print("[*] Using Wine to launch the game")
|
|
wine_runner.wine_run(filepath, os.environ["PROTONPATH"])
|
|
else:
|
|
print("[*] Using ULWGL to launch the game")
|
|
ulwlg_runner.ulwlg_run(
|
|
filepath,
|
|
ulwgl_dir,
|
|
os.environ["PROTONPATH"],
|
|
os.environ["WINEPREFIX"],
|
|
os.environ["GAMEID"],
|
|
)
|