Repository navigation
Conversation
…ayback speed on play - Auto-resume playback when AVAudioSession reports an interruption ended with shouldResume (e.g. a Siri or notification readout), instead of leaving the episode paused with no way to resume it if the screen is off. Real phone calls don't set shouldResume, so they're unaffected. - AVPlayer.play() always resets rate to 1.0, discarding a user-selected playback speed on episode start, lock-screen play, and interruption resume. Track the desired rate and reassert it after every play() call. Fixes the iOS side of madeofpendletonwool#882.
…l speed Root cause of both madeofpendletonwool#882 (iOS) and madeofpendletonwool#963 (Android): getPlayEpisodeDetails parsed the server's playback_speed field but dropped playback_speed_customized, which the Rust backend sends to distinguish a real per-podcast override from it echoing back the account-wide default (Users.playbackspeed). The mobile speed selector only writes to local SharedPreferences and never syncs to that server column, so for anyone who hasn't set it via the web UI it sits at 1.0. playPinepodsEpisode() then unconditionally called setPlaybackSpeed with that value right after starting playback, stomping whatever speed playEpisode() had just applied locally, on every episode start, on both platforms. That's why tapping the in-app speed +/- buttons after playback started seemed to fix it: it's the only path with no follow-up override. Add playbackSpeedCustomized to PlayEpisodeDetails and only apply the server's speed when it's an actual customization, in both the main playback path and the local-download background enrichment path. This doesn't replace the AVPlayer.play()-resets-rate fix already applied for iOS. That's a separate, contributing bug.
ashtonian
marked this pull request as ready for review
October 18, 2026 02:10
This branch has not been deployed
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.
Builds on @mrmichaeladavis's #974, which preserves playback speed across episode starts and resumes, respects the server's podcast-specific speed flag, and resumes after eligible iOS interruptions. Both original commits are preserved.
Adds on top of #974:
shouldResumeresumes only playback the listener still wants; pausing or stopping cancels that automatic resume.Validation: 268 Flutter tests and seven Swift state tests pass; combined with #1008, all 271 Flutter tests pass. The analyzer passes the error gate, and native Audio/CarPlay sources pass iOS SDK type-checking. Full app build and physical-device interruption/Bluetooth/CarPlay testing remain outstanding; state tests do not exercise the native player itself. GitHub Actions await maintainer approval. No external dependency is added.
This PR contains #974 plus these additions and targets
main. If #974 lands separately first, sync this branch before merging. Seek completion reporting remains separate work.Related: #973, #882, #963. Replaces the closed fork follow-up.