6 Commits
Author SHA1 Message Date
zarzet a73f63772d chore(deps): update Flutter, native and Rust dependencies 2026-10-30 01:29:33 +07:00
zarzet 1f12076765 feat(search): recognize songs playing nearby
A microphone button in the empty search field listens to the room and
names the song, on phones and desktop.

- The audio fingerprint and the Shazam request run in Rust behind a new
  recognize_song data job, so every platform shares one path.
- Listening sends the audio so far at 4, 8 and 12 seconds and stops at
  the first match; quiet or short clips are reported instead of sent.
- A match can be played from the library (by ISRC, then title and
  artist), searched in Mornye, or opened in Shazam. Recent matches are
  kept in a local history.
- Android asks for the microphone only when listening starts; iOS and
  macOS gain the microphone usage description and entitlement. The Linux
  package recommends pulseaudio-utils for capture.
2026-10-26 01:33:56 +07:00
zarzet 382e3856e3 feat(desktop): add dropped music folders to the Library
Dropping music files or folders onto the window adds them as Library folders through the existing add-folder and scan path; a dropped file adds the folder that holds it. Uses desktop_drop 0.8.4. Tests cover the folder selection, the hover play button and the source-sorted table.
2026-10-20 17:38:54 +07:00
zarzet bcb1ee8b90 feat(desktop): play through media_kit with MPRIS and SMTC sessions
Windows and Linux now create a libmpv deck through media_kit; macOS,
Android and iOS keep audioplayers. Without libmpv the runtime falls back
to audioplayers.

- The equalizer becomes one libavfilter graph behind mpv's lavfi filter
  (input gain, peaking bands, balance, compressor, -0.5 dBFS limiter)
  after a planar float conversion. Changes set the af property again.
  Filters a libmpv build lacks are probed once and left out; the input
  gain then moves to mpv's volume. Filter failures are reported per player.
- Deck volume is scaled by the in-app output volume on mpv's cubic curve,
  position updates run on a timer, DSD sources throw when libmpv cannot
  open them, and exclusive output has a hook for a later setting.
- The in-app output volume persists across launches on every desktop OS.
- Previews go through the runtime's preview deck, so desktop previews
  follow the in-app volume.
- Linux publishes MPRIS over D-Bus and Windows uses SMTC through
  smtc_windows, both driven by the audio handler.
- The Linux CI job installs libmpv-dev.
2026-10-20 16:55:01 +07:00
zarzet 490e529203 feat(desktop): wire deep links, single instance, keep-awake, Discord, watcher and crash logs
- mornye:// URLs arrive through app_links and go to the backend callback
  inbox (queueExtensionCallbackUrl); extension auth opens the system
  browser on desktop.
- Single instance: a named mutex plus app_links WM_COPYDATA forwarding on
  Windows (with the installer's AppUserModelID), a unique GApplication
  forwarding its command line on Linux; macOS handles reopen itself.
- The download queue holds a sleep inhibitor from start until it stops.
- Discord Rich Presence runs on desktop through a channel adapter over the
  backend IPC methods, without an account link.
- Library folder changes trigger a debounced incremental source scan.
- Desktop rotating log files, a session marker that turns an unclean exit
  into the existing crash report, and runtime errors recorded for it.
2026-10-20 16:14:40 +07:00
zarzet f70bc95595 feat(desktop): add generated macOS, Windows and Linux runners
Output of flutter create --platforms=macos,linux,windows --org com.zarz
with Flutter 3.47.7. Identity, window and entitlement changes follow.
2026-10-20 13:25:29 +07:00