banshee r3861 - in trunk/banshee: . src/Clients/Nereid/Nereid src/Core/Banshee.Services/Banshee.MediaEngine src/Core/Banshee.Services/Banshee.PlaybackController src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Collection.Gui src/Core/Banshee.ThickClient/Banshee.Gui src/Core/Banshee.ThickClient/Banshee.Sources.Gui src/Extensions/Banshee.MiniMode/Banshee.MiniMode src/Extensions/Banshee.PlayQueue src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue
- From: gburt svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3861 - in trunk/banshee: . src/Clients/Nereid/Nereid src/Core/Banshee.Services/Banshee.MediaEngine src/Core/Banshee.Services/Banshee.PlaybackController src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Collection.Gui src/Core/Banshee.ThickClient/Banshee.Gui src/Core/Banshee.ThickClient/Banshee.Sources.Gui src/Extensions/Banshee.MiniMode/Banshee.MiniMode src/Extensions/Banshee.PlayQueue src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue
- Date: Thu, 1 May 2008 22:23:46 +0100 (BST)
Author: gburt
Date: Thu May 1 21:23:46 2008
New Revision: 3861
URL: http://svn.gnome.org/viewvc/banshee?rev=3861&view=rev
Log:
2008-05-01 Gabriel Burt <gabriel burt gmail com>
* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtistListView.cs:
* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs:
* src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceComboBox.cs:
* src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs:
* src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs:
* src/Clients/Nereid/Nereid/PlayerInterface.cs:
Use NextSource instead of Source.
* src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.mdp: Updated.
* src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs:
Change to the play queue on the next transition after adding items to it.
Fixes BGO #524637.
* src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs: Clean up method.
* src/Core/Banshee.Services/Banshee.Sources/Source.cs: Override ToString = Name
* src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs:
Add NextSource property, which you can set to change the source on the
next transition.
* src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs:
Add IsPlaying () convenience method.
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Clients/Nereid/Nereid/PlayerInterface.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtistListView.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceComboBox.cs
trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.mdp
trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
Modified: trunk/banshee/src/Clients/Nereid/Nereid/PlayerInterface.cs
==============================================================================
--- trunk/banshee/src/Clients/Nereid/Nereid/PlayerInterface.cs (original)
+++ trunk/banshee/src/Clients/Nereid/Nereid/PlayerInterface.cs Thu May 1 21:23:46 2008
@@ -250,14 +250,23 @@
};
composite_view.TrackView.RowActivated += delegate (object o, RowActivatedArgs<TrackInfo> args) {
- SetPlaybackControllerSource (ServiceManager.SourceManager.ActiveSource);
- ServiceManager.PlayerEngine.OpenPlay (args.RowValue);
+ Source source = ServiceManager.SourceManager.ActiveSource;
+ if (source is ITrackModelSource) {
+ ServiceManager.PlaybackController.Source = (ITrackModelSource)source;
+ ServiceManager.PlayerEngine.OpenPlay (args.RowValue);
+ }
};
source_view.RowActivated += delegate {
- SetPlaybackControllerSource (ServiceManager.SourceManager.ActiveSource);
- if (GtkUtilities.NoImportantModifiersAreSet (Gdk.ModifierType.ControlMask)) {
- ServiceManager.PlaybackController.Next ();
+ Source source = ServiceManager.SourceManager.ActiveSource;
+ if (source is ITrackModelSource) {
+ ServiceManager.PlaybackController.NextSource = (ITrackModelSource)source;
+ // Allow changing the play source without stopping the current song by
+ // holding ctrl when activating a source. After the song is done, playback will
+ // continue from the new source.
+ if (GtkUtilities.NoImportantModifiersAreSet (Gdk.ModifierType.ControlMask)) {
+ ServiceManager.PlaybackController.Next ();
+ }
}
};
@@ -482,17 +491,6 @@
UpdateSourceInformation ();
}
- private void SetPlaybackControllerSource (Source source)
- {
- // Set the source from which to play to the current source since
- // the user manually began playback from this source
- if (!(source is ITrackModelSource)) {
- source = ServiceManager.SourceManager.DefaultSource;
- }
-
- ServiceManager.PlaybackController.Source = (ITrackModelSource)source;
- }
-
private void UpdateSourceInformation ()
{
Source source = ServiceManager.SourceManager.ActiveSource;
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs Thu May 1 21:23:46 2008
@@ -431,8 +431,12 @@
public bool IsPlaying (TrackInfo track)
{
- return CurrentState != PlayerEngineState.Idle && CurrentState != PlayerEngineState.NotReady &&
- track != null && track.TrackEqual (CurrentTrack);
+ return IsPlaying () && track != null && track.TrackEqual (CurrentTrack);
+ }
+
+ public bool IsPlaying ()
+ {
+ return CurrentState != PlayerEngineState.Idle && CurrentState != PlayerEngineState.NotReady;
}
private void CheckPending ()
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs Thu May 1 21:23:46 2008
@@ -63,6 +63,7 @@
private PlayerEngineService player_engine;
private ITrackModelSource source;
+ private ITrackModelSource next_source;
private event PlaybackControllerStoppedHandler dbus_stopped;
event PlaybackControllerStoppedHandler IPlaybackController.Stopped {
@@ -72,6 +73,7 @@
public event EventHandler Stopped;
public event EventHandler SourceChanged;
+ public event EventHandler NextSourceChanged;
public event EventHandler TrackStarted;
public event EventHandler Transition;
@@ -131,6 +133,7 @@
public void First ()
{
+ Source = NextSource;
// This and OnTransition() below commented out b/c of BGO #524556
//raise_started_after_transition = true;
@@ -150,6 +153,7 @@
public void Next (bool restart)
{
+ Source = NextSource;
raise_started_after_transition = true;
player_engine.IncrementLastPlayed ();
@@ -170,6 +174,7 @@
public void Previous (bool restart)
{
+ Source = NextSource;
raise_started_after_transition = true;
player_engine.IncrementLastPlayed ();
@@ -313,6 +318,14 @@
}
}
+ protected void OnNextSourceChanged ()
+ {
+ EventHandler handler = NextSourceChanged;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
protected virtual void OnTrackStarted ()
{
EventHandler handler = TrackStarted;
@@ -337,6 +350,7 @@
set {
if (source != value) {
+ NextSource = value;
source = value;
source_set_at = DateTime.Now;
OnSourceChanged ();
@@ -344,6 +358,20 @@
}
}
+ public ITrackModelSource NextSource {
+ get { return next_source ?? Source; }
+ set {
+ if (next_source != value) {
+ next_source = value;
+ OnNextSourceChanged ();
+
+ if (!player_engine.IsPlaying ()) {
+ Source = next_source;
+ }
+ }
+ }
+ }
+
public PlaybackShuffleMode ShuffleMode {
get { return shuffle_mode; }
set { shuffle_mode = value; }
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs Thu May 1 21:23:46 2008
@@ -583,6 +583,11 @@
}
#endregion
+
+ public override string ToString ()
+ {
+ return Name;
+ }
string IService.ServiceName {
get { return String.Format ("{0}{1}", DBusServiceManager.MakeDBusSafeString (Name), "Source"); }
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs Thu May 1 21:23:46 2008
@@ -53,7 +53,7 @@
RowHeightProvider = renderer.ComputeRowHeight;
RowActivated += delegate {
- ServiceManager.PlaybackController.Source = (ServiceManager.SourceManager.ActiveSource
+ ServiceManager.PlaybackController.NextSource = (ServiceManager.SourceManager.ActiveSource
as Banshee.Sources.ITrackModelSource);
ServiceManager.PlaybackController.Next ();
};
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtistListView.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtistListView.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtistListView.cs Thu May 1 21:23:46 2008
@@ -48,7 +48,7 @@
ColumnController = column_controller;
RowActivated += delegate {
- ServiceManager.PlaybackController.Source = (ServiceManager.SourceManager.ActiveSource as Banshee.Sources.ITrackModelSource);
+ ServiceManager.PlaybackController.NextSource = (ServiceManager.SourceManager.ActiveSource as Banshee.Sources.ITrackModelSource);
ServiceManager.PlaybackController.Next ();
};
}
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs Thu May 1 21:23:46 2008
@@ -230,17 +230,17 @@
private void OnJumpToPlayingTrack (object o, EventArgs args)
{
- Source playback_src = ServiceManager.PlaybackController.Source as Source;
+ ITrackModelSource track_src = ServiceManager.PlaybackController.Source;
+ Source src = track_src as Source;
- if (playback_src != null && playback_src is ITrackModelSource) {
- ITrackModelSource track_src = (playback_src as ITrackModelSource);
+ if (track_src != null && src != null) {
int i = track_src.TrackModel.IndexOf (ServiceManager.PlaybackController.CurrentTrack);
if (i != -1) {
// TODO clear the search/filters if there are any, since they might be hiding the currently playing item?
// and/or switch to the track's primary source? what if it's been removed from the library all together?
- IListView<TrackInfo> track_list = (track_src as Source).Properties.Get<IListView<TrackInfo>> ("Track.IListView");
+ IListView<TrackInfo> track_list = src.Properties.Get<IListView<TrackInfo>> ("Track.IListView");
if (track_list != null) {
- ServiceManager.SourceManager.SetActiveSource (playback_src);
+ ServiceManager.SourceManager.SetActiveSource (src);
track_src.TrackModel.Selection.Clear (false);
track_src.TrackModel.Selection.Select (i);
track_list.CenterOn (i);
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs Thu May 1 21:23:46 2008
@@ -116,7 +116,7 @@
Pixbuf icon = SourceIconResolver.ResolveIcon (source);
FontDescription fd = widget.PangoContext.FontDescription.Copy ();
- fd.Weight = (ISource)ServiceManager.PlaybackController.Source == (ISource)source
+ fd.Weight = (ISource)ServiceManager.PlaybackController.NextSource == (ISource)source
? Pango.Weight.Bold
: Pango.Weight.Normal;
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs Thu May 1 21:23:46 2008
@@ -126,7 +126,7 @@
});
};
- ServiceManager.PlaybackController.SourceChanged += delegate {
+ ServiceManager.PlaybackController.NextSourceChanged += delegate {
QueueDraw ();
};
Modified: trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceComboBox.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceComboBox.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceComboBox.cs Thu May 1 21:23:46 2008
@@ -80,7 +80,7 @@
if(new_source != null && ServiceManager.SourceManager.ActiveSource != new_source) {
ServiceManager.SourceManager.SetActiveSource(new_source);
if(new_source is ITrackModelSource) {
- ServiceManager.PlaybackController.Source = (ITrackModelSource)new_source;
+ ServiceManager.PlaybackController.NextSource = (ITrackModelSource)new_source;
}
}
}
Modified: trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.mdp
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.mdp (original)
+++ trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.mdp Thu May 1 21:23:46 2008
@@ -9,9 +9,9 @@
</Configurations>
<Contents>
<File name="Banshee.PlayQueue/PlayQueueSource.cs" subtype="Code" buildaction="Compile" />
- <File name="Resources/Banshee.PlayQueue.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
<File name="Resources/ActiveSourceUI.xml" subtype="Code" buildaction="EmbedAsResource" />
<File name="Resources/GlobalUI.xml" subtype="Code" buildaction="EmbedAsResource" />
+ <File name="Banshee.PlayQueue.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
</Contents>
<References>
<ProjectReference type="Project" localcopy="True" refto="Banshee.Core" />
Modified: trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs Thu May 1 21:23:46 2008
@@ -73,6 +73,8 @@
ServiceManager.SourceManager.AddSource (this);
+ // TODO change this Gtk.Action code so that the actions can be removed. And so this
+ // class doesn't depend on Gtk/ThickClient.
InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
uia_service.TrackActions.Add (new ActionEntry [] {
new ActionEntry ("AddToPlayQueueAction", Stock.Add,
@@ -110,14 +112,22 @@
ServiceManager.SourceManager.MusicLibrary.TracksDeleted += HandleTracksDeleted;
ServiceManager.SourceManager.VideoLibrary.TracksChanged += HandleTracksChanged;
ServiceManager.SourceManager.VideoLibrary.TracksDeleted += HandleTracksDeleted;
+
+ TrackModel.Reloaded += delegate {
+ if (Count == 0) {
+ ServiceManager.PlaybackController.Source = (ITrackModelSource)ServiceManager.SourceManager.DefaultSource;
+ }
+ };
+
+ Reload ();
- SetAsPlayingSource ();
+ SetAsPlaybackSourceUnlessPlaying ();
}
- private void SetAsPlayingSource ()
+ private void SetAsPlaybackSourceUnlessPlaying ()
{
- if (Count > 0 && ServiceManager.PlayerEngine.CurrentState != PlayerEngineState.Playing) {
- ServiceManager.PlaybackController.Source = this;
+ if (Count > 0) {
+ ServiceManager.PlaybackController.NextSource = this;
}
}
@@ -149,7 +159,7 @@
protected override void OnTracksAdded ()
{
base.OnTracksAdded ();
- SetAsPlayingSource ();
+ SetAsPlaybackSourceUnlessPlaying ();
}
protected override void OnUpdated ()
@@ -173,7 +183,11 @@
if (args.Event == PlayerEngineEvent.EndOfStream) {
RemovePlayingTrack ();
} else if (args.Event == PlayerEngineEvent.StartOfStream) {
- playing_track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
+ if (this == ServiceManager.PlaybackController.Source) {
+ playing_track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
+ } else {
+ playing_track = null;
+ }
}
}
@@ -184,6 +198,7 @@
private void OnClearPlayQueue (object o, EventArgs args)
{
+ playing_track = null;
RemoveTrackRange ((DatabaseTrackListModel)TrackModel, new Hyena.Collections.RangeCollection.Range (0, Count));
Reload ();
}
@@ -222,10 +237,8 @@
{
RemovePlayingTrack ();
- if (Count <= 0) {
- playing_track = null;
- ServiceManager.PlaybackController.Source = (ITrackModelSource)ServiceManager.SourceManager.DefaultSource;
- ServiceManager.PlaybackController.Next ();
+ if (Count == 0) {
+ ServiceManager.PlaybackController.Next (restart);
return;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]