@@ -47,7 +47,6 @@ internal sealed partial class PlayerControlsViewModel : ObservableRecipient, IRe
47
47
private readonly IWindowService _windowService ;
48
48
private readonly IFilesService _filesService ;
49
49
private IMediaPlayer ? _mediaPlayer ;
50
- private int _lastSubtitle = - 1 ;
51
50
52
51
public PlayerControlsViewModel (
53
52
PlaylistViewModel playlistViewModel ,
@@ -76,26 +75,54 @@ public void Receive(MediaPlayerChangedMessage message)
76
75
77
76
public void ToggleSubtitle ( KeyboardAccelerator sender , KeyboardAcceleratorInvokedEventArgs args )
78
77
{
79
- args . Handled = true ;
80
78
if ( _mediaPlayer ? . PlaybackItem == null ) return ;
81
- var subtitleTracks = _mediaPlayer . PlaybackItem . SubtitleTracks ;
79
+ PlaybackSubtitleTrackList subtitleTracks = _mediaPlayer . PlaybackItem . SubtitleTracks ;
82
80
if ( subtitleTracks . Count == 0 ) return ;
83
- if ( subtitleTracks . SelectedIndex >= 0 )
84
- {
85
- _lastSubtitle = subtitleTracks . SelectedIndex ;
86
- subtitleTracks . SelectedIndex = - 1 ; Messenger . Send (
87
- new UpdateStatusMessage ( "Subtitle: None" ) ) ;
88
- }
89
- else if ( _lastSubtitle >= 0 )
90
- {
91
- subtitleTracks . SelectedIndex = _lastSubtitle ;
92
- Messenger . Send (
93
- new UpdateStatusMessage ( $ "Subtitle: { subtitleTracks [ subtitleTracks . SelectedIndex ] . Label } ") ) ;
94
- }
95
- else
81
+ args . Handled = true ;
82
+ switch ( args . KeyboardAccelerator . Modifiers )
96
83
{
97
- args . Handled = false ;
84
+ case VirtualKeyModifiers . None when subtitleTracks . Count == 1 :
85
+ if ( subtitleTracks . SelectedIndex >= 0 )
86
+ {
87
+ subtitleTracks . SelectedIndex = - 1 ;
88
+ }
89
+ else
90
+ {
91
+ subtitleTracks . SelectedIndex = 0 ;
92
+
93
+ }
94
+ break ;
95
+
96
+ case VirtualKeyModifiers . Control :
97
+ if ( subtitleTracks . SelectedIndex == subtitleTracks . Count - 1 )
98
+ {
99
+ subtitleTracks . SelectedIndex = - 1 ;
100
+ }
101
+ else
102
+ {
103
+ subtitleTracks . SelectedIndex ++ ;
104
+ }
105
+ break ;
106
+
107
+ case VirtualKeyModifiers . Control | VirtualKeyModifiers . Shift :
108
+ if ( subtitleTracks . SelectedIndex == - 1 )
109
+ {
110
+ subtitleTracks . SelectedIndex = subtitleTracks . Count - 1 ;
111
+ }
112
+ else
113
+ {
114
+ subtitleTracks . SelectedIndex -- ;
115
+ }
116
+ break ;
117
+
118
+ default :
119
+ args . Handled = false ;
120
+ return ;
98
121
}
122
+
123
+ Messenger . Send ( subtitleTracks . SelectedIndex == - 1
124
+ ? new UpdateStatusMessage ( "Subtitle: None" )
125
+ : new UpdateStatusMessage ( $ "Subtitle: { subtitleTracks [ subtitleTracks . SelectedIndex ] . Label } ") ) ;
99
126
}
100
127
101
128
partial void OnZoomToFitChanged ( bool value )
@@ -131,7 +158,6 @@ private void OnNaturalVideoSizeChanged(IMediaPlayer sender, object? args)
131
158
{
132
159
_dispatcherQueue . TryEnqueue ( ( ) => HasVideo = _mediaPlayer ? . NaturalVideoHeight > 0 ) ;
133
160
SaveSnapshotCommand . NotifyCanExecuteChanged ( ) ;
134
- _lastSubtitle = - 1 ;
135
161
}
136
162
137
163
private void OnPlaybackStateChanged ( IMediaPlayer sender , object ? args )
0 commit comments