📝 docs: update README, add editorconfig, license, wire up stream warmup - #4
Merged
Merged
Conversation
- Added multi-signal EOF detection (null frame threshold + position stuck + exception budget) - Extracted PlaybackStateMachine for testable EOF logic (26 unit tests)
Move all desktop source under desktop/, wire up the shared/desktop/android Gradle modules that were scaffolded but never populated, and extract the domain models (SearchResult, QueueItem, Playlist, etc.) that were duplicated across api/player files into shared/models for future reuse from Android.
Nothing was logged anywhere before this — failures in the audio pipeline, yt-dlp resolution, and OAuth refresh were silently swallowed by runCatching/getOrNull, leaving no trace to diagnose crashes reported from a GUI app launched without an attached terminal. Writes to ~/.local/state/wren/wren.log and installs a global uncaught-exception handler so real crashes leave a stack trace too.
Only the stream URL was prefetched for the next track — the actual FFmpegFrameGrabber connection was cold-started on EOF, and the network connect + stream probe latency during that window was the audible cut before jumping to the next song. Now the next track's grabber is opened and connected ahead of time and reused instantly on transition. Also: a track that fails to open (e.g. a rejected googlevideo connection) used to just stop playback silently instead of advancing — auto-skip to the next track now kicks in, bounded to 3 consecutive failures so an entirely unplayable queue doesn't loop forever. Reconnect options are added to the grabber for transient mid-stream network drops.
createDistributable and wren.png moved under desktop/ during the multiplatform migration; the packaging script still referenced the old root-level paths.
Wraps build-appimage.sh with versioning and gh release create/upload so cutting a release is one command.
…ration build/test/package tasks and artifact paths were still targeting the root project, which no longer builds an application after the module split.
- Add a centered logo + build/license/kotlin badges header, matching the usual OSS README convention. - Update the architecture tree and build commands (gradlew run, packageDeb/Rpm) to the desktop/shared module layout from the KMP migration — they still showed the old single-module paths.
Compose Desktop places packaged output under main/<format>/ (e.g. main/dmg/, main/msi/), not directly under main/ — the rename and upload-artifact steps were looking in the wrong place. Also pin the rename step to bash explicitly since windows-latest defaults run: steps to PowerShell, which doesn't understand the case/glob syntax.
upload-artifact@v6 mis-resolves the common ancestor when given multiple sibling globs across format subdirectories and fails with an invalid-path error, even though exactly one of them matches. Compute the one relevant glob for the current matrix job instead.
Every track played at its native level, so switching tracks could mean a jarring volume jump. Add an RMS-based auto-gain that smoothly steers each track's short-term loudness toward a common target, and fade the first/ last ~2.5s of each track in/out. This isn't a true overlapping crossfade — that would need decoding and mixing two streams simultaneously — but combined with the gapless preload it gives a similarly smooth transition for much less complexity.
mv wren-*.msi Wren-*.msi renames to the literal string "Wren-*.msi" — bash doesn't expand a destination glob that matches no existing file, so the asterisk landed in the real filename and upload-artifact rejected it. Derive the destination name from the actual matched source file instead.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
warmupStreamConnection()inmain.kt(was defined but never called)