diff --git a/repack.sh b/repack.sh new file mode 100644 index 0000000..207c75d --- /dev/null +++ b/repack.sh @@ -0,0 +1,153 @@ +#!/bin/bash + +prompt_yes_no() { + local question="$1" + local response + while true; do + read -p "$question (y/n): " response + case $response in + [Yy]*) + return 0 # Returning success status code + ;; + [Nn]*) + return 1 # Returning failure status code + ;; + *) + echo "Please enter 'y' (yes) or 'n' (no)." + ;; + esac + done +} + +SCRIPTDIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +# unpacking +exe_location=$1 + +7z x $exe_location -oExtracted +cp "./Extracted/\$PLUGINSDIR/app-64.7z" "./app-64.7z" +rm -rf ./Extracted +7z x "./app-64.7z" -oExtracted +cp "./Extracted/resources/app.asar" "./app.asar" +rm -rf ./Extracted +rm ./app-64.7z +asar extract "./app.asar" "./app" +rm "./app.asar" + +# managing npm dependencies +cd ./app +npm uninstall @yandex-chats/signer +npm uninstall electron-notarize +npm install @electron/notarize --save-dev +npm install --save-dev @electron-forge/cli +npx electron-forge import +if ! command -v jq &> /dev/null; then + echo "Error: jq is not installed. Please install jq to proceed." >&2 + exit 1 +fi +jq --arg license "UNLICENSED" '. + {license: $license}' package.json > tmp_package.json +mv tmp_package.json package.json +echo "Updated license field in package.json" +version=$(jq -r .version package.json) + +# fixing secretKey issue +echo "Fixing SecretKey" +find "./" -type f \( -name "*.js" -o -name "*.js.map" \) -print0 | while IFS= read -r -d $'\0' file; do + # Use 'sed' to perform the replacement in-place + sed -i "s/secretKey:this.secretKey/secretKey:'superSecretKey'/g" "$file" +done +echo "SecretKey replaced" + + +echo "Fixing Title" +#fixing title +find "./" -type f -name "*.html" -print0 | while IFS= read -r -d $'\0' file; do + # Use 'sed' to perform the replacement in-place + sed -i "s/Яндекс Музыка — собираем музыку для вас/Яндекс Музыка/g" "$file" +done +echo "Title Fixed" + +# set some building parameters from config +forge_config="module.exports = { + packagerConfig: { + asar: true, + }, + rebuildConfig: {}, + makers: [ + { + name: '@electron-forge/maker-zip', + platforms: ['linux'] + }, + { + name: '@electron-forge/maker-deb', + config: { + options: { + maintainer: 'Cucumber Space', + homepage: 'https://github.com/cucumber-sp/yandex-music-linux' + } + } + }, + { + name: '@electron-forge/maker-rpm', + config: { + options: { + homepage: 'https://github.com/cucumber-sp/yandex-music-linux' + } + } + } + ], + plugins: [ + { + name: '@electron-forge/plugin-auto-unpack-natives', + config: {}, + }, + ], +}; +" +echo Writing Forge Config... +echo $forge_config > ./forge.config.js + + +prompt_yes_no "Build for x64?" +build_x64=$? + +prompt_yes_no "Build for arm64?" +build_arm64=$? + +# building +if [ "$build_x64" -eq 0 ]; then + npx electron-forge make --arch="x64" +fi + +if [ "$build_arm64" -eq 0 ]; then + npx electron-forge make --arch="arm64" +fi + +# moving packages and rename them +cd ../ +mkdir out +if [ "$build_x64" -eq 0 ]; then + debpath=$(find "./app/out/make/deb/x64/" -type f -print -quit) + rpmpath=$(find "./app/out/make/rpm/x64/" -type f -print -quit) + zippath=$(find "./app/out/make/zip/linux/x64/" -type f -print -quit) + newdeb="./out/yandexmusic.$version.x64.deb" + newrpm="./out/yandexmusic.$version.x64.rpm" + newzip="./out/yandexmusic.$version.x64.zip" + mv $debpath $newdeb + mv $rpmpath $newrpm + mv $zippath $newzip +fi + +if [ "$build_arm64" -eq 0 ]; then + debpath=$(find "./app/out/make/deb/arm64/" -type f -print -quit) + rpmpath=$(find "./app/out/make/rpm/arm64/" -type f -print -quit) + zippath=$(find "./app/out/make/zip/linux/arm64/" -type f -print -quit) + newdeb="./out/yandexmusic.$version.arm64.deb" + newrpm="./out/yandexmusic.$version.arm64.rpm" + newzip="./out/yandexmusic.$version.arm64.zip" + mv $debpath $newdeb + mv $rpmpath $newrpm + mv $zippath $newzip +fi + +rm -rf ./app \ No newline at end of file