Commit Graph

238 Commits

Author SHA1 Message Date
jeffvli cbf8037099 improve app logging
- consolidate electron-log and expand support-oriented logging
- consolidate log levels to info / trace only
- add system/server diagnostics exporter
2026-07-20 22:26:07 -07:00
jeffvli 14625a9ef6 fix tag editor key deletion 2026-07-19 21:13:22 -07:00
jeffvli f9b9f9ab06 refactor periodic update check to use github releases instead of electron-builder (#2259)
- resolves an issue related to electron-builder continuing to download and install updates despite only calling checkForUpdates
- adds indicator to settings / app menu on new version found
2026-07-19 12:13:28 -07:00
York c5c91a02ac fix: add close window button to macOS menu (#2254) 2026-07-18 19:39:48 -07:00
Louis Dalibard f152e03ae7 feat: add support for loading custom themes from files (#2218)
* feat: add support for loading custom themes from files

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-07-18 19:27:09 -07:00
York 7cff72910e feat: improve native macOS application menu (#2242) 2026-07-17 19:20:17 -07:00
Chris Scott 75bdf60912 feat(tag-editor): add batch metadata editor with artwork support (Duplicate) (#2252)
* feat(tag-editor): add batch metadata editor with artwork support

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-07-17 19:17:11 -07:00
Simon Slamka ddd45ad5ba feat(player): set right ctrl vol max to mpv's vol max if player==local (#2198) 2026-07-15 22:43:43 -07:00
Damien Erambert 5e79e385d9 Support using alt+click on prev/next to jump to previous/next album in queue (#2220) 2026-07-15 22:27:40 -07:00
York 62c1ac04e4 feat: support furigana and romaji generation on web (#2232)
* feat: support furigana and romaji generation on web
2026-07-15 22:26:05 -07:00
York 552a6104e0 fix furigana and romaji issues (#2219)
* fix furigana romaji not displaying

* fix lyrics export crash when generation is enabled
2026-07-14 12:08:26 -07:00
jeffvli 8dd5a90582 fix alpha updater rolling back to previous stable version (#2217) 2026-07-11 11:48:14 -07: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
jeffvli 37ada07ee2 add "stopped" playback state and event handlers 2026-06-29 20:23:46 -07:00
York a221a84792 fix: romaji duplicate lines for non-Japanese lyrics (#2188) 2026-06-29 19:11:46 -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
Kendall Garner 44de6f2207 chore: upgrade depdencencies (#2133)
* upgrade depdencencies
2026-06-09 21:18:47 -07: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
Kendall Garner def1b1e710 fix(butterchurn): allow unsafe wasm for butterchurn 2026-05-30 07:01:53 -07:00
Jonathan Grotelüschen 7454832663 fix: set RESOURCES_PATH relative to app.getAppPath() (#2064)
When running the app with system electron, process.resourcesPath points
to the resources folder of the system electron, not the one from
feishin.
2026-05-27 20:01:54 -07:00
jeffvli 2fc130d709 validate mpv extra parameters to prevent empty string param (#2058) 2026-05-26 20:46:17 -07: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
jeffvli 323130a877 add toggle for app-suspension for powersave block (#1992) 2026-05-01 21:24:45 -07:00
York d24ca04878 fix: detect Homebrew mpv on macOS (#1989) 2026-05-01 11:43:07 -07:00
York b99899f128 fix MPV visualizer on macOS and handle exclusive mode UX (#1930) 2026-04-13 20:47:03 -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
noctuum 6adb29bc38 fix(linux): remove unnecessary desktopCapturer call from display media handler
The setDisplayMediaRequestHandler was calling desktopCapturer.getSources()
to provide a video source that the renderer never uses (it requests
video: false and only consumes audio tracks). On Wayland, this created a
new xdg-desktop-portal ScreenCast session on every launch, showing an
unavoidable screen share dialog because Electron does not persist
PipeWire restore tokens across desktopCapturer sessions.

Simplified the handler to return only { audio: 'loopback' }, which
captures system audio via PipeWire/PulseAudio monitor source without
any portal interaction.
2026-04-08 04:56:05 +07:00
jeffvli 3f300c40cc add in-app prompt for system audio connection 2026-04-05 22:19:09 -07:00
Kendall Garner 6c2cd1c274 fix(mpris): serve minimal metadata when playing radio
1. MPRIS (or `mpris-service`) is very fragile. If an invalid `mpris:trackid` (something with `-` or spaces) is passed in, it breaks. Use a minimal track id instead
2. Only populate album/artist/title
2026-04-05 08:01:28 -07:00
jeffvli 94886a2d5a add system audio loopback for webaudio 2026-04-05 00:48:38 -07:00
York d60ed0a793 feat: macOS menu enhancement (#1903) 2026-04-04 17:35:30 -07:00
jeffvli f3a6027e6d fix mpv progress interval still running after queue ends 2026-04-03 18:58:58 -07:00
ebee04 0d3cf912d3 fix click on feishin icon in macos menu bar (tray) causing switch to feishin window (#1881) 2026-03-29 20:34:18 -07:00
jeffvli ede47fbf8f fix missing artist name in lyrics search query for lrclib (#1871) 2026-03-25 17:49:50 -07:00
jeffvli 9eb64079f7 handle disabled features in a single flag (#1271) 2026-03-25 17:41:08 -07:00
jeffvli f2ab01199f disable WaylandFractionScaleV1 (#1271) 2026-03-15 11:42:31 -07:00
riccardo 16ac536f93 feat(lyrics): simpmusic lyrics provider (#1820)
* feat(lyrics): simpmusic lyrics provider
2026-03-11 01:04:55 -07:00
jeffvli 6a47e99680 add manual update notice for macOS, disable autoinstall (#1725) 2026-03-09 01:31:33 -07:00
jeffvli dbc215c44f add toggle visibility behavior to tray icon (#1793) 2026-03-04 21:38:11 -08:00
jeffvli afca396654 attempt to fix mpv autoNext behavior (#1768) 2026-02-27 00:39:27 -08:00
Kendall Garner a377eae2f4 fix(build): do not add hash to favicon and assets 2026-02-20 08:48:36 -08:00
Kendall Garner 12ff690619 fix(window): recreate window on macos when closed but not quit 2026-02-18 21:50:44 -08:00