private void LoadVideo(string path) { // Update the descriptor with the speed from the UI. screenDescription.SpeedPercentage = player.view.RealtimePercentage; if (player.IsWaitingForIdle) { log.ErrorFormat("Player screen is currently busy loading the previous video. Aborting load."); return; } // Load the video in the player. // We send the actual file name in path, at this point the player doesn't need to know this is coming from a watched directory. LoaderVideo.LoadVideo(player, path, screenDescription); if (player.FrameServer.Loaded) { NotificationCenter.RaiseFileOpened(null, path); PreferencesManager.FileExplorerPreferences.AddRecentFile(path); PreferencesManager.Save(); } }
private static void LoadInSpecificTarget(ScreenManagerKernel manager, int targetScreen, string path, ScreenDescriptionPlayback screenDescription) { AbstractScreen screen = manager.GetScreenAt(targetScreen); if (screen is CaptureScreen) { // Loading a video onto a capture screen should not close the capture screen. // If there is room to add a second screen, we add a playback screen and load the video there, otherwise, we don't do anything. if (manager.ScreenCount == 1) { manager.AddPlayerScreen(); manager.UpdateCaptureBuffers(); LoadInSpecificTarget(manager, 1, path, screenDescription); } } else if (screen is PlayerScreen) { PlayerScreen playerScreen = screen as PlayerScreen; bool confirmed = manager.BeforeReplacingPlayerContent(targetScreen); if (!confirmed) { return; } LoadVideo(playerScreen, path, screenDescription); if (playerScreen.FrameServer.Loaded) { NotificationCenter.RaiseFileOpened(null, path); PreferencesManager.FileExplorerPreferences.AddRecentFile(path); PreferencesManager.Save(); } manager.OrganizeScreens(); manager.OrganizeCommonControls(); manager.OrganizeMenus(); manager.UpdateStatusBar(); } }
private static void LoadInSpecificTarget(ScreenManagerKernel manager, int targetScreen, string path, ScreenDescriptionPlayback screenDescription) { AbstractScreen screen = manager.GetScreenAt(targetScreen); if (screen is CaptureScreen) { // Loading a video onto a capture screen should not close the capture screen. // If there is room to add a second screen, we add a playback screen and load the video there, otherwise, we don't do anything. if (manager.ScreenCount == 1) { manager.AddPlayerScreen(); manager.UpdateCaptureBuffers(); LoadInSpecificTarget(manager, 1, path, screenDescription); } } else if (screen is PlayerScreen) { PlayerScreen playerScreen = screen as PlayerScreen; if (playerScreen.IsWaitingForIdle) { // The player screen will yield its thread after having loaded the first frame and come back later. // We must not launch a new video while it's waiting. log.ErrorFormat("Player screen is currently busy loading the previous video. Aborting load."); return; } bool confirmed = manager.BeforeReplacingPlayerContent(targetScreen); if (!confirmed) { return; } LoadVideo(playerScreen, path, screenDescription); bool prefsNeedSaving = false; if (screenDescription != null && screenDescription.IsReplayWatcher) { PreferencesManager.FileExplorerPreferences.AddRecentWatcher(path); PreferencesManager.FileExplorerPreferences.LastReplayFolder = path; prefsNeedSaving = true; } if (playerScreen.FrameServer.Loaded) { NotificationCenter.RaiseFileOpened(null, path); if (screenDescription != null && screenDescription.IsReplayWatcher) { // At this point we have lost the actual file that was loaded. The path here still contaiins the special '*' to indicate the watched folder. // The actual file is the latest file in the folder this was computed right before loading. string actualPath = FilesystemHelper.GetMostRecentFile(Path.GetDirectoryName(path)); PreferencesManager.FileExplorerPreferences.AddRecentFile(actualPath); } else { PreferencesManager.FileExplorerPreferences.AddRecentFile(path); } prefsNeedSaving = true; } if (prefsNeedSaving) { PreferencesManager.Save(); } manager.OrganizeScreens(); manager.OrganizeCommonControls(); manager.OrganizeMenus(); manager.UpdateStatusBar(); } }