musicfree-desktop: init at 0.0.8 (#427080)

This commit is contained in:
Sandro
2026-03-26 15:53:07 +00:00
committed by GitHub
5 changed files with 2411 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,12 @@
diff --git a/forge.config.ts b/forge.config.ts
index 0b0b282..d732b68 100644
--- a/forge.config.ts
+++ b/forge.config.ts
@@ -14,6 +14,7 @@ const config: ForgeConfig = {
icon: path.resolve(__dirname, "res/logo"),
executableName: "MusicFree",
extraResource: [path.resolve(__dirname, "res")],
+ electronZipDir: path.resolve(__dirname, ".electron-packager/electron-zips"),
protocols: [
{
name: "MusicFree",
@@ -0,0 +1,18 @@
diff --git a/src/main/window-manager/index.ts b/src/main/window-manager/index.ts
index 42fd81c..45f93ab 100644
--- a/src/main/window-manager/index.ts
+++ b/src/main/window-manager/index.ts
@@ -129,13 +129,6 @@ class WindowManager implements IWindowManager {
initUrl.hash = `/main/musicsheet/${localPluginName}/favorite`;
mainWindow.loadURL(initUrl.toString()).then(voidCallback);
- // 3. 开发者工具
- if (!app.isPackaged) {
- mainWindow.on("ready-to-show", () => {
- mainWindow.webContents.openDevTools();
- });
- }
-
// 4. 主窗口http hack逻辑
mainWindow.webContents.session.webRequest.onBeforeSendHeaders(
(details, callback) => {
@@ -0,0 +1,168 @@
{
lib,
stdenv,
buildNpmPackage,
fetchFromGitHub,
makeDesktopItem,
copyDesktopItems,
makeWrapper,
nix-update-script,
electron,
python3,
nodejs,
vips,
gitMinimal,
removeReferencesTo,
xcodebuild,
zip,
}:
buildNpmPackage (finalAttrs: {
pname = "musicfree-desktop";
version = "0.0.8";
inherit nodejs;
src = fetchFromGitHub {
owner = "maotoumao";
repo = "MusicFreeDesktop";
tag = "v${finalAttrs.version}";
hash = "sha256-gGGlWzd6LRrB5EbkXZWqg2cwMyZ5OMQm6otpnZFUbvo=";
};
patches = [
# update sharp to recognize SHARP_FORCE_GLOBAL_LIBVIPS
# update node-abi to support newer Electron
# update nan to fix build with newer Electron (https://github.com/nodejs/nan/issues/921)
# see update.sh for how this patch was generated
./bump-deps.patch
# tell electron-packager to look for Electron zips in a local dir
# instead of downloading them from the internet
./electron-zip-dir.patch
# Do not open devtools on startup.
# ELECTRON_FORCE_IS_PACKAGED=1 should also do the trick,
# but it causes weird problem of being unable to look up the resource dir
./no-startup-dev-tools.patch
];
nativeBuildInputs = [
copyDesktopItems
makeWrapper
(python3.withPackages (ps: [ ps.setuptools ])) # Used by node-gyp
gitMinimal # Used by electron-forge
zip
removeReferencesTo
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ xcodebuild ]; # Used by better-sqlite3
npmDepsHash = "sha256-lxDEbf++QH1/DaIEgXMnmqMD9d5Ak7IJMc5pQjysKBA=";
postConfigure = ''
# use Electron's headers to make node-gyp compile against the Electron ABI
export npm_config_nodedir="${electron.headers}"
# override the detected electron version
substituteInPlace node_modules/@electron-forge/core-utils/dist/electron-version.js \
--replace-fail "return version" "return '${electron.version}'"
# create the electron archive to be used by electron-packager
# the contents do not matter, but some files must be present, such as a file named "electron" intended to be the executable
electron_zip=$(pwd)/.electron-packager/electron-zips/electron-v${electron.version}-${stdenv.hostPlatform.node.platform}-${stdenv.hostPlatform.node.arch}.zip
mkdir -p $(dirname $electron_zip)
${
if stdenv.hostPlatform.isDarwin then
''
for app in Electron.app{,/Contents/Frameworks/Electron\ Helper.app}; do
mkdir -p "$app/Contents/MacOS"
cp "${electron.dist}/$app/Contents/Info.plist" "$app/Contents/Info.plist"
chmod +w "$app/Contents/Info.plist"
echo dummy > "$app/Contents/MacOS/$(basename "$app" .app)"
done
zip -r $electron_zip Electron.app
rm -r Electron.app
''
else
''
echo dummy > electron
zip $electron_zip electron
rm electron
''
}
'';
buildInputs = [
vips # for sharp
];
# sharp tries to write to npm-deps/_libvips when compiling
makeCacheWritable = true;
npmBuildScript = "package";
env = {
SHARP_FORCE_GLOBAL_LIBVIPS = "1";
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
# Have more info in build logs and also prevent the fancy UI of electron-forge spamming the build logs
DEBUG = "electron-forge:*,electron-packager,@electron/get:*";
};
desktopItems = [
(makeDesktopItem {
name = "musicfree-desktop";
desktopName = "MusicFree";
exec = "MusicFree %U";
icon = "musicfree-desktop";
type = "Application";
comment = finalAttrs.meta.description;
categories = [ "Utility" ];
mimeTypes = [ "x-scheme-handler/musicfree" ];
})
];
installPhase = ''
runHook preInstall
# the output of electron-forge is here
build_dir=$(find out -type d -maxdepth 1 -mindepth 1 | head -n1)
build_dir=$build_dir/${
if stdenv.hostPlatform.isDarwin then "MusicFree.app/Contents/Resources" else "resources"
}
phome=$out/lib/node_modules/musicfree-desktop
mkdir -p $(dirname $phome)
cp -ar $build_dir/app $phome
cp -ar $build_dir/res $phome
find $phome/node_modules -type f -executable -exec remove-references-to -t ${nodejs} '{}' \;
makeWrapper ${lib.getExe electron} $out/bin/MusicFree \
--add-flags $phome \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
--inherit-argv0
mkdir -p $out/share/pixmaps
ln -s $phome/res/logo.png $out/share/pixmaps/musicfree-desktop.png
${lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p $out/Applications/MusicFree.app/Contents/{MacOS,Resources}
cp $build_dir/../Info.plist $out/Applications/MusicFree.app/Contents
ln -s $out/bin/MusicFree $out/Applications/MusicFree.app/Contents/MacOS/MusicFree
ln -s $phome/res/logo.icns $out/Applications/MusicFree.app/Contents/Resources/electron.icns
''}
runHook postInstall
'';
passthru.updateScript = ./update.sh;
meta = {
description = "Customizable music player with plugin support";
homepage = "https://musicfree.catcat.work";
changelog = "https://github.com/maotoumao/MusicFreeDesktop/blob/${finalAttrs.src.tag}/changelog.md";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [ ulysseszhan ];
mainProgram = "MusicFree";
platforms = electron.meta.platforms;
};
})
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p nodejs nix-update jq curl patch diffutils
set -euo pipefail
old_version=$(nix-instantiate --eval -A musicfree-desktop.version | tr -d '"')
new_version=$(curl -sL ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} https://api.github.com/repos/maotoumao/MusicFreeDesktop/releases/latest | jq -r .tag_name | tr -d v)
if [ "$old_version" == "$new_version" ]; then
echo "Already up to date" >&2
exit
fi
patch=$(dirname $(nix-instantiate --eval -A musicfree-desktop.meta.position | tr -d '"' | cut -d : -f 1))/bump-deps.patch
export HOME=$(mktemp -d)
pushd $HOME
curl -L https://github.com/maotoumao/MusicFreeDesktop/raw/v$new_version/package.json -o package.json
curl -L https://github.com/maotoumao/MusicFreeDesktop/raw/v$new_version/package-lock.json -o package-lock.json
if patch --batch --dry-run -p1 -i $patch; then
echo "Old patch works, no need to update" >&2
else
mv package.json package.json.old
jq '.dependencies.sharp |= (if . != null and . < "^0.33.4" then "^0.33.4" else . end)' package.json.old > package.json
cp package-lock.json package-lock.json.old
npm update sharp node-abi nan --package-lock-only
diff -u --label a/package.json package.json.old --label b/package.json package.json > $patch || true
diff -u --label a/package-lock.json package-lock.json.old --label b/package-lock.json package-lock.json >> $patch || true
fi
popd
nix-update musicfree-desktop --version $new_version