[longomatch] Make playlists work again



commit 8d8a418f39923cf62620afe3b6990d6b3a5e14d2
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Mon Jan 30 22:21:04 2012 +0100

    Make playlists work again

 LongoMatch.Services/Services/Core.cs            |   11 +++++---
 LongoMatch.Services/Services/PlaylistManager.cs |   33 ++++++++++++++++------
 2 files changed, 31 insertions(+), 13 deletions(-)
---
diff --git a/LongoMatch.Services/Services/Core.cs b/LongoMatch.Services/Services/Core.cs
index 94f2ee5..cecac51 100644
--- a/LongoMatch.Services/Services/Core.cs
+++ b/LongoMatch.Services/Services/Core.cs
@@ -36,6 +36,8 @@ namespace LongoMatch.Services
 		static EventsManager eManager;
 		static HotKeysManager hkManager;
 		static GameUnitsManager guManager;
+		static PlaylistManager plManager;
+		static RenderingJobsManager videoRenderer;
 		static IMainWindow mainWindow;
 		static IGUIToolkit guiToolkit;
 
@@ -61,7 +63,6 @@ namespace LongoMatch.Services
 		}
 		
 		public static void StartServices(IGUIToolkit guiToolkit, IMultimediaToolkit multimediaToolkit){
-			RenderingJobsManager videoRenderer;
 			ProjectsManager projectsManager;
 				
 			/* Start TemplatesService */
@@ -80,16 +81,17 @@ namespace LongoMatch.Services
 
 			/* Start the rendering jobs manager */
 			videoRenderer = new RenderingJobsManager(multimediaToolkit, guiToolkit);
-			mainWindow.RenderPlaylistEvent += (playlist) => {
-				videoRenderer.AddJob(guiToolkit.ConfigureRenderingJob(playlist));};
 			
 			/* Start Game Units manager */
 			guManager = new GameUnitsManager(mainWindow, mainWindow.Player);
 			
+			/* Start playlists manager */
+			plManager = new PlaylistManager(guiToolkit, videoRenderer);
+			
 			projectsManager = new ProjectsManager(guiToolkit, multimediaToolkit);
 			projectsManager.OpenedProjectChanged += OnOpenedProjectChanged;
 		}
-		
+
 		public static void BindEvents(IMainWindow mainWindow) {
 			/* Connect player events */
 			/* FIXME:
@@ -146,6 +148,7 @@ namespace LongoMatch.Services
 			eManager.OpenedProjectType = projectType;
 			
 			guManager.OpenedProject = project;
+			plManager.OpenedProject = project;
 		}
 		
 		private static void SetupBaseDir() {
diff --git a/LongoMatch.Services/Services/PlaylistManager.cs b/LongoMatch.Services/Services/PlaylistManager.cs
index 6fb0ccd..5952274 100644
--- a/LongoMatch.Services/Services/PlaylistManager.cs
+++ b/LongoMatch.Services/Services/PlaylistManager.cs
@@ -33,15 +33,16 @@ namespace LongoMatch.Services
 		IPlaylistWidget playlistWidget;
 		IPlayList playlist;
 		IPlayer player;
+		IRenderingJobsManager videoRenderer;
 		/* FIXME */
-		Project openedProject;
 		TimeNode selectedTimeNode;
 		
 		bool clockStarted;
 		Timer timeout;
 		
-		public PlaylistManager (IGUIToolkit guiToolkit)
+		public PlaylistManager (IGUIToolkit guiToolkit, IRenderingJobsManager videoRenderer)
 		{
+			this.videoRenderer = videoRenderer;
 			this.guiToolkit = guiToolkit;
 			playlistWidget = guiToolkit.MainWindow.Playlist;
 			player = guiToolkit.MainWindow.Player;
@@ -52,6 +53,11 @@ namespace LongoMatch.Services
 			StopClock();
 		}
 		
+		public Project OpenedProject {
+			get;
+			set;
+		}
+		
 		public void Load(string filePath) {
 			try {
 				playlist = PlayList.Load(filePath);
@@ -77,6 +83,7 @@ namespace LongoMatch.Services
 			mainWindow.PlayListNodeAddedEvent += OnPlayListNodeAdded;
 			mainWindow.PlayListNodeSelectedEvent += LoadPlaylistPlay;
 			mainWindow.ApplyRateEvent += (p) => {p.Rate = player.Rate;};
+			mainWindow.RenderPlaylistEvent += OnRenderPlaylistEvent;
 			
 			/* Handle Next/Prev from the player */
 			player.Next += () => {Next();};
@@ -93,6 +100,13 @@ namespace LongoMatch.Services
 		
 		private void LoadPlaylistPlay(PlayListPlay play)
 		{
+			if(OpenedProject != null) {
+				guiToolkit.ErrorMessage(Catalog.GetString(
+					"Please, close the opened project to play the playlist."));
+				Stop();
+				return;
+			}
+			
 			StartClock();
 			player.SetPlayListElement(play.MediaFile.FilePath, play.Start.MSeconds,
 			                          play.Stop.MSeconds, play.Rate, playlist.HasNext());
@@ -100,12 +114,6 @@ namespace LongoMatch.Services
 		}
 		
 		private bool Next() {
-			if(openedProject != null) {
-				guiToolkit.ErrorMessage(Catalog.GetString("Please, close the opened project to play the playlist."));
-				Stop();
-				return false;
-			}
-			
 			if (!playlist.HasNext()) {
 				Stop();
 				return false;
@@ -157,10 +165,17 @@ namespace LongoMatch.Services
 			return;
 		}
 		
+		protected virtual void OnRenderPlaylistEvent (IPlayList playlist)
+		{
+			Job job = guiToolkit.ConfigureRenderingJob(playlist);
+			if (job != null)
+				videoRenderer.AddJob(job);
+		}
+		
 		protected virtual void OnPlayListNodeAdded(Play play)
 		{
 			Add(new PlayListPlay {
-				MediaFile = openedProject.Description.File,
+				MediaFile = OpenedProject.Description.File,
 				Drawings = play.Drawings,
 				Start = play.Start,
 				Stop = play.Stop,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]