diff --git a/Install.ps1 b/Install.ps1
index e221480..300b91d 100644
--- a/Install.ps1
+++ b/Install.ps1
@@ -15,6 +15,8 @@ $upgrade_client = $false
$podcasts_off = $false
$spotx_new = $false
$run_as_admin = $false
+$block_update = $false
+$cache_install = $false
# Check Tls12
@@ -205,6 +207,15 @@ if (-not $spotifyInstalled -or $upgrade_client) {
Write-Host "Please wait..."`n
+ # Try deleting chrome_elf files if Spotify folder exists
+
+ if (Test-Path -LiteralPath $spotifyDirectory) {
+ $ErrorActionPreference = 'SilentlyContinue' # extinguishes light mistakes
+ Stop-Process -Name Spotify
+ Start-Sleep -Seconds 1
+ Remove-Item $spotifyDirectory -Include *chrome_elf* -Recurse -Force
+ }
+
# Correcting the error if the spotify installer was launched from the administrator
if ($run_as_admin) {
@@ -228,16 +239,9 @@ if (-not $spotifyInstalled -or $upgrade_client) {
Stop-Process -Name SpotifyWebHelper
Stop-Process -Name SpotifyFullSetup
-
$ErrorActionPreference = 'SilentlyContinue' # extinguishes light mistakes
- # Update backup chrome_elf.dll
- if (Test-Path -LiteralPath $chrome_elf_bak) {
- Remove-item $spotifyDirectory/chrome_elf_bak.dll
- Move-Item $chrome_elf $chrome_elf_bak
- }
-
- # Remove spotify installer
+ # Remove Spotify installer
if (test-path "$env:LOCALAPPDATA\Microsoft\Windows\Temporary Internet Files\") {
get-childitem -path "$env:LOCALAPPDATA\Microsoft\Windows\Temporary Internet Files\" -Recurse -Force -Filter "SpotifyFullSetup*" | remove-item -Force
}
@@ -246,23 +250,12 @@ if (-not $spotifyInstalled -or $upgrade_client) {
}
}
-
# Create backup chrome_elf.dll
+
if (!(Test-Path -LiteralPath $chrome_elf_bak)) {
Move-Item $chrome_elf $chrome_elf_bak
}
-Write-Host 'Patching Spotify...'`n
-$patchFiles = "$PWD\chrome_elf.dll", "$PWD\config.ini"
-Copy-Item -LiteralPath $patchFiles -Destination "$spotifyDirectory"
-
-$tempDirectory = $PWD
-Pop-Location
-
-
-Start-Sleep -Milliseconds 200
-Remove-Item -Recurse -LiteralPath $tempDirectory
-
do {
@@ -286,15 +279,174 @@ while ($ch -notmatch '^y$|^n$')
if ($ch -eq 'y') { $podcasts_off = $true }
-# Modify files
+do {
+ $ch = Read-Host -Prompt "Want to block updates ? (Y/N)"
+ Write-Host ""
+ if (!($ch -eq 'n' -or $ch -eq 'y')) {
+
+ Write-Host "Oops, an incorrect value, " -ForegroundColor Red -NoNewline
+ Write-Host "enter again through..." -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host "3" -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host ".2" -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host ".1"
+ Start-Sleep -Milliseconds 1000
+ Clear-Host
+ }
+}
+while ($ch -notmatch '^y$|^n$')
+
+if ($ch -eq 'y') { $block_update = $true }
+
+do {
+ $ch = Read-Host -Prompt "Want to set up automatic cache cleanup? (Y/N)"
+ Write-Host ""
+ if (!($ch -eq 'n' -or $ch -eq 'y')) {
+ Write-Host "Oops, an incorrect value, " -ForegroundColor Red -NoNewline
+ Write-Host "enter again through..." -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host "3" -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host ".2" -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host ".1"
+ Start-Sleep -Milliseconds 1000
+ Clear-Host
+ }
+}
+while ($ch -notmatch '^y$|^n$')
+if ($ch -eq 'y') {
+ $cache_install = $true
+
+ do {
+ $ch = Read-Host -Prompt "Cache files that have not been used for more than XX days will be deleted.
+ Enter the number of days from 1 to 100"
+ Write-Host ""
+ if (!($ch -match "^[1-9][0-9]?$|^100$")) {
+ Write-Host "Oops, an incorrect value, " -ForegroundColor Red -NoNewline
+ Write-Host "enter again through..." -NoNewline
+
+ Start-Sleep -Milliseconds 1000
+ Write-Host "3" -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host ".2" -NoNewline
+ Start-Sleep -Milliseconds 1000
+ Write-Host ".1"
+ Start-Sleep -Milliseconds 1000
+ Clear-Host
+ }
+ }
+ while ($ch -notmatch '^[1-9][0-9]?$|^100$')
+
+ if ($ch -match "^[1-9][0-9]?$|^100$") { $number_days = $ch }
+
+}
+
+
+function OffUpdStatus {
+ # Remove the label about the new version
+ $upgrade_status = "sp://desktop/v1/upgrade/status"
+ if ($xpui_js -match $upgrade_status) { $xpui_js = $xpui_js -replace $upgrade_status, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$upgrade_status in xpui.js" }
+ $xpui_js
+}
+function OffPodcasts {
+ # Turn off podcasts
+ $podcasts_off1 = '"album,playlist,artist,show,station,episode"', '"album,playlist,artist,station"'
+ $podcasts_off2 = ',this[.]enableShows=[a-z]'
+ if ($xpui_js -match $podcasts_off1[0]) { $xpui_js = $xpui_js -replace $podcasts_off1[0], $podcasts_off1[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$podcasts_off1[0] in xpui.js" }
+ if ($xpui_js -match $podcasts_off2) { $xpui_js = $xpui_js -replace $podcasts_off2, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$podcasts_off2 in xpui.js" }
+ $xpui_js
+}
+function OffAdsOnFullscreen {
+ # Removing an empty block
+ $empty_block_ad = 'adsEnabled:!0', 'adsEnabled:!1'
+ # Full screen mode activation and removing "Upgrade to premium" menu, upgrade button
+ $full_screen_1 = '(session[,]{1}[a-z]{1}[=]{1}[a-z]{1}[=]{1}[>]{1}[{]{1}var [a-z]{1}[,]{1}[a-z]{1}[,]{1}[a-z]{1}[;]{1}[a-z]{6})(["]{1}free["]{1})', '$1"premium"'
+ $full_screen_2 = '([a-z]{1}[.]{1}toLowerCase[(]{1}[)]{2}[}]{1}[,]{1}[a-z]{1}[=]{1}[a-z]{1}[=]{1}[>]{1}[{]{1}var [a-z]{1}[,]{1}[a-z]{1}[,]{1}[a-z]{1}[;]{1}return)(["]{1}premium["]{1})', '$1"free"'
+ # Disabling a playlist sponsor
+ $playlist_ad_off = "allSponsorships"
+ if ($xpui_js -match $empty_block_ad[0]) { $xpui_js = $xpui_js -replace $empty_block_ad[0], $empty_block_ad[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$empty_block_ad[0] in xpui.js" }
+ if ($xpui_js -match $full_screen_1[0]) { $xpui_js = $xpui_js -replace $full_screen_1[0], $full_screen_1[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$full_screen_1[0] in xpui.js" }
+ if ($xpui_js -match $full_screen_2[0]) { $xpui_js = $xpui_js -replace $full_screen_2[0], $full_screen_2[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$full_screen_2[0] in xpui.js" }
+ if ($xpui_js -match $playlist_ad_off) { $xpui_js = $xpui_js -replace $playlist_ad_off, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$playlist_ad_off in xpui.js" }
+ $xpui_js
+}
+function ExpFeature {
+ # Experimental Feature
+ $exp_features1 = '(Show "Made For You" entry point in the left sidebar.,default:)(!1)', '$1!0'
+ $exp_features2 = '(Enables the 2021 icons redraw which loads a different font asset for rendering icon glyphs.",default:)(!1)', '$1!0'
+ $exp_features3 = '(Enable Liked Songs section on Artist page",default:)(!1)', '$1!0'
+ $exp_features4 = '(Enable block users feature in clientX",default:)(!1)', '$1!0'
+ $exp_features5 = '(Enables quicksilver in-app messaging modal",default:)(!0)', '$1!1'
+ $exp_features6 = '(With this enabled, clients will check whether tracks have lyrics available",default:)(!1)', '$1!0'
+ $exp_features7 = '(Enables new playlist creation flow in Web Player and DesktopX",default:)(!1)', '$1!0'
+ $exp_features8 = '(Enable Enhance Playlist UI and functionality",default:)(!1)', '$1!0'
+ if ($xpui_js -match $exp_features1[0]) { $xpui_js = $xpui_js -replace $exp_features1[0], $exp_features1[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features1[0] in xpui.js" }
+ if ($xpui_js -match $exp_features2[0]) { $xpui_js = $xpui_js -replace $exp_features2[0], $exp_features2[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features2[0] in xpui.js" }
+ if ($xpui_js -match $exp_features3[0]) { $xpui_js = $xpui_js -replace $exp_features3[0], $exp_features3[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features3[0] in xpui.js" }
+ if ($xpui_js -match $exp_features4[0]) { $xpui_js = $xpui_js -replace $exp_features4[0], $exp_features4[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features4[0] in xpui.js" }
+ if ($xpui_js -match $exp_features5[0]) { $xpui_js = $xpui_js -replace $exp_features5[0], $exp_features5[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features5[0] in xpui.js" }
+ if ($xpui_js -match $exp_features6[0]) { $xpui_js = $xpui_js -replace $exp_features6[0], $exp_features6[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features6[0] in xpui.js" }
+ if ($xpui_js -match $exp_features7[0]) { $xpui_js = $xpui_js -replace $exp_features7[0], $exp_features7[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features7[0] in xpui.js" }
+ if ($xpui_js -match $exp_features8[0]) { $xpui_js = $xpui_js -replace $exp_features8[0], $exp_features8[1] } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$exp_features8[0] in xpui.js" }
+ $xpui_js
+}
+
+function ContentsHtml {
+ # licenses.html minification
+
+ $html_lic_min1 = '
zlib<\/a><\/li>\n(.|\n)*<\/p>(<\/div>)'
+ $html_lic_min2 = " "
+ $html_lic_min3 = " "
+ $html_lic_min4 = "(?m)(^\s*\r?\n)"
+ $html_lic_min5 = "\r?\n(?!\(1|\d)"
+ if ($xpuiContents_html -match $html_lic_min1) { $xpuiContents_html = $xpuiContents_html -replace $html_lic_min1, '$2' } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_lic_min1 в licenses.html" }
+ if ($xpuiContents_html -match $html_lic_min2) { $xpuiContents_html = $xpuiContents_html -replace $html_lic_min2, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_lic_min2 в licenses.html" }
+ if ($xpuiContents_html -match $html_lic_min3) { $xpuiContents_html = $xpuiContents_html -replace $html_lic_min3, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_lic_min3 в licenses.html" }
+ if ($xpuiContents_html -match $html_lic_min4) { $xpuiContents_html = $xpuiContents_html -replace $html_lic_min4, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_lic_min4 в licenses.html" }
+ if ($xpuiContents_html -match $html_lic_min5) { $xpuiContents_html = $xpuiContents_html -replace $html_lic_min5, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_lic_min5 в licenses.html" }
+ $xpuiContents_html
+}
+
+Write-Host 'Patching Spotify...'`n
+
+# Patching files
+
+$patchFiles = "$PWD\chrome_elf.dll", "$PWD\config.ini"
+Copy-Item -LiteralPath $patchFiles -Destination "$spotifyDirectory"
+
+$tempDirectory = $PWD
+Pop-Location
+
+
+
+Start-Sleep -Milliseconds 200
+Remove-Item -Recurse -LiteralPath $tempDirectory
$xpui_spa_patch = "$env:APPDATA\Spotify\Apps\xpui.spa"
$xpui_js_patch = "$env:APPDATA\Spotify\Apps\xpui\xpui.js"
-If (Test-Path $xpui_js_patch) {
- Write-Host "Spicetify detected"`n
+$test_spa = Test-Path -Path $env:APPDATA\Spotify\Apps\xpui.spa
+$test_js = Test-Path -Path $env:APPDATA\Spotify\Apps\xpui\xpui.js
- $xpui_js = Get-Content $xpui_js_patch -Raw
+if ($test_spa -and $test_js) {
+ Write-Host "Error" -ForegroundColor Red
+ Write-Host "The location of Spotify files is broken, uninstall the client and run the script again."
+ Write-Host "The script is stopped."
+ exit
+}
+
+if (Test-Path $xpui_js_patch) {
+ Write-Host "Spicetify detected"`n
+
+
+
+
+ $reader = New-Object -TypeName System.IO.StreamReader -ArgumentList $xpui_js_patch
+ $xpui_js = $reader.ReadToEnd()
+ $reader.Close()
If (!($xpui_js -match 'patched by spotx')) {
$spotx_new = $true
@@ -302,40 +454,36 @@ If (Test-Path $xpui_js_patch) {
}
+ # Remove the label about the new version
+ if ($block_update) { $xpui_js = OffUpdStatus }
- # Disable Podcast
- if ($Podcasts_off) {
- $xpui_js = $xpui_js `
- -replace '"album,playlist,artist,show,station,episode"', '"album,playlist,artist,station"' -replace ',this[.]enableShows=[a-z]', ""
- }
- $xpui_js = $xpui_js `
- <# Removing an empty block #> `
- -replace 'adsEnabled:!0', 'adsEnabled:!1' `
- <# Full screen mode activation and removing "Upgrade to premium" menu, upgrade button #> `
- -replace '(session[,]{1}[a-z]{1}[=]{1}[a-z]{1}[=]{1}[>]{1}[{]{1}var [a-z]{1}[,]{1}[a-z]{1}[,]{1}[a-z]{1}[;]{1}[a-z]{6})(["]{1}free["]{1})', '$1"premium"' `
- -replace '([a-z]{1}[.]{1}toLowerCase[(]{1}[)]{2}[}]{1}[,]{1}[a-z]{1}[=]{1}[a-z]{1}[=]{1}[>]{1}[{]{1}var [a-z]{1}[,]{1}[a-z]{1}[,]{1}[a-z]{1}[;]{1}return)(["]{1}premium["]{1})', '$1"free"' `
- <# Disabling a playlist sponsor #>`
- -replace "allSponsorships", "" `
- <# Show "Made For You" entry point in the left sidebar #>`
- -replace '(Show "Made For You" entry point in the left sidebar.,default:)(!1)', '$1!0' `
- <# Enables the 2021 icons redraw #>`
- -replace '(Enables the 2021 icons redraw which loads a different font asset for rendering icon glyphs.",default:)(!1)', '$1!0' `
- <# Enable Liked Songs section on Artist page #>`
- -replace '(Enable Liked Songs section on Artist page",default:)(!1)', '$1!0' `
- <# Enable block users #>`
- -replace '(Enable block users feature in clientX",default:)(!1)', '$1!0' `
- <# Enables quicksilver in-app messaging modal #>`
- -replace '(Enables quicksilver in-app messaging modal",default:)(!0)', '$1!1' `
- <# With this enabled, clients will check whether tracks have lyrics available #>`
- -replace '(With this enabled, clients will check whether tracks have lyrics available",default:)(!1)', '$1!0' `
- <# Enables new playlist creation flow #>`
- -replace '(Enables new playlist creation flow in Web Player and DesktopX",default:)(!1)', '$1!0'
+ # Turn off podcasts
+ if ($Podcasts_off) { $xpui_js = OffPodcasts }
+
+ # Full screen mode activation and removing "Upgrade to premium" menu, upgrade button, disabling a playlist sponsor
+ $xpui_js = OffAdsOnFullscreen
+
+ # Experimental Feature
+ $xpui_js = ExpFeature
+
+ $writer = New-Object System.IO.StreamWriter -ArgumentList $xpui_js_patch
+ $writer.BaseStream.SetLength(0)
+ $writer.Write($xpui_js)
+ if ($spotx_new) { $writer.Write([System.Environment]::NewLine + '// Patched by SpotX') }
+ $writer.Close()
+
+
+ # licenses.html minification
+ $file_licenses = get-item $env:APPDATA\Spotify\Apps\xpui\licenses.html
+ $reader = New-Object -TypeName System.IO.StreamReader -ArgumentList $file_licenses
+ $xpuiContents_html = $reader.ReadToEnd()
+ $reader.Close()
+ $xpuiContents_html = ContentsHtml
+ $writer = New-Object System.IO.StreamWriter -ArgumentList $file_licenses
+ $writer.BaseStream.SetLength(0)
+ $writer.Write($xpuiContents_html)
+ $writer.Close()
- Set-Content -Path $xpui_js_patch -Force -Value $xpui_js
- if ($spotx_new) { add-content -Path $xpui_js_patch -Value '// Patched by SpotX' -passthru | Out-Null }
- $contentjs = [System.IO.File]::ReadAllText($xpui_js_patch)
- $contentjs = $contentjs.Trim()
- [System.IO.File]::WriteAllText($xpui_js_patch, $contentjs)
}
@@ -362,80 +510,72 @@ If (Test-Path $xpui_spa_patch) {
# xpui.js
$entry_xpui = $zip.GetEntry('xpui.js')
-
- # Extract xpui.js from zip to memory
$reader = New-Object System.IO.StreamReader($entry_xpui.Open())
- $xpuiContents = $reader.ReadToEnd()
+ $xpui_js = $reader.ReadToEnd()
$reader.Close()
-
- # Disable Podcast
- if ($podcasts_off) {
- $xpuiContents = $xpuiContents `
- -replace '"album,playlist,artist,show,station,episode"', '"album,playlist,artist,station"' -replace ',this[.]enableShows=[a-z]', ""
- }
- $xpuiContents = $xpuiContents `
- <# Removing an empty block #> `
- -replace 'adsEnabled:!0', 'adsEnabled:!1' `
- <# Full screen mode activation and removing "Upgrade to premium" menu, upgrade button #> `
- -replace '(session[,]{1}[a-z]{1}[=]{1}[a-z]{1}[=]{1}[>]{1}[{]{1}var [a-z]{1}[,]{1}[a-z]{1}[,]{1}[a-z]{1}[;]{1}[a-z]{6})(["]{1}free["]{1})', '$1"premium"' `
- -replace '([a-z]{1}[.]{1}toLowerCase[(]{1}[)]{2}[}]{1}[,]{1}[a-z]{1}[=]{1}[a-z]{1}[=]{1}[>]{1}[{]{1}var [a-z]{1}[,]{1}[a-z]{1}[,]{1}[a-z]{1}[;]{1}return)(["]{1}premium["]{1})', '$1"free"' `
- <# Disabling a playlist sponsor #>`
- -replace "allSponsorships", "" `
- <# Disable Logging #>`
- -replace "sp://logging/v3/\w+", "" `
- <# Show "Made For You" entry point in the left sidebar #>`
- -replace '(Show "Made For You" entry point in the left sidebar.,default:)(!1)', '$1!0' `
- <# Enables the 2021 icons redraw #>`
- -replace '(Enables the 2021 icons redraw which loads a different font asset for rendering icon glyphs.",default:)(!1)', '$1!0' `
- <# Enable Liked Songs section on Artist page #>`
- -replace '(Enable Liked Songs section on Artist page",default:)(!1)', '$1!0' `
- <# Enable block users #>`
- -replace '(Enable block users feature in clientX",default:)(!1)', '$1!0' `
- <# Enables quicksilver in-app messaging modal #>`
- -replace '(Enables quicksilver in-app messaging modal",default:)(!0)', '$1!1' `
- <# With this enabled, clients will check whether tracks have lyrics available #>`
- -replace '(With this enabled, clients will check whether tracks have lyrics available",default:)(!1)', '$1!0' `
- <# Enables new playlist creation flow #>`
- -replace '(Enables new playlist creation flow in Web Player and DesktopX",default:)(!1)', '$1!0'
+ # Remove the label about the new version
+ if ($block_update) { $xpui_js = OffUpdStatus }
-
+ # Turn off podcasts
+ if ($podcasts_off) { $xpui_js = OffPodcasts }
+
+ # Full screen mode activation and removing "Upgrade to premium" menu, upgrade button, disabling a playlist sponsor
+ $xpui_js = OffAdsOnFullscreen
+
+ # Experimental Feature
+ $xpui_js = ExpFeature
+
$writer = New-Object System.IO.StreamWriter($entry_xpui.Open())
$writer.BaseStream.SetLength(0)
- $writer.Write($xpuiContents)
+ $writer.Write($xpui_js)
if ($spotx_new) { $writer.Write([System.Environment]::NewLine + '// Patched by SpotX') }
$writer.Close()
# vendor~xpui.js
$entry_vendor_xpui = $zip.GetEntry('vendor~xpui.js')
-
- # Extract vendor~xpui.js from zip to memory
$reader = New-Object System.IO.StreamReader($entry_vendor_xpui.Open())
$xpuiContents_vendor = $reader.ReadToEnd()
$reader.Close()
$xpuiContents_vendor = $xpuiContents_vendor `
<# Disable Sentry" #> -replace "prototype\.bindClient=function\(\w+\)\{", '${0}return;'
-
- # Rewrite it to the zip
$writer = New-Object System.IO.StreamWriter($entry_vendor_xpui.Open())
$writer.BaseStream.SetLength(0)
$writer.Write($xpuiContents_vendor)
$writer.Close()
+
+ # js minification
+ $zip.Entries | Where-Object FullName -like '*.js' | ForEach-Object {
+ $readerjs = New-Object System.IO.StreamReader($_.Open())
+ $xpuiContents_js = $readerjs.ReadToEnd()
+ $readerjs.Close()
+ $xpuiContents_js = $xpuiContents_js `
+ -replace "[/][/][#] sourceMappingURL=.*[.]map", "" `
+ -replace "\r?\n(?!\(1|\d)", ""
+ $writer = New-Object System.IO.StreamWriter($_.Open())
+ $writer.BaseStream.SetLength(0)
+ $writer.Write($xpuiContents_js)
+ $writer.Close()
+ }
+
+
+
# *.Css
$zip.Entries | Where-Object FullName -like '*.css' | ForEach-Object {
$readercss = New-Object System.IO.StreamReader($_.Open())
$xpuiContents_css = $readercss.ReadToEnd()
$readercss.Close()
- # Remove RTL
+
$xpuiContents_css = $xpuiContents_css `
+ <# Remove RTL #>`
-replace "}\[dir=ltr\]\s?", "} " `
-replace "html\[dir=ltr\]", "html" `
-replace ",\s?\[dir=rtl\].+?(\{.+?\})", '$1' `
@@ -447,14 +587,67 @@ If (Test-Path $xpui_spa_patch) {
-replace "\[lang=ar\].+?\{.+?\}", "" `
-replace "html\[dir=rtl\].+?\{.+?\}", "" `
-replace "html\[lang=ar\].+?\{.+?\}", "" `
- -replace "\[dir=rtl\].+?\{.+?\}", ""
+ -replace "\[dir=rtl\].+?\{.+?\}", "" `
+ <# Css minification #>`
+ -replace "[/]\*([^*]|[\r\n]|(\*([^/]|[\r\n])))*\*[/]", "" `
+ -replace "[/][/]#\s.*", "" `
+ -replace "\r?\n(?!\(1|\d)", ""
$writer = New-Object System.IO.StreamWriter($_.Open())
$writer.BaseStream.SetLength(0)
$writer.Write($xpuiContents_css)
$writer.Close()
- }
+ }
+
+
+ # licenses.html minification
+ $zip.Entries | Where-Object FullName -like '*licenses.html' | ForEach-Object {
+ $reader = New-Object System.IO.StreamReader($_.Open())
+ $xpuiContents_html = $reader.ReadToEnd()
+ $reader.Close()
+ $xpuiContents_html = ContentsHtml
+ $writer = New-Object System.IO.StreamWriter($_.Open())
+ $writer.BaseStream.SetLength(0)
+ $writer.Write($xpuiContents_html)
+ $writer.Close()
+ }
+
+ # blank.html minification
+ $entry_blank_html = $zip.GetEntry('blank.html')
+ $reader = New-Object System.IO.StreamReader($entry_blank_html.Open())
+ $xpuiContents_html_blank = $reader.ReadToEnd()
+ $reader.Close()
+
+ $html_min1 = " "
+ $html_min2 = "(?m)(^\s*\r?\n)"
+ $html_min3 = "\r?\n(?!\(1|\d)"
+ if ($xpuiContents_html_blank -match $html_min1) { $xpuiContents_html_blank = $xpuiContents_html_blank -replace $html_min1, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_min1 in html" }
+ if ($xpuiContents_html_blank -match $html_min2) { $xpuiContents_html_blank = $xpuiContents_html_blank -replace $html_min2, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_min2 in html" }
+ if ($xpuiContents_html_blank -match $html_min3) { $xpuiContents_html_blank = $xpuiContents_html_blank -replace $html_min3, "" } else { Write-Host "Didn't find variable " -ForegroundColor red -NoNewline; Write-Host "`$html_min3 in html" }
+
+ $xpuiContents_html_blank = $xpuiContents_html_blank
+ $writer = New-Object System.IO.StreamWriter($entry_blank_html.Open())
+ $writer.BaseStream.SetLength(0)
+ $writer.Write($xpuiContents_html_blank)
+ $writer.Close()
+
+ # Json
+ $zip.Entries | Where-Object FullName -like '*.json' | ForEach-Object {
+ $readerjson = New-Object System.IO.StreamReader($_.Open())
+ $xpuiContents_json = $readerjson.ReadToEnd()
+ $readerjson.Close()
+
+ # Json minification
+ $xpuiContents_json = $xpuiContents_json `
+ -replace " ", "" -replace " ", "" -replace '": ', '":' -replace "\r?\n(?!\(1|\d)", ""
+
+ $writer = New-Object System.IO.StreamWriter($_.Open())
+ $writer.BaseStream.SetLength(0)
+ $writer.Write($xpuiContents_json)
+ $writer.Close()
+
+ }
$zip.Dispose()
}
@@ -502,29 +695,11 @@ $migrator_exe = Test-Path -Path $env:APPDATA\Spotify\SpotifyMigrator.exe
$Check_folder_file = Get-ItemProperty -Path $env:LOCALAPPDATA\Spotify\Update | Select-Object Attributes
$folder_update_access = Get-Acl $env:LOCALAPPDATA\Spotify\Update
-do {
- $ch = Read-Host -Prompt "Want to block updates ? (Y/N)"
- Write-Host ""
- if (!($ch -eq 'n' -or $ch -eq 'y' -or $ch -eq 'u')) {
-
- Write-Host "Oops, an incorrect value, " -ForegroundColor Red -NoNewline
- Write-Host "enter again through..." -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host "3" -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host ".2" -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host ".1"
- Start-Sleep -Milliseconds 1000
- Clear-Host
- }
-}
-while ($ch -notmatch '^y$|^n$')
-if ($ch -eq 'y') {
+if ($block_update) {
- # If there was a client installation
+ # If there was a client installation
if (!($update_directory)) {
# Create Spotify folder in Localappdata
@@ -532,8 +707,8 @@ if ($ch -eq 'y') {
# Create Update file
New-Item -Path $env:LOCALAPPDATA\Spotify\ -Name "Update" -ItemType "file" -Value "STOPIT" | Out-Null
- $file = Get-ItemProperty -Path $env:LOCALAPPDATA\Spotify\Update
- $file.Attributes = "ReadOnly", "System"
+ $file_upd = Get-ItemProperty -Path $env:LOCALAPPDATA\Spotify\Update
+ $file_upd.Attributes = "ReadOnly", "System"
# Если оба файлав мигратора существуют то .bak удалить, а .exe переименовать в .bak
If ($migrator_exe -and $migrator_bak) {
@@ -569,8 +744,8 @@ if ($ch -eq 'y') {
# Create Update file if it doesn't exist
if (!($Check_folder_file -match '\bSystem\b' -and $Check_folder_file -match '\bReadOnly\b')) {
New-Item -Path $env:LOCALAPPDATA\Spotify\ -Name "Update" -ItemType "file" -Value "STOPIT" | Out-Null
- $file = Get-ItemProperty -Path $env:LOCALAPPDATA\Spotify\Update
- $file.Attributes = "ReadOnly", "System"
+ $file_upd = Get-ItemProperty -Path $env:LOCALAPPDATA\Spotify\Update
+ $file_upd.Attributes = "ReadOnly", "System"
}
@@ -591,27 +766,8 @@ if ($ch -eq 'y') {
# automatic cache clearing
-do {
- $ch = Read-Host -Prompt "Want to set up automatic cache cleanup? (Y/N)"
- Write-Host ""
- if (!($ch -eq 'n' -or $ch -eq 'y')) {
- Write-Host "Oops, an incorrect value, " -ForegroundColor Red -NoNewline
- Write-Host "enter again through..." -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host "3" -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host ".2" -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host ".1"
- Start-Sleep -Milliseconds 1000
- Clear-Host
- }
-}
-while ($ch -notmatch '^y$|^n$')
-
-
-if ($ch -eq 'y') {
+if ($cache_install) {
$test_cache_spotify_ps = Test-Path -Path $env:APPDATA\Spotify\cache-spotify.ps1
$test_spotify_vbs = Test-Path -Path $env:APPDATA\Spotify\Spotify.vbs
@@ -643,30 +799,9 @@ if ($ch -eq 'y') {
$Shortcut2.Save()
- do {
- $ch = Read-Host -Prompt "Cache files that have not been used for more than XX days will be deleted.
- Enter the number of days from 1 to 100"
- Write-Host ""
- if (!($ch -match "^[1-9][0-9]?$|^100$")) {
- Write-Host "Oops, an incorrect value, " -ForegroundColor Red -NoNewline
- Write-Host "enter again through..." -NoNewline
-
- Start-Sleep -Milliseconds 1000
- Write-Host "3" -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host ".2" -NoNewline
- Start-Sleep -Milliseconds 1000
- Write-Host ".1"
- Start-Sleep -Milliseconds 1000
- Clear-Host
- }
- }
- while ($ch -notmatch '^[1-9][0-9]?$|^100$')
-
-
- if ($ch -match "^[1-9][0-9]?$|^100$") {
+ if ($number_days -match "^[1-9][0-9]?$|^100$") {
$file_cache_spotify_ps1 = Get-Content $env:APPDATA\Spotify\cache-spotify.ps1 -Raw
- $new_file_cache_spotify_ps1 = $file_cache_spotify_ps1 -replace '-7', - $ch
+ $new_file_cache_spotify_ps1 = $file_cache_spotify_ps1 -replace '-7', - $number_days
Set-Content -Path $env:APPDATA\Spotify\cache-spotify.ps1 -Force -Value $new_file_cache_spotify_ps1
$contentcache_spotify_ps1 = [System.IO.File]::ReadAllText("$env:APPDATA\Spotify\cache-spotify.ps1")
$contentcache_spotify_ps1 = $contentcache_spotify_ps1.Trim()