refactor(player): clarify requested vs session-effective media source id
This commit is contained in:
@@ -136,12 +136,12 @@ extension _VideoPlayerEpisodeNavigationMethods on VideoPlayerScreenState {
|
||||
final currentSubtitleStreamId = _selectedSourceSubtitleStreamIdForControls(_sourceSubtitleTracksForControls());
|
||||
final effectiveSubtitleStreamId = newSubtitleStreamId ?? currentSubtitleStreamId;
|
||||
final effectiveMediaSourceId = newMediaIndex != null
|
||||
? PlaybackSession.mediaSourceIdForIndex(_availableVersions, effectiveMediaIndex) ?? _selectedMediaSourceId
|
||||
: _selectedMediaSourceId;
|
||||
? PlaybackSession.mediaSourceIdForIndex(_availableVersions, effectiveMediaIndex) ?? _requestedMediaSourceId
|
||||
: _requestedMediaSourceId;
|
||||
|
||||
final isVersionChange =
|
||||
effectiveMediaIndex != _effectiveSelectedMediaIndex ||
|
||||
(_selectedMediaSourceId != null && effectiveMediaSourceId != _selectedMediaSourceId);
|
||||
(_requestedMediaSourceId != null && effectiveMediaSourceId != _requestedMediaSourceId);
|
||||
final isPresetChange = effectivePreset != _selectedQualityPreset;
|
||||
final isAudioChange = effectiveAudioStreamId != _selectedAudioStreamId;
|
||||
final isSubtitleChange = newSubtitleStreamId != null && effectiveSubtitleStreamId != currentSubtitleStreamId;
|
||||
|
||||
@@ -138,7 +138,7 @@ extension _VideoPlayerPlaybackStartMethods on VideoPlayerScreenState {
|
||||
playbackContext = await playbackResolver.resolve(
|
||||
metadata: _currentMetadata,
|
||||
selectedMediaIndex: _effectiveSelectedMediaIndex,
|
||||
selectedMediaSourceId: _selectedMediaSourceId,
|
||||
selectedMediaSourceId: _requestedMediaSourceId,
|
||||
offlineLibraryMode: true,
|
||||
qualityPreset: _selectedQualityPreset,
|
||||
selectedAudioStreamId: _selectedAudioStreamId,
|
||||
@@ -174,7 +174,7 @@ extension _VideoPlayerPlaybackStartMethods on VideoPlayerScreenState {
|
||||
PlaybackSession.fromContext(
|
||||
playbackContext,
|
||||
requestedQualityPreset: _selectedQualityPreset,
|
||||
requestedMediaSourceId: _selectedMediaSourceId,
|
||||
requestedMediaSourceId: _requestedMediaSourceId,
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ extension _VideoPlayerSeekingMethods on VideoPlayerScreenState {
|
||||
final playbackContext = await playbackResolver.resolve(
|
||||
metadata: replacementMetadata,
|
||||
selectedMediaIndex: _effectiveSelectedMediaIndex,
|
||||
selectedMediaSourceId: _selectedMediaSourceId,
|
||||
selectedMediaSourceId: _requestedMediaSourceId,
|
||||
offlineLibraryMode: false,
|
||||
qualityPreset: _selectedQualityPreset,
|
||||
selectedAudioStreamId: _selectedAudioStreamId,
|
||||
@@ -84,7 +84,7 @@ extension _VideoPlayerSeekingMethods on VideoPlayerScreenState {
|
||||
final session = PlaybackSession.fromContext(
|
||||
playbackContext,
|
||||
requestedQualityPreset: _selectedQualityPreset,
|
||||
requestedMediaSourceId: _selectedMediaSourceId,
|
||||
requestedMediaSourceId: _requestedMediaSourceId,
|
||||
);
|
||||
|
||||
final attachesSubsAtOpen = currentPlayer.attachesExternalSubtitlesAtOpen;
|
||||
|
||||
@@ -270,7 +270,12 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> with WidgetsBindin
|
||||
bool _showPlayNextDialog = false;
|
||||
bool _isPhone = false;
|
||||
late int _effectiveSelectedMediaIndex;
|
||||
String? _selectedMediaSourceId;
|
||||
|
||||
/// Media source id to request on the next resolve: the caller's initial
|
||||
/// selection, then re-synced to the session's post-fallback effective id
|
||||
/// by [_commitPlaybackSession]. Post-resolve consumers must read
|
||||
/// `_playbackSession.mediaSourceId`, never this field.
|
||||
String? _requestedMediaSourceId;
|
||||
bool get _offlineLibraryMode => widget.isOffline;
|
||||
|
||||
// Transcode / quality state
|
||||
@@ -454,7 +459,7 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> with WidgetsBindin
|
||||
void _commitPlaybackSession(PlaybackSession session) {
|
||||
_playbackSession = session;
|
||||
_effectiveSelectedMediaIndex = session.mediaIndex;
|
||||
_selectedMediaSourceId = session.mediaSourceId;
|
||||
_requestedMediaSourceId = session.mediaSourceId;
|
||||
_selectedQualityPreset = session.qualityPreset;
|
||||
_selectedAudioStreamId = session.audioStreamId;
|
||||
}
|
||||
@@ -490,7 +495,7 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> with WidgetsBindin
|
||||
_activeId = widget.metadata.id;
|
||||
_activeMediaIndex = widget.selectedMediaIndex;
|
||||
_effectiveSelectedMediaIndex = widget.selectedMediaIndex;
|
||||
_selectedMediaSourceId = widget.selectedMediaSourceId;
|
||||
_requestedMediaSourceId = widget.selectedMediaSourceId;
|
||||
|
||||
// Reused across in-place quality/version/audio switches so the
|
||||
// server-side transcode session is preserved.
|
||||
@@ -683,7 +688,7 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> with WidgetsBindin
|
||||
_playbackDataFuture = playbackResolver.resolve(
|
||||
metadata: _currentMetadata,
|
||||
selectedMediaIndex: _effectiveSelectedMediaIndex,
|
||||
selectedMediaSourceId: _selectedMediaSourceId,
|
||||
selectedMediaSourceId: _requestedMediaSourceId,
|
||||
offlineLibraryMode: false,
|
||||
qualityPreset: _selectedQualityPreset,
|
||||
selectedAudioStreamId: _selectedAudioStreamId,
|
||||
|
||||
Reference in New Issue
Block a user