[banshee] [PlayerEngine] Added Initialize/DelayedInitialize
- From: Aaron Bockover <abock src gnome org>
- To: svn-commits-list gnome org
- Subject: [banshee] [PlayerEngine] Added Initialize/DelayedInitialize
- Date: Tue, 26 May 2009 21:07:47 -0400 (EDT)
commit 978959dd1e0fece7d0247ebebf5ce4007a1f440a
Author: Aaron Bockover <abockover novell com>
Date: Tue May 26 21:07:56 2009 -0400
[PlayerEngine] Added Initialize/DelayedInitialize
PlayerEngine now has an Initialize method which can be invoked
delayed by PlayerEngineService.DelayedInitialize
(ala IDelayedInitializeService). Just before a PlayerEngine is
initialized, the EngineBeforeInitialize event is raised on the
PlayerEngineService, and after it is initialized, the
EngineAfterInitialize event is raised.
This provides hooks for other services to configure the engine
before it is constructed, and interact with it after it is
safely constructed.
---
.../Banshee.GStreamer/PlayerEngine.cs | 23 +++----------
.../Banshee.MediaEngine/PlayerEngine.cs | 12 ++++++-
.../Banshee.MediaEngine/PlayerEngineService.cs | 36 ++++++++++++++++++-
3 files changed, 50 insertions(+), 21 deletions(-)
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
index 306b91c..ffb89be 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
@@ -108,25 +108,12 @@ namespace Banshee.GStreamer
}
}
}
-
- public PlayerEngine ()
- {
- if (ServiceManager.IsInitialized) {
- Initialize ();
- } else {
- ServiceManager.ServiceStarted += OnServiceStarted;
- }
- }
-
- private void OnServiceStarted (ServiceStartedArgs args)
- {
- if (args.Service is Service) {
- ServiceManager.ServiceStarted -= OnServiceStarted;
- Initialize ();
- }
+
+ protected override bool DelayedInitialize {
+ get { return true; }
}
-
- private void Initialize ()
+
+ protected override void Initialize ()
{
IntPtr ptr = bp_new ();
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
index 9ae85f8..1f7a1ec 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
@@ -54,7 +54,17 @@ namespace Banshee.MediaEngine
private PlayerState idle_state = PlayerState.NotReady;
protected abstract void OpenUri (SafeUri uri);
-
+
+ internal protected virtual bool DelayedInitialize {
+ get { return false; }
+ }
+
+ public bool IsInitialized { get; internal set; }
+
+ internal protected virtual void Initialize ()
+ {
+ }
+
public void Reset ()
{
current_track = null;
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
index 6c40bc6..ebd455e 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
@@ -47,7 +47,8 @@ namespace Banshee.MediaEngine
{
public delegate bool TrackInterceptHandler (TrackInfo track);
- public class PlayerEngineService : IInitializeService, IRequiredService, IPlayerEngineService, IDisposable
+ public class PlayerEngineService : IInitializeService, IDelayedInitializeService,
+ IRequiredService, IPlayerEngineService, IDisposable
{
private List<PlayerEngine> engines = new List<PlayerEngine> ();
private PlayerEngine active_engine;
@@ -61,6 +62,8 @@ namespace Banshee.MediaEngine
public event EventHandler PlayWhenIdleRequest;
public event TrackInterceptHandler TrackIntercept;
+ public event Action<PlayerEngine> EngineBeforeInitialize;
+ public event Action<PlayerEngine> EngineAfterInitialize;
private event DBusPlayerEventHandler dbus_event_changed;
event DBusPlayerEventHandler IPlayerEngineService.EventChanged {
@@ -78,7 +81,7 @@ namespace Banshee.MediaEngine
{
}
- public void Initialize ()
+ void IInitializeService.Initialize ()
{
preferred_engine_id = EngineSchema.Get();
@@ -112,6 +115,31 @@ namespace Banshee.MediaEngine
TrackInfo.IsPlayingMethod = track => IsPlaying (track) &&
ServiceManager.PlaybackController.Source == ServiceManager.SourceManager.ActiveSource;
}
+
+ private void InitializeEngine (PlayerEngine engine)
+ {
+ var handler = EngineBeforeInitialize;
+ if (handler != null) {
+ handler (engine);
+ }
+
+ engine.Initialize ();
+ engine.IsInitialized = true;
+
+ handler = EngineAfterInitialize;
+ if (handler != null) {
+ handler (engine);
+ }
+ }
+
+ void IDelayedInitializeService.DelayedInitialize ()
+ {
+ foreach (var engine in Engines) {
+ if (engine.DelayedInitialize) {
+ InitializeEngine (engine);
+ }
+ }
+ }
private void LoadEngine (TypeExtensionNode node)
{
@@ -120,6 +148,10 @@ namespace Banshee.MediaEngine
private void LoadEngine (PlayerEngine engine)
{
+ if (!engine.DelayedInitialize) {
+ InitializeEngine (engine);
+ }
+
engine.EventChanged += OnEngineEventChanged;
if (engine.Id == preferred_engine_id) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]