diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 5fdd883..c4ddc74 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.1.0" + ".": "1.1.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 43c843b..d865e7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## [1.1.1](https://github.com/InstaZDLL/WaveFlow/compare/v1.1.0...v1.1.1) (2026-05-18) + + +### Bug Fixes + +* **ci:** grant actions:write to fan-out step in release.yml ([2cf4b8d](https://github.com/InstaZDLL/WaveFlow/commit/2cf4b8d9282887502d52a918dea644aae0c6f2cc)) +* **ci:** update winget-releaser pinned SHA (v2 head moved) ([25a969e](https://github.com/InstaZDLL/WaveFlow/commit/25a969e270f332daff82a0172dc7121980e66e7f)) +* **readme:** restore emerald color on version badge ([211d12e](https://github.com/InstaZDLL/WaveFlow/commit/211d12e6372949a39dfc04abc54f5f4a5822a552)) +* **readme:** switch version badge to shields.io static/v1 endpoint ([c020e4a](https://github.com/InstaZDLL/WaveFlow/commit/c020e4ac6246087a3064b3636458d33a8f1bd49b)) +* **share:** use full-res artwork + real blur on Now Playing card ([f6d439d](https://github.com/InstaZDLL/WaveFlow/commit/f6d439df3752770e98728d788eedc579dd87fcce)) +* **splash:** allow retry when reveal_main_close_splash fails ([446a153](https://github.com/InstaZDLL/WaveFlow/commit/446a153d9dbca7f602ecbbfcf3f3563317bb22f4)) +* **splash:** emit app://ready from useEffect instead of rAF ([e7da1c4](https://github.com/InstaZDLL/WaveFlow/commit/e7da1c41d81d89b66b41484588b9553bd55dbbc7)) +* **splash:** move handoff to backend `app://ready` listener (closes [#42](https://github.com/InstaZDLL/WaveFlow/issues/42)) ([0e5618a](https://github.com/InstaZDLL/WaveFlow/commit/0e5618aa1b1d6eb92a11c67abb853532c7220c11)) +* **splash:** move handoff to backend app://ready listener (closes [#42](https://github.com/InstaZDLL/WaveFlow/issues/42)) ([#43](https://github.com/InstaZDLL/WaveFlow/issues/43)) ([1c43fb9](https://github.com/InstaZDLL/WaveFlow/commit/1c43fb93e4451c474c8f61d90cd46ac1d0a68e27)) +* **splash:** retry fallback in a loop + don't close splash on main reveal failure ([6c1f7ac](https://github.com/InstaZDLL/WaveFlow/commit/6c1f7accd851e121a26334e8bd47b695d191873b)) +* **splash:** set native window backgroundColor to avoid white flash on windows ([8f29b4f](https://github.com/InstaZDLL/WaveFlow/commit/8f29b4f07cea1a3055e32443f6d92ab7e0b1ec17)) + ## [1.1.0](https://github.com/InstaZDLL/WaveFlow/compare/v1.0.0...v1.1.0) (2026-05-17) ### Features diff --git a/README.md b/README.md index 486bc80..967160a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

- Version + Version Downloads Tauri 2 React 19 diff --git a/docs/features/ui.md b/docs/features/ui.md index d61ccc6..b4a13de 100644 --- a/docs/features/ui.md +++ b/docs/features/ui.md @@ -52,9 +52,13 @@ Two entry points in the [`PlayerBar`](../../src/components/player/PlayerBar.tsx) ## Splash screen -To hide the cold-start delay (Windows SmartScreen / Defender scanning every freshly-extracted DLL on the very first launch after install, plus the `setup()` chain in [`lib.rs`](../../src-tauri/src/lib.rs) — opening `app.db` + running migrations, creating the default profile, cold-initialising cpal/WASAPI), the main window is created with `"visible": false` and a small secondary window (`label: "splashscreen"`, 360×240, transparent, decorations off, always-on-top, off the taskbar) shows a WaveFlow logo + indeterminate progress bar while the backend boots and the React bundle parses. +To hide the cold-start delay (Windows SmartScreen / Defender scanning every freshly-extracted DLL on the very first launch after install, plus the `setup()` chain in [`lib.rs`](../../src-tauri/src/lib.rs) — opening `app.db` + running migrations, creating the default profile, cold-initialising cpal/WASAPI), the main window is created with `"visible": false` and a small secondary window (`label: "splashscreen"`, 360×240, opaque `#121212`, decorations off, always-on-top, off the taskbar) shows a WaveFlow logo + indeterminate progress bar while the backend boots and the React bundle parses. -The static HTML lives in [`public/splash.html`](../../public/splash.html) (no JS, inline SVG logo, single CSS animation) so it paints the instant the WebView2 process spawns. [`main.tsx`](../../src/main.tsx) runs the takeover after the first React frame: show the main window first, then close the splash so the desktop is never visible between the two. The mini-player webview branches out via `?mini=1` and skips the dance. +The static HTML lives in [`public/splash.html`](../../public/splash.html) (no JS, inline SVG logo, single CSS animation) so it paints the instant the WebView2 process spawns. The splash → main handoff is **driven from the backend** — the frontend's [`ReadySignal`](../../src/components/common/ReadySignal.tsx) component emits `app://ready` after React's first commit (via `useEffect`, not `requestAnimationFrame` — WebKitGTK 2.52 suspends rAF callbacks while a window is `visible: false`), and [`lib.rs`](../../src-tauri/src/lib.rs)'s setup installs an `app.listen("app://ready", …)` listener that calls `reveal_main_close_splash`: show main first, set focus, then close the splash so the desktop is never visible between the two. A 15 s safety-net timer + bounded retry loop (10 attempts, 250 ms backoff) revives the handoff if the event never arrives. The mini-player webview branches out via `?mini=1` and skips the dance. + +Why backend-driven: v1.1.0 ran the handoff entirely in `main.tsx` via `requestAnimationFrame` + IPC `window.show()` + `splash.close()`. On Linux WebKitGTK 2.52+ the heavy first-launch init (migrations + DB pool + WebKit profile dir) raced the rAF window, the show()/close() could fire on a non-ready webview, and the user was stuck on an eternal splash (issue #42). Native-side ownership + an explicit "DOM committed" signal is robust to that race. + +Splash window background is opaque on purpose: `"transparent": true` forces an alpha-capable EGL config that some WebKitGTK builds reject, doubling the EGL failure surface (see also the AppImage incompatibility note for WebKitGTK 2.52+). ## System tray diff --git a/package.json b/package.json index b89a33c..07f0860 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "waveflow", "private": true, - "version": "1.1.0", + "version": "1.1.1", "type": "module", "license": "GPL-3.0", "scripts": { diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 5ab736a..6df0b85 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -6777,7 +6777,7 @@ dependencies = [ [[package]] name = "waveflow" -version = "1.1.0" +version = "1.1.1" dependencies = [ "alsa", "anyhow", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index bcb3f17..02b4299 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "waveflow" -version = "1.1.0" +version = "1.1.1" description = "Local music player for desktop — Spotify-inspired UI, real-time audio engine, your files stay on your machine." authors = ["InstaZDLL "] edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index d65e546..03a7633 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "WaveFlow", - "version": "1.1.0", + "version": "1.1.1", "identifier": "app.waveflow", "build": { "beforeDevCommand": "bun run dev",