banshee r3513 - in trunk/banshee: . src/Clients/Nereid/Nereid src/Core/Banshee.Core/Banshee.Collection src/Core/Banshee.Services/Banshee.Collection.Database src/Core/Banshee.Services/Banshee.Database src/Core/Banshee.Services/Banshee.MediaEngine src/Core/Banshee.Services/Banshee.PlaybackController src/Core/Banshee.Services/Banshee.Query src/Core/Banshee.ThickClient/Banshee.Collection.Gui src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio



Author: gburt
Date: Sat Mar 22 00:24:42 2008
New Revision: 3513
URL: http://svn.gnome.org/viewvc/banshee?rev=3513&view=rev

Log:
2008-03-21  Gabriel Burt  <gabriel burt gmail com>

	This patch implements actually updating the play/skip counts and last
	played/skipped stamps.

	* src/Clients/Nereid/Nereid/PlayerInterface.cs: Update the status bar when
	the active source is Updated.

	* src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs: Add
	IncrementSkipCount method and LastSkipped property, and update LastSkipped
	and LastPlayed within their respective Increment methods.

	* src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs:
	Save the track after incremting its play/skip count.

	* src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs:
	Add a LastSkippedStamp column to CoreTracks.

	* src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs:
	When opening a new track or uri, if there is a currently playing song, if
	it's over half way done, call IncrementPlayCount on it, otherwise call
	IncrementSkipCount.

	* src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs: 
	Add a NOTE about refactoring to allow models to provide the random track
	functionality.

	* src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs: Add LastSkipped
	query field and sorting.

	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs:
	Add a Last Skipped column.

	* src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs:
	Within IncrementPlayCount override call the base method.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Clients/Nereid/Nereid/PlayerInterface.cs
   trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.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.Query/BansheeQuery.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
   trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.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	Sat Mar 22 00:24:42 2008
@@ -232,6 +232,7 @@
         {
             // Service events
             ServiceManager.SourceManager.ActiveSourceChanged += OnActiveSourceChanged;
+            ServiceManager.SourceManager.SourceUpdated += OnSourceUpdated;
             ServiceManager.PlayerEngine.EventChanged += OnPlayerEngineEventChanged;
             
             ActionService.TrackActions ["SearchForSameArtistAction"].Activated += OnProgrammaticSearch;
@@ -325,6 +326,13 @@
             UpdateStatusBar ();
             view_container.SearchEntry.Ready = true;
         }
