Commit Graph

41 Commits

Author SHA1 Message Date
jeffvli 48ff8ed6ff support parsing and saving multi-valued tags 2026-07-16 21:10:38 -07:00
Chris Scott 5ed4397f8f Merge branch 'development' into development 2026-07-12 13:31:36 -04:00
Jeff 355b19c1cb Add support for OpenSubsonic enhanced lyrics (#2208) 2026-07-09 21:32:05 -07:00
jeffvli e3c2605e1d trigger stop event on queue end 2026-07-09 20:51:19 -07:00
York f8ca8861fc feat: add romaji lyrics display (#2180) 2026-06-26 21:07:58 -07:00
Ryan Kupka 26eea7422d fix: recover mpv playback after the OS resumes from sleep (#2172)
mpv/ffmpeg had no network-level timeout or reconnect options, so a
network stream left open across a system sleep would block forever on
the now-dead TCP connection instead of failing or reconnecting. Since
Node-MPV's IPC commands only resolve when mpv replies, a wedged mpv
process also made quit()/restart hang indefinitely, so the only way
out was to kill the whole app.

- Add --network-timeout and ffmpeg reconnect options to mpv's default
  parameters so a stalled stream fails fast instead of hanging.
- Make the quit() helper resilient to an unresponsive mpv process by
  racing it against a timeout and force-killing as a fallback.
- Listen for Electron's powerMonitor 'resume' event and tell the
  renderer to reload mpv, so playback recovers automatically instead
  of requiring a manual app restart.
2026-06-26 19:18:27 -07:00
York 0ed68e8ebb feat: add Japanese Furigana support to lyrics display (#2161) 2026-06-21 19:11:20 -07:00
ChrisScott9456 aa12585b20 lint fixes 2026-06-15 10:48:18 -04:00
ChrisScott9456 7e82ab146e feat(tag-editor): add batch metadata editor with artwork support
New metadata editor accessible via "Edit Metadata" in the song, album,
and playlist song context menus. Supports editing one or more files at once.

Tags:
- Displays all metadata fields for the selected files
- Fields differing across files are shown as "(Multiple Values)"
- Fields can be added from a dropdown or removed individually
- Only modified fields are written back to disk

Artwork:
- Displays shared cover art across all selected files
- Supports setting new artwork via file picker or drag-and-drop
- Supports clearing existing artwork
- Shows a placeholder when selected files have different covers

Reading and writing:
- Tags are read via music-metadata, preserving full ISO date strings
- Writes use taglib-wasm WASI in-place editing via setProperty,
  only touching fields that were explicitly changed
- Writability of all files is checked before any writes begin
- Partial read failures show a warning but still allow editing

Other:
- Per-file batch progress is reported during reads and writes
- In-flight reads are cancelled when the modal is closed
- An optional server library rescan can be triggered after saving
2026-06-14 22:59:59 -04:00
Kendall Garner 515cadb916 Better cross platform font handling (#2104)
* fix: better handling of custom font

Practically speaking, custom font seems to have only worked on Linux, because
`net.fetch` would include the mime type in the response headers which could validate the payload.
This doesn't appear to be the case on windows/macOS. Instead:

1. On Linux (or if some other system supports it), check the content type. If good, serve as normal
2. Otherwise, fetch the payload. Read the first four to five bytes and check for a valid magic number.

Additionally, to prevent arbitrary requests fetching other paths via injected content, sync the custom font path
to the main process, and then make _every_ request to `feishin:/` point to the same renderer path.
When setting the font, first send the path to the main process. This will register `feishin:/` to point
to the path provided. This is done via a promise-based set.

Finally, provide a default value for the file input (a best effort approximation for the last part of the file path)
on the file input component.

* make the linter happy
2026-06-02 19:34:16 +00:00
Simon Bråten f098f848a3 feat: reading custom css from external file (#2012)
* feat: reading custom css from external file

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-05-25 14:53:53 -07:00
muckymucky 22d37135ae fix: strip playback accelerators whenever any text input is focused (#2059)
The command-palette-specific IPC approach didn't cover other modals
with inputs (settings search, playlist creation, etc.). Replace it
with document-level focusin/focusout listeners that signal the main
process whenever any input/textarea/contenteditable gains or loses
focus, so the menu rebuild is triggered automatically for all current
and future input surfaces.

Co-authored-by: muckymucky <muckymucky@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 13:35:45 -07:00
muckymucky 3122f4121e fix: strip playback menu accelerators while command palette is open (#2055)
On macOS, menu item accelerators (e.g. Space for Play/Pause) fire even
when an input has focus, bypassing the renderer-side useHotkeys guard
added in #1925. Typing a space character in the command palette search
toggled play/pause instead of inserting a space.

Track command palette open state in the main process via IPC. When the
palette is open, rebuild the application menu with empty playback
accelerators so single-key shortcuts no longer intercept keystrokes
intended for the search input. Restore accelerators when the palette
closes.

Co-authored-by: Jack McCrea <jack@MacBookPro.lan>
2026-05-25 11:24:15 -07:00
Kendall Garner 7befd70e21 Apply additional security recommendations (#2050)
* enable sandbox

* enable CSP (umami tentatively works?) and reduce amount of ipc APIs exposed

* remove csp from index
2026-05-22 22:09:22 -07:00
Kendall Garner 2befcb4e74 disable node integration (#2049) 2026-05-20 21:06:28 -07:00
jeffvli 3551ee5077 prevent desktopCaturer from running unless visualizer explicitly requested (#1931) 2026-05-20 20:34:25 -07:00
Jeff 16c9e6cc1b Fix various build issues (#1942)
* remove dynamic import for platform features

* increase node memory limit on macOS build

* fix invalid dynamic imports in renderer

* remove discord-rpc import in renderer
2026-04-10 01:54:11 -07:00
York d60ed0a793 feat: macOS menu enhancement (#1903) 2026-04-04 17:35:30 -07:00
ashe e46c61e026 Remote URL hardcoding compatibility (#1810)
* Remote URL compatibility
---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-03-09 19:08:28 -07:00
jeffvli 6a47e99680 add manual update notice for macOS, disable autoinstall (#1725) 2026-03-09 01:31:33 -07:00
Martín González Gómez 668de93829 Open settings with shortcut (#1655)
* Open settings with shortcut. Also add settings to menubar.
2026-02-07 15:19:05 -08:00
jeffvli cf663de2fc add handlers and setting for nightly release 2026-02-05 23:45:32 -08:00
jeffvli a63763bfe8 use dev path for local settings store 2026-01-18 18:53:21 -08:00
Kendall Garner 04f7c7fdd4 fix(remote): proper image when mpris and remote interleave 2026-01-18 18:18:36 -08:00
jeffvli 41054ed819 add audio device selection for mpv 2026-01-14 19:12:36 -08:00
jeffvli e406b27170 fix radio cancellation error on double click (#1419) 2026-01-01 20:40:24 -08:00
jeffvli 55cead87c8 add LEGACY_AUTH env variable (#1473) 2026-01-01 20:33:27 -08:00
jeffvli 22c0f8f8c6 add manual garbage collection 2026-01-01 12:21:20 -08:00
jeffvli 4eac6457ea add MPRIS volume handler (#1415) 2025-12-28 01:15:38 -08:00
BatteredBunny 63015195b0 feat: Add DISABLE_AUTO_UPDATES env variable for disabling updates in the application entirely (#1446) 2025-12-28 00:50:55 -08:00
Jeff 25bfb65b6d Add image URL generation at runtime to allow for dynamic image sizes (#1439)
* add getImageUrl to domain endpoints

* add new ItemImage component and hooks to generate image url

* add configuration for image resolution based on types
2025-12-23 20:18:52 -08:00
jeffvli 96d2699a2d add migration to clear all original store settings (#1396) 2025-12-15 19:07:12 -08:00
Jeff 7ed847fecb Add internet radio (#1384) 2025-12-13 21:26:33 -08:00
jeffvli 0b70ed158b fix mpris 2025-11-29 21:35:09 -08:00
jeffvli a566509f5b remove preexisting save/restore playqueue handlers 2025-11-29 19:32:17 -08:00
Henry e344adfeed Add autodiscovery for Jellyfin servers (#1146)
* Add autodiscovery for Jellyfin servers

* Remove debugging aids

you didn't see anything

* Fix linter errors

* Send a discovery packet to localhost too
2025-09-26 22:53:19 +00:00
jeffvli b00305cc86 add setting to prevent sleep on playback (#1072) 2025-09-06 00:56:06 -07:00
Lyall cd2d531c54 Automatically reconnect to Discord RPC at interval (#996)
* initialize before setActivity
2025-07-06 00:34:26 -07:00
jeffvli 7562c619d2 fix mpv path save dialog (#930) (#940) 2025-06-02 20:17:55 -07:00
jeffvli 930165d006 fix all imports for new structure 2025-05-26 17:20:02 -07:00
jeffvli 1cf587bc8f restructure files onto electron-vite boilerplate 2025-05-26 17:18:55 -07:00