[banshee] Update the track info display when currently played song is edited (bgo#546463)



commit d4e7281627a4bd79c54e5ae08d4b73e48f7b1a9f
Author: Alexander Kojevnikov <alexander kojevnikov com>
Date:   Fri May 15 12:07:44 2009 +1000

    Update the track info display when currently played song is edited (bgo#546463)
    
    DatabaseTrackInfo.TrackEquals() has been changed to compare only by TrackIDs.
---
 .../DatabaseTrackInfo.cs                           |    5 +----
 .../Banshee.MediaEngine/PlayerEngineService.cs     |    3 ++-
 .../ColumnCellStatusIndicator.cs                   |    2 +-
 .../Banshee.Gui.TrackEditor/TrackEditorDialog.cs   |    3 ++-
 .../Banshee.Gui.Widgets/TrackInfoDisplay.cs        |   13 ++++++++++---
 5 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
index 260c0ed..bec4165 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
@@ -104,10 +104,7 @@ namespace Banshee.Collection.Database
 
         public static bool TrackEqual (DatabaseTrackInfo a, DatabaseTrackInfo b)
         {
-            return a != null && b != null && 
-                a.TrackId == b.TrackId && 
-                a.CacheModelId == b.CacheModelId && 
-                a.CacheEntryId.Equals (b.CacheEntryId);
+            return a != null && b != null && a.TrackId == b.TrackId;
         }
         
         public DatabaseArtistInfo Artist {
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
index b8a2a12..6c40bc6 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
@@ -109,7 +109,8 @@ namespace Banshee.MediaEngine
             
             MetadataService.Instance.HaveResult += OnMetadataServiceHaveResult;
             
-            TrackInfo.IsPlayingMethod = IsPlaying;
+            TrackInfo.IsPlayingMethod = track => IsPlaying (track) &&
+                ServiceManager.PlaybackController.Source == ServiceManager.SourceManager.ActiveSource;
         }
         
         private void LoadEngine (TypeExtensionNode node)
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs
index aeac5b3..c9c763d 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs
@@ -123,7 +123,7 @@ namespace Banshee.Collection.Gui
                 icon_index = (int)(track.PlaybackError == StreamPlaybackError.Drm
                     ? Icon.Protected
                     : Icon.Error);
-            } else if (ServiceManager.PlayerEngine.IsPlaying (track)) {
+            } else if (track.IsPlaying) {
                 icon_index = (int)(ServiceManager.PlayerEngine.CurrentState == PlayerState.Paused
                     ? Icon.Paused
                     : Icon.Playing);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
index 0943eb5..d9cb9bb 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
@@ -556,7 +556,8 @@ namespace Banshee.Gui.TrackEditor
             TrackInfo.ExportableMerge (track, track.SourceTrack);
             track.SourceTrack.Save ();
                 
-            if (track.SourceTrack == ServiceManager.PlayerEngine.CurrentTrack) {
+            if (track.SourceTrack.TrackEqual (ServiceManager.PlayerEngine.CurrentTrack)) {
+                TrackInfo.ExportableMerge (track, ServiceManager.PlayerEngine.CurrentTrack);
                 ServiceManager.PlayerEngine.TrackInfoUpdated ();
             }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs
index edcfcc8..4633a19 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs
@@ -311,8 +311,10 @@ namespace Banshee.Gui.Widgets
         
         private void OnPlayerEvent (PlayerEventArgs args)
         {
-            if (args.Event == PlayerEvent.StartOfStream || args.Event == PlayerEvent.TrackInfoUpdated) {
+            if (args.Event == PlayerEvent.StartOfStream) {
                 LoadCurrentTrack ();
+            } else if (args.Event == PlayerEvent.TrackInfoUpdated) {
+                LoadCurrentTrack (true);
             } else if (args.Event == PlayerEvent.StateChange && (incoming_track != null || incoming_image != null)) {
                 PlayerEventStateChangeArgs state = (PlayerEventStateChangeArgs)args;
                 if (state.Current == PlayerState.Idle) {
@@ -340,12 +342,17 @@ namespace Banshee.Gui.Widgets
             idle_timeout_id = 0;
             return false;
         }
-        
+
         private void LoadCurrentTrack ()
         {
+            LoadCurrentTrack (false);
+        }
+
+        private void LoadCurrentTrack (bool force_reload)
+        {
             TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
 
-            if (track == current_track && !IsMissingImage (current_image)) {
+            if (track == current_track && !IsMissingImage (current_image) && !force_reload) {
                 return;
             } else if (track == null) {
                 incoming_track = null;



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