diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 64e0684f..099626f4 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.7.0" + ".": "1.8.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index de4f9694..2f569c08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,647 @@ # Changelog +## [1.8.0](https://github.com/InstaZDLL/WaveFlow/compare/v1.7.0...v1.8.0) (2026-09-20) + + +### Features + +* add the reviewed Japanese wording ([2d9429d](https://github.com/InstaZDLL/WaveFlow/commit/2d9429dc43d0437fbe34604b8bd460760f9299a7)) +* add the reviewed Korean wording ([04f44d1](https://github.com/InstaZDLL/WaveFlow/commit/04f44d18286c38addecc2f0f8700bcb7daf3098e)) +* add the reviewed Simplified Chinese wording ([4f9004f](https://github.com/InstaZDLL/WaveFlow/commit/4f9004f35822962bcce7d0c32183d1aca39e7e4d)) +* add the reviewed Traditional Chinese wording ([7089e24](https://github.com/InstaZDLL/WaveFlow/commit/7089e24d1cd661bc19724d30e4ee84d93c8f6db7)) +* **analysis:** measure loudness per itu-r bs.1770-4 ([5598a3d](https://github.com/InstaZDLL/WaveFlow/commit/5598a3d5371de63dc6ec9383414152036240f9ca)) +* **artist:** choose the banner, and stop stretching a strip across it ([02c13f7](https://github.com/InstaZDLL/WaveFlow/commit/02c13f7e7064d955e062d943312666919d0a03a0)), closes [#693](https://github.com/InstaZDLL/WaveFlow/issues/693) +* **artist:** spotify-style hero backdrop on the artist page ([#482](https://github.com/InstaZDLL/WaveFlow/issues/482)) ([4b3f120](https://github.com/InstaZDLL/WaveFlow/commit/4b3f120e455f93e70559582d4aede4b977b67dbd)) +* **audio:** add audio.dsd_dop setting command + hydration ([#495](https://github.com/InstaZDLL/WaveFlow/issues/495)) ([98207d8](https://github.com/InstaZDLL/WaveFlow/commit/98207d8e65fafe8982af61a5633cdd3cefa48875)) +* **audio:** add DSD-over-PCM (DoP) encoder core module ([3d03b43](https://github.com/InstaZDLL/WaveFlow/commit/3d03b43794a8448389307ea68243a7de5504fd26)) +* **audio:** add wasapi exclusive dop output backend ([#495](https://github.com/InstaZDLL/WaveFlow/issues/495)) ([81c068e](https://github.com/InstaZDLL/WaveFlow/commit/81c068e151e93518ebf45794b7bc8fe3c3754d73)) +* **audio:** exclusive output on Linux and macOS, and a name that is not WASAPI's ([fd61a63](https://github.com/InstaZDLL/WaveFlow/commit/fd61a6314af1914ede6403ac823bd9c286e31718)) +* **audio:** expose dop toggle, pipeline pill and i18n ([#495](https://github.com/InstaZDLL/WaveFlow/issues/495)) ([7f98bd5](https://github.com/InstaZDLL/WaveFlow/commit/7f98bd5c2669a765ddb1aee52cb6757b7e1b636b)) +* **audio:** follow the os default output device when nothing is pinned ([d9024fc](https://github.com/InstaZDLL/WaveFlow/commit/d9024fc956dfdbd2e7f7eef4f2b745ffca442428)) +* **audio:** give macos exclusive output for ordinary playback too ([c0d6f3f](https://github.com/InstaZDLL/WaveFlow/commit/c0d6f3facb7bb7eb57198d698ef7b9f9b6b73317)) +* **audio:** keep ALSA's routing layers out of the output device list ([6da6199](https://github.com/InstaZDLL/WaveFlow/commit/6da61995f10548bae37b4377bc124b9b193c30b9)) +* **audio:** let linux own the sound card for ordinary playback, not just dsd ([28e86e8](https://github.com/InstaZDLL/WaveFlow/commit/28e86e81fe3cfcdd1e78297c6d417f3fdad91f86)) +* **audio:** native DSD via DoP (DSD over PCM) on WASAPI Exclusive ([db340d1](https://github.com/InstaZDLL/WaveFlow/commit/db340d190fbb297231c00d234a366831f01c2dc7)) +* **audio:** native dsd via dop on linux (raw hw: alsa) ([#495](https://github.com/InstaZDLL/WaveFlow/issues/495)) ([e20aa16](https://github.com/InstaZDLL/WaveFlow/commit/e20aa1682cfd516b0432d2d3cb52904fd8e089dd)) +* **audio:** native dsd via dop on macos (coreaudio hog mode) ([#495](https://github.com/InstaZDLL/WaveFlow/issues/495)) ([8b80c9c](https://github.com/InstaZDLL/WaveFlow/commit/8b80c9cba3c269d7fdd43ced115c10f9513bc08c)) +* **audio:** output device batch — rebuild, device loss, capabilities and rate matching ([f8eb7b7](https://github.com/InstaZDLL/WaveFlow/commit/f8eb7b77a97399a4bfa369865609709b5125b100)) +* **audio:** play each track at its own sample rate, when asked to ([f87d33f](https://github.com/InstaZDLL/WaveFlow/commit/f87d33f83f3b82e1b894a71809f3a996533aecba)) +* **audio:** say when playback quietly falls back instead of only logging it ([518fe66](https://github.com/InstaZDLL/WaveFlow/commit/518fe6633761b01ed15e550d1abaac9622cb17bc)) +* **audio:** show what each output device actually accepts ([f1b4df2](https://github.com/InstaZDLL/WaveFlow/commit/f1b4df26d20280de9b4e8f92c735f62f47fcb751)) +* **audio:** wire dop into the decoder and per-track output switch ([#495](https://github.com/InstaZDLL/WaveFlow/issues/495)) ([41b17db](https://github.com/InstaZDLL/WaveFlow/commit/41b17dbf8309a1acfea36fd162fd51f9669d97bd)) +* **canvas:** opt-in local cache for plugin Canvases ([#473](https://github.com/InstaZDLL/WaveFlow/issues/473)) ([70cd206](https://github.com/InstaZDLL/WaveFlow/commit/70cd2064e4d0309b31d42ebfb285cd702764c595)) +* **canvas:** opt-in local cache for plugin Canvases ([#473](https://github.com/InstaZDLL/WaveFlow/issues/473)) ([8ce04be](https://github.com/InstaZDLL/WaveFlow/commit/8ce04be0bab0f117e4b19f93ea3fd73124a5313c)) +* **canvas:** per-track looping Canvas behind the now-playing view ([#442](https://github.com/InstaZDLL/WaveFlow/issues/442)) ([b5a8909](https://github.com/InstaZDLL/WaveFlow/commit/b5a89095fbb1abfa8c8a11e62453af64a4b9e2c1)) +* **canvas:** per-track looping Canvas behind the now-playing view ([#442](https://github.com/InstaZDLL/WaveFlow/issues/442)) ([f57d162](https://github.com/InstaZDLL/WaveFlow/commit/f57d162728e7163d6938522fee7e6a25219e4cf9)) +* **canvas:** waveflow:canvas/v1 world for per-track canvas plugins ([#473](https://github.com/InstaZDLL/WaveFlow/issues/473)) ([fcdc1e5](https://github.com/InstaZDLL/WaveFlow/commit/fcdc1e5de77eb1fb7f7bd398f48bf41634a952d5)) +* **canvas:** waveflow:canvas/v1 world for per-track Canvas plugins ([#473](https://github.com/InstaZDLL/WaveFlow/issues/473)) ([de01b35](https://github.com/InstaZDLL/WaveFlow/commit/de01b35b083d1929114d0ed46e3f21a1ac91f97c)) +* **context-menu:** open the track menu from the keyboard everywhere ([fc554b3](https://github.com/InstaZDLL/WaveFlow/commit/fc554b35f8a0fa06f2d870fbeb5d1e1e0055e756)) +* **context-menu:** open the track menu from the keyboard everywhere ([0fb44c3](https://github.com/InstaZDLL/WaveFlow/commit/0fb44c393d4070a72347a3a45b440b5251cb3cd6)), closes [#436](https://github.com/InstaZDLL/WaveFlow/issues/436) +* **library:** a "needs attention" inventory of the library ([ba2c72b](https://github.com/InstaZDLL/WaveFlow/commit/ba2c72b1d4b4931a9f087f563e78b49f8d5f26a8)) +* **library:** browse both sources from one album list ([aa1d476](https://github.com/InstaZDLL/WaveFlow/commit/aa1d4765244c7edd519ccbfdb1dbb72cae610197)) +* **library:** browse both sources from one artist list ([d0dc2db](https://github.com/InstaZDLL/WaveFlow/commit/d0dc2db328a4710e520b513ad3b8a5b540f14422)) +* **library:** browse both sources from one playlist list ([c83e67d](https://github.com/InstaZDLL/WaveFlow/commit/c83e67d75007243ee3b4a1636c90732286748d0b)) +* **library:** browse both sources from one track list ([ecfc61d](https://github.com/InstaZDLL/WaveFlow/commit/ecfc61d427383a16e3913c1dd25440315784771c)) +* **library:** browse by folder, and find Chinese titles by pinyin ([2731a1e](https://github.com/InstaZDLL/WaveFlow/commit/2731a1e5e9cd5a15afcb110e71e1f165e26b3c19)) +* **library:** browse the library by folder, not just by library root ([ec81e93](https://github.com/InstaZDLL/WaveFlow/commit/ec81e93a7cda6763e5c52d89172af40e06404c1e)) +* **library:** choose, reorder and resize the columns in track lists ([f054da4](https://github.com/InstaZDLL/WaveFlow/commit/f054da4f1dd46ec11f1554f757a370ee367ba8e5)) +* **library:** columns, an inventory, a task bar, high contrast and a cache location ([12fa8c5](https://github.com/InstaZDLL/WaveFlow/commit/12fa8c52a637a423b8c7ea52e2d89c1849972fe6)) +* **library:** deep rescan for the whole library, not just one folder ([c4f25ac](https://github.com/InstaZDLL/WaveFlow/commit/c4f25acbbd02f01e1b13c62d0d88e2624b423fa0)), closes [#457](https://github.com/InstaZDLL/WaveFlow/issues/457) +* **library:** grid tab for user playlists ([542a0ff](https://github.com/InstaZDLL/WaveFlow/commit/542a0ff7178a4f5cf71821ec82d2d22ea5b23f54)), closes [#461](https://github.com/InstaZDLL/WaveFlow/issues/461) +* **library:** hide the columns that do not fit instead of scrolling sideways ([e9959b5](https://github.com/InstaZDLL/WaveFlow/commit/e9959b5870789f8fbdbb389879f2c95311033d79)) +* **library:** one album view, not a poorer copy for the server's ([9bc65b1](https://github.com/InstaZDLL/WaveFlow/commit/9bc65b1ba01bf4a82130f6a50a6af93711fa22af)) +* **library:** one artist page, not a poorer copy for the server's ([436a645](https://github.com/InstaZDLL/WaveFlow/commit/436a645237e35423a04784cb77fb51bb0191915c)) +* **lyrics:** a floating desktop lyrics window ([b0b26fb](https://github.com/InstaZDLL/WaveFlow/commit/b0b26fbabd0265dab286689073b5d42176ddfd6c)) +* **lyrics:** progressive fill on the word being sung ([8965f09](https://github.com/InstaZDLL/WaveFlow/commit/8965f097618c12e6941ced0c6a2504afa7289c70)) +* **lyrics:** progressive fill on the word being sung ([917b331](https://github.com/InstaZDLL/WaveFlow/commit/917b3311a7276aa5cac9478c519c58075a94fa20)) +* **lyrics:** show apple romanization and translation under each line ([507472c](https://github.com/InstaZDLL/WaveFlow/commit/507472c1f2e9d39da10fad3c5f0ca111da367ba8)) +* **lyrics:** show apple romanization and translation under each line ([407ae48](https://github.com/InstaZDLL/WaveFlow/commit/407ae48a9f62a3a16ed3eab57e1f40419b794a39)) +* **maintenance:** one-time cleanup of cached album covers for art-having albums ([#493](https://github.com/InstaZDLL/WaveFlow/issues/493)) ([d9db659](https://github.com/InstaZDLL/WaveFlow/commit/d9db65939cf767a31481b3ee766577a519f8c3cf)) +* **mini-player:** volume slider and mute in the cover overlay ([850556d](https://github.com/InstaZDLL/WaveFlow/commit/850556da24d97db54fb14af96dfd650fcc946d49)) +* **mini-player:** volume slider and mute in the cover overlay ([45faadb](https://github.com/InstaZDLL/WaveFlow/commit/45faadbe2beb6a03051bdc5c92e5fec5728dbc29)) +* **mpd:** serve the MPD protocol so existing clients can drive playback ([b250be6](https://github.com/InstaZDLL/WaveFlow/commit/b250be6c253b7bd31d304c384f4d6e4de6bd170f)) +* **mpd:** serve the MPD protocol so existing clients can drive playback ([0bae7ad](https://github.com/InstaZDLL/WaveFlow/commit/0bae7ad2c996cdc55620e9197ed1b56ef685061f)), closes [#471](https://github.com/InstaZDLL/WaveFlow/issues/471) +* **now-playing:** cover ↔ artist crossfade slideshow ([#466](https://github.com/InstaZDLL/WaveFlow/issues/466)) ([62b33ed](https://github.com/InstaZDLL/WaveFlow/commit/62b33ed666e1b0e5dc91740844ef326a0e5a81d0)) +* **now-playing:** cover ↔ artist crossfade slideshow ([#466](https://github.com/InstaZDLL/WaveFlow/issues/466)) ([fd90186](https://github.com/InstaZDLL/WaveFlow/commit/fd901869d0d2ef6c79cbe7b53d338de475727216)) +* **playback:** album gain, album shuffle, and Opus ([2fcd041](https://github.com/InstaZDLL/WaveFlow/commit/2fcd041de9f3bfa6f7b61233bbc97566fbeb1842)) +* **playback:** apply album gain when a record is playing through ([c19da12](https://github.com/InstaZDLL/WaveFlow/commit/c19da12544be412e838f3114e541034236ca24cf)) +* **playback:** play Opus ([a3ee5cf](https://github.com/InstaZDLL/WaveFlow/commit/a3ee5cf08dc19fab66519652c3a1dd7cee703694)) +* **playback:** shuffle whole records, and build sessions out of them ([ce1d4ae](https://github.com/InstaZDLL/WaveFlow/commit/ce1d4ae8cd58fa99ab0c5feac10f0d1cd2533d96)) +* **player:** bring ReplayGain up to the standard ([882200b](https://github.com/InstaZDLL/WaveFlow/commit/882200baeea8847e0b5ad7ab0140c2a791dbd9c4)) +* **player:** curved spectrum, canvas frame, mini-player slideshow and lyrics ([2d238a0](https://github.com/InstaZDLL/WaveFlow/commit/2d238a05f94e322b10fc8654e126decfc388eb22)) +* **player:** curved spectrum, canvas frame, mini-player slideshow and lyrics ([fa6b703](https://github.com/InstaZDLL/WaveFlow/commit/fa6b703eea7789faab5cff82d9fa862a65abfab4)) +* **player:** give replaygain a pre-amp, a fallback and clipping prevention ([78eb484](https://github.com/InstaZDLL/WaveFlow/commit/78eb4840e428cf30a8e57141f03757f7308e8bec)) +* **player:** user-selectable spectrum visualizer colors ([#468](https://github.com/InstaZDLL/WaveFlow/issues/468)) ([b5ef338](https://github.com/InstaZDLL/WaveFlow/commit/b5ef338a25b73d6ce3ff1b8ada818ff9b7181214)) +* **player:** user-selectable spectrum visualizer colors ([#468](https://github.com/InstaZDLL/WaveFlow/issues/468)) ([904b652](https://github.com/InstaZDLL/WaveFlow/commit/904b6525890037f8883e6c8068001679e147617c)) +* **playlist:** one playlist page, not a poorer copy for the server's ([4147e1d](https://github.com/InstaZDLL/WaveFlow/commit/4147e1dc1a4c1e1e2a29204502c074825f5b0009)) +* **playlist:** one playlist page, not a poorer copy for the server's ([cb16e6f](https://github.com/InstaZDLL/WaveFlow/commit/cb16e6fbddfeadb82a477e44542aa73348c0d5f2)) +* **plugins:** a plugin world that can carry word-level lyrics ([fd3abb6](https://github.com/InstaZDLL/WaveFlow/commit/fd3abb6db6deefd4f1c4197340298947171f2b7f)) +* **plugins:** a plugin world that can carry word-level lyrics ([3aa6982](https://github.com/InstaZDLL/WaveFlow/commit/3aa698252851db59fd235f81077265de78db8d37)) +* **plugins:** add waveflow:ui/v1 world host surface + redacted library read ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443)) ([a48cab8](https://github.com/InstaZDLL/WaveFlow/commit/a48cab8c9b18f73d261b16bca9648a849cb15cc1)) +* **plugins:** disclose ui library.read_artists permission in the store ([afe2d62](https://github.com/InstaZDLL/WaveFlow/commit/afe2d6297e1d3a0b664cf9e5e5ee32e61dca3b6a)) +* **plugins:** disclose ui library.read_artists permission in the store ([92fada3](https://github.com/InstaZDLL/WaveFlow/commit/92fada310646e1031b613a9387d8077e44280f48)) +* **plugins:** localized manifest descriptions & option labels ([a39e1cf](https://github.com/InstaZDLL/WaveFlow/commit/a39e1cf24b468e94f43e9465e400d822459c84c6)), closes [#440](https://github.com/InstaZDLL/WaveFlow/issues/440) +* **plugins:** publish-safe `*_i18n` sibling for localized strings ([e76b70f](https://github.com/InstaZDLL/WaveFlow/commit/e76b70fb519ea981e9854425d2f3ebd2bf1c3c35)), closes [#440](https://github.com/InstaZDLL/WaveFlow/issues/440) +* **plugins:** render ui-world plugin views + dynamic sidebar ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443) Part 2) ([d4c44eb](https://github.com/InstaZDLL/WaveFlow/commit/d4c44eb5024a7b8e3aa42170c0ab5bd693788297)) +* **plugins:** render ui-world plugin views + dynamic sidebar ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443) Part 2) ([7b8cd27](https://github.com/InstaZDLL/WaveFlow/commit/7b8cd278b79e001b8f3eb6bb123023d98340edf2)) +* **plugins:** rewrite Web Radio's description for the user, and translate it ([2384750](https://github.com/InstaZDLL/WaveFlow/commit/2384750b5e49837fb99d2e811257fb92a9d088bf)) +* **plugins:** support direct download_url in registry entries ([c6d4bc7](https://github.com/InstaZDLL/WaveFlow/commit/c6d4bc74757d45c8581aefb55d3f13eccf8b34c0)) +* **plugins:** support direct download_url in registry entries ([cd54eb8](https://github.com/InstaZDLL/WaveFlow/commit/cd54eb8c62f0092914222b5609f3d2cc8429f4c6)) +* **plugins:** waveflow:ui/v1 world host surface + redacted library read ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443) Part 1) ([5885099](https://github.com/InstaZDLL/WaveFlow/commit/58850991d5943d5e9eade539705ff5399c7ebabf)) +* **radio, tags:** rank mood radio by fit, and fetch album tags for review ([93e6190](https://github.com/InstaZDLL/WaveFlow/commit/93e6190fb0b6d9936909712bcd67de02d057c549)) +* **radio, tags:** rank mood radio by fit, and fetch album tags for review ([d80b78f](https://github.com/InstaZDLL/WaveFlow/commit/d80b78f69c9bcfc7fff7ec4390047bb962e4d351)) +* **reconciliation:** add exact track linking ([cc533aa](https://github.com/InstaZDLL/WaveFlow/commit/cc533aaabc52e3ba7ae6ac4664ae584aebd46ec8)) +* **reconciliation:** add exact track linking ([d8f6212](https://github.com/InstaZDLL/WaveFlow/commit/d8f62122b53bcfad736fae510d5f09f4bb566511)) +* **reconciliation:** add explicit playlist conversion ([d96cba2](https://github.com/InstaZDLL/WaveFlow/commit/d96cba272aafced3785c20579cd76317481bb39c)) +* **reconciliation:** add explicit playlist conversion ([60359d5](https://github.com/InstaZDLL/WaveFlow/commit/60359d57bf843076c2c38705919c752de57268eb)) +* **reconciliation:** copy linked user data explicitly ([ec6a190](https://github.com/InstaZDLL/WaveFlow/commit/ec6a1907adee58fe0d63ca73693b8b645f3df155)) +* **reconciliation:** copy linked user data explicitly ([96e8bc8](https://github.com/InstaZDLL/WaveFlow/commit/96e8bc8851174135d24ed5a7738d054defba31b3)) +* **reconciliation:** progress + cancellation and true-schema tests ([9baf895](https://github.com/InstaZDLL/WaveFlow/commit/9baf8950a43b1df56425f9f07845bcefcc34ae16)) +* **reconciliation:** scan progress, cancellation and true-schema tests ([63129a7](https://github.com/InstaZDLL/WaveFlow/commit/63129a7c89e15958c635f6b554a8242dc318e4a0)) +* **release:** embed AppImage update information and ship a .zsync ([8868743](https://github.com/InstaZDLL/WaveFlow/commit/88687430beca514c559bf59db4dcb2112ff9a9cf)), closes [#527](https://github.com/InstaZDLL/WaveFlow/issues/527) +* **remote-playback:** prefer confirmed local links ([5548cea](https://github.com/InstaZDLL/WaveFlow/commit/5548ceacdbd5edeaedc5521024cd362b6bdf1443)) +* **remote-playback:** prefer confirmed local links ([97e6d16](https://github.com/InstaZDLL/WaveFlow/commit/97e6d167f20eac449ee11ebc9a86bf06ccd41d54)) +* **remote:** 1:1 parity for the remote playlist view ([b16deb8](https://github.com/InstaZDLL/WaveFlow/commit/b16deb89eccf26316e772b0be757289e491f1cc3)) +* **remote:** a diagnostics card so the protocol can be watched by a human ([f0e78ef](https://github.com/InstaZDLL/WaveFlow/commit/f0e78ef611f19b2232b6c273162126d09aef00fe)) +* **remote:** add tracks to a remote playlist via catalogue search ([d581ab4](https://github.com/InstaZDLL/WaveFlow/commit/d581ab4b4a34e67fde19d65223ea39dc8254fad7)) +* **remote:** artist photo, hero background and bio by name ([9697deb](https://github.com/InstaZDLL/WaveFlow/commit/9697deb2812a9d7bcc301eecd3922406b2b4d603)) +* **remote:** ask the server to transcode, and never be refused for it ([3fa6125](https://github.com/InstaZDLL/WaveFlow/commit/3fa6125aa81a2861cfc955c655ec85141a837134)) +* **remote:** ask the server to transcode, and never be refused for it ([7c3e3cd](https://github.com/InstaZDLL/WaveFlow/commit/7c3e3cd7f5f9479f1b5d939847521ed3b2fa2765)) +* **remote:** auto-generate the remote playlist cover from track art ([24b343e](https://github.com/InstaZDLL/WaveFlow/commit/24b343e80ed35a0a9dea6817f62062b64726b086)) +* **remote:** bootstrap from a snapshot and walk the journal ([faa608d](https://github.com/InstaZDLL/WaveFlow/commit/faa608dfb1410e5630e14f70a219d559ff5e23b6)) +* **remote:** bounded progress bar for remote tracks ([1e1f473](https://github.com/InstaZDLL/WaveFlow/commit/1e1f4731cfd74e601832c6f0461dbb4c3da6f40e)) +* **remote:** bring remote playlist view to 1:1 with local ([d250a08](https://github.com/InstaZDLL/WaveFlow/commit/d250a087a1f4a94c5f181c807bdd6d0c4c8a80f0)) +* **remote:** cache a remote stream from the bytes playback already reads ([f2a8b7d](https://github.com/InstaZDLL/WaveFlow/commit/f2a8b7db278cf82662759fd2855ec87f2c18bc89)) +* **remote:** cache a remote stream from the bytes playback already reads ([d221b64](https://github.com/InstaZDLL/WaveFlow/commit/d221b648a0e134db0dbd8a2ef1ec41bc0072797e)) +* **remote:** cache the server's cover art on disk instead of inlining it ([c60cbc7](https://github.com/InstaZDLL/WaveFlow/commit/c60cbc7df4dc030398c9f9f1dc3f06404ee0d82b)) +* **remote:** cache the server's cover art on disk instead of inlining it ([ed278e3](https://github.com/InstaZDLL/WaveFlow/commit/ed278e32847e303fcff67e7425b899f0918161aa)) +* **remote:** capture the server's content fingerprint, unread ([74f5063](https://github.com/InstaZDLL/WaveFlow/commit/74f50630b9ddc2d6e74e25c62fa2c1565225b297)) +* **remote:** clickable albums with a remote album view ([c305351](https://github.com/InstaZDLL/WaveFlow/commit/c3053510f0d566f2af432b127beebf8dd2780aeb)) +* **remote:** clickable remote artist + heal stale artist_id cache ([90b4c8d](https://github.com/InstaZDLL/WaveFlow/commit/90b4c8de01b63ce45a99ec3c9de2b364234f970f)) +* **remote:** columned track table on the remote playlist view ([2034a83](https://github.com/InstaZDLL/WaveFlow/commit/2034a8338cc5c063bd1e292c531eea060d350ab8)) +* **remote:** complete the write surface with scrobbles, queue and shares ([9b1157e](https://github.com/InstaZDLL/WaveFlow/commit/9b1157eef1d2e0ac06ee1022b3b4bfbe7f62c3d5)) +* **remote:** correct a server track, and read the feed that reports it ([abee3f9](https://github.com/InstaZDLL/WaveFlow/commit/abee3f9fe967aa6264b763fd25089900cc3e2f90)) +* **remote:** correct a server track's tags without touching a file ([68ed8ec](https://github.com/InstaZDLL/WaveFlow/commit/68ed8ec01c392d7969a4595aae6eb83f8239c6e5)) +* **remote:** finish native remote-source integration ([aa39ee0](https://github.com/InstaZDLL/WaveFlow/commit/aa39ee0c8e83e3aa6691386e9e73c331f9fdce1d)) +* **remote:** foundations for the remote source and sync v2 ([e2d6627](https://github.com/InstaZDLL/WaveFlow/commit/e2d66270454ac42eac09db7d36fdaa92f8248104)) +* **remote:** import a server track into a scanned folder, linked for free ([#562](https://github.com/InstaZDLL/WaveFlow/issues/562)) ([76b2750](https://github.com/InstaZDLL/WaveFlow/commit/76b27507bed29acfa2584f5d47db68622d0aef09)) +* **remote:** keep a server track on disk, and play one whose file is gone ([#561](https://github.com/InstaZDLL/WaveFlow/issues/561)) ([6bd60b6](https://github.com/InstaZDLL/WaveFlow/commit/6bd60b6c27cfea6667b1655874cdd50aaa68c051)) +* **remote:** let the changes a server refused be dismissed ([0d19a96](https://github.com/InstaZDLL/WaveFlow/commit/0d19a96c7acd4126eba05028e2ec580dceb34d36)) +* **remote:** localize the sync_v2 remote surface across all 17 locales ([edebaeb](https://github.com/InstaZDLL/WaveFlow/commit/edebaebbd91bc1404b6ab4786ec1ac33a7ee1c89)) +* **remote:** mirror the server catalogue so both sources share one library ([35e8702](https://github.com/InstaZDLL/WaveFlow/commit/35e87028c341a6c56beffc683b60d91038828657)) +* **remote:** one entry per release, and one per person ([#571](https://github.com/InstaZDLL/WaveFlow/issues/571)) ([1d64eb9](https://github.com/InstaZDLL/WaveFlow/commit/1d64eb9d109dde93608292f94688d30e052cfeea)) +* **remote:** paint the server's Canvas behind a remote track ([37cdbf9](https://github.com/InstaZDLL/WaveFlow/commit/37cdbf902c2daf21f0603135e0ef55f06a659a80)) +* **remote:** paint the server's Canvas behind a remote track ([06ec59e](https://github.com/InstaZDLL/WaveFlow/commit/06ec59ef2e8534d1bd4680398c5726819dab9783)) +* **remote:** play remote playlists as a native queue ([53d4191](https://github.com/InstaZDLL/WaveFlow/commit/53d41915be61ffefc65f2c2d7976125d1f0d39db)) +* **remote:** queue local changes and push them back as replayable calls ([e03756e](https://github.com/InstaZDLL/WaveFlow/commit/e03756e575015bc9d5c5d68ac6272de0c8fc4b55)) +* **remote:** read the projection back out for the interface ([94bf6fa](https://github.com/InstaZDLL/WaveFlow/commit/94bf6fae9861d11c4329874c130e8189ce89828b)) +* **remote:** read the server's change feed, for what the sweep cannot see ([cb736eb](https://github.com/InstaZDLL/WaveFlow/commit/cb736ebcfb178b67e472b47ae9e2382429b897d8)) +* **remote:** remote music source and user-data sync v2 (RFC-005) ([3818b3a](https://github.com/InstaZDLL/WaveFlow/commit/3818b3a4978866dd6ab6382e3605389d15192181)) +* **remote:** remove a track from a remote playlist ([544b834](https://github.com/InstaZDLL/WaveFlow/commit/544b83425d321b299108ef3c690dd373ed25f6f5)) +* **remote:** reorder tracks in a remote playlist ([5b50b98](https://github.com/InstaZDLL/WaveFlow/commit/5b50b9894e7462d3179d25e3fec7fd61710121b1)) +* **remote:** scrub remote tracks via HTTP range seeking ([3615319](https://github.com/InstaZDLL/WaveFlow/commit/36153192ac627c68fd6179abd46bc7471e55817f)) +* **remote:** separate the two 409s and express clearing a field ([7b62858](https://github.com/InstaZDLL/WaveFlow/commit/7b62858deb8ff5827d8e0be9a8c50ec5507f48d6)) +* **remote:** server-first lyrics for remote tracks ([5b822ed](https://github.com/InstaZDLL/WaveFlow/commit/5b822ed6d7f886ddc6ade533c2e7c945ea311fac)) +* **remote:** share one digest cache, and keep discovery apart from verification ([7937356](https://github.com/InstaZDLL/WaveFlow/commit/79373567f822e9eae63e4c2c64e73dc310187654)) +* **remote:** shares as queued mutations on the v2 endpoints ([d321248](https://github.com/InstaZDLL/WaveFlow/commit/d32124825729d2c2c902ea466ee35270d9161549)) +* **remote:** show the cover art for a remote track ([ba9c470](https://github.com/InstaZDLL/WaveFlow/commit/ba9c470a4072a224805008452549d3745e372690)) +* **remote:** show the remote play queue in the queue panel ([ac10c35](https://github.com/InstaZDLL/WaveFlow/commit/ac10c35f3405b933ea1fad6279d9fc3b3411d6cd)) +* **remote:** sign in through the browser with authorization code + PKCE ([7ce6802](https://github.com/InstaZDLL/WaveFlow/commit/7ce6802cc2ef095071591a81447366c30e4ea949)) +* **remote:** similar artists on the remote artist view + ship sync_v2 ([2f76759](https://github.com/InstaZDLL/WaveFlow/commit/2f76759c8bd0345965830b8d21db52c20f726acf)) +* **remote:** stream remote tracks via server stream tickets ([3fb3aba](https://github.com/InstaZDLL/WaveFlow/commit/3fb3aba88e1747652f289593bc27c0ddd4b69c79)) +* **remote:** surface the remote source in the sidebar ([bbf1130](https://github.com/InstaZDLL/WaveFlow/commit/bbf11304e857cadd6cbb7a79896ba253ad7fa157)) +* **remote:** wake up on the journal socket instead of only polling ([e5e65cd](https://github.com/InstaZDLL/WaveFlow/commit/e5e65cd003e44ab87e2fd2aff78122a61c069e2b)) +* **remote:** wire user gestures to the queue ([f9fdd25](https://github.com/InstaZDLL/WaveFlow/commit/f9fdd2551dd7c93198354873abe0351ac611306e)) +* **scanner:** parse replaygain and r128 tags off the file ([2e6c69d](https://github.com/InstaZDLL/WaveFlow/commit/2e6c69d02cb646072d4c611bdb2ad9d46aa76c9a)) +* **scanner:** play AIFF, and say why the other formats are absent ([012be48](https://github.com/InstaZDLL/WaveFlow/commit/012be48059b00fddf8fa48179afe42a77a3f54b1)) +* **scanner:** play AIFF, and say why the other formats are absent ([6a5e36b](https://github.com/InstaZDLL/WaveFlow/commit/6a5e36bd189b4150b75595f0dca0fd37e24be9aa)) +* **scan:** store the replaygain a file declares on the track row ([81f4ec0](https://github.com/InstaZDLL/WaveFlow/commit/81f4ec0e1017fce04f0950fd0c099a80c29ce303)) +* **search:** find a Chinese title by its pinyin, or by its initials ([de3e288](https://github.com/InstaZDLL/WaveFlow/commit/de3e288da97e4db02554dcb7278e42667848f7ef)) +* **settings:** expose the replaygain pre-amp, fallback and clipping switch ([ec0d1bd](https://github.com/InstaZDLL/WaveFlow/commit/ec0d1bdc01dfe17d8b4bff419c0db6c67af434f8)) +* **settings:** organize settings with searchable sidebar navigation ([b9cd7a7](https://github.com/InstaZDLL/WaveFlow/commit/b9cd7a7cbe32be878b5e1a7924cce2f6949022b1)) +* **settings:** organize settings with searchable sidebar navigation ([6e60305](https://github.com/InstaZDLL/WaveFlow/commit/6e6030531596afd351136aaae5621423401e15a9)) +* **sidebar:** one playlist list, not a server section beside it ([bcb5b0b](https://github.com/InstaZDLL/WaveFlow/commit/bcb5b0bb58978e4a779d75b16c0b520b2373ffaa)) +* **smart-playlists:** more rule fields, a live count, templates and a rule summary ([26ca002](https://github.com/InstaZDLL/WaveFlow/commit/26ca0027e4d7c19a0e8ec800a3adedb6f41766d1)) +* **smart-playlists:** more rule fields, a live match count, templates and a plain-language summary ([972e949](https://github.com/InstaZDLL/WaveFlow/commit/972e9491a1a6cfa74dd28f7ec7e4d8c92fa1a5a6)) +* **startup:** fall back to software rendering after a launch that never painted ([7aea681](https://github.com/InstaZDLL/WaveFlow/commit/7aea68155050b0d8a6b19f8f5e9eea49c101177f)) +* **startup:** fall back to software rendering after a launch that never painted ([3a28447](https://github.com/InstaZDLL/WaveFlow/commit/3a2844790b98905052fadec57d0c36c1ae3133e5)) +* **storage:** choose where artwork and the rebuildable caches are stored ([3e65f2d](https://github.com/InstaZDLL/WaveFlow/commit/3e65f2d35d9fd943ece75f7a05555c5f0fe8b902)) +* **tags:** absorb a FLAC edit into the padding block instead of moving the file ([f2276e0](https://github.com/InstaZDLL/WaveFlow/commit/f2276e0282e4a18e04cc24da1e2a071fc26ab43c)) +* **tags:** correct a typo in a DSF file instead of refusing to open it ([96ba596](https://github.com/InstaZDLL/WaveFlow/commit/96ba596ecd12548e408e32cfff69cf43690b0e77)) +* **tags:** never let a rewrite destroy the file it is rewriting ([1741791](https://github.com/InstaZDLL/WaveFlow/commit/1741791a4f3a2a3665937d4568799d9855d03905)) +* **tags:** survive the read-only flag, the scanner and a half-flushed write ([81ec10c](https://github.com/InstaZDLL/WaveFlow/commit/81ec10c64457bb68fe733b6c260a238cfd84f884)) +* **tags:** write a tag into the padding, survive the interruption, and reach DSD ([d101339](https://github.com/InstaZDLL/WaveFlow/commit/d101339c2bc84afe2f1b5abe48704e477241c0a9)) +* **tags:** write an ID3v2 edit into the padding already in the file ([e08adb6](https://github.com/InstaZDLL/WaveFlow/commit/e08adb64ebeac9174626d6316d94aaae2f8b1b42)) +* **taskbar:** add playback buttons under the windows taskbar thumbnail ([5bb3467](https://github.com/InstaZDLL/WaveFlow/commit/5bb34672d9ba3bd45e8d6ef6748d4e6fbd6d78ff)) +* **taskbar:** add playback buttons under the windows taskbar thumbnail ([36ddf87](https://github.com/InstaZDLL/WaveFlow/commit/36ddf8722bd0af47742d6b67e81b1c74fb45afab)), closes [#583](https://github.com/InstaZDLL/WaveFlow/issues/583) +* **ui:** a high-contrast mode across every theme and skin ([8745d06](https://github.com/InstaZDLL/WaveFlow/commit/8745d06c805ac3c2b815c382b27df1a65c864364)) +* **ui:** one status bar for long-running tasks, with cancellation ([78e3513](https://github.com/InstaZDLL/WaveFlow/commit/78e35138ab9f483fc48f061918b742b9e5daaecf)) +* **ui:** show lyrics in the mini-player ([a7af815](https://github.com/InstaZDLL/WaveFlow/commit/a7af8158a1c259aa13dab44fd946a3585c04df4e)) + + +### Bug Fixes + +* a swap mid-rebuild, tag writes that skipped the writer, and album sessions without their gain ([81a8945](https://github.com/InstaZDLL/WaveFlow/commit/81a89453cfeab58df56490bbea1612467fca4da6)) +* **a11y:** stop loading spinners under reduced motion ([7af4931](https://github.com/InstaZDLL/WaveFlow/commit/7af493130c31c1e6b3ce4c0937997f90395a64d9)) +* **a11y:** stop loading spinners under reduced motion ([12ea015](https://github.com/InstaZDLL/WaveFlow/commit/12ea0150bbcaa2e8353356b987435c7f2cabd15c)) +* **about:** show the rubato version the app is built with ([71656f6](https://github.com/InstaZDLL/WaveFlow/commit/71656f601bacef53f2798dfd25566156d806bc4f)) +* address the review, and the three tests CI caught ([bbf93d2](https://github.com/InstaZDLL/WaveFlow/commit/bbf93d257dd71df273ad227c89db5cd0fdc9568a)) +* **album:** carry the full track row so Properties isn't half empty ([c2515fb](https://github.com/InstaZDLL/WaveFlow/commit/c2515fb5fdd4cf1ea0523001d7d10943cc5f2a5f)), closes [#458](https://github.com/InstaZDLL/WaveFlow/issues/458) +* **artist:** address review on the hero backdrop ([58d8348](https://github.com/InstaZDLL/WaveFlow/commit/58d83486c99ab35ef3878727411a836e5e5655cf)) +* **artist:** clear the read stamp on profile change ([da06a78](https://github.com/InstaZDLL/WaveFlow/commit/da06a78033356380ab9f563f60a4cd27ebb7a7c3)) +* **artist:** drop the backdrop candidates when the picker closes ([6f1bd0c](https://github.com/InstaZDLL/WaveFlow/commit/6f1bd0c77576ccc43b6fe729edd8cee17bb21168)) +* **artist:** keep a cached banner through a failed lookup, and refuse private URLs ([42d4ef7](https://github.com/InstaZDLL/WaveFlow/commit/42d4ef79e1867daca879fa54838ad131b60554ea)) +* **artist:** keep an in-flight read from clobbering an optimistic toggle ([4ebc933](https://github.com/InstaZDLL/WaveFlow/commit/4ebc9330e126d9a778e20ee35f2ae441b32d69b5)) +* **artist:** let a removed picture disappear, and answer the picker in one call ([bb62133](https://github.com/InstaZDLL/WaveFlow/commit/bb62133982d71832b39a71d88bff1ea074c3d0f4)) +* **artist:** local images, Deezer re-link, and a pickable banner ([734133a](https://github.com/InstaZDLL/WaveFlow/commit/734133aa6772c7deab78e36edce0545bf3cceb27)) +* **artist:** reset the hero preference when the profile changes ([5ad81f2](https://github.com/InstaZDLL/WaveFlow/commit/5ad81f2a79c00c51b834127cb12810e143684bcc)) +* **artist:** scope the hero preference's resolved flag to the profile ([d9605ff](https://github.com/InstaZDLL/WaveFlow/commit/d9605ffb917da7e730cd2a9a4394f7172889cce8)) +* **artist:** use the artist's own image, and re-link on a Deezer pick ([c946b33](https://github.com/InstaZDLL/WaveFlow/commit/c946b3334d698989752589612438f52c3ddec11b)) +* **audio:** a device pick no longer starts a track the user had paused ([f7f37b1](https://github.com/InstaZDLL/WaveFlow/commit/f7f37b14ba31f12a4c732771c969bfb82edb2c03)) +* **audio:** a pause the decoder has not reached yet still counts as paused ([d9624c5](https://github.com/InstaZDLL/WaveFlow/commit/d9624c5ea7308f5e3f695fda8dbbed6cd4168c3e)) +* **audio:** a ring producer handed over mid-track is installed, not dropped ([c84113e](https://github.com/InstaZDLL/WaveFlow/commit/c84113ebd9117ae65b90704e18ab73c0b21ad08c)) +* **audio:** a track that is still loading is a session a rebuild must stop ([717e3cd](https://github.com/InstaZDLL/WaveFlow/commit/717e3cdb5634993bc69e1e6ed9f5d9f0fbc3569d)) +* **audio:** ask alsa for a period the ring can feed, and a shallow buffer ([cc481d8](https://github.com/InstaZDLL/WaveFlow/commit/cc481d87ce54aab9ada0e8c620d6a59964d1a1f8)) +* **audio:** ask the sound server for the card before giving up on DoP ([bff1ffc](https://github.com/InstaZDLL/WaveFlow/commit/bff1ffc46dbb59b92146018469ccc76e9a9ae2af)) +* **audio:** claim the dispatch before a load publishes anything ([6fc4a70](https://github.com/InstaZDLL/WaveFlow/commit/6fc4a704810382329327362fdf4dbf6d1db21a68)) +* **audio:** claim the dispatch, and follow the OS default output device ([d850b4a](https://github.com/InstaZDLL/WaveFlow/commit/d850b4a208631f389d7884545b96e6b2ab752c36)) +* **audio:** compare the analysis version instead of only testing for NULL ([5edf248](https://github.com/InstaZDLL/WaveFlow/commit/5edf248ceaa1748addd00d837a486256d21a0c71)) +* **audio:** decide the resume after the device opens, not before ([a5a275d](https://github.com/InstaZDLL/WaveFlow/commit/a5a275d64bd3b693c750b2093bc5dda3f03d9d7b)) +* **audio:** defer a default-device follow instead of dropping it ([ae40db9](https://github.com/InstaZDLL/WaveFlow/commit/ae40db9a24315770da51544385baa5d76dfbdedf)) +* **audio:** drop a borrow no ci job was in a position to see ([f3090a3](https://github.com/InstaZDLL/WaveFlow/commit/f3090a311576ad0513ab2d5ff30e0b28dec5ddb2)) +* **audio:** drop a sub-stride DSD remainder instead of decoding it ([cb430a6](https://github.com/InstaZDLL/WaveFlow/commit/cb430a6b56c2237263c003ad92b96619eed97d3e)) +* **audio:** eight findings from the local review of the device batch ([567a379](https://github.com/InstaZDLL/WaveFlow/commit/567a37958ed187779d13c528dbb7234952a40006)) +* **audio:** fail the load when the output switch leaves us with nothing ([0514647](https://github.com/InstaZDLL/WaveFlow/commit/0514647fcccd6e326750a2531e9a639accfdc8de)) +* **audio:** finish short DSD block reads before decoding them ([c2a5531](https://github.com/InstaZDLL/WaveFlow/commit/c2a55315e30e2c418d582b7d8984bd33ae9a4a01)) +* **audio:** gate dop strictly to windows / wasapi exclusive ([#495](https://github.com/InstaZDLL/WaveFlow/issues/495)) ([16118d4](https://github.com/InstaZDLL/WaveFlow/commit/16118d46bfec17acb89fe55ae34a079492e7e070)) +* **audio:** keep a paused session paused when its output device goes away ([7d213ed](https://github.com/InstaZDLL/WaveFlow/commit/7d213ed74c63ca385da290596cae9239a7eab2a0)) +* **audio:** keep the ALSA probe guard inside the crate's MSRV ([220c9be](https://github.com/InstaZDLL/WaveFlow/commit/220c9be4c4421dbad44781c2c8d9972886cb54a8)) +* **audio:** keep the DSD seek offset exact ([dd70a23](https://github.com/InstaZDLL/WaveFlow/commit/dd70a23ba1269bc4455aff1628cc781077aeb5c6)) +* **audio:** keep the output pin under the lock that replaces the stream ([401f51a](https://github.com/InstaZDLL/WaveFlow/commit/401f51ad5341403d8ef745fbbaf9ce0590824a89)), closes [#630](https://github.com/InstaZDLL/WaveFlow/issues/630) [#629](https://github.com/InstaZDLL/WaveFlow/issues/629) +* **audio:** key the DoP speed pin off speed_dirty, not the value ([d83d23c](https://github.com/InstaZDLL/WaveFlow/commit/d83d23c0f8e25f87212d8708d8be2a21cb2ff44c)) +* **audio:** landing at the end of a stream is a position, not a failure ([7e58101](https://github.com/InstaZDLL/WaveFlow/commit/7e58101c891602961b3829b314a70d728913429b)) +* **audio:** left-align 24-bit samples in the 32-bit WASAPI container ([7e4c842](https://github.com/InstaZDLL/WaveFlow/commit/7e4c84273e80b54e6b7e63efb9cffc4e96415b44)) +* **audio:** left-align 24-bit samples in the 32-bit WASAPI container ([2192622](https://github.com/InstaZDLL/WaveFlow/commit/21926222293e46d27588a82c7cfc2079c0b74fb4)) +* **audio:** left-align the DoP word in the padded WASAPI container ([44fe37d](https://github.com/InstaZDLL/WaveFlow/commit/44fe37d8f53e8a32c97e71ac34ae5da179cbf282)) +* **audio:** list the absent pinned device and guard the deliberate reopen ([3c62bd2](https://github.com/InstaZDLL/WaveFlow/commit/3c62bd2cee257593139257df85c6a8ce3c695cd7)) +* **audio:** park only library tracks idle after a paused device loss, on their own profile ([f31c880](https://github.com/InstaZDLL/WaveFlow/commit/f31c8807a907b1a105ba6552e55f653ac06edc7d)) +* **audio:** pass the DoP flag on the remote local-first open ([c710a84](https://github.com/InstaZDLL/WaveFlow/commit/c710a8484a0b84380d660cbe5ac6a5a42e9c04ee)) +* **audio:** pin speed and honour A-B repeat on the DoP path ([03d8220](https://github.com/InstaZDLL/WaveFlow/commit/03d822067a4d050209d2d0a8d12583a54c7e963a)) +* **audio:** read both device names under one lock ([5fb35b4](https://github.com/InstaZDLL/WaveFlow/commit/5fb35b4786e6ac1e2780c12bc736a476681dc1be)) +* **audio:** rebuild the DoP output when the channel count changes ([8f8e8bf](https://github.com/InstaZDLL/WaveFlow/commit/8f8e8bff75094889da8a7a1304bc5fbd3b49fc58)) +* **audio:** refuse the DoP open when the old physical format is unreadable ([ad611bb](https://github.com/InstaZDLL/WaveFlow/commit/ad611bb29a5beb018240b0487620cfea2a9439ca)) +* **audio:** release the device before reopening it exclusively ([7bf3963](https://github.com/InstaZDLL/WaveFlow/commit/7bf39639a351ad177e4d0ebe0f04b3f8b3f0563e)) +* **audio:** release the device before reopening it exclusively ([#604](https://github.com/InstaZDLL/WaveFlow/issues/604)) ([1d54240](https://github.com/InstaZDLL/WaveFlow/commit/1d54240fc23a6cc7f060d2b2dcfd91b4ec42cda6)) +* **audio:** release the old stream before hogging the device on macos ([08f3b5f](https://github.com/InstaZDLL/WaveFlow/commit/08f3b5fbc95b02516e5ff0640382bbeefe429ec1)) +* **audio:** reopen the previous device when a switch that released first cannot open the new one ([3d7b621](https://github.com/InstaZDLL/WaveFlow/commit/3d7b6212f084996358beeb1b4adb8c30877bc9db)) +* **audio:** report a lost CoreAudio device instead of parking on it ([84cf6bd](https://github.com/InstaZDLL/WaveFlow/commit/84cf6bd8c4a253cb0be2074eda20126ac7a6f3ff)) +* **audio:** report the device that opened, not the one that was asked for ([2f0fef8](https://github.com/InstaZDLL/WaveFlow/commit/2f0fef882da90402c59df60c001966674597463b)) +* **audio:** report the device that opened, not the one that was asked for ([885e3a7](https://github.com/InstaZDLL/WaveFlow/commit/885e3a7fd6703047740baac4fbd71fa1dd806951)) +* **audio:** resolve the ALSA card by name and finish short writes ([d6d0879](https://github.com/InstaZDLL/WaveFlow/commit/d6d08796a582f4373903d7ea5df71ce2f45ea027)) +* **audio:** resolve the rebuild's device under the lock it rebuilds with ([d02e590](https://github.com/InstaZDLL/WaveFlow/commit/d02e590d2bc11b02c16872fb2fd68d174fa3a272)) +* **audio:** restore the CoreAudio physical format and watch IsAlive ([23ee71f](https://github.com/InstaZDLL/WaveFlow/commit/23ee71f2675d140d50341d26761c65a97ed3168a)) +* **audio:** restore the CoreAudio physical format and watch IsAlive ([2c6ce07](https://github.com/InstaZDLL/WaveFlow/commit/2c6ce0732c5d4f4be64db802ec216d535596dd00)) +* **audio:** restore the PCM output before a remote or URL load ([184de8f](https://github.com/InstaZDLL/WaveFlow/commit/184de8f503cdeab6e27a416ba47de78cc2c7ade8)) +* **audio:** resume what the decoder holds after a rebuild, and stay put when the device goes away ([5c1d4a3](https://github.com/InstaZDLL/WaveFlow/commit/5c1d4a36120352007d220a03b292d2d2f11e7e18)) +* **audio:** schedule a rebuild when neither the new nor the previous device reopens ([72caf56](https://github.com/InstaZDLL/WaveFlow/commit/72caf5653a5244b8ca9e9e612b39b4d0d828d8e5)) +* **audio:** six findings from the local review of the device sheet ([c07a8cf](https://github.com/InstaZDLL/WaveFlow/commit/c07a8cf77b14da9678ee33ea4ba9a5058f6abaff)) +* **audio:** stamp the DoP marker from one running counter ([0e3d4da](https://github.com/InstaZDLL/WaveFlow/commit/0e3d4da37d17ddc57bba27380afd9d4be2977856)) +* **audio:** stop a dop rate from becoming the next pcm track's preference ([c518dd8](https://github.com/InstaZDLL/WaveFlow/commit/c518dd8af0d74a356d34a1af17f950e10c536c42)) +* **audio:** stop trusting a peak measured by the superseded analysis ([e6ec4d9](https://github.com/InstaZDLL/WaveFlow/commit/e6ec4d9e3d09892a52fb0a17aaf224ac6a38b1c0)) +* **audio:** ten findings from the review of the device batch ([eb45dd8](https://github.com/InstaZDLL/WaveFlow/commit/eb45dd81c53aade76d486323350294110c4157f3)) +* **audio:** try the card before waiting, and name the release reply ([ea6e6bd](https://github.com/InstaZDLL/WaveFlow/commit/ea6e6bddb69240afd56a974fe70be77b7d179394)) +* **audio:** validate Content-Range start byte on a seek 206 ([4b4322e](https://github.com/InstaZDLL/WaveFlow/commit/4b4322e3c89110fbc5a548c144709518bfd699cb)) +* **backup:** a pass that failed on some profiles reported only the wins ([d728a3f](https://github.com/InstaZDLL/WaveFlow/commit/d728a3f29bfd725e2562a996df8017ea7fcbc26f)) +* **backup:** a settings change during a pass defeated the cancel back-off ([5c8fe3e](https://github.com/InstaZDLL/WaveFlow/commit/5c8fe3e5ed265073e2fad403abe091e3f943d95e)) +* **backup:** three findings from the seventh local review pass ([bd2257d](https://github.com/InstaZDLL/WaveFlow/commit/bd2257dde8bdebf5c7a09646e536d35177421625)) +* **canvas:** atomic mp4 publish + profile-scoped Canvas cache ([fe909ff](https://github.com/InstaZDLL/WaveFlow/commit/fe909ff9838870dd5a285c8ca83672a48eebcbba)) +* **canvas:** harden Canvas cache profile isolation + atomic mp4 publish ([d07be8f](https://github.com/InstaZDLL/WaveFlow/commit/d07be8f866cc1e13b9fe2a97554fb7d3b1b8f611)) +* **canvas:** re-validate cache-download redirects (SSRF) + doc canvas world ([10f904b](https://github.com/InstaZDLL/WaveFlow/commit/10f904b2e0ad99a840100dd3ae6184bd17ed4d35)) +* **canvas:** treat an unsafe cache redirect as a hard security failure ([8d87e8c](https://github.com/InstaZDLL/WaveFlow/commit/8d87e8c24e26f416e5acb844ac412d72f5eb3553)) +* **context-menu:** drop a dead tab stop and a mislabelled row ([db09a80](https://github.com/InstaZDLL/WaveFlow/commit/db09a803bbe511b3f1d8fe71aa7700196f5fc497)), closes [#436](https://github.com/InstaZDLL/WaveFlow/issues/436) +* **db:** explain a downgrade before the event loop, not inside it ([a426878](https://github.com/InstaZDLL/WaveFlow/commit/a426878e1bd50b9182e10bd787d16eaedd17094f)) +* **db:** explain a downgrade before the event loop, not inside it ([dd93ead](https://github.com/InstaZDLL/WaveFlow/commit/dd93ead25405863f547e35a2116d2fd20eb2b8b6)), closes [#529](https://github.com/InstaZDLL/WaveFlow/issues/529) +* **db:** explain a downgrade instead of dying on the splash ([8e6c739](https://github.com/InstaZDLL/WaveFlow/commit/8e6c7398a5664dc4a03e88470b7791fc4d2bbc76)) +* **db:** explain the other half of a downgrade instead of panicking ([8a46de1](https://github.com/InstaZDLL/WaveFlow/commit/8a46de1a2c0ca6ba34e069069247437d72187fe8)) +* **db:** stop the pre-flight writing to the database it may refuse ([18abf82](https://github.com/InstaZDLL/WaveFlow/commit/18abf828ba88e39134c9de53f6b69aa93f581cf4)) +* **deezer:** cross-profile-safe cover prune + preserve hash on skipped download ([73b4482](https://github.com/InstaZDLL/WaveFlow/commit/73b44822658dd228433ed509eb3f11b446c55c51)) +* **deezer:** don't let a cover-less cache row block a re-fetch ([#493](https://github.com/InstaZDLL/WaveFlow/issues/493) review) ([94badcf](https://github.com/InstaZDLL/WaveFlow/commit/94badcf728943e0cd46c94fb911ca48b09821401)) +* **deezer:** only disk-cache an album cover when the album lacks local art ([#493](https://github.com/InstaZDLL/WaveFlow/issues/493)) ([5281d9d](https://github.com/InstaZDLL/WaveFlow/commit/5281d9d2ed9e356e63974dc45f68b0dd68ba3656)) +* **deezer:** only disk-cache an album cover when the album lacks local art ([#493](https://github.com/InstaZDLL/WaveFlow/issues/493)) ([ea14ec5](https://github.com/InstaZDLL/WaveFlow/commit/ea14ec579934a2ac5d1db409407cf5d146120685)) +* **deezer:** read the refusal deezer sends with http 200 ([82dd905](https://github.com/InstaZDLL/WaveFlow/commit/82dd905d2bb84266be3dc8a98dcb2caa3abbb327)) +* **deps:** force fast-uri >= 3.1.5 and resync the Flatpak sources ([e0ee50c](https://github.com/InstaZDLL/WaveFlow/commit/e0ee50ced6092a9c174c2aee4f8ab503f10af885)) +* **deps:** hold both windows names, not just windows-core majors ([4475bde](https://github.com/InstaZDLL/WaveFlow/commit/4475bde79ca96f1a54e36d04f1a2f5c740f627ee)) +* **deps:** hold both windows names, not just windows-core majors ([346fd6d](https://github.com/InstaZDLL/WaveFlow/commit/346fd6d74d734cee643d81a7d4ec35f611cbd6c9)) +* **edit:** refuse a year no tag can hold instead of clamping it ([21d46cd](https://github.com/InstaZDLL/WaveFlow/commit/21d46cdddebd384856bdd19a809790335a29fb53)) +* four defects before the 1.8.0 beta — output pin, exclusive-toggle race, splash handoff, motion covers ([c65ee6d](https://github.com/InstaZDLL/WaveFlow/commit/c65ee6df9e965ee18ff2f9b88c7402acf37c22d6)) +* **inventory:** reach the title flag through a subquery ([2f9c441](https://github.com/InstaZDLL/WaveFlow/commit/2f9c44167456588faeb0b8ed8df7e15d2c5ded73)) +* keep a paused session paused on device loss, refresh lists after a folder rescan, delete from manage mode ([a504dfd](https://github.com/InstaZDLL/WaveFlow/commit/a504dfd3c2a5b4bae7d4eb3d7b6ee775c73cd493)) +* **library:** a half star comes back as the half star it was ([975210f](https://github.com/InstaZDLL/WaveFlow/commit/975210fb0ea3c3b670a85b0d9e9f2c65c5a55045)) +* **library:** a plain click on a server track plays it ([e994838](https://github.com/InstaZDLL/WaveFlow/commit/e994838063f0037f36415396f110639a5dba5026)) +* **library:** a rating is the whole popularimeter shape or it is nothing ([421d877](https://github.com/InstaZDLL/WaveFlow/commit/421d877ffaa2475633b1bc3d43832f2bf625a036)) +* **library:** a reset left its deletion permission behind ([a43b0a7](https://github.com/InstaZDLL/WaveFlow/commit/a43b0a73aabeebced3dc5b09eeb461bb36891214)) +* **library:** a server album never rendered at all ([c4b1dfa](https://github.com/InstaZDLL/WaveFlow/commit/c4b1dfa32718e9bd2afc00c9a511b42e27c0b850)) +* **library:** a stopped rescan no longer starts the next library ([7ca1bf3](https://github.com/InstaZDLL/WaveFlow/commit/7ca1bf33dee32af6c4addc06897ee794c7663ddf)) +* **library:** column edits composed instead of overwriting each other ([b243427](https://github.com/InstaZDLL/WaveFlow/commit/b243427a1a13501822a9979295d4fd4de2f8de19)) +* **library:** convert rows to tracks instead of casting their ids ([d75bf69](https://github.com/InstaZDLL/WaveFlow/commit/d75bf691b5fc62e438631936b172c9fbf406700e)) +* **library:** dock the track table header and keep the table as wide as its columns ([954b465](https://github.com/InstaZDLL/WaveFlow/commit/954b465e03b794dccff02eb0c95077c8c964357f)) +* **library:** eight findings from the fourth local review pass ([0c17210](https://github.com/InstaZDLL/WaveFlow/commit/0c172102351ad34d5035483c6cf6df589ea92bc5)) +* **library:** eight findings from the review of 76bdbc41 ([a764bef](https://github.com/InstaZDLL/WaveFlow/commit/a764befcecbbe945b72a0177230d6e8ba8f7cf87)) +* **library:** eleven findings from the fifth local review pass ([7e5f9b4](https://github.com/InstaZDLL/WaveFlow/commit/7e5f9b4f885cd05175dad6357c6fdc33a5717b97)) +* **library:** eleven findings from the tenth local review pass ([055f5b1](https://github.com/InstaZDLL/WaveFlow/commit/055f5b17888b50bca9463678bd015aa6012ea791)) +* **library:** fifteen findings from the review of [#648](https://github.com/InstaZDLL/WaveFlow/issues/648) ([a049330](https://github.com/InstaZDLL/WaveFlow/commit/a049330d2693efbe80e23c92b449f441681bfde6)) +* **library:** five findings from the fifteenth local review pass ([c48eb73](https://github.com/InstaZDLL/WaveFlow/commit/c48eb73b339858a3e999115e45e3cd6eb4435492)) +* **library:** five findings from the local review of the folder browser ([49ef4cc](https://github.com/InstaZDLL/WaveFlow/commit/49ef4ccf704b2f2e9bcf1161db5d7a477eee88ab)) +* **library:** five findings from the review of 6394fe32 ([ad6ea6d](https://github.com/InstaZDLL/WaveFlow/commit/ad6ea6d1fafc9fe1420f9754fda08f979ea4f160)) +* **library:** four findings from the sixteenth local review pass ([54dc11d](https://github.com/InstaZDLL/WaveFlow/commit/54dc11db87c9ffe7d468526f33cabd8dcae377f5)) +* **library:** four findings from the sixth local review pass ([5e19dbb](https://github.com/InstaZDLL/WaveFlow/commit/5e19dbb7b643251e147d09e36a2ed85d4c67d0c8)) +* **library:** four findings from the twenty-sixth local review pass ([e5a46f1](https://github.com/InstaZDLL/WaveFlow/commit/e5a46f171581544ac732d61266cfe315d27b8077)) +* **library:** give the grids a real button instead of a role on the card ([01b6544](https://github.com/InstaZDLL/WaveFlow/commit/01b65441de4fed9665c48169aa93b90f8bbb4921)) +* **library:** keep the column picker on screen and hold onto focus ([5bb1826](https://github.com/InstaZDLL/WaveFlow/commit/5bb1826f853240cee80d2e533994a48dc4c3109c)) +* **library:** keep the missing-last rule out of the sort direction ([bfebc7c](https://github.com/InstaZDLL/WaveFlow/commit/bfebc7c2b5dea552049d35fc59fc6f3b2ee8df0c)) +* **library:** keep the source filter reachable when it empties the list ([ac5c95f](https://github.com/InstaZDLL/WaveFlow/commit/ac5c95fa4d6ae59744cc6573c76c7b6eff097979)) +* **library:** make every reader of the snapshot wait for it, not just the render ([a329b1b](https://github.com/InstaZDLL/WaveFlow/commit/a329b1b7e3582068c082886d80bbfb5da1f7b674)) +* **library:** nine findings from the twelfth local review pass ([a88febf](https://github.com/InstaZDLL/WaveFlow/commit/a88febf1c522ab286dacf893b2ef1e717e47024d)) +* **library:** nineteen findings from the local review of lot D ([84f7bad](https://github.com/InstaZDLL/WaveFlow/commit/84f7bad34683c5935a49fca93d5315dea7dfa1c3)) +* **library:** one shared lock for every rescan control ([bca21df](https://github.com/InstaZDLL/WaveFlow/commit/bca21dfaebdcf996e1a53006eb89075961bea175)), closes [#457](https://github.com/InstaZDLL/WaveFlow/issues/457) +* **library:** one unreadable file no longer costs a folder its fast path ([8e72c78](https://github.com/InstaZDLL/WaveFlow/commit/8e72c7847acc6b4f6225f80ea43040e20472077f)) +* **library:** reach the playlists empty state instead of a missing key ([83ea6b2](https://github.com/InstaZDLL/WaveFlow/commit/83ea6b279955e541545c52ef443dcbf67c8c9b77)), closes [#461](https://github.com/InstaZDLL/WaveFlow/issues/461) +* **library:** refresh the lists after rescanning a single folder ([59b20e7](https://github.com/InstaZDLL/WaveFlow/commit/59b20e753ea51824ad654710cee7e6100156d7af)) +* **library:** rescanning an AIFF deleted its custom tags ([beb845b](https://github.com/InstaZDLL/WaveFlow/commit/beb845bfdd013662349c643bac41b0b923eff1e2)) +* **library:** seven findings from the twenty-fourth local review pass ([6673c60](https://github.com/InstaZDLL/WaveFlow/commit/6673c60e5042dc22af612833edbcfe0313a671d1)) +* **library:** six findings from the eighteenth local review pass ([81361f5](https://github.com/InstaZDLL/WaveFlow/commit/81361f5104028a9e7cec67586d7e5dcb4f62ff0d)) +* **library:** six findings from the review of the folder browser and pinyin ([3c514f7](https://github.com/InstaZDLL/WaveFlow/commit/3c514f713fcb6a323029c9799a5f42338ffdeb97)) +* **library:** stopping a scan no longer starts the analysis sweep ([84e9a43](https://github.com/InstaZDLL/WaveFlow/commit/84e9a436af227ecb0b2e03c6430e143681f767f8)) +* **library:** surface scan failures instead of silently succeeding ([0f867fe](https://github.com/InstaZDLL/WaveFlow/commit/0f867feee24748fc8e44c95102c2799a85e411cd)), closes [#457](https://github.com/InstaZDLL/WaveFlow/issues/457) +* **library:** ten findings from the ninth local review pass ([cd7f0bf](https://github.com/InstaZDLL/WaveFlow/commit/cd7f0bfd2dbe8b0ac69428d9a82997798f602923)) +* **library:** the Added column was tens of thousands of years out ([e60c183](https://github.com/InstaZDLL/WaveFlow/commit/e60c183c434d748ab392bf8c12263208b4e6b795)) +* **library:** the same two slips again, in the places they moved to ([c313e79](https://github.com/InstaZDLL/WaveFlow/commit/c313e79b3f2713a3425291e57ffde90d59d9f15e)) +* **library:** the track rows lost their grid when the columns became dynamic ([b5dacc6](https://github.com/InstaZDLL/WaveFlow/commit/b5dacc6e69d72f5075cb4b913a0b3271b8eee47c)) +* **library:** three findings from the fourteenth local review pass ([c33c224](https://github.com/InstaZDLL/WaveFlow/commit/c33c2241a93d9c0647b18995e442947e7e4a3f5f)) +* **library:** three findings from the thirteenth local review pass ([7964f90](https://github.com/InstaZDLL/WaveFlow/commit/7964f9059f4b45e20a9a872a429ef568d0cb5e33)) +* **library:** three findings from the twentieth local review pass ([3b7f1b9](https://github.com/InstaZDLL/WaveFlow/commit/3b7f1b97d8548f8e4266783039c36a8ddb6f9f16)) +* **library:** three findings from the twenty-second local review pass ([8fa4802](https://github.com/InstaZDLL/WaveFlow/commit/8fa480248a31905c2dd1c4222656f2b85a5e8878)) +* **library:** three small ones the review was right about ([bd70709](https://github.com/InstaZDLL/WaveFlow/commit/bd70709edc4ce75d3ed32adb8dafc2b1e0390ef2)) +* **library:** tidy the retry block I just wrote ([f73f621](https://github.com/InstaZDLL/WaveFlow/commit/f73f6219db8c7bdad304eab126810a005866a933)) +* **library:** treat another album's snapshot as absent, not as approximate ([462013e](https://github.com/InstaZDLL/WaveFlow/commit/462013ea29866982054bab97dd6115b25df17b94)) +* **library:** two findings from the eleventh local review pass ([6394fe3](https://github.com/InstaZDLL/WaveFlow/commit/6394fe322278ceca79711aee0037fd3415b6d9cb)) +* **library:** two findings from the nineteenth local review pass ([9b54b44](https://github.com/InstaZDLL/WaveFlow/commit/9b54b4419dc030cb5c542e26fb2e0f024ff6b40b)) +* **library:** two findings from the review of [#648](https://github.com/InstaZDLL/WaveFlow/issues/648) ([8448b38](https://github.com/InstaZDLL/WaveFlow/commit/8448b3809afc03a1ce54493051d0a22ba1fc15c7)) +* **library:** two findings from the seventeenth local review pass ([a12821e](https://github.com/InstaZDLL/WaveFlow/commit/a12821e58394803eb6af1cdb6b8decb7bbed5425)) +* **library:** two findings from the twenty-fifth local review pass ([03fb73e](https://github.com/InstaZDLL/WaveFlow/commit/03fb73e208d3f4640b0cef635a6a3232e9ff34ce)) +* **library:** two findings from the twenty-first local review pass ([ab15382](https://github.com/InstaZDLL/WaveFlow/commit/ab15382bdcc4e6aa5c070f50a6e74ae8aa81dcb9)) +* **library:** two findings from the twenty-third local review pass ([d3240ce](https://github.com/InstaZDLL/WaveFlow/commit/d3240cede18c260622db01b719c39f9b98b692d0)) +* **locales:** a korean reviewer's pass over the whole file ([2263691](https://github.com/InstaZDLL/WaveFlow/commit/22636919d8ee7c07bbfe4a2a190f7703d4826d29)) +* **locales:** address the reader informally everywhere in turkish ([ee9bd53](https://github.com/InstaZDLL/WaveFlow/commit/ee9bd538f5059003a24c76406b54449bbe761717)) +* **locales:** apply the arabic native review ([48860d4](https://github.com/InstaZDLL/WaveFlow/commit/48860d4c030db3d4abe46625de112ed551c2a7b6)) +* **locales:** apply the arabic native review ([4f60dfd](https://github.com/InstaZDLL/WaveFlow/commit/4f60dfd043117a349a545d0407c88b50d5e6a454)) +* **locales:** apply the simplified chinese reviewer's corrections ([feb64a9](https://github.com/InstaZDLL/WaveFlow/commit/feb64a9bd96e351d3324edbd174091323fe79c2d)) +* **locales:** apply the taiwanese reviewer's two corrections ([01befad](https://github.com/InstaZDLL/WaveFlow/commit/01befad2e26bc263f747474802744f3db7213c14)) +* **locales:** bio hint, plural counters, and english tab ids ([e3b6494](https://github.com/InstaZDLL/WaveFlow/commit/e3b64940759a9eaaef9d7d5968646271f088ebbe)) +* **locales:** call the A-B loop a loop everywhere, including in english ([803d958](https://github.com/InstaZDLL/WaveFlow/commit/803d95826b69a260bef98dffe44275625dbb2000)) +* **locales:** call the catalogue's copy a copy in simplified chinese and japanese ([2d9bce5](https://github.com/InstaZDLL/WaveFlow/commit/2d9bce560d488ce580c98da10d59701bbda757de)) +* **locales:** call the catalogue's copy a copy in turkish and russian ([c296319](https://github.com/InstaZDLL/WaveFlow/commit/c296319f9aec8a6c0055ef1fc1bde032bec0db37)) +* **locales:** call the server catalogue's copy a copy, in korean too ([8e46696](https://github.com/InstaZDLL/WaveFlow/commit/8e466965dc3584927101e1f839faf77cc4e7b8e0)) +* **locales:** call the server catalogue's local copy a copy, in the source ([f87f2f1](https://github.com/InstaZDLL/WaveFlow/commit/f87f2f1edb5e8f7f15357acbba772c3e07f8d9e2)) +* **locales:** clear the mainland forms and the faux-amis in traditional chinese ([07075c7](https://github.com/InstaZDLL/WaveFlow/commit/07075c7348bf79bd922221915f0063630b54a4cb)) +* **locales:** drop the plural siblings the dead-key sweep could not see ([a3352f0](https://github.com/InstaZDLL/WaveFlow/commit/a3352f08925d1758d39461e505fcfd82f9a339e2)) +* **locales:** dutch time windows say afgelopen, like the rest of the file ([176cbe2](https://github.com/InstaZDLL/WaveFlow/commit/176cbe2e5a0742bf07381a0978bdf3e34bf16b9e)) +* **locales:** fix the bio hint, the counters and the french tab ids ([2757a5e](https://github.com/InstaZDLL/WaveFlow/commit/2757a5ef1715f893026b35d2c396b7114dcb552c)) +* **locales:** give dutch one word per thing, and drop the french spacing ([fb176bc](https://github.com/InstaZDLL/WaveFlow/commit/fb176bc7fa1a44b94c4beeed6f19912fc585b70d)) +* **locales:** give the five single-category locales their missing plural keys ([653e26e](https://github.com/InstaZDLL/WaveFlow/commit/653e26ec3605a779ca226552499ea8d208e73f3e)) +* **locales:** give turkish its own word for native, and one for the queue ([6ecfa37](https://github.com/InstaZDLL/WaveFlow/commit/6ecfa379e6260c709e35acbf23b8ddad9280ad84)) +* **locales:** let the german liked page agree with its own buttons ([091aa3a](https://github.com/InstaZDLL/WaveFlow/commit/091aa3ac94e20c69c61a60e1f44f7dc4d1c8f27c)) +* **locales:** one korean word for a piece of music ([197cbdd](https://github.com/InstaZDLL/WaveFlow/commit/197cbdd80167e7f1088696670986dc2d9c97cb6c)) +* **locales:** one word each for a playlist, a song and a copy in indonesian ([d79e820](https://github.com/InstaZDLL/WaveFlow/commit/d79e8205e8a6f1999fba3ee3efd4fbe7daf53511)) +* **locales:** one word for a biography in japanese, and drop the translationese ([cb76742](https://github.com/InstaZDLL/WaveFlow/commit/cb76742fac516378c7f54ce17a6b8c46ada78773)) +* **locales:** one word for a cover and one for a song in japanese ([88ade75](https://github.com/InstaZDLL/WaveFlow/commit/88ade75ac64308a9e0fdf308021fd61e3e466981)) +* **locales:** one word for an artist, and one way to address the reader in traditional chinese ([20d0157](https://github.com/InstaZDLL/WaveFlow/commit/20d015701c5a050365517d3482aa58872201982f)) +* **locales:** one word for an artist's biography in korean ([26a325c](https://github.com/InstaZDLL/WaveFlow/commit/26a325c80f936b8003f8863b34e0b2da24874f36)) +* **locales:** one word for the musical key in arabic, and one for a track ([bb43041](https://github.com/InstaZDLL/WaveFlow/commit/bb43041f552ce52bbdc8c97c65fe0a8f68357836)) +* **locales:** point the lyrics onboarding at the category that holds it ([905741b](https://github.com/InstaZDLL/WaveFlow/commit/905741bc3f9b8891a97222b0c3b6ac673bb96087)) +* **locales:** remove the spotify strings from all seventeen files ([42da9b3](https://github.com/InstaZDLL/WaveFlow/commit/42da9b33638393785e0a0fb896b61a88d47e0216)) +* **locales:** repair six traditional chinese strings the last pass broke ([5e03609](https://github.com/InstaZDLL/WaveFlow/commit/5e03609038d800301bed457f16f1a8a6d6af9791)) +* **locales:** say monochrome where the english said mono ([8260fec](https://github.com/InstaZDLL/WaveFlow/commit/8260fec53c61b7a57fbe06fbf1049616e386d73d)) +* **locales:** say what <name>.jpg meant instead of writing it in brackets ([33e3d0b](https://github.com/InstaZDLL/WaveFlow/commit/33e3d0bea1c85cf8f2c0bf90109a5864c64e129c)) +* **locales:** settle both portugueses, each one checked against the other ([bc936d4](https://github.com/InstaZDLL/WaveFlow/commit/bc936d4815429e1a6f39731cce057f5af75aa262)) +* **locales:** settle the french, which three reviewers read and two sent twice ([35a28b3](https://github.com/InstaZDLL/WaveFlow/commit/35a28b3f2ad48a9f4d56bf9d6b26ec87a8a5119d)) +* **locales:** settle the hindi two reviewers read separately ([fa8c245](https://github.com/InstaZDLL/WaveFlow/commit/fa8c2456e2ec860340c579aaf459e30176b22cfc)) +* **locales:** settle the italian two reviewers read separately ([3b036a3](https://github.com/InstaZDLL/WaveFlow/commit/3b036a3f985a476aff91e5fc5b0494a1b8829335)) +* **locales:** settle the japanese a reviewer read line by line ([eb53e9b](https://github.com/InstaZDLL/WaveFlow/commit/eb53e9be5d856364d9e8f90ab95d477257d9b7fe)) +* **locales:** settle the korean terminology a reviewer called ([e008b4e](https://github.com/InstaZDLL/WaveFlow/commit/e008b4e15cdcf52725a782748509645684cece77)) +* **locales:** settle the russian a reviewer read line by line ([a090caf](https://github.com/InstaZDLL/WaveFlow/commit/a090caf6f148952e669c71aa6a3a30981c71baad)) +* **locales:** settle the simplified chinese a reviewer read line by line ([725c4ee](https://github.com/InstaZDLL/WaveFlow/commit/725c4eecc479a5a6b339b6843c84571357209c6f)) +* **locales:** settle the spanish, where the two reviewers disagreed twice ([f5e54a5](https://github.com/InstaZDLL/WaveFlow/commit/f5e54a5c62909223ea0591930e4d3252d39f1857)) +* **locales:** settle the traditional chinese a reviewer read line by line ([54d3976](https://github.com/InstaZDLL/WaveFlow/commit/54d3976b7c8e9ad0a4c7c841e7f23eb2dea57529)) +* **locales:** settle the turkish a reviewer read line by line ([5acdc74](https://github.com/InstaZDLL/WaveFlow/commit/5acdc74f6abc75240378dae2d95051a4de2a18bd)) +* **locales:** spell the playlist and the library one way in korean ([357218c](https://github.com/InstaZDLL/WaveFlow/commit/357218c51536d3d087f15fa9d640894829c698ac)) +* **locales:** stop four locales blaming the server for the app being old ([ffc328d](https://github.com/InstaZDLL/WaveFlow/commit/ffc328dd9f868858f4000de7630d66b368e24c15)) +* **locales:** stop the dutch interface personifying its own objects ([6bb40ba](https://github.com/InstaZDLL/WaveFlow/commit/6bb40bad9db0ae466074fa4d61d38b223964835d)) +* **locales:** the german hint was missing the noun it selects ([7a3c713](https://github.com/InstaZDLL/WaveFlow/commit/7a3c7132316ccc1c52062ad91efa955925afc250)) +* **locales:** the last formal German string ([e9bd5e1](https://github.com/InstaZDLL/WaveFlow/commit/e9bd5e107d84851f0621cdda147e51f10a691fca)) +* **locales:** the turkish progress-bar label named the wrong gesture ([32f77af](https://github.com/InstaZDLL/WaveFlow/commit/32f77afb0f3b122419cadb253dde1c97b1417f9a)) +* **locales:** use one word for "library" in german, and one form of address ([ba3cd2a](https://github.com/InstaZDLL/WaveFlow/commit/ba3cd2a578b4ae739779003070397e7d70ec7780)) +* **locales:** use one word for "library" in turkish and russian ([f4da8de](https://github.com/InstaZDLL/WaveFlow/commit/f4da8de3588e4e066d94b00a8841425321d33047)) +* **locales:** use one word for "library" in turkish and russian ([7e6c3af](https://github.com/InstaZDLL/WaveFlow/commit/7e6c3afaa0e372bd33bb48a8f905ca91cec9218f)) +* **locales:** use one word for a track in french, and one in english ([d347ad5](https://github.com/InstaZDLL/WaveFlow/commit/d347ad5213f26419a46c010ec56f7e220c2fd756)) +* **locales:** use one word per thing in simplified chinese ([3bf26a4](https://github.com/InstaZDLL/WaveFlow/commit/3bf26a4e8e37324cf14287ca79ad5025559c9fd6)) +* **lyrics:** a sidecar the user placed beats a description we guessed at ([d450169](https://github.com/InstaZDLL/WaveFlow/commit/d450169195cc1ff50c7dc5e006fd2563be0d1ed3)) +* **lyrics:** a TTML document with a malformed attribute is not synced ([a130c61](https://github.com/InstaZDLL/WaveFlow/commit/a130c61817cbe3e45d79c1d19e86b6aba4812fc0)) +* **lyrics:** carry the fill across speed changes, stop at a full word ([23045ab](https://github.com/InstaZDLL/WaveFlow/commit/23045ab1f3e53da669e3a4b1421e89abd2124ab9)) +* **lyrics:** clearing the lyrics is not a TTML write ([4f7b7b6](https://github.com/InstaZDLL/WaveFlow/commit/4f7b7b681639d442d4b75855493edfeb06b36501)) +* **lyrics:** convert only documents rooted at tt ([cc70c56](https://github.com/InstaZDLL/WaveFlow/commit/cc70c56636a999383f1eee13827c3fc6b61a6407)) +* **lyrics:** drop the closing flag when the close request itself fails ([8183a16](https://github.com/InstaZDLL/WaveFlow/commit/8183a16c005f6a776096cc5b22bdce43853eb8d0)) +* **lyrics:** fail an open that outlasts the close wait instead of showing the closing window ([f6a2093](https://github.com/InstaZDLL/WaveFlow/commit/f6a20936de3859945dd0ee52ee819ab95ebf89b8)) +* **lyrics:** fit desktop lyrics lines, stop clipping descenders, and give the Wayland workaround ([3e2e4b5](https://github.com/InstaZDLL/WaveFlow/commit/3e2e4b5904542c21f01d57558815208529f2b56b)) +* **lyrics:** fit desktop lyrics lines, stop clipping descenders, and give the Wayland workaround ([8a6a2dc](https://github.com/InstaZDLL/WaveFlow/commit/8a6a2dcec4dffe84b28cbc06a34966638a673182)) +* **lyrics:** judge synced by what the renderer can follow, not by the format label ([65ff84e](https://github.com/InstaZDLL/WaveFlow/commit/65ff84e443a4aa8951ba87896d8a2a2077d5cbde)) +* **lyrics:** keep looking for synced lyrics after an unsynced plugin answer ([481f86c](https://github.com/InstaZDLL/WaveFlow/commit/481f86c1e3dc09781557a1ff6b610a06a08e6d6a)) +* **lyrics:** keep the fill responsive to seeks inside the active word ([8dfdc5c](https://github.com/InstaZDLL/WaveFlow/commit/8dfdc5ce12ca23f7a230df3c87c3185473186d53)) +* **lyrics:** re-anchor the fill when playback resumes ([15de90c](https://github.com/InstaZDLL/WaveFlow/commit/15de90cec35665aa8cfc094e2c56840d2bf4c492)) +* **lyrics:** refit a desktop lyrics line on any text change and never round an overflow away ([ec2de7f](https://github.com/InstaZDLL/WaveFlow/commit/ec2de7f82fdab51f92fd68aa9d7da24c4489cfdd)) +* **lyrics:** refit desktop lyrics lines once the fonts have loaded ([cb38679](https://github.com/InstaZDLL/WaveFlow/commit/cb386796aa3f0a363a9896295c8d2c47d2f36942)) +* **lyrics:** reset lyrics context on remote transitions too ([9e353e1](https://github.com/InstaZDLL/WaveFlow/commit/9e353e1b3735a2dadad6f9110837ee7b72924f0c)) +* **lyrics:** retry LRCLIB fuzzily before the catch-all providers ([b733769](https://github.com/InstaZDLL/WaveFlow/commit/b733769f552d3bc03e9e136ef6165598d621b946)), closes [#463](https://github.com/InstaZDLL/WaveFlow/issues/463) +* **lyrics:** serialize desktop lyrics open and close, and trust broadcasts over the first read ([fb991b7](https://github.com/InstaZDLL/WaveFlow/commit/fb991b713ca39c5640973ab5d0cb1cf0293809b8)) +* **lyrics:** show a plugin's name on the source badge, not its id ([0a93551](https://github.com/InstaZDLL/WaveFlow/commit/0a935516e7e87ac23da1b85c00baf06f41c9146c)) +* **lyrics:** show a plugin's name on the source badge, not its id ([9a65158](https://github.com/InstaZDLL/WaveFlow/commit/9a651586b29d4cc8088a33b3e7df7b3653c1d417)) +* **lyrics:** show untimed TTML as plain lyrics instead of its markup ([a1e47d6](https://github.com/InstaZDLL/WaveFlow/commit/a1e47d631c0637280cf6c420515d1d827bb7f2d2)) +* **lyrics:** the returned bundle must match the cached one ([2a5df51](https://github.com/InstaZDLL/WaveFlow/commit/2a5df51ae5f3151ba703917b6edeaa807d35e56b)) +* **lyrics:** the source badge must not render a translation key ([7a91b44](https://github.com/InstaZDLL/WaveFlow/commit/7a91b44f0051b91937099493210b966ab618afef)) +* **lyrics:** the synced tag follows what was saved, and is written safely ([3380e43](https://github.com/InstaZDLL/WaveFlow/commit/3380e43aa75c4ef3456f3bd7ab971f540cf2c71c)) +* **lyrics:** wait for a closing overlay before reopening, and reach its buttons from the keyboard ([511e981](https://github.com/InstaZDLL/WaveFlow/commit/511e9811766ba095755b2f982f6e3853e8d8704a)) +* **macos:** allow unsigned executable memory for the wasmtime host ([4bcbb89](https://github.com/InstaZDLL/WaveFlow/commit/4bcbb89fe9a9c0cefa5524e7d69d1a984a3649fa)) +* **maintenance:** fail the cover prune if the profile list can't be read ([1b12cc6](https://github.com/InstaZDLL/WaveFlow/commit/1b12cc6829235b70364acc04933729660ceb109c)) +* **mini-player:** announce the transport controls in the user's language ([4fb4fda](https://github.com/InstaZDLL/WaveFlow/commit/4fb4fda454732a39266eb7d954691570cc8b15c2)) +* **mini-player:** draw square bar caps where roundRect is missing ([16afb40](https://github.com/InstaZDLL/WaveFlow/commit/16afb40c413e943c056010c9218c0eb3ca6abe6f)) +* **motion-cache:** strip trailing-dot hosts in SSRF guard + allow 10 redirects ([fff142d](https://github.com/InstaZDLL/WaveFlow/commit/fff142d4e8228de620a3d93db20b2b5903b341dc)) +* **motion-cache:** validate the initial url inside cache_mp4 (defence-in-depth) ([198ba47](https://github.com/InstaZDLL/WaveFlow/commit/198ba47591e55da1352fb4e97ba8fa955df4b8f4)) +* **mpd:** address CodeRabbit review — protocol conformance + robustness ([#471](https://github.com/InstaZDLL/WaveFlow/issues/471)) ([35c768d](https://github.com/InstaZDLL/WaveFlow/commit/35c768d51bd8180a808ee2c61bc5a71c8b919a78)) +* **mpd:** consistent snapshots + atomic writes + hardened MPD settings UI ([#471](https://github.com/InstaZDLL/WaveFlow/issues/471)) ([e654ec0](https://github.com/InstaZDLL/WaveFlow/commit/e654ec0d2931f4ad40f3134b8abb542079d7dba2)) +* **mpd:** reject `single oneshot` instead of persisting it as durable ([#471](https://github.com/InstaZDLL/WaveFlow/issues/471)) ([4d0b9fe](https://github.com/InstaZDLL/WaveFlow/commit/4d0b9fe3096f6d7faefc2a3e1b9ecdd03fb79343)) +* **mpd:** seek-in-place + serialized settings saves + UI options sync ([#471](https://github.com/InstaZDLL/WaveFlow/issues/471)) ([473837d](https://github.com/InstaZDLL/WaveFlow/commit/473837dacb23a3ba2cd0de984821b97557ea7df0)) +* **now-playing:** dedupe artist enrichment + gate slideshow fetch ([#466](https://github.com/InstaZDLL/WaveFlow/issues/466)) ([1d04cce](https://github.com/InstaZDLL/WaveFlow/commit/1d04cce92e5c78a6a5c79652225f15fb6124eb0b)) +* **now-playing:** exclude radio/Spotify tracks from the cover slideshow ([#466](https://github.com/InstaZDLL/WaveFlow/issues/466)) ([ec41261](https://github.com/InstaZDLL/WaveFlow/commit/ec41261bdc2b61fc72428d83d5840a753e708a70)) +* **now-playing:** tag panel artist image by artist id to avoid a stale flash ([#466](https://github.com/InstaZDLL/WaveFlow/issues/466)) ([c2dc991](https://github.com/InstaZDLL/WaveFlow/commit/c2dc991a3aca50cda32aae971a7b039f017e021d)) +* **playback:** a hand-picked track is not part of the record it landed beside ([f8ba035](https://github.com/InstaZDLL/WaveFlow/commit/f8ba0354af7145d7932338ee95dd2e25b9f2dcfa)) +* **playback:** a session built from whole records is given the album gain ([be8390d](https://github.com/InstaZDLL/WaveFlow/commit/be8390dd2a300cbe338eecdd56213057eea80ad0)) +* **playback:** eight findings from the local review ([8af4a6f](https://github.com/InstaZDLL/WaveFlow/commit/8af4a6f2ae688597f07eeab8c86ccaabd0e03f1e)) +* **playback:** five findings from the review of [#646](https://github.com/InstaZDLL/WaveFlow/issues/646) ([c3fb3f8](https://github.com/InstaZDLL/WaveFlow/commit/c3fb3f8f414d16365a4a4323e28721599bdec8b7)) +* **playback:** four findings from the seventh local review pass ([91de657](https://github.com/InstaZDLL/WaveFlow/commit/91de6578957bacf7f68dc21af443a3d4cc680434)) +* **playback:** four findings from the third local review pass ([c1e7c81](https://github.com/InstaZDLL/WaveFlow/commit/c1e7c819ab04dcf475b1b6165d5e4f0743834227)) +* **playback:** six findings from the second local review pass ([4e88dc5](https://github.com/InstaZDLL/WaveFlow/commit/4e88dc5124968677c0a132e3f229ffd50019a1fb)) +* **playback:** two findings from the eighth local review pass ([de2d04d](https://github.com/InstaZDLL/WaveFlow/commit/de2d04d874e64238ebc9349346b0657655256773)) +* **playback:** two findings from the fourth local review pass ([4483cc5](https://github.com/InstaZDLL/WaveFlow/commit/4483cc5e093f24696d84f30e3ea69842abbb2ac3)) +* **playback:** two findings from the sixth local review pass ([f675caf](https://github.com/InstaZDLL/WaveFlow/commit/f675cafcb34215322cc4b948ce20ed0948a012dc)) +* **player:** address the replaygain review findings ([e7efacf](https://github.com/InstaZDLL/WaveFlow/commit/e7efacfe6e6c8f54fcc86b4cc451ec5e84670ace)) +* **player:** allow only one resume at a time ([a748537](https://github.com/InstaZDLL/WaveFlow/commit/a74853777f61c7eef325277ca37352e737e31d04)) +* **player:** await mpd's resume and re-check the state before publishing at launch ([4d5b2a3](https://github.com/InstaZDLL/WaveFlow/commit/4d5b2a3b07c8584433536620cbb79a216855aaf2)) +* **player:** broadcast repeat, shuffle and like to the other window ([c0d4176](https://github.com/InstaZDLL/WaveFlow/commit/c0d4176bbbccdbaa80d6ad0b0b45292ffd791c7d)) +* **player:** broadcast repeat, shuffle and like to the other window ([d4129e6](https://github.com/InstaZDLL/WaveFlow/commit/d4129e62a6fe688d06cbd9dda4a8433754b83011)) +* **player:** claim each load intent at its true origin ([2ffadaa](https://github.com/InstaZDLL/WaveFlow/commit/2ffadaa1953c0c4580905ca3454d14a3fc514d11)) +* **player:** claim the remote session's intent before reading its entries ([e487979](https://github.com/InstaZDLL/WaveFlow/commit/e487979823c7ae5a29a4399c98077bf850db77a3)) +* **player:** gate visualizer color cycle until the profile's value loads ([858b206](https://github.com/InstaZDLL/WaveFlow/commit/858b20679ab60c5a391d3810de9f839b936e38f1)) +* **player:** log a failed setting read, and restore volume with the rest ([d91663c](https://github.com/InstaZDLL/WaveFlow/commit/d91663ccd2247fbd10365760c4f7799947e99631)) +* **player:** never render a video answer from before an invalidation ([b8805d1](https://github.com/InstaZDLL/WaveFlow/commit/b8805d19f041430891bafd6c3702c6e3675e2773)) +* **player:** order playback loads by the intent that started them ([ef98272](https://github.com/InstaZDLL/WaveFlow/commit/ef98272f5fb84b4f184b68a018eb00c3d521e406)) +* **player:** order playback loads by the intent that started them ([e356c78](https://github.com/InstaZDLL/WaveFlow/commit/e356c7865e79bd24e7bf75731079481fa7c62926)), closes [#622](https://github.com/InstaZDLL/WaveFlow/issues/622) +* **player:** pin the resume point to its profile and write it atomically ([cf10169](https://github.com/InstaZDLL/WaveFlow/commit/cf1016952a437a60f5301d6dba0b3e357d8b059e)) +* **player:** publish loading before handing the resume to the decoder ([68033ef](https://github.com/InstaZDLL/WaveFlow/commit/68033ef265124ec74e26fa56a1ef515f43e39e17)) +* **player:** publish the restored track to the os media controls at launch ([3448aed](https://github.com/InstaZDLL/WaveFlow/commit/3448aedd6dd3b44ede3011c16f586b82077f2b3d)) +* **player:** re-read the pipeline when the stream under it changes ([79be05c](https://github.com/InstaZDLL/WaveFlow/commit/79be05c8746f041a119e4d40770b6e84d9679da8)) +* **player:** read the resume point's pool and profile id under one lock ([bcd9a63](https://github.com/InstaZDLL/WaveFlow/commit/bcd9a6319b8800f2aa71f263e3c2b958e42ed5e3)) +* **player:** read the shuffle mode once per state snapshot ([d4d53cc](https://github.com/InstaZDLL/WaveFlow/commit/d4d53ccc0efcc1baaaac0e7539859adc728dff4e)) +* **player:** restore the profile's audio settings when the profile changes ([0d5dad8](https://github.com/InstaZDLL/WaveFlow/commit/0d5dad833f8bed809e7566cd3a2e0d71323ba1e9)) +* **player:** stamp the snapshot with the track the engine reported ([5d3aca1](https://github.com/InstaZDLL/WaveFlow/commit/5d3aca17cd72601bd0931352c493783b8d7fb5e4)) +* **player:** start the resume point when play comes from mpd or the os media controls ([04f3174](https://github.com/InstaZDLL/WaveFlow/commit/04f317491a8d41d9f8a4bc97c8204b6031d834ea)) +* **player:** start the resume point when play/pause is pressed from idle or ended ([f8445fe](https://github.com/InstaZDLL/WaveFlow/commit/f8445fe6158065c373ca4e5acd9ef6f683a02f08)) +* **player:** stop a profile switch inheriting the previous profile's audio settings ([18d843d](https://github.com/InstaZDLL/WaveFlow/commit/18d843d4e10d3c8e2140f5633302bf266e1c4ad7)) +* **player:** stop a profile switch inheriting the previous profile's audio settings ([ebf899b](https://github.com/InstaZDLL/WaveFlow/commit/ebf899b849dd34a72bf073d48c1651a63139e7bf)), closes [#698](https://github.com/InstaZDLL/WaveFlow/issues/698) +* **player:** stop a torn-down read from silencing the live one ([f137d44](https://github.com/InstaZDLL/WaveFlow/commit/f137d444a5734d15e882ea3b7e77d362b5a0d4e2)) +* **player:** stop badging a shared stream as bit-perfect ([fa25d63](https://github.com/InstaZDLL/WaveFlow/commit/fa25d63c12ab92be2804f3b6a83a83aef800484e)) +* **player:** write the resume point on exit and every ten seconds ([ef77f3d](https://github.com/InstaZDLL/WaveFlow/commit/ef77f3d3b57689acbe8582b5349f2710bd21cffc)) +* **player:** write the resume point on exit and every ten seconds ([6105e4d](https://github.com/InstaZDLL/WaveFlow/commit/6105e4d7e36b9682bead2d53d211f2e41b0267b2)) +* **plugin-host:** dedup a cause against its parent, not the whole buffer ([5a7bff7](https://github.com/InstaZDLL/WaveFlow/commit/5a7bff7be30e2e1014d5a9ce27378ffa9850d5ad)), closes [#452](https://github.com/InstaZDLL/WaveFlow/issues/452) +* **plugin-host:** surface the cause chain behind an http error ([8546324](https://github.com/InstaZDLL/WaveFlow/commit/854632449a6c989464bcb898350c2c3dd6abcf2f)), closes [#452](https://github.com/InstaZDLL/WaveFlow/issues/452) +* **plugins:** bump web-radio to 0.1.2 for the rewritten description ([5abcf31](https://github.com/InstaZDLL/WaveFlow/commit/5abcf313c8ec4de3c0145b5e1aa0b2fe29201782)) +* **plugins:** busy-gate open-url + reject null badge elements ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443)) ([3a39a0f](https://github.com/InstaZDLL/WaveFlow/commit/3a39a0f04922bdaf253e7e4a79a6ada61f760ecc)) +* **plugins:** clamp track_count to u32 range before narrowing ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443)) ([241e46d](https://github.com/InstaZDLL/WaveFlow/commit/241e46d6a7654313c06bc5d73706913658a3ebb1)) +* **plugins:** five findings from the local review of the v2 world ([702deb4](https://github.com/InstaZDLL/WaveFlow/commit/702deb47640c36f124c68e41ece9e983e82c3b46)) +* **plugins:** gate artist snapshot on permission + validate descriptor JSON ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443)) ([12bba19](https://github.com/InstaZDLL/WaveFlow/commit/12bba19a9efd5e4fec062961ffa6f197fe45e9eb)) +* **plugins:** harden ui view — separate flow tokens, a11y, text validation ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443)) ([a00a217](https://github.com/InstaZDLL/WaveFlow/commit/a00a2173479a2bcd55c74ca96f9e32a9847a22c9)) +* **plugins:** open the sideload folder instead of naming a path nobody can type ([2b5b5b0](https://github.com/InstaZDLL/WaveFlow/commit/2b5b5b0ee3667ce02ce25b0eccbac7216d57c4a5)) +* **plugins:** open the sideload folder instead of naming a path nobody can type ([7ac87ac](https://github.com/InstaZDLL/WaveFlow/commit/7ac87ac10e1f6637ab193b79b41dfea0b9f84906)) +* **plugins:** rewrite web radio's description, translate it, and bump to 0.1.2 ([c8d7a7c](https://github.com/InstaZDLL/WaveFlow/commit/c8d7a7c052bd2105628a0e49b134138642a51266)) +* **plugins:** skip blank entries when resolving a localized string ([4784b4a](https://github.com/InstaZDLL/WaveFlow/commit/4784b4af9be9fc00521f88e8b4b6055a8c2cbcd0)), closes [#440](https://github.com/InstaZDLL/WaveFlow/issues/440) +* **plugins:** validate download_url + install redirects with the SSRF guard ([977635b](https://github.com/InstaZDLL/WaveFlow/commit/977635bdec80d4f1b6ea1d10482c0e71a3b59447)) +* **plugins:** validate ui descriptor tree + loading states + hi grammar ([#443](https://github.com/InstaZDLL/WaveFlow/issues/443)) ([808fa09](https://github.com/InstaZDLL/WaveFlow/commit/808fa09b600a7ee52a589b5956ba814e7d5335b2)) +* **profile:** scope profile_setting reads and writes to a profile ([f1438f2](https://github.com/InstaZDLL/WaveFlow/commit/f1438f29cc6aacfa505b4355a7f25f8dd3d744cf)) +* **profiles:** open the delete confirmation when a profile is tapped in manage mode ([b9a3d63](https://github.com/InstaZDLL/WaveFlow/commit/b9a3d63cb2845ac2d2be1152ea0ac109c813397e)) +* **queue:** every path that builds a queue says what it is made of ([dd27a3a](https://github.com/InstaZDLL/WaveFlow/commit/dd27a3a7c20f5b3623f0ab6ba54b8a61ac952eb1)) +* **radio, tags:** a fetch must not lock the modal, and the coverage line is counted ([f1a9e12](https://github.com/InstaZDLL/WaveFlow/commit/f1a9e12789bcf6fa9114874238d2402c5c57bae4)) +* **radio, tags:** four findings from the local review ([6779a82](https://github.com/InstaZDLL/WaveFlow/commit/6779a82e67564f00e35479e41598e72e148f91c3)) +* **radio:** a guess must not take a pool slot from a measured tempo ([b3a6f3a](https://github.com/InstaZDLL/WaveFlow/commit/b3a6f3a7ba05aa636a50f3617b83ddf5461ab17a)) +* **reconciliation:** address CodeRabbit review ([1c022f3](https://github.com/InstaZDLL/WaveFlow/commit/1c022f327a61df2534609bf7e9dce4d013ce6743)) +* **reconciliation:** address playlist conversion review ([8318ceb](https://github.com/InstaZDLL/WaveFlow/commit/8318ceb48bdcea1855dd0d4d7681a3823b4d4415)) +* **reconciliation:** arbitrate the phase on the empty-remote early return ([acf3098](https://github.com/InstaZDLL/WaveFlow/commit/acf30987f7cde885fe47337ed36398a8188dff70)) +* **reconciliation:** block unavailable local conversions ([a77d686](https://github.com/InstaZDLL/WaveFlow/commit/a77d686cb9ae5931e39290be94309594dc9775f4)) +* **reconciliation:** block unavailable playlist tracks ([330040d](https://github.com/InstaZDLL/WaveFlow/commit/330040d88dffdd196621c4e65dec7bd8d7051142)) +* **reconciliation:** close scan cancel races and listener leak ([be655f2](https://github.com/InstaZDLL/WaveFlow/commit/be655f2b5ebc8a92aaee71fa0f4da3299c09645d)) +* **reconciliation:** make cancel-vs-commit an atomic phase transition ([2cb5437](https://github.com/InstaZDLL/WaveFlow/commit/2cb54377e91226abbc7a9ceb14cf48444a1db7e6)) +* **reconciliation:** revalidate playlist link proofs ([42d6a83](https://github.com/InstaZDLL/WaveFlow/commit/42d6a83ac776429348cf047f3503828d2cf23774)) +* **reconciliation:** roll back reconcile on a cancel during commit phase ([eebdbae](https://github.com/InstaZDLL/WaveFlow/commit/eebdbae484e6df770136df97ad20ac9a48f459db)) +* **reconciliation:** signal already-running scans and cover cancellation ([07bc8c5](https://github.com/InstaZDLL/WaveFlow/commit/07bc8c5fc8879fe1cf4c393c859213a7346b4d0c)) +* **reconciliation:** verify playlist snapshot before commit ([e2055dd](https://github.com/InstaZDLL/WaveFlow/commit/e2055ddcc929c24e64d2f0e47dd1f5f456a8c1a8)) +* **release:** read the section index before trusting readelf's columns ([e26c616](https://github.com/InstaZDLL/WaveFlow/commit/e26c61679bccbc5058854c78c396ebd7393e3886)) +* **release:** unbundle libwayland-client from the AppImage ([807428b](https://github.com/InstaZDLL/WaveFlow/commit/807428bb7467faed0a4b23820ca43ef83191b088)) +* **release:** unbundle libwayland-client from the AppImage ([d368e42](https://github.com/InstaZDLL/WaveFlow/commit/d368e425f957b2b1e3f32cfe6199d8b3606d7a41)) +* **remote-playback:** resume local source after device changes ([a1066ee](https://github.com/InstaZDLL/WaveFlow/commit/a1066eea99311a245f726783a162978c9c9de4b7)) +* **remote-ui:** artwork cache, stale-pass guards, availability hardening ([689b758](https://github.com/InstaZDLL/WaveFlow/commit/689b758870122b96ee6590220eb59069013679eb)) +* **remote-ui:** bound the artwork cache, reset cover on hash change ([7a23585](https://github.com/InstaZDLL/WaveFlow/commit/7a23585f951fabfae34c321a7311493f00d52788)) +* **remote-ui:** update remote artwork before paint ([5b40b36](https://github.com/InstaZDLL/WaveFlow/commit/5b40b3659e4b4222c0087a18d5d2a95cdb4e7441)) +* **remote:** a cache write must not fail the work it was meant to speed up ([2cf2333](https://github.com/InstaZDLL/WaveFlow/commit/2cf233303067b7d4f79761f90e2f0da31e0ad831)) +* **remote:** a working-file marker its own naming function could produce ([2972bc5](https://github.com/InstaZDLL/WaveFlow/commit/2972bc5678cd7d43c2160f50fa0e6213566796c3)) +* **remote:** address CodeRabbit review — correctness batch 1 ([51cf286](https://github.com/InstaZDLL/WaveFlow/commit/51cf286bdad181da3504e1de3c652ce1e8241a28)) +* **remote:** address deferred CodeRabbit findings from [#502](https://github.com/InstaZDLL/WaveFlow/issues/502) ([6221b99](https://github.com/InstaZDLL/WaveFlow/commit/6221b99fc864ac6545b1faeb41b7fac52773a60a)) +* **remote:** address the review of the metadata push ([04a2f33](https://github.com/InstaZDLL/WaveFlow/commit/04a2f3357062f3ce262efcf44873e8d56b12aa3a)) +* **remote:** address the second review round ([f2547ab](https://github.com/InstaZDLL/WaveFlow/commit/f2547abcad663e556d7c36ea99e220b63a8e7dd8)) +* **remote:** annotate RemoteClient lifetime in stream.rs ([41ce018](https://github.com/InstaZDLL/WaveFlow/commit/41ce018d98898650cdc441eeebc174fb3d1b9336)) +* **remote:** back off on socket sync failure, not on a profile switch ([ab71fa0](https://github.com/InstaZDLL/WaveFlow/commit/ab71fa0084b14656486569b4ad77024e400f303c)) +* **remote:** correct counter labels in ar, ja and zh-TW ([63249aa](https://github.com/InstaZDLL/WaveFlow/commit/63249aa947c36ad00307278c2764bce383e9b2aa)) +* **remote:** count navigations in the session revision, not just installs ([650560a](https://github.com/InstaZDLL/WaveFlow/commit/650560a133d0b77e445626db54ccf20c5b77ec03)) +* **remote:** distinguish remote playback from web radio ([c74e3d7](https://github.com/InstaZDLL/WaveFlow/commit/c74e3d7beee27458e2f9d73763f27c222344c720)) +* **remote:** do not install a session whose load is superseded ([8603b1d](https://github.com/InstaZDLL/WaveFlow/commit/8603b1ddac94a37a0407ccadafb2728fb331c480)) +* **remote:** drop a playlist preview the mirror no longer supports ([b550693](https://github.com/InstaZDLL/WaveFlow/commit/b550693b196de4084b8ce3e30e4f0333557190a3)) +* **remote:** end the socket session when a catch-up fails ([0f541ad](https://github.com/InstaZDLL/WaveFlow/commit/0f541adb34a993896ec8973abc6ba97518670c12)) +* **remote:** gate the transcode command on sync_v2 and refuse it offline ([5532534](https://github.com/InstaZDLL/WaveFlow/commit/5532534b33d502b1338e1ed2654cda328f8dc614)) +* **remote:** give a server track the right-click menu it never had ([7969122](https://github.com/InstaZDLL/WaveFlow/commit/7969122d33565fb9363d7ef060246f6ccc20c76c)) +* **remote:** give the account-switch test its NOT NULL cached_at ([d649c4a](https://github.com/InstaZDLL/WaveFlow/commit/d649c4ad0bd5d023316db47a78d6678497f19d58)) +* **remote:** give the feed's fixture the constraints that ship ([977dad9](https://github.com/InstaZDLL/WaveFlow/commit/977dad93d50c432cf970f205281fc60256e8092c)) +* **remote:** honour "also create on the server" from every entry point ([31ea6fb](https://github.com/InstaZDLL/WaveFlow/commit/31ea6fbb5a32814ebab0306fa44f6c40e61f3d99)) +* **remote:** idempotent placeholder resolve, FIFO-safe unreadable rows ([b84ac59](https://github.com/InstaZDLL/WaveFlow/commit/b84ac59b74e2be7a83fa6e53b5c74fd37cc5a468)) +* **remote:** ignore stray callbacks, bound the cached-id lookup ([1900322](https://github.com/InstaZDLL/WaveFlow/commit/1900322aee8ab0e373d3f1a551c7b526da8199fd)) +* **remote:** judge a working file by its name, not by its whole path ([556319a](https://github.com/InstaZDLL/WaveFlow/commit/556319aeaf968f70e28f6a371503c3c454863ddf)) +* **remote:** label an upload candidate with its artist's name ([deaeb78](https://github.com/InstaZDLL/WaveFlow/commit/deaeb78ffd062bc1384b4b3a3d5d71b5ec112d45)) +* **remote:** make giving up on a feed actually re-read what it missed ([483a846](https://github.com/InstaZDLL/WaveFlow/commit/483a8460edbf04b561fc1feff6e632aaa57091ef)) +* **remote:** make the cover cache safe under concurrency and honest on failure ([0b57f53](https://github.com/InstaZDLL/WaveFlow/commit/0b57f5366372bf41b9f4e04b32f067e7562a7361)) +* **remote:** make the server Canvas actually reachable ([729d3c3](https://github.com/InstaZDLL/WaveFlow/commit/729d3c3786545cfc2048669c9a5c0e5ec60e1b2f)) +* **remote:** pin client+pool to one profile, share the rotated token ([32ab652](https://github.com/InstaZDLL/WaveFlow/commit/32ab65294d666311ed7a27d1f8909a6f45e45595)) +* **remote:** pluralize remote counters and fix flagged translations ([56e4be3](https://github.com/InstaZDLL/WaveFlow/commit/56e4be32fbf5b46d7e7ad884f2d608ed569fb934)) +* **remote:** profile-aware socket catch-up, case-insensitive range unit ([096ca33](https://github.com/InstaZDLL/WaveFlow/commit/096ca336610e51614873a273e2eeacc1c620f2d3)) +* **remote:** read a column the track table actually has ([84d42f6](https://github.com/InstaZDLL/WaveFlow/commit/84d42f69b2a4e511accfba14905f8c9a8edc6e5b)) +* **remote:** refresh-and-replay on 401, harden the refresh path ([248a46e](https://github.com/InstaZDLL/WaveFlow/commit/248a46e570fe9e0d80d8fc0b313394ed211026ac)) +* **remote:** refuse an unparseable number instead of clearing the field ([eaa44ba](https://github.com/InstaZDLL/WaveFlow/commit/eaa44ba6b97ecaa49143e20bd60c37e3be58dfe6)) +* **remote:** review batch 1b — clear-after-swap, lyrics fallback ([6c3b789](https://github.com/InstaZDLL/WaveFlow/commit/6c3b7896cbb61bd7dff48789bf405eb5c57b27a4)) +* **remote:** say when a surface is waiting on the catalogue mirror ([01b127d](https://github.com/InstaZDLL/WaveFlow/commit/01b127d6a4db86f944e965b4426c33ae9b5b4d07)) +* **remote:** server lyrics synced only when all lines are timestamped ([2b09347](https://github.com/InstaZDLL/WaveFlow/commit/2b09347bcfeee2a5269e6b30a688da5dbaf75455)) +* **remote:** show remote track cover in the player bar ([8dc4341](https://github.com/InstaZDLL/WaveFlow/commit/8dc43417876cf4bf70c4855462438561791f2a6e)) +* **remote:** six defects in the stream cache, found in review ([5c9b8a3](https://github.com/InstaZDLL/WaveFlow/commit/5c9b8a33b49e1b0459083759391cb281831c1fac)) +* **remote:** socket idle timeout + coalescing, sync/auth robustness ([6d01d24](https://github.com/InstaZDLL/WaveFlow/commit/6d01d244442e8d79c58568c0170a9c4d7bdd9b77)) +* **remote:** stamp the cover retry with the identity it was started for ([53b6ba4](https://github.com/InstaZDLL/WaveFlow/commit/53b6ba4ecd26f84c814316296b4fb2702c9318df)) +* **remote:** stop a half-listed album from reading as walked forever ([2936046](https://github.com/InstaZDLL/WaveFlow/commit/29360464bc35dade1be18b3b4e0eca7d0bb19e4a)) +* **remote:** stricter Content-Range, socket profile pin + cap check ([faa498f](https://github.com/InstaZDLL/WaveFlow/commit/faa498f03afd95e03db11d306a045cbaec1e486a)) +* **remote:** strip only the loop newline from server lyrics ([c42bf74](https://github.com/InstaZDLL/WaveFlow/commit/c42bf74b1a825f80589d6d54e5221340068b243b)) +* **review:** compare the genre trimmed, and exempt only DoP's rate ([0306594](https://github.com/InstaZDLL/WaveFlow/commit/0306594010d911ba2452d26aeb8b37fde80bc404)) +* **review:** send the genre only when it changed, and prove the verdict ([bb4a9aa](https://github.com/InstaZDLL/WaveFlow/commit/bb4a9aa513c4293a81ae5e1785001dbac7392a83)) +* **scan-toast:** a scan that hit errors no longer reads as a success ([7b9d39f](https://github.com/InstaZDLL/WaveFlow/commit/7b9d39f051952e88f97b6d5a51ec53fc3f442acb)), closes [#457](https://github.com/InstaZDLL/WaveFlow/issues/457) +* **scan:** keep the replaygain backfill pending when a file fails to read ([8c6cce8](https://github.com/InstaZDLL/WaveFlow/commit/8c6cce8066bd728b35bf0ef49ee3c56678848081)) +* **scanner:** judge an .ogg by its stream, not by its extension ([9bfd279](https://github.com/InstaZDLL/WaveFlow/commit/9bfd279416e4a85388c13cc3c9c010bd70d088e4)) +* **scanner:** judge an .ogg by its stream, not by its extension ([e0ca4fe](https://github.com/InstaZDLL/WaveFlow/commit/e0ca4fe7b61a01aec3bf32cc339aed08da5a329e)) +* **scan:** report a failed replaygain backfill marker write ([3cd90e6](https://github.com/InstaZDLL/WaveFlow/commit/3cd90e6c5d3348d1254bc41f9c1a676c448da08f)) +* **search:** count the backfill's written rows from the database ([656398a](https://github.com/InstaZDLL/WaveFlow/commit/656398a5ecf47ba2ce97a7a17bea0559b322ed5a)) +* **search:** find a track by the middle of its title, not only the start ([6cfefc9](https://github.com/InstaZDLL/WaveFlow/commit/6cfefc971ec9d9e0cb0f2b0742986be8d5b1f812)) +* **settings:** a backup that failed on every profile said nothing at all ([943f960](https://github.com/InstaZDLL/WaveFlow/commit/943f960db8a7ce72e4800940458cc81291575483)) +* **settings:** a read claims the token when it commits, not when it starts ([8863e28](https://github.com/InstaZDLL/WaveFlow/commit/8863e28cf20e093b3b6487c9151285304e4bb077)) +* **settings:** a rollback must reach the consumer whose state did not move ([3637d0b](https://github.com/InstaZDLL/WaveFlow/commit/3637d0bdd1859c714973e79b6b7271ff80dc4791)) +* **settings:** bump the revision on a failed read too ([ab6a729](https://github.com/InstaZDLL/WaveFlow/commit/ab6a7291d882f88a33e723ca425b23462d773c27)) +* **settings:** clear the search target when a settings entry is restored ([e6e491d](https://github.com/InstaZDLL/WaveFlow/commit/e6e491dca00555aedb0a67d7c48d744478f4d0b6)) +* **settings:** do not let a failed write undo a newer click ([0c4e197](https://github.com/InstaZDLL/WaveFlow/commit/0c4e19797e7cf9259ab34b0fe59200b05aaf21d9)) +* **settings:** drop a failed write's rollback once a newer click exists ([b9d9179](https://github.com/InstaZDLL/WaveFlow/commit/b9d917985727069673b5a5db845cbb66b9b2c079)) +* **settings:** forget remembered cache paths after clearing a cache ([15d9dc1](https://github.com/InstaZDLL/WaveFlow/commit/15d9dc1edb9eb3a582fee2402b176e19558b492a)) +* **settings:** locale-aware MB formatting in the cover-prune status ([e748c11](https://github.com/InstaZDLL/WaveFlow/commit/e748c11da3dc0f39648ec1b1c797a256e4f17c36)) +* **settings:** measure row wrapping on the content column and name subtitles ([daffabb](https://github.com/InstaZDLL/WaveFlow/commit/daffabb2121bbad48d087888c62871e23cbc1d8e)) +* **settings:** move the video cache controls to Settings > Data ([cb45a48](https://github.com/InstaZDLL/WaveFlow/commit/cb45a48da31685435a32e9160e24a736719f366e)) +* **settings:** move the video cache controls to Settings > Data ([3b3694a](https://github.com/InstaZDLL/WaveFlow/commit/3b3694afb5ceba93a1c648535f0c5657108d6848)) +* **settings:** only the read that still owns the value may announce it ([76bdbc4](https://github.com/InstaZDLL/WaveFlow/commit/76bdbc41974649e1db93b8c65e41752f42cfb7af)) +* **settings:** tell every consumer when a write is rolled back ([761c756](https://github.com/InstaZDLL/WaveFlow/commit/761c756f261942016b59e3578f4b501fff7ab995)) +* **settings:** tidy the cover-prune status timer + announce it to a11y ([848add8](https://github.com/InstaZDLL/WaveFlow/commit/848add8215031868278bd47924ec852e5d869f68)) +* **smart-playlists:** a play count cannot be negative, a disc is numbered from one ([98d654a](https://github.com/InstaZDLL/WaveFlow/commit/98d654addf46000af4d8b1360a1255ce343ad21a)) +* **smart-playlists:** a tag rule in another casing, and a window of zero days ([fe907d8](https://github.com/InstaZDLL/WaveFlow/commit/fe907d8072a5388cab8911fffd7ae2ebc8af72b4)) +* **smart-playlists:** drop a COLLATE that was claiming something untrue ([78cf70e](https://github.com/InstaZDLL/WaveFlow/commit/78cf70e8f0d8ed280f86033a43bfaf914e7d981c)) +* **smart-playlists:** every CLDR plural form, and a summary stamped with its rules ([6b801b8](https://github.com/InstaZDLL/WaveFlow/commit/6b801b867075dbb50916b83834d6b85326f6407e)) +* **smart-playlists:** name every value widget, and offer no tag rule without tags ([2ba27e8](https://github.com/InstaZDLL/WaveFlow/commit/2ba27e872aeefe6f4fb28304075191f5a5fbe4c6)) +* **smart-playlists:** ten findings from the local review ([2af386f](https://github.com/InstaZDLL/WaveFlow/commit/2af386f20a488a7177da88ff92f21a7fb8466228)) +* **smart-playlists:** the twin site of the NULL guard, and the windows in nine languages ([6d92613](https://github.com/InstaZDLL/WaveFlow/commit/6d926138afcb27a5baad082308e3b1db5ce9c7bb)) +* start the resume point when play comes from mpd or the os media controls ([5fe3c9f](https://github.com/InstaZDLL/WaveFlow/commit/5fe3c9fd73ee00b55687f262dfbf7913775751a3)) +* **startup:** a duplicate launch cannot erase the fallback it misread ([0df23de](https://github.com/InstaZDLL/WaveFlow/commit/0df23de7a8a7c514440f4ae96a621b2192868dbf)) +* **startup:** a failed retry stays failed, and Settings follows the request ([afcfbcb](https://github.com/InstaZDLL/WaveFlow/commit/afcfbcb07b1f4f7139fe30ee68417d5a4e75eed2)) +* **startup:** a refusal to start is not a launch that failed to paint ([cec6b06](https://github.com/InstaZDLL/WaveFlow/commit/cec6b06bb9dcef8214a7f850f91b3c7d72aa82c2)) +* **startup:** decide the renderer before the logger owns a thread ([dad492e](https://github.com/InstaZDLL/WaveFlow/commit/dad492ef6beb0eb1a740513066a4dc6f8ef5b273)) +* **startup:** every fatal start disarms, and the state file is replaced ([8ce4f2b](https://github.com/InstaZDLL/WaveFlow/commit/8ce4f2b78aa5e0e6770b59cadd3f202d0bf8c263)) +* **startup:** the log line is one line, not a run of spaces ([58ebdb3](https://github.com/InstaZDLL/WaveFlow/commit/58ebdb310e153146d54ddf242faf96775dbd6883)) +* **startup:** the marker survives a second launch, and macOS is told the truth ([1d8be74](https://github.com/InstaZDLL/WaveFlow/commit/1d8be74ace11460abdb78a47dc3d5602c2c9529e)) +* **startup:** the other deferred warning, and Settings goes back where it was ([dc93d74](https://github.com/InstaZDLL/WaveFlow/commit/dc93d74a40747d305a173347decaaaa50566dda5)) +* **startup:** the retry button tells the truth, and lands on the card it means ([126ff38](https://github.com/InstaZDLL/WaveFlow/commit/126ff38d59138cb4956b270a959ee9def31c04aa)) +* **startup:** the retry flag is raised under the lock that made it true ([996cfe5](https://github.com/InstaZDLL/WaveFlow/commit/996cfe5a7cbcee181e523dfb9e748b9079f8f669)) +* **startup:** the state writes after the decision take one lock ([2e8b67e](https://github.com/InstaZDLL/WaveFlow/commit/2e8b67e9fd8ec22218dd35afb78a047f99017a2a)) +* **startup:** the third warning on the pre-logger path is deferred too ([39fd87a](https://github.com/InstaZDLL/WaveFlow/commit/39fd87a30913fbdfe3679aad15c59957f99d0cc2)) +* **stats:** local artist images, ragged KPI row, clipped hour labels ([e6d1000](https://github.com/InstaZDLL/WaveFlow/commit/e6d10002d7a35303e1b96372ea06a656fafd9760)), closes [#453](https://github.com/InstaZDLL/WaveFlow/issues/453) +* **storage:** eight findings from the second local review pass ([9fedbd4](https://github.com/InstaZDLL/WaveFlow/commit/9fedbd4bf635f023d026a0fca3ed8c7ae3b8bbcc)) +* **storage:** refuse to delete a cache folder WaveFlow did not create ([2ebf501](https://github.com/InstaZDLL/WaveFlow/commit/2ebf501200b5d8b7f24d545d332c92fc371c6ab4)) +* **tags:** a DSF tag we cannot read stops the edit instead of being replaced ([51e9e56](https://github.com/InstaZDLL/WaveFlow/commit/51e9e5689c9165f740df40e1c6d42e148b034d1c)) +* **tags:** a search cancelled by closing left the reopened modal loading ([deb7b70](https://github.com/InstaZDLL/WaveFlow/commit/deb7b7090ce509ebdd3de459af8098172ef68709)) +* **tags:** a write in flight cannot be dismissed, and both reads are tested ([22e2626](https://github.com/InstaZDLL/WaveFlow/commit/22e26261519cf82abf4134297198b70e3099e8b7)) +* **tags:** a write publishes only into the session that started it ([26cd94e](https://github.com/InstaZDLL/WaveFlow/commit/26cd94e88fd5ccd757ebf7c945f96c66b0114038)) +* **tags:** an ID3v2.2 tag could not be written at all once we touched its year ([32627c9](https://github.com/InstaZDLL/WaveFlow/commit/32627c9a0cf955d36641dfb9186a3c9dd8f8940f)) +* **tags:** going back drops the error with the release it belonged to ([b6a5a79](https://github.com/InstaZDLL/WaveFlow/commit/b6a5a79876fd681790b9105b0696d46f67de413a)) +* **tags:** keep a picture out of the FLAC fast path, and decline a truncated file ([c1cdea2](https://github.com/InstaZDLL/WaveFlow/commit/c1cdea2f79d8476900e6f40e894ea26b567a051c)) +* **tags:** keep the fields a tag write never touched ([11c0c7e](https://github.com/InstaZDLL/WaveFlow/commit/11c0c7e211273c79eeff7dbd1d7a6c1593d16b8c)) +* **tags:** keep the read-only guard clean under the linter on every platform ([e462dbd](https://github.com/InstaZDLL/WaveFlow/commit/e462dbd32d2dce5ad200d62942d99d357b8408e2)) +* **tags:** leave a DSF header describing less than the file holds, never more ([d70255e](https://github.com/InstaZDLL/WaveFlow/commit/d70255e122c6e7b965342676674c5ea07aa0780b)) +* **tags:** make read-only mean the same thing on both write paths ([22ee8e8](https://github.com/InstaZDLL/WaveFlow/commit/22ee8e88b5073cb40436be7025bd25d2e1656277)) +* **tags:** mirror the year for every pre-2.4 tag, not only 2.3 ([bcb2d32](https://github.com/InstaZDLL/WaveFlow/commit/bcb2d325b90acd1c3b26d9ce27c8e2c8688fb598)) +* **tags:** one writer at a time per file, and a module doc that is true again ([5e684cc](https://github.com/InstaZDLL/WaveFlow/commit/5e684cc4cd32a1d1450ce2ee05d3c90260665b20)) +* **tags:** put the year where an ID3v2.3 reader actually looks for it ([cdfb17c](https://github.com/InstaZDLL/WaveFlow/commit/cdfb17c7f61616c8bfb3eaf45958e5195998c8fd)) +* **tags:** ratings and lyrics take the writer that knows every container ([e626c4c](https://github.com/InstaZDLL/WaveFlow/commit/e626c4cea07a5c6ab512e13e8582de27ef2dee0a)) +* **tags:** refuse a DSF header that points its tag into the audio ([2240bab](https://github.com/InstaZDLL/WaveFlow/commit/2240bab3e7cd0c94283deeb7e4e34b5bb8e56707)) +* **tags:** retire the fetch token when the modal closes ([735bb74](https://github.com/InstaZDLL/WaveFlow/commit/735bb74e75ee75cfca89ae9f614edd77c8ccc695)) +* **tags:** route the two remaining close paths through the busy guard ([be2b925](https://github.com/InstaZDLL/WaveFlow/commit/be2b9255138120dd08f6e15dd1e57eb409d8eb8f)) +* **tags:** stop the year mirror from erasing the year it was added to protect ([334e1ad](https://github.com/InstaZDLL/WaveFlow/commit/334e1adf60e5000894139d7f57bdd309f72d9ff4)) +* **tags:** the disc separates two tracks numbered the same, and both locks release ([1a1535d](https://github.com/InstaZDLL/WaveFlow/commit/1a1535d2e7ab0d8b2cad8c340d1e764a2ed36e26)) +* **tags:** the star rating reaches an ID3v2 file again ([ca87b54](https://github.com/InstaZDLL/WaveFlow/commit/ca87b540148fcabf68b2c37655114f57c806bf66)) +* **tags:** the synced stamp reaches AAC, skips a write it need not make ([9caa565](https://github.com/InstaZDLL/WaveFlow/commit/9caa565b29763a6534f22103c55523bd00733e64)) +* **tags:** the toggles decide from prev and say their state, and a write owns the screen ([193a7a8](https://github.com/InstaZDLL/WaveFlow/commit/193a7a8f5ca87295cbaf80751c72f60c495ead9c)) +* **taskbar:** let the play and pause labels go unread outside windows ([d3d72b9](https://github.com/InstaZDLL/WaveFlow/commit/d3d72b980d2f6a2a2c557c7552f0e1d60e19b66a)) +* **test:** a non-utf8 directory name cannot be created on apfs ([d3e3fa8](https://github.com/InstaZDLL/WaveFlow/commit/d3e3fa889572db15dbe5ad8db98f039ace43aef0)) +* the tag editor and audio-path defects found in the audit ([c198cf6](https://github.com/InstaZDLL/WaveFlow/commit/c198cf64f07083451fe4a66d4d50bafa27a79fc0)) +* **ui:** a text selection that ends outside a modal must not close it ([57e981d](https://github.com/InstaZDLL/WaveFlow/commit/57e981d9344d4778a3e14894306ece64e212f3e4)) +* **ui:** dismiss a modal by where the pointer is, not by what it targets ([40f0403](https://github.com/InstaZDLL/WaveFlow/commit/40f0403955f29b2edf9639075cd24fb6e119df77)) +* **ui:** drop inert DSP badges on DoP and harden the toggle ([f203eb4](https://github.com/InstaZDLL/WaveFlow/commit/f203eb45a170773495e3d417e26d75a410a626b0)) +* **ui:** harden the splash handoff and measure both of its halves ([031151e](https://github.com/InstaZDLL/WaveFlow/commit/031151e2b9132196fc7272a1bc5a9a27788d8cc8)) +* **ui:** let a motion-cover miss be forgotten, and stop blurring it per frame ([6905325](https://github.com/InstaZDLL/WaveFlow/commit/690532569fa6dcfa485263b0dfba542e2e87a68a)), closes [#615](https://github.com/InstaZDLL/WaveFlow/issues/615) +* **ui:** never fall back to the animated source for the blurred backdrop ([05eb8f3](https://github.com/InstaZDLL/WaveFlow/commit/05eb8f368187fcc9cace34c580a9e73d75cdda78)) +* **ui:** pass count to the prune counter and fix two dead tooltip keys ([cdc983d](https://github.com/InstaZDLL/WaveFlow/commit/cdc983d7216f7980479a9bd3a4f0ac71c0a87456)) +* **ui:** pre-fill the genre the properties dialog was erasing ([08b933c](https://github.com/InstaZDLL/WaveFlow/commit/08b933ce68c9d84a9111ac58009019e4fdbbd3aa)) +* **ui:** read the remote queue in the mini-player's up-next ([478d07f](https://github.com/InstaZDLL/WaveFlow/commit/478d07fe14d15308490f4ce90b1e427a5c099873)) +* **ui:** read the remote queue in the mini-player's up-next list ([e9bd62b](https://github.com/InstaZDLL/WaveFlow/commit/e9bd62bf9a4152b953ad0d6faa6d0afe00a2c383)) +* **ui:** replay liked changes that land during a reload ([f547d0f](https://github.com/InstaZDLL/WaveFlow/commit/f547d0fbd5419d260deee97955e2af1e6efc242a)) +* **ui:** scope the queued DoP write to the profile that made it ([2fd7f9d](https://github.com/InstaZDLL/WaveFlow/commit/2fd7f9d9a774260b24a3e8a91516515e16d012d8)) +* **ui:** settings layout polish, library table header and width, untimed TTML lyrics ([7534c5d](https://github.com/InstaZDLL/WaveFlow/commit/7534c5ddfe8a0f203454765662429d5389483e79)) +* **ui:** stop invisible tooltips inflating the page scroller ([d745fbc](https://github.com/InstaZDLL/WaveFlow/commit/d745fbcdfe6902e3f033901291576a15b42711c7)) +* **ui:** stop invisible tooltips inflating the page scroller ([597a73c](https://github.com/InstaZDLL/WaveFlow/commit/597a73ca874fa0fbded7b332ac7b93b6c1a50a9b)), closes [#677](https://github.com/InstaZDLL/WaveFlow/issues/677) +* **ui:** subscribe to liked changes before snapshotting the set ([eed3254](https://github.com/InstaZDLL/WaveFlow/commit/eed325469211871b93254784994e31d11305c160)) +* **web-radio:** let a 429 fall through to the next host ([cb8a31c](https://github.com/InstaZDLL/WaveFlow/commit/cb8a31c4da733bb380fc59bfa4979ea376cf8926)), closes [#452](https://github.com/InstaZDLL/WaveFlow/issues/452) +* **web-radio:** try the round-robin host, and retry, before failing ([4a20483](https://github.com/InstaZDLL/WaveFlow/commit/4a20483e6cbfdf6e39e6778b20ccc54003d191a3)), closes [#452](https://github.com/InstaZDLL/WaveFlow/issues/452) +* what the first run against a real server found ([a6a3be2](https://github.com/InstaZDLL/WaveFlow/commit/a6a3be21ea3119c33f47245a2b18e2625cfba455)) +* **wrapped:** give each banner key its own broadcast channel ([c74eb48](https://github.com/InstaZDLL/WaveFlow/commit/c74eb484e1eb9ee6b06ae5ec442004a588b3f8b5)) +* **wrapped:** withhold the banner until both keys have been read ([c83ebb7](https://github.com/InstaZDLL/WaveFlow/commit/c83ebb75e10d9c2a33b1a174536194a79a228787)) + + +### Performance Improvements + +* **lyrics:** the synced pass asks before it copies the file ([768fd4b](https://github.com/InstaZDLL/WaveFlow/commit/768fd4bb90a41040435a3378dc852d6217e7a47c)) +* **remote-ui:** virtualize the remote playlist and queue lists ([0b26205](https://github.com/InstaZDLL/WaveFlow/commit/0b26205c792b9a5d7cb5c27e63dde79f240b288c)) + ## [1.7.0](https://github.com/InstaZDLL/WaveFlow/compare/v1.6.0...v1.7.0) (2026-07-26) diff --git a/README.md b/README.md index 3b0cba20..9c749cb3 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

