Initial commit
This commit is contained in:
commit
05199e1d60
|
@ -0,0 +1,117 @@
|
|||
#!/bin/python3
|
||||
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
import shutil
|
||||
|
||||
config_file_name = "openmw.cfg"
|
||||
config_file_path = os.path.join(pathlib.Path.home(), ".config", "openmw", config_file_name)
|
||||
|
||||
if (not os.path.exists(config_file_path)):
|
||||
print("Could not find", config_file_name, "at", config_file_path)
|
||||
exit(1)
|
||||
|
||||
def getarg(args: list, index: int, arg_type: type):
|
||||
if (index >= len(args)):
|
||||
print("Missing argument", index)
|
||||
exit(1)
|
||||
|
||||
arg = args[index]
|
||||
|
||||
if (type(arg) != arg_type):
|
||||
print("Argument", index, "must be a", str(arg_type))
|
||||
exit(1)
|
||||
|
||||
return arg
|
||||
|
||||
def install_mod(args: list) -> None:
|
||||
mod_data_path = getarg(args, 0, str)
|
||||
|
||||
if (not os.path.exists(mod_data_path)):
|
||||
print("Path \"%s\" does not exist" % mod_data_path)
|
||||
exit(1)
|
||||
|
||||
mod_data_path = os.path.abspath(mod_data_path)
|
||||
|
||||
with open(config_file_path, "r") as config_file:
|
||||
for line in config_file:
|
||||
if (mod_data_path in line):
|
||||
print(mod_data_path, "is already installed!")
|
||||
exit(1)
|
||||
|
||||
with open(config_file_path, "a") as config_file:
|
||||
config_file.write("data=\"%s\"\n" % mod_data_path)
|
||||
|
||||
for file_name in os.listdir(mod_data_path):
|
||||
if (file_name.endswith(".bsa")):
|
||||
config_file.write("fallback-archive=%s\n" % file_name)
|
||||
|
||||
print(mod_data_path, "installed!")
|
||||
|
||||
def uninstall_mod(args: list) -> None:
|
||||
mod_data_path = os.path.abspath(getarg(args, 0, str))
|
||||
|
||||
with open(config_file_path, "r") as config_file:
|
||||
lines = config_file.readlines()
|
||||
|
||||
with open(config_file_path, "w") as config_file:
|
||||
line_index = 0
|
||||
|
||||
while (line_index < len(lines)):
|
||||
if mod_data_path in lines[line_index]:
|
||||
line_index += 1
|
||||
|
||||
while (
|
||||
(line_index < len(lines)) and
|
||||
lines[line_index].startswith("fallback-archive")
|
||||
):
|
||||
line_index += 1
|
||||
else:
|
||||
config_file.write(lines[line_index])
|
||||
|
||||
line_index += 1
|
||||
|
||||
def list_mods(args: list) -> None:
|
||||
with open(config_file_path, "r") as config_file:
|
||||
mod_iterations = 0
|
||||
|
||||
for line in config_file:
|
||||
if (line.startswith("data")):
|
||||
split_line = line.split("=")
|
||||
|
||||
if (len(split_line) == 2):
|
||||
mod_data_path = split_line[1].strip("\t\n ")
|
||||
mod_name = os.path.split(mod_data_path)[1].strip("\"")
|
||||
|
||||
print("[%d]: %s (%s)" % (mod_iterations, mod_name, mod_data_path))
|
||||
|
||||
mod_iterations += 1
|
||||
|
||||
def backup_config(args: list) -> None:
|
||||
backup_path = getarg(args, 0, str)
|
||||
|
||||
if (not os.path.exists(backup_path) and not os.path.exists(os.path.split(backup_path)[0])):
|
||||
print("Config file backup path is not valid")
|
||||
exit(1)
|
||||
|
||||
shutil.copy2(config_file_path, backup_path)
|
||||
|
||||
actions = {
|
||||
"install": install_mod,
|
||||
"uninstall": uninstall_mod,
|
||||
"list": list_mods,
|
||||
"backup": backup_config
|
||||
}
|
||||
|
||||
if (len(sys.argv) < 2):
|
||||
print("Expected an action")
|
||||
exit(1)
|
||||
|
||||
action_name = sys.argv[1]
|
||||
|
||||
if (not action_name in actions):
|
||||
print("Unknown action \"%s\". Supported actions:" % action_name, list(actions.keys()))
|
||||
exit(1)
|
||||
|
||||
actions[action_name](sys.argv[2:])
|
Reference in New Issue