21.3 review fixes: guard superseded-seek failures; restore post-recovery retry
C6/AC8: IsStillActiveSeek() predicate guards all three SeekBeyondBuffer failure exits, so a superseded seek never recovers over a newer seek's state. AC6: empty scheduler routes to seekBeyondBuffer so a same-target retry (seek or play) refetches instead of no-oping.
This commit is contained in:
@@ -118,6 +118,16 @@ public abstract class AudioPlayerService : IPlayerService, IAsyncDisposable
|
||||
IsPlaying = true;
|
||||
IsPaused = false;
|
||||
}
|
||||
else if (IsPaused)
|
||||
{
|
||||
// Play failed while the player is paused — the scheduler may be empty after a
|
||||
// failed refill (AC6 recovery). Re-issue a seek at the current position: the
|
||||
// seek path routes to seekBeyondBuffer when the scheduler is empty (Phase 21.3
|
||||
// fix), triggering a real refetch rather than returning "Streaming not ready".
|
||||
// We return early here; Seek owns its own state mutations and NotifyStateChanged.
|
||||
await Seek(CurrentTime);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!result.Success)
|
||||
@@ -128,7 +138,7 @@ public abstract class AudioPlayerService : IPlayerService, IAsyncDisposable
|
||||
{
|
||||
ErrorMessage = null;
|
||||
}
|
||||
|
||||
|
||||
await NotifyStateChanged();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
Reference in New Issue
Block a user