Commit Graph
20 Commits
Author SHA1 Message Date
shadowdaoandClaude Sonnet 5.5 e49078ee03 Fix now-playing scraper, quit hang, tray icon, and tray race (v1.0.1)
- Read the track from the Media Session API, falling back to the legacy
  ytmusic-player-bar scrape. Current YT Music layouts render no player bar,
  so the API and tray stayed empty while music played. Artist is also clean
  now (no "• views • likes" suffix).
- Terminate connected WebSocket clients before closing the server. ws's
  close() waits for every client to disconnect, so quitting with an overlay
  open hung forever, leaving the window playing and the port bound.
- Replace the tray icon with a valid PNG (the old one had a bad IDAT CRC and
  decoded to an empty image) and test that its chunks are well formed.
- Create the tray before the window so early state updates are not dropped.
- Bump version to 1.0.1.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 11:37:38 -07:00
shadowdaoandClaude Opus 5 72485d44ff Build each platform on its own native runner
Splits the release workflow into linux, windows and macos jobs feeding a
single publish job. The publish step is separate so parallel builds cannot
race to create the release and fail on a duplicate tag.

Windows now builds natively, so signAndEditExecutable no longer has to be
disabled. That flag was suppressing rcedit, which is what embeds the icon
and version resources -- the v1.0.0 exe shipped with the stock Electron
icon as a result. Also adds an NSIS installer alongside the portable zip.

macOS gains a dmg target, which cannot be produced off macOS. Builds stay
unsigned pending a Developer ID, with CSC_IDENTITY_AUTO_DISCOVERY disabled
so electron-builder builds unsigned instead of failing on a real Mac.

Nothing cross-builds now; all three runners must be registered before
tagging, since a job with no matching runner queues silently.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 18:53:24 -07:00
shadowdaoandClaude Opus 5 289cb6d4b1 Add macOS target and put platform in artifact names
Adds a mac zip target (x64 + arm64) so releases cover all three
platforms. Builds unsigned: electron-builder skips code signing when not
running on macOS, so these need the quarantine attribute cleared.

Also puts ${os} in artifactName. Without it the Windows and macOS zips
were both WhatsThatMusic-1.0.0-x64.zip, which collide as release assets
and give no clue which platform they are.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 18:11:31 -07:00
shadowdaoandClaude Opus 5 d8107a06c2 Add Linux AppImage build target and app icon
The build config only had a Windows target. Adds a linux block producing
an AppImage, plus a 512x512 build/icon.png so the packaged app does not
ship with the stock Electron icon.

Verified by running the packaged binary: the embedded server comes up on
9095 and serves the overlay from process.resourcesPath, confirming the
extraResources mapping works in a packaged build.

StartupWMClass is deliberately not set via linux.desktop -- electron-builder
already emits the correct value, and the nested { entry: {...} } form leaks a
literal "entry=[object Object]" line into the .desktop file.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 17:54:05 -07:00
shadowdao ba36dd569f Bundle overlay via extraResources for packaged build 2026-04-26 10:40:03 -07:00
shadowdaoandClaude Sonnet 4.6 ac255bfa75 Delete extension, OS backends, standalone server, root npm project
Removes extension/, desktop-client/backends/, desktop-client/config.js,
server/, root package.json/package-lock.json/node_modules/, and the
now-unused electron-store dependency from desktop-client/package.json.
The desktop-client is now a self-contained Electron app with no external
deps beyond express and ws.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:36:53 -07:00
shadowdao 60845b7870 Bypass beforeunload on window close so app quits while audio plays 2026-04-26 10:34:42 -07:00
shadowdaoandClaude Sonnet 4.6 98a12e1e3e Update startServer JSDoc; surface boot errors via dialog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:12:14 -07:00
shadowdaoandClaude Sonnet 4.6 6fd858347f Fall back to next port on EADDRINUSE; show dialog and update tray URL
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:08:15 -07:00
shadowdaoandClaude Sonnet 4.6 65e871c16e Move tray state into createTray closure
Removes top-level let trayInstance, opts, currentTitle, currentArtist
and the top-level buildMenu function. All mutable state and buildMenu
now live inside the createTray closure. Public API and behaviour are
unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:56:48 -07:00
shadowdao 8be1999a6b Rewrite tray: simple menu, no server-URL config 2026-04-26 09:50:59 -07:00
shadowdaoandClaude Sonnet 4.6 affc71bd0f Harden Electron main: re-entrancy guard, tray destroy, loadURL error log
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:49:20 -07:00
shadowdao 7ea303a2ef Rewrite Electron main: in-process server + YT Music BrowserWindow 2026-04-26 09:46:08 -07:00
shadowdao ffa045469b Add YT Music preload scraper that emits wtm:state IPC 2026-04-26 09:42:49 -07:00
shadowdaoandClaude Sonnet 4.6 03128cbe6b Harden server: drain connections on stop, validate proxy URL scheme, add fetch timeout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:41:44 -07:00
shadowdaoandClaude Sonnet 4.6 3445ef89f0 Add in-process server module with setState entry point
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:38:11 -07:00
shadowdao 81e08afa00 Add tests for null no-change and zero as real value 2026-04-26 09:35:53 -07:00
shadowdao acf5e74f30 Add pure state-merge module with unit tests 2026-04-26 09:32:52 -07:00
shadowdao ad8fde0dda Use cross-platform quoting in test script 2026-04-26 09:31:25 -07:00
shadowdao 43e77ef7db Add server deps and test script to desktop-client package 2026-04-26 09:27:44 -07:00