diff --git a/lgsm/modules/mods_core.sh b/lgsm/modules/mods_core.sh index b1084aaf4..10dee3781 100755 --- a/lgsm/modules/mods_core.sh +++ b/lgsm/modules/mods_core.sh @@ -31,6 +31,65 @@ fn_mod_install_files() { fn_dl_extract "${modstmpdir}" "${modfilename}" "${extractdest}" } +# Create a simple latest-version marker for a mod. +# This compares the resolved download URL + filename. +fn_mod_latest_version_marker() { + modversionfile="${modsdir}/${modcommand}-version.txt" + modlatesturlfile="${modsdir}/${modcommand}-latest-url.txt" + + if [ -z "${modurl}" ] || [ "${modurl}" == "null" ]; then + fn_print_fail_nl "${modprettyname}: missing download URL" + fn_script_log_fail "${modprettyname}: missing download URL" + exitcode="1" + core_exit.sh + fi + + if [ -z "${modfilename}" ] || [ "${modfilename}" == "null" ]; then + fn_print_fail_nl "${modprettyname}: missing download filename" + fn_script_log_fail "${modprettyname}: missing download filename" + exitcode="1" + core_exit.sh + fi + + # Resolve redirects when possible. Useful for GitHub latest/download links. + modlatesturl="$(curl -fsIL -o /dev/null -w '%{url_effective}' "${modurl}" 2>/dev/null || true)" + + if [ -z "${modlatesturl}" ]; then + modlatesturl="${modurl}" + fi + + modlatestversion="${modlatesturl}|${modfilename}" +} + +# Save currently installed mod version marker. +fn_mod_save_version_marker() { + fn_mod_latest_version_marker + + echo -e "${modlatestversion}" > "${modversionfile}" + echo -e "${modlatesturl}" > "${modlatesturlfile}" + + fn_script_log_info "${modprettyname} version marker saved: ${modlatestversion}" +} + +# Returns: +# 0 = mod is already latest +# 1 = mod needs update +fn_mod_is_latest() { + fn_mod_latest_version_marker + + if [ -f "${modversionfile}" ]; then + modinstalledversion="$(cat "${modversionfile}")" + else + modinstalledversion="" + fi + + if [ "${modinstalledversion}" == "${modlatestversion}" ]; then + return 0 + else + return 1 + fi +} + # Convert mod files to lowercase if needed. fn_mod_lowercase() { # Checking lowercase settings from mods array definition