Browse Source

Further work completed.

Working on menus currently
Daniel Gibbs 9 years ago
parent
commit
8d78b19fbc
1 changed files with 142 additions and 42 deletions
  1. 142 42
      lgsminstall.sh

+ 142 - 42
lgsminstall.sh

@@ -17,12 +17,16 @@ fi
 version="170305"
 rootdir="$(dirname $(readlink -f "${BASH_SOURCE[0]}"))"
 selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
-lgsmdir="${rootdir}/lgsm"
-tmpdir="${lgsmdir}/tmp"
 servicename="${selfname}"
 shortname="core"
-shortname="core"
-shortname="core"
+servername="core"
+gamename="core"
+lockselfname=".${servicename}.lock"
+lgsmdir="${rootdir}/lgsm"
+functionsdir="${lgsmdir}/functions"
+libdir="${lgsmdir}/lib"
+tmpdir="${lgsmdir}/tmp"
+filesdir="${rootdir}/serverfiles"
 configdir="${lgsmdir}/config"
 gameconfigdir="${configdir}/${servername}"
 
@@ -33,55 +37,141 @@ githubuser="GameServerManagers"
 githubrepo="LinuxGSM"
 githubbranch="feature/config"
 
-# Prevent from running this script as root.
-if [ "$(whoami)" = "root" ]; then
-	if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]||[ ! -f "${functionsdir}/exit 1" ]; then
-		echo "[ FAIL ] Do NOT run this script as root!"
-		exit 1
+
+fn_print_center() {
+	columns="$(tput cols)"
+	line="$@"
+	printf "%*s\n" $(( (${#line} + columns) / 2)) "$line"
+}
+# Print horizontal line
+fn_print_horizontal(){
+	char="${1:-=}"
+	printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "${char}"
+}
+
+# Display simple Bash menu
+fn_menu_bash() {
+	local resultvar=$1
+	title=$2
+	caption=$3
+	options=$4
+	fn_print_horizontal
+	fn_print_center $title
+	fn_print_center $caption
+	fn_print_horizontal
+	menu_options=()
+	while read -r line || [[ -n "$line" ]]; do
+		var=$(echo $line | awk -F "," '{print $2 " - " $3}')
+		menu_options+=( "${var}" )
+	done <  $options
+	menu_options+=( "Cancel" )
+	select option in "${menu_options[@]}"; do
+		if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then
+			eval "$resultvar=\"${option/%\ */}\""
+		fi
+		break
+	done
+}
+
+fn_menu() {
+	local resultvar=$1
+	local selection=""
+	title=$2
+	caption=$3
+	options=$4
+	# If this is a list of options as a string, dump it to a file so we can process it
+	if [ ! -e "${options}" ]; then
+		echo -ne "${options}\n" > "${cachedir}/menu.options"
+		options="${cachedir}/menu.options"
+	fi
+
+	# Get menu command
+#	for menucmd in whiptail dialog bash; do
+#		if [ -x $(which $menucmd) ]; then
+#			menucmd=$(which $menucmd)
+#			break
+#		fi
+#	done
+	case "$(basename $menucmd)" in
+		whiptail|dialog)
+			fn_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30
+			;;
+		*)
+			fn_menu_bash selection "${title}" "${caption}" "${options}"
+			;;
+	esac
+	eval "$resultvar=\"${selection}\""
+	echo "$resultvar"
+}
+
+fn_serverlist(){
+	IFS=","
+	if [ -f "lgsm/data/serverlist.csv" ]; then
+		serverlist="lgsm/data/serverlist.csv"
+		server_info_array=($(awk '{ print $2 }' "${serverlist}" | grep "${userinput}" ))
 	else
-		core_functions.sh
-		check_root.sh
+		serverlist="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv"
+		server_info_array=($(awk '{ print $2 }' <(curl -s "${serverlist}") | grep "${userinput}"))
 	fi
-fi
+	shortname="${server_info_array[0]}"
+	servername="${server_info_array[1]}"
+	gamename="${server_info_array[2]}"
+	echo "$server_info_array"
+	echo "shortname: $shortname"
+	echo "servername: $servername"
+	echo "gamename: $gamename"
+}
+
+fn_install_getopt(){
+	userinput="empty"
+	echo "Usage: $0 [option]"
+	echo -e ""
+	echo "Installer - Linux Game Server Manager - Version ${version}"
+	echo "https://gameservermanagers.com"
+	echo -e ""
+	echo -e "Commands"
+	echo -e "install |Select server to install."
+	echo -e "servername |e.g $0 csgoserver. Enter the required servername will install it."
+	echo -e "list |List all servers available for install."
+	exit
+}
 
 # LinuxGSM installer
 if [ "${shortname}" == "core" ]; then
 	userinput=$1
 	if [ -z "${userinput}" ]; then
-		userinput="empty"
-	fi
-	serverslist=$(grep "${userinput}" <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv")|awk -F "," '{print $2}')
-	echo "USERINPUT: $userinput"
-	echo "SERVERLIST: $serverslist"
-	if [ "${userinput}" == "${serverslist}" ]; then
-		echo "installing"
-		shortname=$(grep ${userinput} <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv")|awk -F "," '{print $1}')
-		servername=$(grep ${userinput} <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv")|awk -F "," '{print $2}')
-		gamename=$(grep ${userinput} <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv")|awk -F "," '{print $3}')
-		if [ -e "${servername}" ]; then
-			i=2
-		while [ -e "$servername-$i" ] ; do
-			let i++
-		done
-			servername="${servername}-$i"
-		fi
-		cp "${selfname}" "${servername}"
-		sed -i -e "s/shortname=\"core\"/shortname=\"${shortname}\"/g" "${servername}"
-		sed -i -e "s/servername=\"core\"/servername=\"${servername}\"/g" "${servername}"
-		sed -i -e "s/gamename=\"core\"/gamename=\"${gamename}\"/g" "${gamename}"
-		exit
+		fn_install_getopt
 	elif [ "${userinput}" == "list" ]; then
+		fn_serverlist
 		{
-			awk -F "," '{print $2 "\t" $3}' <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv")
-		} | column -s $'\t' -t
+		if [ -f "lgsm/data/serverlist.csv" ]; then
+			awk -F "," '{print $2 "\t" $3}' "${serverlist}"
+		else
+			awk -F "," '{print $2 "\t" $3}' <(curl -s "${serverlist}")
+		fi
+		} | column -s $'\t' -t | more
 		exit
+	elif [ "${userinput}" == "install" ]; then
+	fn_menu result "Linux Game Server Manager" "Select game to install" "lgsm/data/serverlist.csv"
 	else
-		echo "Usage: ./${selfname} list"
-		echo "For a complete list of available servers"
-		echo ""
-		echo "Usage: ./${selfname} [servername]"
-		echo "To install a server"
-		exit
+		fn_serverlist
+		if [ "${userinput}" == "${server_info_array[1]}" ]; then
+
+			if [ -e "${servername}" ]; then
+				i=2
+			while [ -e "$servername-$i" ] ; do
+				let i++
+			done
+				servername="${servername}-$i"
+			fi
+			cp "${selfname}" "${servername}"
+			sed -i -e "s/shortname=\"core\"/shortname=\"${shortname}\"/g" "${servername}"
+			sed -i -e "s/servername=\"core\"/servername=\"${servername}\"/g" "${servername}"
+			sed -i -e "s/gamename=\"core\"/gamename=\"${gamename}\"/g" "${servername}"
+			exit
+		else
+			fn_install_getopt
+		fi
 	fi
 fi
 
@@ -217,6 +307,16 @@ functionfile="${FUNCNAME}"
 fn_boostrap_fetch_function
 }
 
+# Prevent from running this script as root.
+if [ "$(whoami)" = "root" ]; then
+	if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]||[ ! -f "${functionsdir}/exit 1" ]; then
+		echo "[ FAIL ] Do NOT run this script as root!"
+		exit 1
+	else
+		core_functions.sh
+		check_root.sh
+	fi
+fi
 
 core_dl.sh
 core_functions.sh