The Windows and Linux runners now answer the window channel. They turn
the window into a frameless 360x140 panel that stays above other
windows, open it where it last sat (first at the top right of the work
area), move it when the panel is dragged, and restore the frame, size,
place and maximized state when it closes. On Wayland the compositor
decides the position and stacking, so there it only shrinks.
The mini player drag area now moves a framed window too, and the
shortcut is Ctrl+Shift+M on Windows and Linux, since Ctrl+Alt is AltGr
on many keyboard layouts. macOS keeps Opt+Cmd+M.
desktop-file-validate 0.26 on the Ubuntu 22.04 release runners rejects
Version=1.5 as unknown, which failed both Linux release builds. The
entry uses no key newer than 1.4.
Only the Windows installer and the deb registered the scheme, so after
extension verification the browser could not return to a portable zip
or AppImage copy and the link had to be pasted. On launch the runners
now point the per-user handler at the running copy when it does not
already start it (HKCU\Software\Classes\mornye on Windows, a GIO
x-scheme-handler default on Linux, using $APPIMAGE for AppImages).
The repository moved to mornyeapp/Mornye, so the GitHub links in the
app, README, contributing guide, issue templates, changelog config,
AltStore source and Linux and Windows packaging now use it. The remote
config endpoint keeps its old server name.
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.
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.
- 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.
An Xcode "Embed FFmpeg" phase copies build/ffmpeg/macos-universal (or
the host architecture) into Contents/Resources/ffmpeg and signs the
tools; MORNYE_REQUIRE_FFMPEG=1 turns a missing stage into an error.
Linux installs them into lib/ffmpeg and Windows into ffmpeg\, warning
when nothing is staged. A macOS integration test converts and probes
with the bundled tools.
- scripts/package_macos_dmg.sh: ad hoc signs the release app inside out
(keeping its entitlements), builds a compressed dmg with an Applications
symlink, then mounts it read-only and checks the signature and the
universal slices.
- scripts/package_linux.sh: AppImage (pinned appimagetool 1.9.1 and type2
runtime, checked by SHA-256) and deb (dpkg-shlibdeps Depends with a fixed
fallback) from the Flutter bundle, installed under usr/lib/mornye.
- linux/packaging: desktop entry registering x-scheme-handler/mornye,
AppStream metainfo and 128/256 px icons.
- windows/installer/mornye.iss and scripts/package_windows.ps1: per-user
Inno Setup installer in %LOCALAPPDATA%\Programs\Mornye with Start Menu
and optional desktop shortcuts (AppUserModelID com.zarz.mornye), the
HKCU mornye:// protocol, closing a running app on upgrade and a
/RELAUNCH=1 switch for silent updates, plus a portable zip.
Linux installs libmornye_desktop.so into the bundle's lib/ directory and
Windows installs mornye_desktop.dll next to mornye.exe. Both fail at
configure time with a clear message when the library was not built.
Add scripts/build_rust_backend_windows.ps1 as the Windows counterpart of
`build_rust_backend.sh desktop`, replacing the commented commands.
Name the app Mornye with the com.zarz.mornye identifier on all three
runners and generate macOS and Windows icons from the brand badge; the
Linux bundle installs the badge PNG as the window icon. Open at
1280 x 800 with a minimum of 800 x 600. Register the mornye:// scheme on
macOS and run outside the App Sandbox.