CLI: Added long-listing format with the list -l command.
This commit is contained in:
parent
61f9bfabdb
commit
fa6f4e7a63
1 changed files with 45 additions and 11 deletions
|
@ -27,6 +27,7 @@ import os.path
|
|||
import json
|
||||
import re
|
||||
import sys
|
||||
import xml.etree.ElementTree as et # I don't need anything powerful for this
|
||||
|
||||
PROFILE_DB = "profile_db.json"
|
||||
HOME = os.getenv("HOME", os.getcwd()) # Use relative path in attmpt to salvage things
|
||||
|
@ -262,20 +263,53 @@ def toggle_mod(cfg: Config, mod_name: str):
|
|||
raise SevenModsError(f"Could not enable {mod_name}: mod not available.")
|
||||
os.symlink(link_source, link_dest)
|
||||
|
||||
def get_mod_data(mod: str, cfg: Config) -> tuple:
|
||||
mod_info_path = os.path.join(cfg.mods_dir, mod, "ModInfo.xml")
|
||||
try:
|
||||
tree = et.parse(mod_info_path)
|
||||
except:
|
||||
return "", "", ""
|
||||
root = tree.getroot()
|
||||
name = ""
|
||||
author = ""
|
||||
version = ""
|
||||
for node in root[0]:
|
||||
if node.tag == "Name":
|
||||
name = node.attrib["value"]
|
||||
elif node.tag == "Author":
|
||||
author = node.attrib["value"]
|
||||
elif node.tag == "Version":
|
||||
version = node.attrib["value"]
|
||||
return name, version, author
|
||||
|
||||
def command_list(args: list, cfg: Config, profiles: ModProfiles):
|
||||
if len(args) == 2:
|
||||
available_mods = get_available_mods(cfg)
|
||||
loaded_mods = get_loaded_mods(cfg)
|
||||
for mod in available_mods:
|
||||
if mod in loaded_mods:
|
||||
print(f"\x1b[32m{mod}\x1b[0m *")
|
||||
else:
|
||||
print(f"\x1b[31m{mod}\x1b[0m")
|
||||
|
||||
elif len(args) == 3 and args[2] == "profiles":
|
||||
if len(args) == 3 and args[2] == "profiles":
|
||||
for profile in profiles.profiles:
|
||||
print(profile)
|
||||
|
||||
elif len(args) == 2 or len(args) == 3:
|
||||
available_mods = get_available_mods(cfg)
|
||||
loaded_mods = get_loaded_mods(cfg)
|
||||
if len(args) == 3 and args[2] == "-l":
|
||||
mod_info = [get_mod_data(i, cfg) for i in available_mods]
|
||||
ts1 = len(max(available_mods, key = lambda x: len(x), default = 3)) + 1
|
||||
pretty_names = [i[0] for i in mod_info]
|
||||
ts2 = len(max(pretty_names, key = lambda x: len(x), default = 4)) + 1
|
||||
versions = [i[1] for i in mod_info]
|
||||
ts3 = len(max(versions, key = lambda x: len(x), default = 7)) + 1
|
||||
authors = [i[2] for i in mod_info]
|
||||
ts4 = len(max(authors, key = lambda x: len(x), default = 6)) + 1
|
||||
print("".join(["mod".ljust(ts1), "name".ljust(ts2), "version".ljust(ts3), "author".ljust(ts4)]))
|
||||
for mod, name, version, author in zip(available_mods, pretty_names, versions, authors):
|
||||
if mod in loaded_mods:
|
||||
print(f"\x1b[32m{mod.ljust(ts1)}{name.ljust(ts2)}{version.ljust(ts3)}{author.ljust(ts4)}\x1b[0m *")
|
||||
else:
|
||||
print(f"\x1b[31m{mod.ljust(ts1)}{name.ljust(ts2)}{version.ljust(ts3)}{author.ljust(ts4)}\x1b[0m")
|
||||
else:
|
||||
for mod in available_mods:
|
||||
if mod in loaded_mods:
|
||||
print(f"\x1b[32m{mod}\x1b[0m *")
|
||||
else:
|
||||
print(f"\x1b[31m{mod}\x1b[0m")
|
||||
else:
|
||||
print(f"Usage: {args[0]} {args[1]} [profiles]")
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue