feat: modpack list verbose mode & improvements (#35)

This commit is contained in:
v4n
2025-03-22 21:21:13 +02:00
committed by GitHub
parent b6e92e2918
commit c30d2a46a5
+47 -8
View File
@@ -205,11 +205,14 @@ function initialize_modpack_directories() {
MODPACKS_DB_FILE="$MODPACKS_DIR/modpacks.csv" MODPACKS_DB_FILE="$MODPACKS_DIR/modpacks.csv"
if [[ ! -d "$MODPACKS_DIR" || ! -f "$MODPACKS_DB_FILE" ]]; then if [[ ! -d "$MODPACKS_DIR" || ! -f "$MODPACKS_DB_FILE" ]]; then
mkdir -p "$MODPACKS_DIR" && touch "$MODPACKS_DB_FILE" mkdir -p "$MODPACKS_DIR"
[[ $? -ne 0 ]] && { log ERROR "Could not create modpacks folder/file."; exit 1; } [[ $? -ne 0 ]] && { log ERROR "Could not create modpacks directory."; exit 1; }
touch "$MODPACKS_DB_FILE"
[[ $? -ne 0 ]] && { log ERROR "Could not create modpacks database file."; exit 1; }
echo "$VERSION" | awk -F. '{print $2}' > "$MODPACKS_DB_FILE" echo "$VERSION" | awk -F. '{print $2}' > "$MODPACKS_DB_FILE"
log INFO "Modpacks folder and file ${GREEN}created${NC}: $MODPACKS_DIR" log INFO "Modpacks directory and file ${GREEN}created${NC}: $MODPACKS_DB_FILE"
fi fi
} }
@@ -373,6 +376,8 @@ Usage: h2mm modpack-list
List all installed modpacks. List all installed modpacks.
Database of modpacks is stored in Steam/steamapps/common/Helldivers\ 2/data/modpacks/modpacks.csv Database of modpacks is stored in Steam/steamapps/common/Helldivers\ 2/data/modpacks/modpacks.csv
You can rename, delete, or edit this file to manage modpacks manually. You can rename, delete, or edit this file to manage modpacks manually.
Options:
-v Verbose mode.
EOF EOF
} }
@@ -916,6 +921,13 @@ function mod_list() {
# quit if no mods are installed # quit if no mods are installed
[[ $(wc -l < "$DB_FILE") -le 1 ]] && { log INFO "No mods installed."; exit 0; } [[ $(wc -l < "$DB_FILE") -le 1 ]] && { log INFO "No mods installed."; exit 0; }
# check if a modpack is enabled
modpack_entry=$(grep "ENABLED" "$MODPACKS_DB_FILE")
if [[ -n "$modpack_entry" ]]; then
modpack_name=$(echo "$modpack_entry" | awk -F, '{print $3}')
log INFO "Modpack ${GREEN}enabled${NC}: $modpack_name."
fi
log INFO "Installed mods:" log INFO "Installed mods:"
awk -v GREEN="$GREEN" -v RED="$RED" -v NC="$NC" -v verbose="$verbose" -F, 'NR > 1 { awk -v GREEN="$GREEN" -v RED="$RED" -v NC="$NC" -v verbose="$verbose" -F, 'NR > 1 {
@@ -1212,15 +1224,42 @@ function mod_order {
function modpack_list() { function modpack_list() {
parse_help_no_arguments display_help_modpack_list "$@" parse_help_no_arguments display_help_modpack_list "$@"
local verbose=false
# parse arguments
[[ "$1" == "--verbose" || "$1" == "-v" ]] && verbose=true
# quit if no modpacks are saved # quit if no modpacks are saved
[[ $(wc -l < "$MODPACKS_DB_FILE") -le 1 ]] && { log INFO "No modpacks saved."; exit 0; } [[ $(wc -l < "$MODPACKS_DB_FILE") -le 1 ]] && { log INFO "No modpacks saved."; exit 0; }
if [[ $verbose == true ]]; then
modpack_contents=""
# get modpack files
modpack_files=$(awk -F, 'NR > 1 {print $3 ".tar.gz"}' "$MODPACKS_DB_FILE")
for file in $modpack_files; do
mods=$(tar -xzvf "$MODPACKS_DIR/$file" --to-stdout "Helldivers 2 Mods/mods.csv" 2>/dev/null | awk -F, 'NR > 1 {print " -> " $3}')
modpack_contents="${modpack_contents}${mods};"
done
fi
log INFO "Saved modpacks:" log INFO "Saved modpacks:"
awk -v GREEN="$GREEN" -v RED="$RED" -v NC="$NC" -F, 'NR > 1{ awk -v GREEN="$GREEN" -v RED="$RED" -v NC="$NC" -v verbose="$verbose" -v modpack_contents="$modpack_contents" -F, 'BEGIN {
if(verbose == "true") {
split(modpack_contents, modpack_array, ";")
}
}
NR > 1{
color = ($2 == "DISABLED") ? RED : GREEN; color = ($2 == "DISABLED") ? RED : GREEN;
printf "%2s. [%s%s%s] %s\n", $1, color, $2, NC, $3}' "$MODPACKS_DB_FILE" if (verbose == "false") {
$4 = "";
} else {
$4 = "\n" modpack_array[NR - 1];
}
printf "%2s. [%s%s%s] %s%s\n", $1, color, $2, NC, $3, $4}' "$MODPACKS_DB_FILE"
} }
function modpack_create() { function modpack_create() {
@@ -1262,7 +1301,7 @@ function modpack_create() {
IFS= mod_entries+=($(awk -v idx=$index -F, 'NR > 1 && $1 == idx {print $0}' "$DB_FILE")); unset IFS IFS= mod_entries+=($(awk -v idx=$index -F, 'NR > 1 && $1 == idx {print $0}' "$DB_FILE")); unset IFS
done done
# overwrite all paths to create a custom folder that will hold the mods specified, the mods will be "installed" there # overwrite all paths to create a custom directory that will hold the mods specified, the mods will be "installed" there
OLD_MODS_DIR="$MODS_DIR" OLD_MODS_DIR="$MODS_DIR"
MODS_DIR="$(mktemp -d)" MODS_DIR="$(mktemp -d)"
DB_FILE="$MODS_DIR/mods.csv" DB_FILE="$MODS_DIR/mods.csv"
@@ -1385,7 +1424,7 @@ function modpack_delete() {
rm -f "$MODPACKS_DIR/$modpack_name.tar.gz" rm -f "$MODPACKS_DIR/$modpack_name.tar.gz"
[[ $? -ne 0 ]] && { log ERROR "Could not delete modpack."; exit 1; } [[ $? -ne 0 ]] && { log ERROR "Could not delete modpack."; exit 1; }
log INFO "Modpack ${GREEN}successfully${NC} deleted: \$MODPACKS_FOLDER/$modpack_name.tar.gz" log INFO "Modpack ${GREEN}successfully${NC} deleted: \$MODPACKS_DIRECTORY/$modpack_name.tar.gz"
# remove entry from database # remove entry from database
sed -i "/^$modpack_index,/d" "$MODPACKS_DB_FILE" sed -i "/^$modpack_index,/d" "$MODPACKS_DB_FILE"
@@ -1426,7 +1465,7 @@ function modpack_overwrite() {
# use built-in export function # use built-in export function
mod_export --modpack "$MODPACKS_DIR" "$modpack_name" mod_export --modpack "$MODPACKS_DIR" "$modpack_name"
log INFO "Modpack ${GREEN}successfully${NC} overwritten: \$MODPACKS_FOLDER/$modpack_name.tar.gz" log INFO "Modpack ${GREEN}successfully${NC} overwritten: \$MODPACKS_DIRECTORY/$modpack_name.tar.gz"
sed -i "/^$modpack_index,/s/DISABLED/ENABLED/" "$MODPACKS_DB_FILE" sed -i "/^$modpack_index,/s/DISABLED/ENABLED/" "$MODPACKS_DB_FILE"
} }