/// <summary> /// Initializes a new instance of the <see cref="MainWindow"/> class. /// </summary> public MainWindow() { // Define conditions for visibility properties PropertyUpdaters = new Dictionary <string, Action> { { nameof(IsMediaOpenVisibility), () => { IsMediaOpenVisibility = Media.IsOpen ? Visibility.Visible : Visibility.Hidden; } }, { nameof(AudioControlVisibility), () => { AudioControlVisibility = Media.HasAudio ? Visibility.Visible : Visibility.Hidden; } }, { nameof(IsAudioControlEnabled), () => { IsAudioControlEnabled = Media.HasAudio; } }, { nameof(PauseButtonVisibility), () => { PauseButtonVisibility = Media.CanPause && Media.IsPlaying ? Visibility.Visible : Visibility.Collapsed; } }, { nameof(PlayButtonVisibility), () => { PlayButtonVisibility = Media.IsOpen && Media.IsPlaying == false && Media.HasMediaEnded == false ? Visibility.Visible : Visibility.Collapsed; } }, { nameof(StopButtonVisibility), () => { StopButtonVisibility = Media.IsOpen && (Media.HasMediaEnded || (Media.IsSeekable && Media.MediaState != MediaState.Stop)) ? Visibility.Visible : Visibility.Hidden; } }, { nameof(CloseButtonVisibility), () => { CloseButtonVisibility = Media.IsOpen ? Visibility.Visible : Visibility.Hidden; } }, { nameof(SeekBarVisibility), () => { SeekBarVisibility = Media.IsSeekable ? Visibility.Visible : Visibility.Hidden; } }, { nameof(BufferingProgressVisibility), () => { BufferingProgressVisibility = Media.IsBuffering ? Visibility.Visible : Visibility.Hidden; } }, { nameof(DownloadProgressVisibility), () => { DownloadProgressVisibility = Media.IsOpen && Media.HasMediaEnded == false && ((Media.DownloadProgress > 0d && Media.DownloadProgress < 0.95) || Media.IsLiveStream) ? Visibility.Visible : Visibility.Hidden; } }, { nameof(OpenButtonVisibility), () => { OpenButtonVisibility = Media.IsOpening == false ? Visibility.Visible : Visibility.Hidden; } }, { nameof(IsSpeedRatioEnabled), () => { IsSpeedRatioEnabled = Media.IsOpen && Media.IsSeekable; } }, { nameof(WindowTitle), () => { UpdateWindowTitle(); } } }; // Define triggering properties for the updaters above. PropertyTriggers = new Dictionary <string, string[]> { { nameof(Media.IsOpen), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.IsOpening), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.MediaState), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.HasMediaEnded), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.DownloadProgress), new[] { nameof(DownloadProgressVisibility) } }, { nameof(Media.IsBuffering), new[] { nameof(BufferingProgressVisibility) } }, }; // Load up WPF resources InitializeComponent(); // Load simple config. Config = ConfigRoot.Load(); RefreshHistoryItems(); // Change the default location of the ffmpeg binaries // You can get the binaries here: http://ffmpeg.zeranoe.com/builds/win32/shared/ffmpeg-3.4-win32-shared.zip FFME.MediaElement.FFmpegDirectory = Config.FFmpegPath; // You can pick which FFmpeg binaries are loaded. See issue #28 // Full Features is already the default. FFME.MediaElement.FFmpegLoadModeFlags = FFmpegLoadMode.FullFeatures; // Setup the UI // ConsoleManager.ShowConsole(); InitializeMediaEvents(); InitializeInputEvents(); InitializeMainWindow(); UpdateWindowTitle(); }
/// <summary> /// Initializes a new instance of the <see cref="MainWindow"/> class. /// </summary> public MainWindow() { PropertyUpdaters = new Dictionary <string, Action> { { nameof(IsMediaOpenVisibility), () => { IsMediaOpenVisibility = Media.IsOpen ? Visibility.Visible : Visibility.Hidden; } }, { nameof(AudioControlVisibility), () => { AudioControlVisibility = Media.HasAudio ? Visibility.Visible : Visibility.Hidden; } }, { nameof(IsAudioControlEnabled), () => { IsAudioControlEnabled = Media.HasAudio; } }, { nameof(PauseButtonVisibility), () => { PauseButtonVisibility = Media.CanPause && Media.IsPlaying ? Visibility.Visible : Visibility.Collapsed; } }, { nameof(PlayButtonVisibility), () => { PlayButtonVisibility = Media.IsOpen && Media.IsPlaying == false && Media.HasMediaEnded == false ? Visibility.Visible : Visibility.Collapsed; } }, { nameof(StopButtonVisibility), () => { StopButtonVisibility = Media.IsOpen && Media.IsSeekable && Media.MediaState != MediaState.Stop ? Visibility.Visible : Visibility.Hidden; } }, { nameof(CloseButtonVisibility), () => { CloseButtonVisibility = Media.IsOpen ? Visibility.Visible : Visibility.Hidden; } }, { nameof(SeekBarVisibility), () => { SeekBarVisibility = Media.IsSeekable ? Visibility.Visible : Visibility.Hidden; } }, { nameof(BufferingProgressVisibility), () => { BufferingProgressVisibility = Media.IsBuffering ? Visibility.Visible : Visibility.Hidden; } }, { nameof(DownloadProgressVisibility), () => { DownloadProgressVisibility = Media.IsOpen && Media.HasMediaEnded == false && ((Media.DownloadProgress > 0d && Media.DownloadProgress < 0.95) || Media.IsLiveStream) ? Visibility.Visible : Visibility.Hidden; } }, { nameof(OpenButtonVisibility), () => { OpenButtonVisibility = Media.IsOpening == false ? Visibility.Visible : Visibility.Hidden; } }, { nameof(IsSpeedRatioEnabled), () => { IsSpeedRatioEnabled = Media.IsOpen && Media.IsSeekable; } }, { nameof(WindowTitle), () => { UpdateWindowTitle(); } } }; PropertyTriggers = new Dictionary <string, string[]> { { nameof(Media.IsOpen), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.IsOpening), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.MediaState), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.HasMediaEnded), PropertyUpdaters.Keys.ToArray() }, { nameof(Media.DownloadProgress), new[] { nameof(DownloadProgressVisibility) } }, { nameof(Media.IsBuffering), new[] { nameof(BufferingProgressVisibility) } }, }; Config = ConfigRoot.Load(); RefreshHistoryItems(); // Change the default location of the ffmpeg binaries // You can get the binaries here: http://ffmpeg.zeranoe.com/builds/win32/shared/ffmpeg-3.2.4-win32-shared.zip Unosquare.FFME.MediaElement.FFmpegDirectory = Config.FFmpegPath; //ConsoleManager.ShowConsole(); InitializeComponent(); InitializeMediaEvents(); InitializeInputEvents(); InitializeMainWindow(); UpdateWindowTitle(); }