From af55cbf6626d07b0dc824885602052de898f1016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= <hugo@beauzee.fr> Date: Tue, 29 Nov 2016 17:14:18 +0100 Subject: [PATCH] MediaPlaybackVM: Don't rely on ParsedChanged event to monitor PlayingType This fixes CommandBar display for some playbacks on windows phone --- .../Services/RunTime/PlaybackService.cs | 20 +++++++++++++++---- app/VLC.Core/ViewModels/MainVM.cs | 2 +- .../ViewModels/MediaPlaybackViewModel.cs | 4 ++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/VLC.Core/Services/RunTime/PlaybackService.cs b/app/VLC.Core/Services/RunTime/PlaybackService.cs index 9e3d68393..410f5ca91 100644 --- a/app/VLC.Core/Services/RunTime/PlaybackService.cs +++ b/app/VLC.Core/Services/RunTime/PlaybackService.cs @@ -48,6 +48,7 @@ namespace VLC.Services.RunTime public event Playing Playback_MediaPlaying; public event Paused Playback_MediaPaused; public event Opening Playback_Opening; + public event Action<PlayingType> PlayingTypeChanged; public event Action OnPlaylistEndReached; public event Action OnPlaylistChanged; @@ -147,7 +148,18 @@ namespace VLC.Services.RunTime } - public PlayingType PlayingType { get; set; } + private PlayingType _playingType; + public PlayingType PlayingType + { + get { return _playingType; } + set + { + if (_playingType == value) + return; + _playingType = value; + PlayingTypeChanged?.Invoke(value); + } + } public MediaState PlayerState { get; private set; } @@ -333,9 +345,6 @@ namespace VLC.Services.RunTime CurrentMedia = new Media(Instance, mrl_fromType.Item2, mrl_fromType.Item1); } - // Default to audio playback, and switch to video when a video track is encountered - PlayingType = PlayingType.Music; - // Hardware decoding CurrentMedia.addOption(!Locator.SettingsVM.HardwareAccelerationEnabled ? ":avcodec-hw=none" : ":avcodec-hw=d3d11va"); CurrentMedia.addOption(!Locator.SettingsVM.HardwareAccelerationEnabled ? ":avcodec-threads=0" : ":avcodec-threads=1"); @@ -700,6 +709,9 @@ namespace VLC.Services.RunTime private void OnPlaying() { + // If no video tracks were detected so far, assume we're playing music + if (PlayingType == PlayingType.NotPlaying) + PlayingType = PlayingType.Music; PlayerStateChanged(this, MediaState.Playing); } diff --git a/app/VLC.Core/ViewModels/MainVM.cs b/app/VLC.Core/ViewModels/MainVM.cs index bdafb4db0..08eb28432 100644 --- a/app/VLC.Core/ViewModels/MainVM.cs +++ b/app/VLC.Core/ViewModels/MainVM.cs @@ -114,7 +114,7 @@ namespace VLC.ViewModels // - The current page Locator.NavigationService.ViewNavigated += (_, __) => NotifyCommandBarDisplayModeChanged(); // And whether the media is a video or not - Locator.PlaybackService.Playback_MediaSet += (_) => NotifyCommandBarDisplayModeChanged(); + Locator.PlaybackService.PlayingTypeChanged += (_) => NotifyCommandBarDisplayModeChanged(); } private async void NotifyCommandBarDisplayModeChanged() diff --git a/app/VLC.Core/ViewModels/MediaPlaybackViewModel.cs b/app/VLC.Core/ViewModels/MediaPlaybackViewModel.cs index 9be6109d2..04d14640a 100644 --- a/app/VLC.Core/ViewModels/MediaPlaybackViewModel.cs +++ b/app/VLC.Core/ViewModels/MediaPlaybackViewModel.cs @@ -262,7 +262,7 @@ namespace VLC.ViewModels Locator.PlaybackService.OnPlaylistChanged += PlaylistService_OnPlaylistChanged; Locator.PlaybackService.OnPlaylistEndReached += OnPlaylistEndReached; Locator.PlaybackService.OnRepeatChanged += OnRepeatChanged; - Locator.PlaybackService.Playback_MediaParsed += OnMediaParsed; + Locator.PlaybackService.PlayingTypeChanged += OnPlayingTypeChanged; } private async void OnRepeatChanged(bool obj) @@ -286,7 +286,7 @@ namespace VLC.ViewModels }); } - private async void OnMediaParsed(ParsedStatus status) + private async void OnPlayingTypeChanged(PlayingType pType) { await DispatchHelper.InvokeAsync(CoreDispatcherPriority.Normal, () => { -- GitLab