+
+        private void OnSourceUpdated (SourceEventArgs args)
+        {
+            if (args.Source == ServiceManager.SourceManager.ActiveSource) {
+                UpdateStatusBar ();
+            }
+        }
         
         private void OnPlayerEngineEventChanged (object o, PlayerEngineEventArgs args) 
         {

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	Sat Mar 22 00:24:42 2008
@@ -66,6 +66,7 @@
         private int play_count;
         private int skip_count;
         private DateTime last_played;
+        private DateTime last_skipped;
         
         private StreamPlaybackError playback_error = StreamPlaybackError.None;
 
@@ -75,9 +76,16 @@
 
         public virtual void IncrementPlayCount ()
         {
+            LastPlayed = DateTime.Now;
             PlayCount++;
         }
 
+        public virtual void IncrementSkipCount ()
+        {
+            LastSkipped = DateTime.Now;
+            SkipCount++;
+        }
+
         public override string ToString ()
         {
             return String.Format ("{0} - {1} (on {2}) <{3}> [{4}]", ArtistName, TrackTitle, 
@@ -246,6 +254,11 @@
             get { return last_played; }
             set { last_played = value; }
         }
+
+        public virtual DateTime LastSkipped {
+            get { return last_skipped; }
+            set { last_skipped = value; }
+        }
         
         public virtual StreamPlaybackError PlaybackError {
             get { return playback_error; }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs	Sat Mar 22 00:24:42 2008
@@ -69,6 +69,18 @@
         {
         }
 
+        public override void IncrementPlayCount ()
+        {
+            base.IncrementPlayCount ();
+            Save ();
+        }
+
+        public override void IncrementSkipCount ()
+        {
+            base.IncrementSkipCount ();
+            Save ();
+        }
+
         public override bool TrackEqual (TrackInfo track)
         {
             if (!(track is DatabaseTrackInfo)) {
@@ -317,6 +329,12 @@
             get { return base.LastPlayed; }
             set { base.LastPlayed = value; }
         }
+
+        [DatabaseColumn ("LastSkippedStamp")]
+        public override DateTime LastSkipped {
+            get { return base.LastSkipped; }
+            set { base.LastSkipped = value; }
+        }
         
         [DatabaseColumn ("DateAddedStamp")]
         public override DateTime DateAdded {

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs	Sat Mar 22 00:24:42 2008
@@ -61,7 +61,7 @@
         // NOTE: Whenever there is a change in ANY of the database schema,
         //       this version MUST be incremented and a migration method
         //       MUST be supplied to match the new version number
-        protected const int CURRENT_VERSION = 3;
+        protected const int CURRENT_VERSION = 4;
         
         protected class DatabaseVersionAttribute : Attribute 
         {
@@ -249,6 +249,13 @@
             Execute ("UPDATE CoreSmartPlaylists SET PrimarySourceID = 1");
             return true;
         }
+
+        [DatabaseVersion (4)]
+        private bool Migrate_4 ()
+        {
+            Execute ("ALTER TABLE CoreTracks ADD COLUMN LastSkippedStamp INTEGER");
+            return true;
+        }
         
 #pragma warning restore 0169
         
@@ -318,6 +325,7 @@
                     PlayCount           INTEGER,
                     SkipCount           INTEGER,
                     LastPlayedStamp     INTEGER,
+                    LastSkippedStamp    INTEGER,
                     DateAddedStamp      INTEGER,
                     DateUpdatedStamp    INTEGER
                 )
@@ -332,7 +340,7 @@
             Execute("CREATE INDEX CoreTracksPlayCountIndex ON CoreTracks(PlayCount)");
             Execute("CREATE INDEX CoreTracksDiscIndex ON CoreTracks(Disc)");
             Execute("CREATE INDEX CoreTracksTrackNumberIndex ON CoreTracks(TrackNumber)");
-            Execute("CREATE INDEX CoreTracksTitleeIndex ON CoreTracks(Title)");
+            Execute("CREATE INDEX CoreTracksTitleIndex ON CoreTracks(Title)");
             
             Execute(@"
                 CREATE TABLE CoreAlbums (
@@ -490,6 +498,7 @@
                         NumberOfPlays,
                         0,
                         LastPlayedStamp,
+                        NULL,
                         DateAddedStamp,
                         DateAddedStamp
                         FROM Tracks

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	Sat Mar 22 00:24:42 2008
@@ -282,6 +282,15 @@
             FindSupportingEngine (uri);
             CheckPending ();
             
+            if (active_engine.CurrentTrack != null) {
+                // If we're at least 50% done playing a song, mark it as played, otherwise as skipped
+                if (active_engine.Length > 0 && active_engine.Position >= active_engine.Length / 2) {
+                    active_engine.CurrentTrack.IncrementPlayCount ();
+                } else {
+                    active_engine.CurrentTrack.IncrementSkipCount ();
+                }
+            }
+            
             if (track != null) {
                 active_engine.Open (track);
             } else if (uri != null) {

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	Sat Mar 22 00:24:42 2008
@@ -227,6 +227,7 @@
         
         private TrackInfo QueryTrackRandom ()
         {
+            // TODO let the TrackModel give us a random track
             return Source.TrackModel[random.Next (0, Source.TrackModel.Count - 1)];
         }
         

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs	Sat Mar 22 00:24:42 2008
@@ -176,6 +176,13 @@
             "lastplayed", "played", "playedon"
         );
 
+        public static QueryField LastSkippedField = new QueryField (
+            "lastskipped", Catalog.GetString ("Last Skipped Date"), "CoreTracks.LastSkippedStamp", typeof(DateQueryValue),
+            // Translators: These are unique search fields.  Please, no spaces. Blank ok.
+            Catalog.GetString ("lastskipped"), Catalog.GetString ("skipped"), Catalog.GetString ("skippedon"),
+            "lastskipped", "skipped", "skippedon"
+        );
+
         public static QueryField DateAddedField = new QueryField (
             "added", Catalog.GetString ("Date Added"), "CoreTracks.DateAddedStamp", typeof(DateQueryValue),
             // Translators: These are unique search fields.  Please, no spaces. Blank ok.
@@ -197,7 +204,7 @@
 
         public static QueryFieldSet FieldSet = new QueryFieldSet (
             ArtistField, AlbumField, DiscField, TitleField, YearField, GenreField, ComposerField, RatingField, PlayCountField,
-            SkipCountField, FileSizeField, UriField, DurationField, MimeTypeField, LastPlayedField,
+            SkipCountField, FileSizeField, UriField, DurationField, MimeTypeField, LastPlayedField, LastSkippedField,
             DateAddedField, PlaylistField, SmartPlaylistField
         );
 
@@ -256,6 +263,7 @@
                 case "PlayCount":
                 case "SkipCount":
                 case "LastPlayedStamp":
+                case "LastSkippedStamp":
                 case "DateAddedStamp":
                 case "Uri":
                 case "Composer":

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs	Sat Mar 22 00:24:42 2008
@@ -67,6 +67,7 @@
                 new SortableColumn (Catalog.GetString ("Skip Count"), new ColumnCellText ("SkipCount", true), 0.15, "SkipCount"),
                 //new SortableColumn ("Rating", new RatingColumnCell (null, true), 0.15, "Rating"),
                 new SortableColumn (Catalog.GetString ("Last Played"), new ColumnCellDateTime ("LastPlayed", true), 0.15, "LastPlayedStamp"),
+                new SortableColumn (Catalog.GetString ("Last Skipped"), new ColumnCellDateTime ("LastSkipped", true), 0.15, "LastSkippedStamp"),
                 new SortableColumn (Catalog.GetString ("Date Added"), new ColumnCellDateTime ("DateAdded", true), 0.15, "DateAddedStamp"),
                 new SortableColumn (Catalog.GetString ("Location"), new ColumnCellText ("Uri", true), 0.15, "Uri"),
                 new SortableColumn (Catalog.GetString ("Composer"), new ColumnCellText ("Composer", true), 0.25, "Composer")

Modified: trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs	Sat Mar 22 00:24:42 2008
@@ -85,6 +85,8 @@
 
         public override void IncrementPlayCount ()
         {
+            base.IncrementPlayCount ();
+
             station.PlayCount++;
             station.Save ();
         }



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