diff --git a/NonSteamLaunchers.sh b/NonSteamLaunchers.sh index 362449f..0d23bb6 100755 --- a/NonSteamLaunchers.sh +++ b/NonSteamLaunchers.sh @@ -2456,8 +2456,6 @@ show_message "Waiting to detect plugin..." sleep 20 - - # Function to switch to Game Mode switch_to_game_mode() { echo "Switching to Game Mode..." @@ -2479,148 +2477,113 @@ REPO_URL="https://github.com/moraroy/NonSteamLaunchersDecky/archive/refs/heads/m # Set the local directory path LOCAL_DIR="${logged_in_home}/homebrew/plugins/NonSteamLaunchers" -# Check if the Decky Loader and NSL Plugin exist -DECKY_LOADER_EXISTS=false -NSL_PLUGIN_EXISTS=false - -if [ -d "${logged_in_home}/homebrew/plugins" ]; then - DECKY_LOADER_EXISTS=true -fi - -if [ -d "$LOCAL_DIR" ]; then - if [ -z "$(ls -A $LOCAL_DIR)" ]; then - NSL_PLUGIN_EXISTS=false - else - NSL_PLUGIN_EXISTS=true - fi -fi - -# Set version check variables -GITHUB_URL="https://raw.githubusercontent.com/moraroy/NonSteamLaunchersDecky/refs/heads/main/package.json" - -# Function to fetch GitHub package.json version -fetch_github_version() { - response=$(curl -s "$GITHUB_URL") - github_version=$(echo "$response" | jq -r '.version') - - if [ "$github_version" != "null" ]; then - echo "$github_version" - else - echo "Error: Could not fetch or parse GitHub version" - return 1 - fi +# Function to check if a directory exists and contains files +directory_exists_and_not_empty() { + [ -d "$1" ] && [ -n "$(ls -A "$1")" ] } -# Function to fetch the local package.json version +# Function to fetch version from GitHub +fetch_github_version() { + response=$(curl -s "https://raw.githubusercontent.com/moraroy/NonSteamLaunchersDecky/refs/heads/main/package.json") + echo "$response" | jq -r '.version' +} + +# Function to fetch local version from package.json fetch_local_version() { if [ -f "$LOCAL_DIR/package.json" ]; then - local_version=$(jq -r '.version' "$LOCAL_DIR/package.json") - - if [ "$local_version" != "null" ]; then - echo "$local_version" - else - echo "Error: Failed to parse local version" - return 1 - fi + jq -r '.version' "$LOCAL_DIR/package.json" else - echo "Error: Local package.json not found!" - return 1 + echo "null" fi } # Function to compare versions compare_versions() { - # Fetch local and GitHub versions - local_version=$(fetch_local_version) - github_version=$(fetch_github_version) + local local_version=$(fetch_local_version) + local github_version=$(fetch_github_version) - if [ "$local_version" == "Error:" ] || [ "$github_version" == "Error:" ]; then - echo "Error: Could not fetch version information" - return 1 + if [ "$local_version" == "null" ]; then + echo "Local version not found, need installation." + return 1 # Local version is missing, so installation is needed fi echo "Local Version: $local_version, GitHub Version: $github_version" - if [ "$local_version" == "$github_version" ]; then - echo "Status: Up-to-date" - return 0 + echo "Plugin is up-to-date." + return 0 # No update needed else - echo "Status: Update available" - return 1 + echo "Update needed." + return 1 # Versions don't match, so update is needed fi } -set +x +# Main logic -# Show initial message -show_message "Detected environment..." +show_message "Detecting environment..." -if $DECKY_LOADER_EXISTS; then - # Compare versions before prompting for password - compare_versions - if [ $? -eq 0 ]; then - echo "No update needed. The plugin is already up-to-date." - show_message "No update needed. The plugin is already up-to-date." - else - # If version update is required, ask for the password - while true; do - USER_INPUT=$(zenity --forms --title="Authentication Required" --text="Decky Loader detected! $(if $NSL_PLUGIN_EXISTS; then echo 'NSL Plugin also detected and will be updated to the latest version 🚀.'; else echo 'But no NSL plugin :(. Would you like to inject it and go to Game Mode?'; fi) Please enter your sudo password to proceed:" --separator="|" --add-password="Password") - USER_PASSWORD=$(echo $USER_INPUT | cut -d'|' -f1) - - if [ -z "$USER_PASSWORD" ]; then - zenity --error --text="No password entered. Exiting." --timeout 5 - exit 1 - fi - - echo "$USER_PASSWORD" | sudo -S echo "Password accepted" 2>/dev/null - if [ $? -eq 0 ]; then - break - else - zenity --error --text="Incorrect password. Please try again." - fi - done - fi -else - zenity --error --text="Decky Loader not detected. Please download and install it from their website first and re-run this script to get the NSL Plugin." - rm -rf "$download_dir" +# Check if Decky Loader exists +if ! directory_exists_and_not_empty "${logged_in_home}/homebrew/plugins"; then + zenity --error --text=" This is not an error. Decky Loader was not detected. Please install it from their website and re-run this script to access the plugin version of NSL." exit 1 fi -# If update is needed, continue with the update process -if [ $? -eq 1 ]; then - # If NSL Plugin exists, delete and update +# Check if the NSL Plugin exists +if directory_exists_and_not_empty "$LOCAL_DIR"; then + NSL_PLUGIN_EXISTS=true +else + NSL_PLUGIN_EXISTS=false +fi + +set +x +# Compare versions and update if necessary +if compare_versions; then + echo "No update needed. Plugin is already up-to-date." + show_message "Plugin is up-to-date." +else + echo "Updating plugin..." + while true; do + USER_INPUT=$(zenity --forms --title="Authentication Required" --text="NSL Plugin requires an update or needs installation! Please enter your sudo password to proceed:" --separator="|" --add-password="Password") + USER_PASSWORD=$(echo $USER_INPUT | cut -d'|' -f1) + + if [ -z "$USER_PASSWORD" ]; then + zenity --error --text="No password entered. Exiting." --timeout 5 + exit 1 + fi + + echo "$USER_PASSWORD" | sudo -S echo "Password accepted" 2>/dev/null + if [ $? -eq 0 ]; then + break + else + zenity --error --text="Incorrect password. Please try again." + fi + done + + # Remove existing plugin if it exists if $NSL_PLUGIN_EXISTS; then - show_message "NSL Plugin detected. Deleting and updating..." - echo "Plugin directory exists. Removing..." + show_message "Removing existing plugin..." echo "$USER_PASSWORD" | sudo -S rm -rf "$LOCAL_DIR" fi + # Install or update plugin sudo systemctl stop plugin_loader.service - show_message "Creating base directory and setting permissions..." + # Create directory and set permissions echo "$USER_PASSWORD" | sudo -S mkdir -p "$LOCAL_DIR" echo "$USER_PASSWORD" | sudo -S chmod -R u+rw "$LOCAL_DIR" echo "$USER_PASSWORD" | sudo -S chown -R $USER:$USER "$LOCAL_DIR" - echo "Downloading and extracting the repository..." + # Download and extract repository curl -L "$REPO_URL" -o /tmp/NonSteamLaunchersDecky.zip echo "$USER_PASSWORD" | sudo -S unzip -o /tmp/NonSteamLaunchersDecky.zip -d /tmp/ echo "$USER_PASSWORD" | sudo -S cp -r /tmp/NonSteamLaunchersDecky-main/* "$LOCAL_DIR" - echo "$USER_PASSWORD" | sudo -S rm -rf /tmp/NonSteamLaunchersDecky* -fi -# Check if update was done -if [ $? -eq 1 ]; then set -x - cd "$LOCAL_DIR" - show_message "Plugin installed. Switching to Game Mode..." + # Switch to game mode and restart service + show_message " NSL Plugin installed. Switching to Game Mode..." switch_to_game_mode - sudo systemctl restart plugin_loader.service -else - echo "No update needed. Skipping Game Mode switch." fi