- Version + Version Downloads Tauri 2 React 19 diff --git a/package.json b/package.json index 42724a26..5f3e6675 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "waveflow", "private": true, - "version": "1.7.0", + "version": "1.8.0", "type": "module", "license": "GPL-3.0", "scripts": { diff --git a/src-tauri/crates/app/Cargo.toml b/src-tauri/crates/app/Cargo.toml index e667aa14..2fdb539b 100644 --- a/src-tauri/crates/app/Cargo.toml +++ b/src-tauri/crates/app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "waveflow" -version = "1.7.0" +version = "1.8.0" description = "Local music player for desktop — real-time audio engine, your files stay on your machine." authors = ["InstaZDLL "] edition = "2021" diff --git a/src-tauri/crates/app/tauri.conf.json b/src-tauri/crates/app/tauri.conf.json index a2a49873..c3170462 100644 --- a/src-tauri/crates/app/tauri.conf.json +++ b/src-tauri/crates/app/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "WaveFlow", - "version": "1.7.0", + "version": "1.8.0", "identifier": "app.waveflow", "build": { "beforeDevCommand": "bun run dev", diff --git a/src-tauri/crates/core/Cargo.toml b/src-tauri/crates/core/Cargo.toml index 42d8deda..25d75956 100644 --- a/src-tauri/crates/core/Cargo.toml +++ b/src-tauri/crates/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "waveflow-core" -version = "1.7.0" +version = "1.8.0" description = "Business logic shared between the WaveFlow desktop app and the future waveflow-server: scanning, metadata enrichment, DSD conversion, smart-playlist algorithms, repository traits." authors = ["InstaZDLL "] edition = "2021"