From 196bbe46f816edc3b74804637a43f053b3285889 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 21 Dec 2014 13:18:55 +0000 Subject: [PATCH] initial commit of fn_versioncheck --- functions/fn_versioncheck | 124 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 functions/fn_versioncheck diff --git a/functions/fn_versioncheck b/functions/fn_versioncheck new file mode 100644 index 000000000..9c8fff871 --- /dev/null +++ b/functions/fn_versioncheck @@ -0,0 +1,124 @@ +#!/bin/bash +# LGSM fn_versioncheck function +# Author: Daniel Gibbs +# Website: http://danielgibbs.co.uk +# Version: 191214 + + +fn_steamdbcheck(){ +# Checks for server update from SteamDB.info API. +fn_printdots "Checking ${servicename}: Checking for updates via steamdb.info" +installedversion=$(grep buildid "${appmanifestfile}" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f3) +availableversion=$(wget -qO- "http://steamdb.info/api/GetRawDepots/?appid=${appid}" | sed 's/\\n/\n/g' | grep -EA 1000 "^\s+\[branches\]" | grep -EA 5 "^\s+\[public\]" | grep -m 1 -EB 10 "^\s+\)$" | grep -E "^\s+\[buildid\]\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f4) +sleep 1 +if [ -z "${availableversion}" ]; then + fn_printfail "Checking ${servicename}: steamdb.info not returning version info" + sleep 1 + echo "" + fn_logupdaterequest +elif [ "${installedversion}" -ne "${availableversion}" ]; then + fn_printok "Checking ${servicename}: Checking for updates via steamdb.info" + sleep 1 + echo -e "" + echo -e "Update available:" + sleep 1 + echo -e " Installed version: \e[0;31m${installedversion}\e[0;39m" + echo -e " Available version: \e[0;32m${availableversion}\e[0;39m" + echo -e "" + echo -e " https://steamdb.info/app/261140/" + sleep 1 + echo "" + echo -ne "Applying update.\r" + sleep 1 + echo -ne "Applying update..\r" + sleep 1 + echo -ne "Applying update...\r" + sleep 1 + echo -ne "\n" + fn_stopserver + fn_updateserver +else + fn_printok "Checking ${servicename}: Checking for updates via steamdb.info" + sleep 1 + echo -e "\n" + echo -e "No update available:" + echo -e " Installed version: \e[0;32m${installedversion}\e[0;39m" + echo -e " Available version: \e[0;32m${availableversion}\e[0;39m" + echo -e " https://steamdb.info/app/261140/" + echo -e "" +fi +} + +fn_logupdaterequest(){ +# Checks for server update from server logs. +fn_printdots "Checking ${servicename}: Checking logs for update requests" +sleep 1 +requestrestart=$(grep -sc "MasterRequestRestart" "${consolelog}") +if [ "${requestrestart}" -ge "1" ]; then + fn_printok "Checking ${servicename}: Checking logs for update requests" + sleep 1 + fn_printoknl "Checking ${servicename}: Server requesting update" + fn_stopserver + fn_updateserver +else + fn_printok "Checking ${servicename}: Checking logs for update requests" + sleep 1 + fn_printok "Checking ${servicename}: No update request detected" + sleep 1 + echo "" +fi +} + + + +fn_appmanifestinfo(){ + appmanifestfile=$(find "${filesdir}" -type f -name "appmanifest_${appid}.acf") + appmanifestfilewc=$(find "${filesdir}" -type f -name "appmanifest_${appid}.acf"|wc -l) +} + +fn_appmanifestcheck(){ +fn_appmanifestinfo +# Multiple matching appmanifest files may sometimes be present. +# This is an error is corrected below if required. +if [ "${appmanifestfilewc}" -ge "2" ]; then + sleep 1 + fn_printwarn "Checking ${servicename}: Multiple appmanifest_${appid}.acf files found" + sleep 2 + fn_printdots "Checking ${servicename}: Removing x${appmanifestfilewc} appmanifest_${appid}.acf files" + sleep 1 + for appfile in ${appmanifestfile}; do + rm "${appfile}" + done + appmanifestfilewc1="${appmanifestfilewc}" + fn_appmanifestinfo + if [ "${appmanifestfilewc}" -ge "2" ]; then + fn_printfail "Checking ${servicename}: Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files" + sleep 1 + echo "" + echo " Check user permissions" + for appfile in ${appmanifestfile}; do + echo " ${appfile}" + done + exit + else + sleep 1 + fn_printok "Checking ${servicename}: Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files" + sleep 1 + fn_printinfonl "Checking ${servicename}: Forcing update to correct issue" + sleep 1 + fn_updateserver + fn_versioncheck + fi +elif [ "${appmanifestfilewc}" -eq "0" ]; then + fn_printwarn "Checking ${servicename}: No appmanifest_${appid}.acf found" + sleep 2 + fn_printinfonl "Checking ${servicename}: Forcing update to correct issue" + sleep 1 + fn_updateserver + fn_logupdaterequest +fi +} + +fn_printdots "Checking ${servicename}: Checking for updates" +fn_appmanifestcheck +fn_steamdbcheck \ No newline at end of file