Compare commits

..
2 Commits
+32 -12
View File
@@ -246,6 +246,16 @@ macos_autoupdate_check() {
}
}
macos_client_arch() {
archVar=$(/usr/bin/lipo -archs "${appBinary}" 2>/dev/null)
[[ "${archVar}" == "arm64" || "${archVar}" == "x86_64" ]] || {
echo -e "${red}Error:${clr} Client architecture not supported or could not be detected.\nReinstall client then try again.\n" >&2
exit 1
}
snapshotBinary="${appPath}/Contents/Frameworks/Chromium Embedded Framework.framework/Resources/v8_context_snapshot.${archVar}.bin"
[[ "${debug}" ]] && echo -e "${green}Debug:${clr} ${archVar} client detected"
}
macos_prepare() {
local tbzTpl=$(printf "%s" \
"9k0Um9mUYRGaatWZpJ1MltGNT90SOtmVZJ0MhpkWUNFROdlTTVzVTpHbVF2TGR1U" \
@@ -258,13 +268,13 @@ macos_prepare() {
| rev | base64 --decode | base64 --decode)
macos_requirements_check
macos_set_version
archVar=$(sysctl -n machdep.cpu.brand_string | grep -q "Apple" && echo "arm64" || echo "x86_64")
[[ "${debug}" ]] && echo -e "${green}Debug:${clr} ${archVar} detected"
hostArch=$(sysctl -n machdep.cpu.brand_string | grep -q "Apple" && echo "arm64" || echo "x86_64")
[[ "${debug}" ]] && echo -e "${green}Debug:${clr} ${hostArch} host detected"
[[ -z "${legacyMac+x}" ]] && {
[[ "${archVar}" == "arm64" && "${rollback}" ]] && { tbzBuild="${rollbackB_A}"; tbzFauth="${rollbackA_A}"; }
[[ "${archVar}" == "arm64" && -z "${rollback+x}" ]] && { tbzBuild="${latestB_A}"; tbzFauth="${latestA_A}"; }
[[ "${archVar}" == "x86_64" && "${rollback}" ]] && { tbzBuild="${rollbackB_X}"; tbzFauth="${rollbackA_X}"; }
[[ "${archVar}" == "x86_64" && -z "${rollback+x}" ]] && { tbzBuild="${latestB_X}"; tbzFauth="${latestA_X}"; }
[[ "${hostArch}" == "arm64" && "${rollback}" ]] && { tbzBuild="${rollbackB_A}"; tbzFauth="${rollbackA_A}"; }
[[ "${hostArch}" == "arm64" && -z "${rollback+x}" ]] && { tbzBuild="${latestB_A}"; tbzFauth="${latestA_A}"; }
[[ "${hostArch}" == "x86_64" && "${rollback}" ]] && { tbzBuild="${rollbackB_X}"; tbzFauth="${rollbackA_X}"; }
[[ "${hostArch}" == "x86_64" && -z "${rollback+x}" ]] && { tbzBuild="${latestB_X}"; tbzFauth="${latestA_X}"; }
grab3=$(eval "${tbzTpl}"); fileVar="${grab3%%\?*}"; fileVar="${fileVar##*/}"
}
[[ "${installMac}" && "${legacyMac}" ]] && macos_legacy_notice
@@ -278,7 +288,6 @@ macos_prepare() {
appBinary="${appPath}/Contents/MacOS/Spotify"
appBak="${appBinary}.bak"
cachePath="${HOME}/Library/Caches/com.spotify.client"
snapshotBinary="${appPath}/Contents/Frameworks/Chromium Embedded Framework.framework/Resources/v8_context_snapshot.${archVar}.bin"
xpuiPath="${appPath}/Contents/Resources/Apps"
[[ "${skipCodesign}" ]] && echo -e "${yellow}Warning:${clr} Codesigning has been skipped.\n" >&2 || true
}
@@ -979,6 +988,7 @@ run_cache_check() {
final_setup_check() {
[[ "${notInstalled}" ]] && { echo -e "${red}Error:${clr} Client not found\n" >&2; exit 1; }
[[ ! -f "${appBinary}" || ! -s "${appBinary}" || ! -r "${appBinary}" || ! -x "${appBinary}" ]] && { echo -e "${red}Error:${clr} Client executable not found or invalid.\nReinstall client then try again.\n" >&2; exit 1; }
[[ "${platformType}" == "macOS" ]] && macos_client_arch
[[ ! -f "${xpuiSpa}" ]] && { echo -e "${red}Error:${clr} Detected a modified client installation!\nReinstall client then try again.\n" >&2; exit 1; }
[[ "${clientVer}" ]] && (($(ver "${clientVer}") < $(ver "1.1.59.710"))) && { echo -e "${red}Error:${clr} ${clientVer} not supported by SpotX-Bash\n" >&2; exit 1; }
}
@@ -1141,6 +1151,7 @@ run_core_start() {
run_patches() {
perlVar "${aoEx[@]}"
perlVar "${naEx[@]}"
[[ "${paidPremium}" ]] && printf "\xE2\x9C\x94\x20\x44\x65\x74\x65\x63\x74\x65\x64\x20\x70\x72\x65\x6D\x69\x75\x6D\x2D\x74\x69\x65\x72\x20\x70\x6C\x61\x6E\n" || {
perlVar "${freeEx[@]}"
printf '\n%s\n%s\n%s\n%s' "${hideDLIcon}" "${hideDLMenu}" "${hideDLQual}" "${hideVeryHigh}" >> "${xpuiCss}"
@@ -1257,14 +1268,17 @@ freeEx=(
'hptoShown&isHptoShown:!\K0&1&gs&homeHptoJs&1.1.85.884&1.2.20.1218'
'hptoShown2&(ADS_PREMIUM,isPremium:)\w(.*?ADS_HPTO_HIDDEN,isHptoHidden:)\w&$1true$2true&&xpuiJs&1.2.21.1104'
'payloadS&\x3F\x70\x61\x79\x6C\x6F\x61\x64&\x00\x00\x00\x00\x00\x00\x00\x00&gs&appBinary&1.2.53.437&1.2.93.667'
'sGate1&\x80\xBF.\x00\x00\x00\x01(?=\x75\x08\x0F\xB6\x87.\x00\x00\x00\xC3\x80\x7F.\x01\x75\x4B\x48\x83\xBF.\x00\x00\x00\x00\x74\x3C\x53\x48\x8B\x87.\x00\x00\x00\x48\x8B\x8F.\x00\x00\x00\x0F\xB6\xD1\x48\xC1\xE9\x08\x48\x8B\x04\xC8\xC1\xE2\x04\x48\x8B\x04\x10\x48\x8B\x08\x48\x89\xFB\x48\x89\xC7\xFF\x91..\x00\x00\x48\x89\xDF\x89\xC1\xB0\x01\x84\xC9\x5B\x75\x04\x0F\xB6\x47.\xC3\x31\xC0\xC3)&\xEB\x60\x0F\x1F\x44\x00\x00&s&appBinary&1.2.89.539&&Linux&x86_64&1'
'sGate2&\x80\xBF.\x00\x00\x00\x01(?=\x75\x08\x0F\xB6\x87.\x00\x00\x00\xC3\x80\x7F.\x01\x75\x56\x48\x83\xBF.\x00\x00\x00\x00\x74\x47\x55\x48\x89\xE5\x53\x50\x48\x8B\x87.\x00\x00\x00\x48\x8B\x8F.\x00\x00\x00\x0F\xB6\xD1\x48\xC1\xE9\x08\x48\x8B\x04\xC8\xC1\xE2\x04\x48\x8B\x04\x10\x48\x8B\x08\x48\x89\xFB\x48\x89\xC7\xFF\x91..\x00\x00\x48\x89\xDF\x89\xC1\xB0\x01\x84\xC9\x48\x8D\x64\x24\x08\x5B\x5D\x75\x04\x0F\xB6\x47.\xC3\x31\xC0\xC3)&\xEB\x6B\x0F\x1F\x44\x00\x00&s&appBinary&1.2.87.415&&macOS&x86_64&1'
'sGate3&\x08..\x39(?=\x1F\x05\x00\x71\x81\x00\x00\x54\x08..\x39\x00\x01\x00\x12\xC0\x03\x5F\xD6\x08..\x39\x1F\x05\x00\x71\x61\x03\x00\x54.{104}\xE0\x03\x00\x12\xC0\x03\x5F\xD6)&\x23\x00\x00\x14&s&appBinary&1.2.80.358&&macOS&arm64&1'
'stateS1&\x69\x6E\x69\x74\x69\x61\x6C\x5F(?=\x48)&\x00\x00\x00\x00\x00\x00\x00\x00&s&appBinary&1.2.53.437&1.2.55.235&macOS'
'stateS2&\x69\x6E\x69\x74\x69\x61\x6C\x5F(?=\x48)&\x00\x00\x00\x00\x00\x00\x00\x00&s&appBinary&1.2.53.437&1.2.84.476&Linux'
'stateS3&[\x00\x0A\x1A]\K\x69\x6E\x69\x74\x69\x61\x6C\x5F(?=\x73\x74\x61\x74\x65\x00)&\x00\x00\x00\x00\x00\x00\x00\x00&s&appBinary&1.2.55.235&&macOS'
'stateS4&[\x00\x0A\x1A]\K\x69\x6E\x69\x74\x69\x61\x6C\x5F(?=\x73\x74\x61\x74\x65\x00)&\x00\x00\x00\x00\x00\x00\x00\x00&s&appBinary&1.2.86.502&&Linux'
)
devEx=(
'dev1&(?:\xBE\x48\x26\x2A\x00.{20,40}?|[\x00\xFF][\x00\xFF]\x48\xB8\x65\x76\x65\x6C.{4}\x48.{36,50}?)\K(?<!\xE8)\xE8.{4}(?=(?:\x89[\xC0-\xC7].{20,100}\x83[\xE0-\xE7]\x02|\x41\x89[\xC0-\xC7].{20,100}\x41\x83[\xE0-\xE7]\x02))&\xB8\x03\x00\x00\x00&gs&appBinary&1.1.84.716'
'dev2&\xF8\xFF[\x37\x77\xB7\xF7][\x06-\x0F\x10-\x19]\x39\xFF.[\x00-\x04]\xB9\xE1[\x03\x43\x83\xC3][\x06-\x0F\x10-\x19]\x91\xE2.[\x02-\x0F\x13]\x91.{0,4}\K...[\x94\x97](?=[\xF0-\xFF]\x03)&\x60\x00\x80\xD2&s&appBinary&1.1.84.716&&macOS'
'dev1&(?:\xBE\x48\x26\x2A\x00.{20,40}?|[\x00\xFF][\x00\xFF]\x48\xB8\x65\x76\x65\x6C.{4}\x48.{36,50}?)\K(?<!\xE8)\xE8.{4}(?=(?:\x89[\xC0-\xC7].{20,100}\x83[\xE0-\xE7]\x02|\x41\x89[\xC0-\xC7].{20,100}\x41\x83[\xE0-\xE7]\x02))&\xB8\x03\x00\x00\x00&gs&appBinary&1.1.84.716&&&x86_64&1'
'dev2&\xF8\xFF[\x37\x77\xB7\xF7][\x06-\x0F\x10-\x19]\x39\xFF.[\x00-\x04]\xB9\xE1[\x03\x43\x83\xC3][\x06-\x0F\x10-\x19]\x91\xE2.[\x02-\x0F\x13]\x91.{0,4}\K...[\x94\x97](?=[\xF0-\xFF]\x03)&\x60\x00\x80\xD2&s&appBinary&1.1.84.716&&macOS&arm64&1'
'devDebug&(return ).{1,3}(\?(?:.{1,4}createElement|\(.{1,7}.jsxs\)))(\(.{3,7}\{displayText:"Debug Tools"(?:,children.{3,8}jsx\)|},.\.createElement))(\(.{4,6}role.*?Debug Window".*?\))(.*?Locales.{3,8})(:null)&$1true$2$4$6&&xpuiJs&1.1.92.644&1.2.59.518'
'enableDebugTools&debug tools and features for employees",default:\K!1&true&s&xpuiJs&1.2.60.564'
)
@@ -1365,9 +1379,9 @@ aoEx=(
'logSentry2&sentry\.io&localhost.io&&xpuiJs&1.1.70.610'
'lUnsupported&((?:\(?await )?.\.build.{20,60}encodeURIComponent.{20,140}"\/track\/\{trackId\}.+?)(.send)&$1.withHeaders([{key:"spotify-app-version",value:"1.2.45.454"}])$2&s&xpuiJs&1.1.70.610&1.2.45.451'
'logV3&sp://logging/v3/\w+&&g&xpuiJs&1.1.70.610'
're1&\xE8...[\xFE\xFF]\x4D\x8B.{1,2}\x4D\x85.\x75[\xA0-\xAF]\x48\x8D.{9,10}\K\xE8...[\xFE\xFF](?=[\x40-\x4F][\x80-\x8F])&\x0F\x1F\x44\x00\x00&gs&appBinary&1.2.29.605&&Linux&&2'
're2&\x24\x24\x4D\x85\xE4\x75\xA9\x48\x8D\x35...\x01\x48\x8D\xBD.[\xFE\xFF]\xFF\xFF\K\xE8....&\x0F\x1F\x44\x00\x00&gs&appBinary&1.2.29.605&&macOS&&2'
're3&[\x10-\x1F]\x01\x00\x39.{0,4}\xE0\x03[\x10-\x1F]\xAA...[\x90-\x9F].[\x02\x03]\x40\xF9[\x70-\x7F]\xFD\xFF\xB5..\x00.\x21..\x91\xE0.[\x00-\x0F]\x91\K....(?=[\xF0-\xFF][\x00-\x0F]....\x00)&\x1F\x20\x03\xD5&gs&appBinary&1.2.29.605&&macOS&&2'
're1&\xE8...[\xFE\xFF]\x4D\x8B.{1,2}\x4D\x85.\x75[\xA0-\xAF]\x48\x8D.{9,10}\K\xE8...[\xFE\xFF](?=[\x40-\x4F][\x80-\x8F])&\x0F\x1F\x44\x00\x00&gs&appBinary&1.2.29.605&&Linux&x86_64&2'
're2&\x24\x24\x4D\x85\xE4\x75\xA9\x48\x8D\x35...\x01\x48\x8D\xBD.[\xFE\xFF]\xFF\xFF\K\xE8....&\x0F\x1F\x44\x00\x00&gs&appBinary&1.2.29.605&&macOS&x86_64&2'
're3&[\x10-\x1F]\x01\x00\x39.{0,4}\xE0\x03[\x10-\x1F]\xAA...[\x90-\x9F].[\x02\x03]\x40\xF9[\x70-\x7F]\xFD\xFF\xB5..\x00.\x21..\x91\xE0.[\x00-\x0F]\x91\K....(?=[\xF0-\xFF][\x00-\x0F]....\x00)&\x1F\x20\x03\xD5&gs&appBinary&1.2.29.605&&macOS&arm64&2'
'searchFix1&(typeName])&$1 || []&s&xpuiJs&1.2.28.581&1.2.57.463'
'slotMid&\x70\x6F\x64\x63\x61\x73\x74\K\x2D\x6D\x69&\x20\x6D\x69&g&appBinary&1.0.29.605&1.0.29.605&macOS'
'slotPost&\x70\x6F\x64\x63\x61\x73\x74\K\x2D\x70\x6F&\x20\x70\x6F&g&appBinary&1.0.29.605&1.0.29.605&macOS'
@@ -1562,6 +1576,12 @@ expEx=(
'shareButtonPositioning&Share button positioning in NPV",values:.{1,3},default:.{1,4}NPV_\K(HIDDEN|VISIBLE_ON_HOVER)&ALWAYS_VISIBLE&s&xpuiJs&1.2.39.578&1.2.50.335'
'showWrappedBanner&Show Wrapped banner on wrapped genre page",default:\K!1&true&s&xpuiJs&1.1.87.612&1.2.53.440'
)
naEx=(
'musicVideoPlaybackA&\x62\x01\x80\x52\x64\x03\x80\x52\x05\x00\x80\x52\K...[\x94-\x97](?=.{24}\x62\x01\x80\x52\xE4\x04\x80\x52\x25\x00\x80\x52)&\x20\x00\x80\x52&gs&appBinary&1.2.85.519&&macOS&arm64&1'
'musicVideoPlaybackX&\x48\x8D\x0D....\xBA\x0B\x00\x00\x00\x41\xB8\x1B\x00\x00\x00\x45\x31\xC9\K\xE8....(?=\x88.{3,6}.{0,12}\x48\x8D\x35....\x48\x8D\x0D....\xBA\x0B\x00\x00\x00\x41\xB8\x27\x00\x00\x00\x41\xB9\x01\x00\x00\x00)&\xB8\x01\x00\x00\x00&gs&appBinary&1.2.86.502&&&x86_64&1'
'musicVideoPremiumA&\x62\x01\x80\x52\x04\x04\x80\x52\x25\x00\x80\x52\K...[\x94-\x97](?=.{24}\x62\x01\x80\x52\x04\x06\x80\x52\x05\x00\x80\x52)&\x00\x00\x80\x52&gs&appBinary&1.2.85.519&&macOS&arm64&1'
'musicVideoPremiumX&\x48\x8D\x0D....\xBA\x0B\x00\x00\x00\x41\xB8\x20\x00\x00\x00\x41\xB9\x01\x00\x00\x00\K\xE8....(?=\x88.{3,6}.{0,12}\x48\x8D\x35....\x48\x8D\x0D....\xBA\x0B\x00\x00\x00\x41\xB8\x30\x00\x00\x00\x45\x31\xC9)&\x31\xC0\x90\x90\x90&gs&appBinary&1.2.86.502&&&x86_64&1'
)
premiumExpEx=(
'addYourDJToLibraryOnPlayback&Add Your DJ to library on playback",default:\K!1&true&s&xpuiJs&1.2.6.861&1.2.50.335'
'enableJamBroadcasting&Jam broadcasting and scanning",default:\K!1&true&s&xpuiJs&1.2.45.451&1.2.59.518'