banshee r4425 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.MediaEngine src/Core/Banshee.Services/Banshee.Query src/Core/Banshee.ThickClient/Banshee.Collection.Gui src/Core/Banshee.ThickClient/Banshee.Gui src/Extensions/Banshee.Podcasting/Resources



Author: gburt
Date: Sun Aug 24 01:48:33 2008
New Revision: 4425
URL: http://svn.gnome.org/viewvc/banshee?rev=4425&view=rev

Log:
2008-08-23  Gabriel Burt  <gabriel burt gmail com>

	* src/Extensions/Banshee.Podcasting/Resources/ActiveSourceUI.xml: Put
	'Mark New' above 'Mark Old'.

	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs:
	Add Album Artist, Comment, Track Count, Disc Count, Bpm, BitRate,
	Conductor, and Grouping column.

	* src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs:
	* src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs: Add
	helpers for adding/removing UIManager elements.

	* src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs: Add
	AlbumArtist, Disc Count, TrackCount, Bpm, BitRate, Conductor, and Gruping
	query fields and sorting.  Add TrackNumber, which previously was defined
	as a query field but not in the default FieldSet.

	* src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs:
	Don't increment the play/skip count if the file had an error.



Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs
   trunk/banshee/src/Extensions/Banshee.Podcasting/Resources/ActiveSourceUI.xml

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	Sun Aug 24 01:48:33 2008
@@ -318,7 +318,7 @@
         private bool incremented_last_played = true;
         public void IncrementLastPlayed ()
         {
-            if (!incremented_last_played && active_engine.CurrentTrack != null) {
+            if (!incremented_last_played && CurrentTrack != null && CurrentTrack.PlaybackError == StreamPlaybackError.None) {
                 // If we're at least 50% done playing a song, mark it as played, otherwise as skipped
                 // If the Length <= 0, assume the song was finished and increment its play count
                 if (active_engine.Length <= 0 || active_engine.Position >= active_engine.Length / 2) {

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	Sun Aug 24 01:48:33 2008
@@ -97,6 +97,16 @@
             "by", "artist", "artists"
         );
 
+        public static QueryField AlbumArtistField = new QueryField (
+            "albumartist", "AlbumArtist",
+            Catalog.GetString ("Album Artist"), "CoreAlbums.ArtistNameLowered", true,
+            // Translators: These are unique search aliases for "album".  Please, no spaces. Blank ok.
+            Catalog.GetString ("albumartist"), Catalog.GetString ("compilationartist"),
+            "albumartist", "compilationartist"
+        );
+
+        // TODO add IsCompilationField
+
         public static QueryField AlbumField = new QueryField (
             "album", "AlbumTitle",
             Catalog.GetString ("Album"), "CoreAlbums.TitleLowered", true,
@@ -112,6 +122,14 @@
             Catalog.GetString ("disc"), Catalog.GetString ("cd"), Catalog.GetString ("discnum"),
             "disc", "cd", "discnum"
         );
+
+        public static QueryField DiscCountField = new QueryField (
+            "disccount", "DiscCount",
+            Catalog.GetString ("Disc Count"), "CoreTracks.DiscCount", typeof(NaturalIntegerQueryValue),
+            // Translators: These are unique search fields (and nouns).  Please, no spaces. Blank ok.
+            Catalog.GetString ("discs"), Catalog.GetString ("cds"),
+            "discs", "cds"
+        );
         
         public static QueryField TrackNumberField = new QueryField (
             "track", "TrackNumber",
@@ -122,6 +140,33 @@
             "track", "trackno", "tracknum"
         );
 
+        public static QueryField TrackCountField = new QueryField (
+            "trackcount", "TrackCount",
+            // Translators: noun
+            Catalog.GetString ("Track Count"), "CoreTracks.TrackCount", typeof(NaturalIntegerQueryValue),
+            // Translators: These are unique search fields.  Please, no spaces. Blank ok.
+            Catalog.GetString ("tracks"), Catalog.GetString ("trackcount"),
+            "tracks", "trackcount"
+        );
+
+        public static QueryField BpmField = new QueryField (
+            "bpm", "Bpm",
+            // Translators: noun
+            Catalog.GetString ("BPM"), "CoreTracks.BPM", typeof(NaturalIntegerQueryValue),
+            // Translators: These are unique search fields.  Please, no spaces. Blank ok.
+            Catalog.GetString ("bpm"),
+            "bpm"
+        );
+
+        public static QueryField BitRateField = new QueryField (
+            "bitrate", "BitRate",
+            // Translators: noun
+            Catalog.GetString ("Bit Rate"), "CoreTracks.BitRate", typeof(NaturalIntegerQueryValue),
+            // Translators: These are unique search fields.  Please, no spaces. Blank ok.
+            Catalog.GetString ("bitrate"), Catalog.GetString ("kbs"), Catalog.GetString ("kps"),
+            "bitrate", "kbs", "kps"
+        );
+
         public static QueryField TitleField = new QueryField (
             "title", "TrackTitle",
             Catalog.GetString ("Title"), "CoreTracks.TitleLowered", true,
@@ -152,6 +197,20 @@
             Catalog.GetString ("composer"), "composer"
         );
 
+        public static QueryField ConductorField = new QueryField (
+            "conductor", "Conductor",
+            Catalog.GetString ("Conductor"), "CoreTracks.Conductor", false,
+            // Translators: These are unique search fields.  Please, no spaces. Blank ok.
+            Catalog.GetString ("conductor"), "conductor"
+        );
+
+        public static QueryField GroupingField = new QueryField (
+            "grouping", "Grouping",
+            Catalog.GetString ("Grouping"), "CoreTracks.Grouping", false,
+            // Translators: These are unique search fields.  Please, no spaces. Blank ok.
+            Catalog.GetString ("grouping"), "grouping"
+        );
+
         public static QueryField CommentField = new QueryField (
             "comment", "Comment",
             // Translators: noun
@@ -202,7 +261,7 @@
 
         public static QueryField DurationField = new QueryField (
             "duration", "Duration",
-            Catalog.GetString ("Duration"), "CoreTracks.Duration", typeof(TimeSpanQueryValue),
+            Catalog.GetString ("Time"), "CoreTracks.Duration", typeof(TimeSpanQueryValue),
             // Translators: These are unique search fields.  Please, no spaces. Blank ok.
             Catalog.GetString ("duration"), Catalog.GetString ("length"), Catalog.GetString ("time"),
             "duration", "length", "time"
@@ -218,7 +277,7 @@
 
         public static QueryField LastPlayedField = new QueryField (
             "lastplayed", "LastPlayed",
-            Catalog.GetString ("Last Played Date"), "CoreTracks.LastPlayedStamp", new Type [] {typeof(RelativeTimeSpanQueryValue), typeof(DateQueryValue)},
+            Catalog.GetString ("Last Played"), "CoreTracks.LastPlayedStamp", new Type [] {typeof(RelativeTimeSpanQueryValue), typeof(DateQueryValue)},
             // Translators: These are unique search fields.  Please, no spaces. Blank ok.
             Catalog.GetString ("lastplayed"), Catalog.GetString ("played"), Catalog.GetString ("playedon"),
             "lastplayed", "played", "playedon"
@@ -226,7 +285,7 @@
 
         public static QueryField LastSkippedField = new QueryField (
             "lastskipped", "LastSkipped",
-            Catalog.GetString ("Last Skipped Date"), "CoreTracks.LastSkippedStamp", new Type [] {typeof(RelativeTimeSpanQueryValue), typeof(DateQueryValue)},
+            Catalog.GetString ("Last Skipped"), "CoreTracks.LastSkippedStamp", new Type [] {typeof(RelativeTimeSpanQueryValue), 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"
@@ -255,9 +314,10 @@
 #endregion
 
         public static QueryFieldSet FieldSet = new QueryFieldSet (
-            ArtistField, AlbumField, DiscField, TitleField, YearField, GenreField, ComposerField, CommentField, RatingField, PlayCountField,
+            ArtistField, AlbumField, AlbumArtistField, TitleField, TrackNumberField, TrackCountField, DiscField, DiscCountField,
+            YearField, GenreField, ComposerField, ConductorField, GroupingField, CommentField, RatingField, PlayCountField,
             SkipCountField, FileSizeField, UriField, DurationField, MimeTypeField, LastPlayedField, LastSkippedField,
-            DateAddedField, PlaylistField, SmartPlaylistField
+            BpmField, BitRateField, DateAddedField, PlaylistField, SmartPlaylistField
         );
 
         private const string default_sort = @"CoreAlbums.ArtistNameLowered ASC, CoreAlbums.TitleLowered ASC, CoreTracks.Disc ASC, CoreTracks.TrackNumber ASC";
@@ -281,6 +341,14 @@
                         CoreTracks.TrackNumber {0}", ascDesc); 
                     break;
 
+                case "albumartist":
+                    sort_query = String.Format (@"
+                        CoreAlbums.ArtistNameLowered {0}, 
+                        CoreAlbums.TitleLowered ASC, 
+                        CoreTracks.Disc ASC,
+                        CoreTracks.TrackNumber ASC", ascDesc); 
+                    break;
+
                 case "artist":
                     sort_query = String.Format (@"
                         CoreArtists.NameLowered {0}, 
@@ -318,8 +386,14 @@
                     goto case "comment";
 
                 case "year":
-                case "genre":
+                case "bitrate":
+                case "bpm":
+                case "conductor":
+                case "grouping":
+                case "trackcount":
                 case "disc":
+                case "disccount":
+                case "genre":
                 case "duration":
                 case "rating":
                 case "playcount":

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs	Sun Aug 24 01:48:33 2008
@@ -69,6 +69,7 @@
                 TitleColumn,
                 ArtistColumn,
                 AlbumColumn,
+                CommentColumn,
                 RatingColumn,
                 DurationColumn,
                 GenreColumn,
@@ -82,7 +83,14 @@
                 LastSkippedColumn,
                 DateAddedColumn,
                 UriColumn,
-                MimeTypeColumn
+                MimeTypeColumn,
+                AlbumArtistColumn,
+                TrackCountColumn,
+                DiscCountColumn,
+                BpmColumn,
+                BitRateColumn,
+                ConductorColumn,
+                GroupingColumn
             );
         }
 
@@ -97,15 +105,22 @@
             album_column        = CreateText (BansheeQuery.AlbumField, 0.225, true);
 
             // Others
+            album_artist_column = CreateText (BansheeQuery.AlbumArtistField, 0.225);
             genre_column        = CreateText (BansheeQuery.GenreField, 0.25);
 
             duration_column     = Create (BansheeQuery.DurationField, 0.10, true, new ColumnCellDuration (null, true));
             year_column         = Create (BansheeQuery.YearField, 0.15, false, new ColumnCellPositiveInt (null, true));
             file_size_column    = Create (BansheeQuery.FileSizeField, 0.15, false, new ColumnCellFileSize (null, true));
+            track_count_column  = Create (BansheeQuery.TrackCountField, 0.10, false, new ColumnCellTrackNumber (null, true));
             disc_column         = Create (BansheeQuery.DiscField, 0.10, false, new ColumnCellPositiveInt (null, true));
+            disc_count_column   = Create (BansheeQuery.DiscCountField, 0.10, false, new ColumnCellPositiveInt (null, true));
+            bpm_column          = Create (BansheeQuery.BpmField, 0.10, false, new ColumnCellPositiveInt (null, true));
+            bitrate_column      = Create (BansheeQuery.BitRateField, 0.10, false, new ColumnCellPositiveInt (null, true));
             rating_column       = Create (BansheeQuery.RatingField, 0.15, false, new ColumnCellRating (null, true));
 
             composer_column     = CreateText (BansheeQuery.ComposerField, 0.25);
+            conductor_column    = CreateText (BansheeQuery.ConductorField, 0.25);
+            grouping_column     = CreateText (BansheeQuery.GroupingField, 0.25);
             comment_column      = CreateText (BansheeQuery.CommentField, 0.25);
             play_count_column   = CreateText (BansheeQuery.PlayCountField, 0.15);
             skip_count_column   = CreateText (BansheeQuery.SkipCountField, 0.15);
@@ -236,6 +251,41 @@
         public SortableColumn UriColumn {
             get { return uri_column; }
         }
+
+        private SortableColumn album_artist_column;
+        public SortableColumn AlbumArtistColumn {
+            get { return album_artist_column; }
+        }
+        
+        private SortableColumn track_count_column;
+        public SortableColumn TrackCountColumn {
+            get { return track_count_column; }
+        }
+        
+        private SortableColumn disc_count_column;
+        public SortableColumn DiscCountColumn {
+            get { return disc_count_column; }
+        }
+        
+        private SortableColumn bpm_column;
+        public SortableColumn BpmColumn {
+            get { return bpm_column; }
+        }
+        
+        private SortableColumn bitrate_column;
+        public SortableColumn BitRateColumn {
+            get { return bitrate_column; }
+        }
+
+        private SortableColumn conductor_column;
+        public SortableColumn ConductorColumn {
+            get { return conductor_column; }
+        }
+
+        private SortableColumn grouping_column;
+        public SortableColumn GroupingColumn {
+            get { return grouping_column; }
+        }
         
         private SortableColumn mime_type_column;
         public SortableColumn MimeTypeColumn {

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs	Sun Aug 24 01:48:33 2008
@@ -40,8 +40,9 @@
     public class BansheeActionGroup : ActionGroup
     {
         private InterfaceActionService action_service;
-        protected Dictionary<string, string> labels = new Dictionary<string, string> ();
-        protected Dictionary<string, string> icons = new Dictionary<string, string> ();
+        private Dictionary<string, string> labels = new Dictionary<string, string> ();
+        private Dictionary<string, string> icons = new Dictionary<string, string> ();
+        private List<uint> ui_merge_ids = new List<uint> ();
 
         private bool important_by_default = true;
         protected bool ImportantByDefault {
@@ -59,6 +60,25 @@
             this.action_service = action_service;
         }
 
+        public void AddUiFromFile (string ui_file)
+        {
+            ui_merge_ids.Add (Actions.AddUiFromFileInCurrentAssembly (ui_file));
+        }
+
+        public override void Dispose ()
+        {
+            Actions.RemoveActionGroup (this);
+
+            foreach (uint merge_id in ui_merge_ids) {
+                if (merge_id > 0) {
+                    Actions.UIManager.RemoveUi (merge_id);
+                }
+            }
+            ui_merge_ids.Clear ();
+
+            base.Dispose ();
+        }
+
         public new void Add (ActionEntry [] action_entries)
         {
             if (ImportantByDefault) {

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs	Sun Aug 24 01:48:33 2008
@@ -190,12 +190,22 @@
                 active_source.Properties.Get<Assembly> ("ActiveSourceUIResource.Assembly") ??
                 Assembly.GetAssembly (active_source.GetType ());
 
-            string ui_file = active_source.Properties.Get<string> ("ActiveSourceUIResource");
+            active_source_uiid = AddUiFromFile (active_source.Properties.Get<string> ("ActiveSourceUIResource"), assembly);
+        }
+
+        public uint AddUiFromFileInCurrentAssembly (string ui_file)
+        {
+            return AddUiFromFile (ui_file, Assembly.GetCallingAssembly ());
+        }
+        
+        public uint AddUiFromFile (string ui_file, Assembly assembly)
+        {
             if (ui_file != null) {
                 using (StreamReader reader = new StreamReader (assembly.GetManifestResourceStream (ui_file))) {
-                    active_source_uiid = ui_manager.AddUiFromString (reader.ReadToEnd ());
+                    return ui_manager.AddUiFromString (reader.ReadToEnd ());
                 }
             }
+            return 0;
         }
         
         public Action this[string actionId] {

Modified: trunk/banshee/src/Extensions/Banshee.Podcasting/Resources/ActiveSourceUI.xml
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Podcasting/Resources/ActiveSourceUI.xml	(original)
+++ trunk/banshee/src/Extensions/Banshee.Podcasting/Resources/ActiveSourceUI.xml	Sun Aug 24 01:48:33 2008
@@ -14,8 +14,8 @@
         <menuitem name="PodcastItemDeleteFile" action="PodcastItemDeleteFileAction" />
         <!--
         <menuitem name="PodcastItemCancel" action="PodcastItemCancelAction" />-->
-        <menuitem name="PodcastItemMarkOld" action="PodcastItemMarkOldAction" />
         <menuitem name="PodcastItemMarkNew" action="PodcastItemMarkNewAction" />
+        <menuitem name="PodcastItemMarkOld" action="PodcastItemMarkOldAction" />
         <separator />
       </placeholder>
     </menu>
@@ -30,8 +30,8 @@
         <!--
         <menuitem name="PodcastItemCancel" action="PodcastItemCancelAction" />-->
         <separator />
-        <menuitem name="PodcastItemMarkOld" action="PodcastItemMarkOldAction" />
         <menuitem name="PodcastItemMarkNew" action="PodcastItemMarkNewAction" />
+        <menuitem name="PodcastItemMarkOld" action="PodcastItemMarkOldAction" />
     </placeholder>
   </popup>
 </ui>



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