fix: Not parsing audio/sub model selected inside of details view (#379)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2025-06-08 14:44:12 +02:00 committed by GitHub
parent bfcadb9396
commit d10dfdd09d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -128,6 +128,7 @@ class PlaybackModelHelper {
)) ?? )) ??
await _createOfflinePlaybackModel( await _createOfflinePlaybackModel(
newItem, newItem,
null,
ref.read(syncProvider.notifier).getSyncedItem(newItem), ref.read(syncProvider.notifier).getSyncedItem(newItem),
oldModel: currentModel, oldModel: currentModel,
); );
@ -138,6 +139,7 @@ class PlaybackModelHelper {
Future<OfflinePlaybackModel?> _createOfflinePlaybackModel( Future<OfflinePlaybackModel?> _createOfflinePlaybackModel(
ItemBaseModel item, ItemBaseModel item,
MediaStreamsModel? streamModel,
SyncedItem? syncedItem, { SyncedItem? syncedItem, {
PlaybackModel? oldModel, PlaybackModel? oldModel,
}) async { }) async {
@ -206,28 +208,39 @@ class PlaybackModelHelper {
return switch (playbackType) { return switch (playbackType) {
PlaybackType.directStream || PlaybackType.transcode => await _createServerPlaybackModel( PlaybackType.directStream || PlaybackType.transcode => await _createServerPlaybackModel(
fullItem, fullItem,
item.streamModel,
playbackType, playbackType,
oldModel: oldModel, oldModel: oldModel,
libraryQueue: queue, libraryQueue: queue,
startPosition: startPosition, startPosition: startPosition,
), ),
PlaybackType.offline => await _createOfflinePlaybackModel(fullItem, syncedItem), PlaybackType.offline => await _createOfflinePlaybackModel(
fullItem,
item.streamModel,
syncedItem,
),
null => null null => null
}; };
} else { } else {
return (await _createServerPlaybackModel( return (await _createServerPlaybackModel(
fullItem, fullItem,
item.streamModel,
PlaybackType.directStream, PlaybackType.directStream,
startPosition: startPosition, startPosition: startPosition,
oldModel: oldModel, oldModel: oldModel,
libraryQueue: queue, libraryQueue: queue,
)) ?? )) ??
await _createOfflinePlaybackModel(fullItem, syncedItem); await _createOfflinePlaybackModel(
fullItem,
item.streamModel,
syncedItem,
);
} }
} }
Future<PlaybackModel?> _createServerPlaybackModel( Future<PlaybackModel?> _createServerPlaybackModel(
ItemBaseModel item, ItemBaseModel item,
MediaStreamsModel? streamModel,
PlaybackType? type, { PlaybackType? type, {
PlaybackModel? oldModel, PlaybackModel? oldModel,
required List<ItemBaseModel> libraryQueue, required List<ItemBaseModel> libraryQueue,
@ -237,25 +250,26 @@ class PlaybackModelHelper {
final userId = ref.read(userProvider)?.id; final userId = ref.read(userProvider)?.id;
if (userId?.isEmpty == true) return null; if (userId?.isEmpty == true) return null;
final newStreamModel = streamModel ?? item.streamModel;
Map<Bitrate, bool> qualityOptions = getVideoQualityOptions( Map<Bitrate, bool> qualityOptions = getVideoQualityOptions(
VideoQualitySettings( VideoQualitySettings(
maxBitRate: ref.read(videoPlayerSettingsProvider.select((value) => value.maxHomeBitrate)), maxBitRate: ref.read(videoPlayerSettingsProvider.select((value) => value.maxHomeBitrate)),
videoBitRate: item.streamModel?.videoStreams.firstOrNull?.bitRate ?? 0, videoBitRate: newStreamModel?.videoStreams.firstOrNull?.bitRate ?? 0,
videoCodec: item.streamModel?.videoStreams.firstOrNull?.codec, videoCodec: newStreamModel?.videoStreams.firstOrNull?.codec,
), ),
); );
final streamModel = item.streamModel;
final audioStreamIndex = selectAudioStream( final audioStreamIndex = selectAudioStream(
ref.read(userProvider.select((value) => value?.userConfiguration?.rememberAudioSelections ?? true)), ref.read(userProvider.select((value) => value?.userConfiguration?.rememberAudioSelections ?? true)),
oldModel?.mediaStreams?.currentAudioStream, oldModel?.mediaStreams?.currentAudioStream,
streamModel?.audioStreams, newStreamModel?.audioStreams,
streamModel?.defaultAudioStreamIndex); newStreamModel?.defaultAudioStreamIndex);
final subStreamIndex = selectSubStream( final subStreamIndex = selectSubStream(
ref.read(userProvider.select((value) => value?.userConfiguration?.rememberSubtitleSelections ?? true)), ref.read(userProvider.select((value) => value?.userConfiguration?.rememberSubtitleSelections ?? true)),
oldModel?.mediaStreams?.currentSubStream, oldModel?.mediaStreams?.currentSubStream,
streamModel?.subStreams, newStreamModel?.subStreams,
streamModel?.defaultSubStreamIndex); newStreamModel?.defaultSubStreamIndex);
final Response<PlaybackInfoResponse> response = await api.itemsItemIdPlaybackInfoPost( final Response<PlaybackInfoResponse> response = await api.itemsItemIdPlaybackInfoPost(
itemId: item.id, itemId: item.id,
@ -270,7 +284,7 @@ class PlaybackModelHelper {
enableDirectPlay: type != PlaybackType.transcode, enableDirectPlay: type != PlaybackType.transcode,
enableDirectStream: type != PlaybackType.transcode, enableDirectStream: type != PlaybackType.transcode,
maxStreamingBitrate: qualityOptions.enabledFirst.keys.firstOrNull?.bitRate, maxStreamingBitrate: qualityOptions.enabledFirst.keys.firstOrNull?.bitRate,
mediaSourceId: streamModel?.currentVersionStream?.id, mediaSourceId: newStreamModel?.currentVersionStream?.id,
), ),
); );
@ -278,7 +292,7 @@ class PlaybackModelHelper {
if (playbackInfo == null) return null; if (playbackInfo == null) return null;
final mediaSource = playbackInfo.mediaSources?[streamModel?.versionStreamIndex ?? 0]; final mediaSource = playbackInfo.mediaSources?[newStreamModel?.versionStreamIndex ?? 0];
if (mediaSource == null) return null; if (mediaSource == null) return null;