From 05073590cefcfef45af753cbb799058e5e18c77a Mon Sep 17 00:00:00 2001
From: jetfir3 <95306468+jetfir3@users.noreply.github.com>
Date: Mon, 21 Nov 2022 15:07:21 -0500
Subject: [PATCH] Add v1.1.99.871 Support (#15)
- bring up-to-date with SpotX-Mac script
- update README
- update uninstall.sh to handle various installation directories
---
README.md | 15 ++--
install.sh | 219 +++++++++++++++++++++++++++++++--------------------
uninstall.sh | 48 +++++++++--
3 files changed, 185 insertions(+), 97 deletions(-)
diff --git a/README.md b/README.md
index 066f1b1..b4372e1 100644
--- a/README.md
+++ b/README.md
@@ -12,8 +12,8 @@
A multi-featured adblocker for the Spotify Linux application.
- Last updated: 27 October 2022
- Last tested version: 1.1.84.716
+ Last updated: 21 November 2022
+ Last tested version: 1.1.99.871
@@ -22,7 +22,9 @@
- Blocks all banner/video/audio ads within the app
- Blocks logging (Sentry, etc)
- Unlocks the skip function for any track
-- Enables some experimental features (optional)
+- Blocks Spotify automatic updates (optional)
+- Enables [experimental features](https://github.com/SpotX-CLI/SpotX-Win/discussions/50) (optional)
+- Hides podcasts, episodes and audiobooks on Home Screen (optional)
### Installation/Update:
@@ -37,15 +39,18 @@ bash <(curl -sSL https://raw.githubusercontent.com/SpotX-CLI/SpotX-Linux/main/in
#### Optional Install Arguments:
`-c` Clear app cache -- use if UI-related patches aren't working
`-e` Experimental features -- enables experimental features
+`-E` Exclude feature -- disables specified feature(s) [currently only supports `leftsidebar`]
`-f` Force patch -- forces re-patching if backup detected
+`-h` Hide podcasts, episodes and audiobooks on home screen
+`-o` Old UI -- skips forced 'new UI' patch
`-P` Path directory -- manually set Spotify directory if not found in PATH
`-p` Premium subscription setup -- use if premium subscriber
Use any combination of flags.
-The following example clears app cache and adds experimental features:
+The following example clears app cache, adds experimental features but excludes leftsidebar:
```
-bash <(curl -sSL https://raw.githubusercontent.com/SpotX-CLI/SpotX-Linux/main/install.sh) -ce
+bash <(curl -sSL https://raw.githubusercontent.com/SpotX-CLI/SpotX-Linux/main/install.sh) -ce -E leftsidebar
```
diff --git a/install.sh b/install.sh
index a3db15a..5d32561 100644
--- a/install.sh
+++ b/install.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-SPOTX_VERSION="1.1.84.716-1"
+SPOTX_VERSION="1.1.99.871-1"
# Dependencies check
command -v perl >/dev/null || { echo -e "\nperl was not found, exiting...\n" >&2; exit 1; }
@@ -14,21 +14,90 @@ FORCE_FLAG='false'
PATH_FLAG=''
PREMIUM_FLAG='false'
-while getopts 'cefP:p' flag; do
+while getopts 'cE:efhopP:' flag; do
case "${flag}" in
c) CACHE_FLAG='true' ;;
+ E) EXCLUDE_FLAG+=("${OPTARG}") ;;
e) EXPERIMENTAL_FLAG='true' ;;
f) FORCE_FLAG='true' ;;
+ h) HIDE_PODCASTS_FLAG='true' ;;
+ o) OLD_UI_FLAG='true' ;;
P)
PATH_FLAG="${OPTARG}"
INSTALL_PATH="${PATH_FLAG}" ;;
p) PREMIUM_FLAG='true' ;;
*)
- echo "Error: ${flag} not supported."
+ echo "Error: Flag not supported."
exit ;;
esac
done
+# Handle multiple "exclude" flags if desired
+for EXCLUDE_VAL in "${EXCLUDE_FLAG[@]}"; do
+ if [[ "${EXCLUDE_VAL}" == "leftsidebar" ]]; then EX_LEFTSIDEBAR='true'; fi
+done
+
+# Perl command
+PERL="perl -pi -w -e"
+
+# Ad-related regex
+AD_EMPTY_AD_BLOCK='s|adsEnabled:!0|adsEnabled:!1|'
+AD_PLAYLIST_SPONSORS='s|allSponsorships||'
+AD_UPGRADE_BUTTON='s/(return|.=.=>)"free"===(.+?)(return|.=.=>)"premium"===/$1"premium"===$2$3"free"===/g'
+AD_AUDIO_ADS='s/(case .:|async enable\(.\)\{)(this.enabled=.+?\(.{1,3},"audio"\),|return this.enabled=...+?\(.{1,3},"audio"\))((;case 4:)?this.subscription=this.audioApi).+?this.onAdMessage\)/$1$3.cosmosConnector.increaseStreamTime(-100000000000)/'
+AD_BILLBOARD='s|.(\?\[.{1,6}[a-zA-Z].leaderboard,)|false$1|'
+AD_UPSELL='s|(Enables quicksilver in-app messaging modal",default:)(!0)|$1false|'
+
+# Experimental (A/B test) features
+ENABLE_ADD_PLAYLIST='s|(Enable support for adding a playlist to another playlist",default:)(!1)|$1true|s'
+ENABLE_BALLOONS='s|(Enable showing balloons on album release date anniversaries",default:)(!1)|$1true|s'
+ENABLE_BLOCK_USERS='s|(Enable block users feature in clientX",default:)(!1)|$1true|s'
+ENABLE_CAROUSELS='s|(Use carousels on Home",default:)(!1)|$1true|s'
+ENABLE_CLEAR_DOWNLOADS='s|(Enable option in settings to clear all downloads",default:)(!1)|$1true|s'
+ENABLE_DISCOG_SHELF='s|(Enable a condensed disography shelf on artist pages",default:)(!1)|$1true|s'
+ENABLE_ENHANCE_PLAYLIST='s|(Enable Enhance Playlist UI and functionality for end-users",default:)(!1)|$1true|s'
+ENABLE_ENHANCE_SONGS='s|(Enable Enhance Liked Songs UI and functionality",default:)(!1)|$1true|s'
+ENABLE_EQUALIZER='s|(Enable audio equalizer for Desktop and Web Player",default:)(!1)|$1true|s'
+ENABLE_IGNORE_REC='s|(Enable Ignore In Recommendations for desktop and web",default:)(!1)|$1true|s'
+ENABLE_LEFT_SIDEBAR='s|(Enable Your Library X view of the left sidebar",default:)(!1)|$1true|s'
+ENABLE_LIKED_SONGS='s|(Enable Liked Songs section on Artist page",default:)(!1)|$1true|s'
+ENABLE_LYRICS_CHECK='s|(With this enabled, clients will check whether tracks have lyrics available",default:)(!1)|$1true|s'
+ENABLE_LYRICS_MATCH='s|(Enable Lyrics match labels in search results",default:)(!1)|$1true|s'
+ENABLE_MADE_FOR_YOU='s|(Show "Made For You" entry point in the left sidebar.,default:)(!1)|$1true|s'
+ENABLE_PLAYLIST_CREATION_FLOW='s|(Enables new playlist creation flow in Web Player and DesktopX",default:)(!1)|$1true|s'
+ENABLE_PLAYLIST_PERMISSIONS_FLOWS='s|(Enable Playlist Permissions flows for Prod",default:)(!1)|$1true|s'
+ENABLE_RIGHT_SIDEBAR='s|(Enable the view on the right sidebar",default:)(!1)|$1true|s'
+ENABLE_SEARCH_BOX='s|(Adds a search box so users are able to filter playlists when trying to add songs to a playlist using the contextmenu",default:)(!1)|$1true|s'
+ENABLE_SIMILAR_PLAYLIST='s/,(.\.isOwnedBySelf&&)((\(.{0,11}\)|..createElement)\(.{1,3}Fragment,.+?{(uri:.|spec:.),(uri:.|spec:.).+?contextmenu.create-similar-playlist"\)}\),)/,$2$1/s'
+
+# Home screen UI (new)
+NEW_UI='s|(Enable the new home structure and navigation",values:.,default:)(..DISABLED)|$1true|'
+NEW_UI_2='s|(Enable the new home structure and navigation",values:.,default:.)(.DISABLED)|$1.ENABLED_CENTER|'
+AUDIOBOOKS_CLIENTX='s|(Enable Audiobooks feature on ClientX",default:)(!1)|$1true|s'
+
+# Hide Premium-only features
+HIDE_DL_QUALITY='s/(\(.,..jsxs\)\(.{1,3}|(.\(\).|..)createElement\(.{1,4}),\{(filterMatchQuery|filter:.,title|(variant:"viola",semanticColor:"textSubdued"|..:"span",variant:.{3,6}mesto,color:.{3,6}),htmlFor:"desktop.settings.downloadQuality.+?).{1,6}get\("desktop.settings.downloadQuality.title.+?(children:.{1,2}\(.,.\).+?,|\(.,.\){3,4},|,.\)}},.\(.,.\)\),)//'
+HIDE_DL_ICON=' .BKsbV2Xl786X9a09XROH {display:none}'
+HIDE_DL_MENU=' button.wC9sIed7pfp47wZbmU6m.pzkhLqffqF_4hucrVVQA {display:none}'
+HIDE_VERY_HIGH=' #desktop\.settings\.streamingQuality>option:nth-child(5) {display:none}'
+
+# Hide Podcasts/Episodes/Audiobooks on home screen
+HIDE_PODCASTS='s|withQueryParameters\(.\)\{return this.queryParameters=.,this}|withQueryParameters(e){return this.queryParameters=(e.types?{...e, types: e.types.split(",").filter(_ => !["episode","show"].includes(_)).join(",")}:e),this}|'
+HIDE_PODCASTS2='s/(!Array.isArray\(.\)\|\|.===..length)/$1||e.children[0].key.includes('\''episode'\'')||e.children[0].key.includes('\''show'\'')/'
+HIDE_PODCASTS3='s/(!Array.isArray\(.\)\|\|.===..length)/$1||e[0].key.includes('\''episode'\'')||e[0].key.includes('\''show'\'')/'
+
+# Log-related regex
+LOG_1='s|sp://logging/v3/\w+||g'
+LOG_SENTRY='s|this\.getStackTop\(\)\.client=e|return;$&|'
+
+# Spotify Connect unlock / UI
+CONNECT_OLD_1='s| connect-device-list-item--disabled||' # 1.1.70.610+
+CONNECT_OLD_2='s|connect-picker.unavailable-to-control|spotify-connect|' # 1.1.70.610+
+CONNECT_OLD_3='s|(className:.,disabled:)(..)|$1false|' # 1.1.70.610+
+CONNECT_NEW='s/return (..isDisabled)(\?(..createElement|\(.{1,10}\))\(..,)/return false$2/' # 1.1.91.824+
+DEVICE_PICKER_NEW='s|(Enable showing a new and improved device picker UI",default:)(!1)|$1true|' # 1.1.90.855 - 1.1.95.893
+DEVICE_PICKER_OLD='s|(Enable showing a new and improved device picker UI",default:)(!0)|$1false|' # 1.1.96.783 - 1.1.97.962
+
# Credits
echo
echo "**************************"
@@ -88,53 +157,6 @@ XPUI_CSS="${XPUI_DIR}/xpui.css"
HOME_V2_JS="${XPUI_DIR}/home-v2.js"
VENDOR_XPUI_JS="${XPUI_DIR}/vendor~xpui.js"
-# Perl command
-PERL="perl -pi -w -e"
-
-# Ad-related regex
-AD_EMPTY_AD_BLOCK='s|adsEnabled:!0|adsEnabled:!1|'
-AD_PLAYLIST_SPONSORS='s|allSponsorships||'
-AD_UPGRADE_BUTTON='s/(return|.=.=>)"free"===(.+?)(return|.=.=>)"premium"===/$1"premium"===$2$3"free"===/g'
-AD_AUDIO_ADS='s/(case .:|async enable\(.\)\{)(this.enabled=.+?\(.{1,3},"audio"\),|return this.enabled=...+?\(.{1,3},"audio"\))((;case 4:)?this.subscription=this.audioApi).+?this.onAdMessage\)/$1$3.cosmosConnector.increaseStreamTime(-100000000000)/'
-AD_BILLBOARD='s|.(\?\[.{1,6}[a-zA-Z].leaderboard,)|false$1|'
-AD_UPSELL='s|(Enables quicksilver in-app messaging modal",default:)(!0)|$1false|'
-
-# Experimental (A/B test) features
-#ENABLE_BALLOONS='s|(Enable showing balloons on album release date anniversaries",default:)(!1)|$1true|s'
-ENABLE_BLOCK_USERS='s|(Enable block users feature in clientX",default:)(!1)|$1true|s'
-#ENABLE_CAROUSELS='s|(Use carousels on Home",default:)(!1)|$1true|s'
-#ENABLE_CLEAR_DOWNLOADS='s|(Enable option in settings to clear all downloads",default:)(!1)|$1true|s'
-ENABLE_DISCOG_SHELF='s|(Enable a condensed disography shelf on artist pages",default:)(!1)|$1true|s'
-ENABLE_ENHANCE_PLAYLIST='s|(Enable Enhance Playlist UI and functionality for end-users",default:)(!1)|$1true|s'
-#ENABLE_ENHANCE_SONGS='s|(Enable Enhance Liked Songs UI and functionality",default:)(!1)|$1true|s'
-#ENABLE_EQUALIZER='s|(Enable audio equalizer for Desktop and Web Player",default:)(!1)|$1true|s'
-ENABLE_IGNORE_REC='s|(Enable Ignore In Recommendations for desktop and web",default:)(!1)|$1true|s'
-#ENABLE_LIKED_SONGS='s|(Enable Liked Songs section on Artist page",default:)(!1)|$1true|s'
-ENABLE_LYRICS_CHECK='s|(With this enabled, clients will check whether tracks have lyrics available",default:)(!1)|$1true|s'
-#ENABLE_LYRICS_MATCH='s|(Enable Lyrics match labels in search results",default:)(!1)|$1true|s'
-ENABLE_MADE_FOR_YOU='s|(Show "Made For You" entry point in the left sidebar.,default:)(!1)|$1true|s'
-#ENABLE_NEW_SIDEBAR='s|(Enable Your Library X view of the left sidebar",default:)(!1)|$1true|s'
-ENABLE_PLAYLIST_CREATION_FLOW='s|(Enables new playlist creation flow in Web Player and DesktopX",default:)(!1)|$1true|s'
-ENABLE_PLAYLIST_PERMISSIONS_FLOWS='s|(Enable Playlist Permissions flows for Prod",default:)(!1)|$1true|s'
-#ENABLE_SEARCH_BOX='s|(Adds a search box so users are able to filter playlists when trying to add songs to a playlist using the contextmenu",default:)(!1)|$1true|s'
-#ENABLE_SIMILAR_PLAYLIST='s/,(.\.isOwnedBySelf&&)((\(.{0,11}\)|..createElement)\(.{1,3}Fragment,.+?{(uri:.|spec:.),(uri:.|spec:.).+?contextmenu.create-similar-playlist"\)}\),)/,$2$1/s'
-
-# Hide Premium-only features
-HIDE_DL_QUALITY='s/(\(.,..jsxs\)\(.{1,3}|(.\(\).|..)createElement\(.{1,4}),\{(filterMatchQuery|filter:.,title|(variant:"viola",semanticColor:"textSubdued"|..:"span",variant:.{3,6}mesto,color:.{3,6}),htmlFor:"desktop.settings.downloadQuality.+?).{1,6}get\("desktop.settings.downloadQuality.title.+?(children:.{1,2}\(.,.\).+?,|\(.,.\){3,4},|,.\)}},.\(.,.\)\),)//'
-HIDE_DL_ICON=' .BKsbV2Xl786X9a09XROH {display:none}'
-HIDE_DL_MENU=' button.wC9sIed7pfp47wZbmU6m.pzkhLqffqF_4hucrVVQA {display:none}'
-HIDE_VERY_HIGH=' #desktop\.settings\.streamingQuality>option:nth-child(5) {display:none}'
-
-# Log-related regex
-LOG_1='s|sp://logging/v3/\w+||g'
-LOG_SENTRY='s|this\.getStackTop\(\)\.client=.|return;$&|'
-
-# Spotify Connect unlock
-CONNECT_1='s| connect-device-list-item--disabled||'
-CONNECT_2='s|connect-picker.unavailable-to-control|spotify-connect|'
-CONNECT_3='s|(className:.,disabled:)(..)|$1false|'
-CONNECT_4='s/return (..isDisabled)(\?(..createElement|\(.{1,10}\))\(..,)/return false$2/'
-
# xpui detection
if [[ ! -f "${XPUI_SPA}" ]]; then
echo -e "\nxpui not found!\nReinstall Spotify then try again.\nExiting...\n"
@@ -183,27 +205,17 @@ echo "Applying SpotX patches..."
if [[ "${XPUI_SKIP}" == "false" ]]; then
if [[ "${PREMIUM_FLAG}" == "false" ]]; then
# Remove Empty ad block
- echo "Removing empty ad block..."
+ echo "Removing ad-related content..."
$PERL "${AD_EMPTY_AD_BLOCK}" "${XPUI_JS}"
-
# Remove Playlist sponsors
- echo "Removing playlist sponsors..."
$PERL "${AD_PLAYLIST_SPONSORS}" "${XPUI_JS}"
-
# Remove Upgrade button
- echo "Removing upgrade button..."
$PERL "${AD_UPGRADE_BUTTON}" "${XPUI_JS}"
-
# Remove Audio ads
- echo "Removing audio ads..."
$PERL "${AD_AUDIO_ADS}" "${XPUI_JS}"
-
# Remove billboard ads
- echo "Removing billboard ads..."
$PERL "${AD_BILLBOARD}" "${XPUI_JS}"
-
# Remove premium upsells
- echo "Removing premium upselling..."
$PERL "${AD_UPSELL}" "${XPUI_JS}"
# Remove Premium-only features
@@ -215,10 +227,15 @@ if [[ "${XPUI_SKIP}" == "false" ]]; then
# Unlock Spotify Connect
echo "Unlocking Spotify Connect..."
- $PERL "${CONNECT_1}" "${XPUI_JS}"
- $PERL "${CONNECT_2}" "${XPUI_JS}"
- $PERL "${CONNECT_3}" "${XPUI_JS}"
- $PERL "${CONNECT_4}" "${XPUI_JS}"
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.70.610") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.91.824") ]]; then
+ $PERL "${CONNECT_OLD_1}" "${XPUI_JS}"
+ $PERL "${CONNECT_OLD_2}" "${XPUI_JS}"
+ $PERL "${CONNECT_OLD_3}" "${XPUI_JS}"
+ elif [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.91.824") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.96.783") ]]; then
+ $PERL "${DEVICE_PICKER_NEW}" "${XPUI_JS}"
+ $PERL "${CONNECT_NEW}" "${XPUI_JS}"
+ elif [[ $(ver "${CLIENT_VERSION}") -gt $(ver "1.1.96.783") ]]; then
+ $PERL "${CONNECT_NEW}" "${XPUI_JS}"; fi
else
echo "Premium subscription setup selected..."; fi; fi
@@ -226,25 +243,26 @@ if [[ "${XPUI_SKIP}" == "false" ]]; then
if [[ "${XPUI_SKIP}" == "false" ]]; then
if [[ "${EXPERIMENTAL_FLAG}" == "true" ]]; then
echo "Adding experimental features..."
- #$PERL "${ENABLE_BALLOONS}" "${XPUI_JS}"
- $PERL "${ENABLE_BLOCK_USERS}" "${XPUI_JS}"
- #$PERL "${ENABLE_CAROUSELS}" "${XPUI_JS}"
- #$PERL "${ENABLE_CLEAR_DOWNLOADS}" "${XPUI_JS}"
- $PERL "${ENABLE_DISCOG_SHELF}" "${XPUI_JS}"
- $PERL "${ENABLE_ENHANCE_PLAYLIST}" "${XPUI_JS}"
- #$PERL "${ENABLE_ENHANCE_SONGS}" "${XPUI_JS}"
- #$PERL "${ENABLE_EQUALIZER}" "${XPUI_JS}"
- #$PERL "${ENABLE_IGNORE_REC}" "${XPUI_JS}"
- $PERL "${ENABLE_LIKED_SONGS}" "${XPUI_JS}"
- $PERL "${ENABLE_LYRICS_CHECK}" "${XPUI_JS}"
- #$PERL "${ENABLE_LYRICS_MATCH}" "${XPUI_JS}"
- $PERL "${ENABLE_MADE_FOR_YOU}" "${XPUI_JS}"
- #$PERL "${ENABLE_NEW_SIDEBAR}" "${XPUI_JS}"
- $PERL "${ENABLE_PLAYLIST_CREATION_FLOW}" "${XPUI_JS}"
- $PERL "${ENABLE_PLAYLIST_PERMISSIONS_FLOWS}" "${XPUI_JS}"
- #$PERL "${ENABLE_SEARCH_BOX}" "${XPUI_JS}"
- #$PERL "${ENABLE_SIMILAR_PLAYLIST}" "${XPUI_JS}"
- fi; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.99.871") ]]; then $PERL "${ENABLE_ADD_PLAYLIST}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.89.854") ]]; then $PERL "${ENABLE_BALLOONS}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.70.610") ]]; then $PERL "${ENABLE_BLOCK_USERS}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.93.896") ]]; then $PERL "${ENABLE_CAROUSELS}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.92.644") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.99.871") ]]; then $PERL "${ENABLE_CLEAR_DOWNLOADS}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.79.763") ]]; then $PERL "${ENABLE_DISCOG_SHELF}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.84.716") ]]; then $PERL "${ENABLE_ENHANCE_PLAYLIST}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.86.857") ]]; then $PERL "${ENABLE_ENHANCE_SONGS}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.88.595") ]]; then $PERL "${ENABLE_EQUALIZER}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.87.612") ]]; then $PERL "${ENABLE_IGNORE_REC}" "${XPUI_JS}"; fi
+ if [[ "${EX_LEFTSIDEBAR}" != "true" ]]; then if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.97.962") ]]; then $PERL "${ENABLE_LEFT_SIDEBAR}" "${XPUI_JS}"; fi; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.70.610") ]]; then $PERL "${ENABLE_LIKED_SONGS}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.70.610") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.94.864") ]]; then $PERL "${ENABLE_LYRICS_CHECK}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.87.612") ]]; then $PERL "${ENABLE_LYRICS_MATCH}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.70.610") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.96.783") ]]; then $PERL "${ENABLE_MADE_FOR_YOU}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.70.610") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.94.864") ]]; then $PERL "${ENABLE_PLAYLIST_CREATION_FLOW}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.75.572") ]]; then $PERL "${ENABLE_PLAYLIST_PERMISSIONS_FLOWS}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.98.683") ]]; then $PERL "${ENABLE_RIGHT_SIDEBAR}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.86.857") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.94.864") ]]; then $PERL "${ENABLE_SEARCH_BOX}" "${XPUI_JS}"; fi
+ if [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.85.884") ]]; then $PERL "${ENABLE_SIMILAR_PLAYLIST}" "${XPUI_JS}"; fi; fi; fi
# Remove logging
if [[ "${XPUI_SKIP}" == "false" ]]; then
@@ -252,6 +270,37 @@ if [[ "${XPUI_SKIP}" == "false" ]]; then
$PERL "${LOG_1}" "${XPUI_JS}"
$PERL "${LOG_SENTRY}" "${VENDOR_XPUI_JS}"; fi
+# Handle new home screen UI
+if [[ "${XPUI_SKIP}" == "false" ]]; then
+ if [[ "${OLD_UI_FLAG}" == "true" ]]; then
+ echo "Skipping new home UI patch..."
+ elif [[ $(ver "${CLIENT_VERSION}") -gt $(ver "1.1.93.896") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.97.956") ]]; then
+ echo "Enabling new home screen UI..."
+ $PERL "${NEW_UI}" "${XPUI_JS}"
+ $PERL "${AUDIOBOOKS_CLIENTX}" "${XPUI_JS}"
+ elif [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.97.956") ]]; then
+ echo "Enabling new home screen UI..."
+ $PERL "${NEW_UI_2}" "${XPUI_JS}"
+ $PERL "${AUDIOBOOKS_CLIENTX}" "${XPUI_JS}"
+ else
+ :; fi; fi
+
+# Hide podcasts, episodes and audiobooks on home screen
+if [[ "${XPUI_SKIP}" == "false" ]]; then
+ if [[ "${HIDE_PODCASTS_FLAG}" == "true" ]]; then
+ if [[ $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.93.896") ]]; then
+ echo "Hiding non-music items on home screen..."
+ $PERL "${HIDE_PODCASTS}" "${XPUI_JS}"
+ elif [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.93.896") && $(ver "${CLIENT_VERSION}") -le $(ver "1.1.96.785") ]]; then
+ echo "Hiding non-music items on home screen..."
+ $PERL "${HIDE_PODCASTS2}" "${HOME_V2_JS}"
+ elif [[ $(ver "${CLIENT_VERSION}") -gt $(ver "1.1.96.785") && $(ver "${CLIENT_VERSION}") -lt $(ver "1.1.98.683") ]]; then
+ echo "Hiding non-music items on home screen..."
+ $PERL "${HIDE_PODCASTS3}" "${HOME_V2_JS}"
+ elif [[ $(ver "${CLIENT_VERSION}") -ge $(ver "1.1.98.683") ]]; then
+ echo "Hiding non-music items on home screen..."
+ $PERL "${HIDE_PODCASTS3}" "${XPUI_JS}"; fi; fi; fi
+
# Delete app cache
if [[ "${CACHE_FLAG}" == "true" ]]; then
echo "Clearing app cache..."
@@ -267,4 +316,4 @@ if [[ "${XPUI_SKIP}" == "false" ]]; then
(cd "${XPUI_DIR}"; zip -qq -r ../xpui.spa .)
rm -rf "${XPUI_DIR}"; fi
-echo -e "SpotX finished patching!\n"
+echo -e "SpotX finished patching!\n"
\ No newline at end of file
diff --git a/uninstall.sh b/uninstall.sh
index a061bad..73519ad 100644
--- a/uninstall.sh
+++ b/uninstall.sh
@@ -1,16 +1,50 @@
#!/usr/bin/env bash
-# Inital paths and filenames
-INSTALL_PATH=$(readlink -e `type -p spotify`| rev | cut -d/ -f2- | rev)
+# Script flags
+PATH_FLAG=''
+
+while getopts 'P:' flag; do
+ case "${flag}" in
+ P)
+ PATH_FLAG="${OPTARG}"
+ INSTALL_PATH="${PATH_FLAG}" ;;
+ *)
+ echo "Error: Flag not supported."
+ exit ;;
+ esac
+done
+
+# Locate install directory
+if [ -z ${INSTALL_PATH+x} ]; then
+ INSTALL_PATH=$(readlink -e `type -p spotify` 2>/dev/null | rev | cut -d/ -f2- | rev)
+ if [[ -d "${INSTALL_PATH}" && "${INSTALL_PATH}" != "/usr/bin" ]]; then
+ echo "Spotify directory found in PATH: ${INSTALL_PATH}"
+ elif [[ ! -d "${INSTALL_PATH}" ]]; then
+ echo -e "\nSpotify not found in PATH. Searching for Spotify directory..."
+ INSTALL_PATH=$(timeout 10 find / -type f -path "*/spotify*Apps/*" -name "xpui.spa" -size -7M -size +3M -print -quit 2>/dev/null | rev | cut -d/ -f3- | rev)
+ if [[ -d "${INSTALL_PATH}" ]]; then
+ echo "Spotify directory found: ${INSTALL_PATH}"
+ elif [[ ! -d "${INSTALL_PATH}" ]]; then
+ echo -e "Spotify directory not found. Set directory path with -P flag.\nExiting...\n"
+ exit; fi
+ elif [[ "${INSTALL_PATH}" == "/usr/bin" ]]; then
+ echo -e "\nSpotify PATH is set to /usr/bin, searching for Spotify directory..."
+ INSTALL_PATH=$(timeout 10 find / -type f -path "*/spotify*Apps/*" -name "xpui.spa" -size -7M -size +3M -print -quit 2>/dev/null | rev | cut -d/ -f3- | rev)
+ if [[ -d "${INSTALL_PATH}" && "${INSTALL_PATH}" != "/usr/bin" ]]; then
+ echo "Spotify directory found: ${INSTALL_PATH}"
+ elif [[ "${INSTALL_PATH}" == "/usr/bin" ]] || [[ ! -d "${INSTALL_PATH}" ]]; then
+ echo -e "Spotify directory not found. Set directory path with -P flag.\nExiting...\n"
+ exit; fi; fi
+else
+ if [[ ! -d "${INSTALL_PATH}" ]]; then
+ echo -e "Directory path set by -P was not found.\nExiting...\n"
+ exit; fi; fi
+
+# XPUI paths
XPUI_PATH="${INSTALL_PATH}/Apps"
XPUI_SPA="${XPUI_PATH}/xpui.spa"
XPUI_BAK="${XPUI_PATH}/xpui.bak"
-# Detect client in PATH
-if [[ ! -d "${INSTALL_PATH}" ]]; then
- echo -e "\nSpotify not found in PATH. Exiting...\n"
- exit; fi
-
# Check for backup file
if [[ ! -f "${XPUI_BAK}" ]]; then
echo -e "Backup file not found.\nExiting...\n"