fix: enable/disable logic
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
VERSION="0.3.2"
|
VERSION="0.3.3"
|
||||||
|
|
||||||
# --- Globals ---
|
# --- Globals ---
|
||||||
|
|
||||||
@@ -25,11 +25,6 @@ function get_version_major() {
|
|||||||
echo "$1" | awk -F. '{print $2}'
|
echo "$1" | awk -F. '{print $2}'
|
||||||
}
|
}
|
||||||
|
|
||||||
BREAKING_CHANGES_DB_FILE_PATCHES=(
|
|
||||||
["2"]='sed -i "s/^\([0-9]\+\),/\1,ENABLED,/" $1'
|
|
||||||
["3"]='sed -i "1 i\\3" "$1"'
|
|
||||||
)
|
|
||||||
|
|
||||||
function get_filename_without_path() {
|
function get_filename_without_path() {
|
||||||
echo "$1" | awk -F/ '{print $NF}'
|
echo "$1" | awk -F/ '{print $NF}'
|
||||||
}
|
}
|
||||||
@@ -50,6 +45,14 @@ function disable_all_modpacks() {
|
|||||||
sed -i 's/ENABLED/DISABLED/' "$MODPACKS_DB_FILE"
|
sed -i 's/ENABLED/DISABLED/' "$MODPACKS_DB_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function remove_disabled_prefix() {
|
||||||
|
local _file="$1"
|
||||||
|
while [[ "$_file" == disabled_* ]]; do
|
||||||
|
_file=$(echo "$_file" | sed 's/^disabled_//')
|
||||||
|
done
|
||||||
|
echo "$_file"
|
||||||
|
}
|
||||||
|
|
||||||
function get_mod_name_and_index() {
|
function get_mod_name_and_index() {
|
||||||
if [[ -n "$mod_index" ]]; then # if mod index exists
|
if [[ -n "$mod_index" ]]; then # if mod index exists
|
||||||
entry=$(grep "^${mod_index}," "$DB_FILE")
|
entry=$(grep "^${mod_index}," "$DB_FILE")
|
||||||
@@ -375,7 +378,7 @@ function downgrade_mods() {
|
|||||||
echo -e "Downgraded ${ORANGE}$mod${NC} to ${GREEN}\$MODS_DIR/$new_patch${NC}." >&2
|
echo -e "Downgraded ${ORANGE}$mod${NC} to ${GREEN}\$MODS_DIR/$new_patch${NC}." >&2
|
||||||
|
|
||||||
# save changes in database as well
|
# save changes in database as well
|
||||||
sed -i "s/^$mod$/$new_patch/" "$DB_FILE"
|
sed -i "s/\(\b$mod\b\)/$new_patch/" "$DB_FILE"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
@@ -388,6 +391,9 @@ function upgrade_mods() {
|
|||||||
|
|
||||||
# opposite of downgrade_mods
|
# opposite of downgrade_mods
|
||||||
for file in $files; do
|
for file in $files; do
|
||||||
|
# remove disabled_ prefix if it exists
|
||||||
|
file=$(remove_disabled_prefix "$file")
|
||||||
|
|
||||||
current_version=$(echo "$file" | grep -oP '(?<=patch_)\d+')
|
current_version=$(echo "$file" | grep -oP '(?<=patch_)\d+')
|
||||||
base_name=$(get_basename "$file")
|
base_name=$(get_basename "$file")
|
||||||
|
|
||||||
@@ -415,7 +421,7 @@ function upgrade_mods() {
|
|||||||
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Could not upgrade mod file $mod." >&2; exit 1; }
|
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Could not upgrade mod file $mod." >&2; exit 1; }
|
||||||
echo -e "Upgraded ${ORANGE}$mod${NC} to ${GREEN}\$MODS_DIR/$new_patch${NC}." >&2
|
echo -e "Upgraded ${ORANGE}$mod${NC} to ${GREEN}\$MODS_DIR/$new_patch${NC}." >&2
|
||||||
|
|
||||||
sed -i "s/^$mod$/$new_patch/" "$DB_FILE"
|
sed -i "s/\(\b$mod\b\)/$new_patch/" "$DB_FILE"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
@@ -460,16 +466,23 @@ function mod_disable() {
|
|||||||
# disable each mod file by adding disabled_ to the start of the filename
|
# disable each mod file by adding disabled_ to the start of the filename
|
||||||
files=$(get_files_by_entry_from_db "$entry")
|
files=$(get_files_by_entry_from_db "$entry")
|
||||||
for file in $files; do
|
for file in $files; do
|
||||||
if [[ ! -f "$MODS_DIR/$file" ]]; then
|
[[ ! -f "$MODS_DIR/$file" ]] && { echo -e "${RED}Error${NC}: Mod file $file does not exist." >&2; exit 1; }
|
||||||
echo -e "${RED}Error${NC}: Mod file $file does not exist." >&2
|
|
||||||
exit 1
|
disabled_file="disabled_$file"
|
||||||
else
|
while [[ -f "$MODS_DIR/$disabled_file" ]]; do
|
||||||
disabled_file="disabled_$file"
|
disabled_file="disabled_$disabled_file"
|
||||||
mv "$MODS_DIR/$file" "$MODS_DIR/$disabled_file"
|
done
|
||||||
echo -e "Disabled ${ORANGE}$file${NC} (changed to ${GREEN}\$MODS_DIR/$disabled_file${NC})." >&2
|
|
||||||
fi
|
mv "$MODS_DIR/$file" "$MODS_DIR/$disabled_file"
|
||||||
|
|
||||||
|
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Could not disable mod file $file." >&2; exit 1; }
|
||||||
|
echo -e "Disabled ${ORANGE}$file${NC} (changed to ${GREEN}\$MODS_DIR/$disabled_file${NC})." >&2
|
||||||
|
|
||||||
|
# save change to db
|
||||||
|
sed -i "/^$mod_index,/ s/\(\b$file\b\)/$disabled_file/" "$DB_FILE"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# downgrade mods with greater version number
|
||||||
downgrade_mods "$files"
|
downgrade_mods "$files"
|
||||||
|
|
||||||
# update the database
|
# update the database
|
||||||
@@ -514,16 +527,19 @@ function mod_enable() {
|
|||||||
|
|
||||||
# enable each mod file by removing disabled_ from the start of the filename
|
# enable each mod file by removing disabled_ from the start of the filename
|
||||||
for file in $files; do
|
for file in $files; do
|
||||||
disabled_file="disabled_$file"
|
enabled_file=$(remove_disabled_prefix "$file")
|
||||||
|
|
||||||
# check if the files exists
|
# check if the files exists
|
||||||
[[ -f "$MODS_DIR/$disabled_file" ]] || { echo -e "${RED}Error${NC}: Mod file $file does not exist." >&2; exit 1; }
|
[[ -f "$MODS_DIR/$file" ]] || { echo -e "${RED}Error${NC}: Mod file $file does not exist." >&2; exit 1; }
|
||||||
|
|
||||||
mv "$MODS_DIR/$disabled_file" "$MODS_DIR/$file"
|
mv "$MODS_DIR/$file" "$MODS_DIR/$enabled_file"
|
||||||
|
|
||||||
# check if the file was moved successfully
|
# check if the file was moved successfully
|
||||||
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Could not enable mod file $disabled_file." >&2; exit 1; }
|
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Could not enable mod file $file." >&2; exit 1; }
|
||||||
echo -e "Enabled ${ORANGE}$disabled_file${NC} (changed to ${GREEN}\$MODS_DIR/$file${NC})." >&2
|
echo -e "Enabled ${ORANGE}$file${NC} (changed to ${GREEN}\$MODS_DIR/$enabled_file${NC})." >&2
|
||||||
|
|
||||||
|
# save change to db
|
||||||
|
sed -i "/^$mod_index,/ s/\(\b$file\b\)/$enabled_file/" "$DB_FILE"
|
||||||
done
|
done
|
||||||
|
|
||||||
# update the database
|
# update the database
|
||||||
@@ -735,8 +751,8 @@ function mod_uninstall() {
|
|||||||
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Could not remove mod file $file." >&2; exit 1; }
|
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Could not remove mod file $file." >&2; exit 1; }
|
||||||
done
|
done
|
||||||
|
|
||||||
# downgrade mods with greater version number
|
# downgrade mods with greater version number, only if the mod is enabled
|
||||||
downgrade_mods "$files"
|
[[ $disabled == false ]] && downgrade_mods "$files"
|
||||||
|
|
||||||
# remove entry from database
|
# remove entry from database
|
||||||
sed -i "/^$mod_index,/d" "$DB_FILE"
|
sed -i "/^$mod_index,/d" "$DB_FILE"
|
||||||
@@ -830,21 +846,6 @@ function mod_import() {
|
|||||||
|
|
||||||
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Failed to import mods." >&2; exit 1; }
|
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Failed to import mods." >&2; exit 1; }
|
||||||
|
|
||||||
# handle breaking chanegs
|
|
||||||
# version 0.2.x has no version number in the database file, so if there's no version number, add it
|
|
||||||
if [[ $(head -n 1 "$DB_FILE") =~ "[0-9]+," ]]; then
|
|
||||||
mods_db_current_version=$(head -n 1 "$DB_FILE")
|
|
||||||
else
|
|
||||||
mods_db_current_version="2"
|
|
||||||
fi
|
|
||||||
mods_db_new_version=$(get_version_major $VERSION)
|
|
||||||
|
|
||||||
for ((i = mods_db_current_version + 1; i <= mods_db_new_version; i++)); do
|
|
||||||
eval $(echo "${BREAKING_CHANGES_DB_FILE_PATCHES[$i]}" | sed "s:\$1:$DB_FILE:")
|
|
||||||
|
|
||||||
[[ $? -ne 0 ]] && { echo -e "${RED}Error${NC}: Failed to apply breaking changes patch $i." >&2; exit 1; }
|
|
||||||
done
|
|
||||||
|
|
||||||
echo -e "Mods imported ${GREEN}successfully${NC}." >&2
|
echo -e "Mods imported ${GREEN}successfully${NC}." >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-1
@@ -105,7 +105,13 @@ fi
|
|||||||
|
|
||||||
# Install
|
# Install
|
||||||
|
|
||||||
IFS= read -ep "Install the script to $DESTINATION_PATH or specify another path (must be included in \$PATH)? (Y/path): " response
|
# if installing on steam deck, prompt the user, set flag
|
||||||
|
is_steam_deck=false
|
||||||
|
IFS= read -ep "Are you installing on a Steam Deck? (y/N): " response_steam_deck
|
||||||
|
[[ "$is_steam_deck" == "y" || "$is_steam_deck" == "Y" ]] && is_steam_deck=true
|
||||||
|
|
||||||
|
# other path if needed
|
||||||
|
[[ $is_steam_deck == false ]] && IFS= read -ep "Install the script to $DESTINATION_PATH or specify another path (must be included in \$PATH)? (Y/path): " response
|
||||||
|
|
||||||
if [[ "$response" != "y" && "$response" != "Y" && -n "$response" ]]; then
|
if [[ "$response" != "y" && "$response" != "Y" && -n "$response" ]]; then
|
||||||
DESTINATION_PATH="$response"
|
DESTINATION_PATH="$response"
|
||||||
|
|||||||
Reference in New Issue
Block a user