[banshee] [SmartPlaylists] Use OrderBy to sort track list



commit 818b5fe7ffac4a1b4b38488a8355d560b4d38812
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Thu Nov 18 13:27:45 2010 -0600

    [SmartPlaylists] Use OrderBy to sort track list
    
    And define the OrderBy on 'Recently Imported' so it's sorted by the date
    added column.  Add a new 'Recently Played' default smart playlist sorted
    by last played.

 .../Banshee.Library/MusicLibrarySource.cs          |    8 +++++++-
 .../Banshee.Services/Banshee.Query/BansheeQuery.cs |    8 +++++++-
 .../Banshee.SmartPlaylist/SmartPlaylistSource.cs   |   16 ++++++++++++----
 .../Banshee.Collection.Gui/TrackListView.cs        |   20 ++++++++++++++++++--
 src/Hyena                                          |    2 +-
 5 files changed, 45 insertions(+), 9 deletions(-)
---
diff --git a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
index 295ff23..437f377 100644
--- a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
@@ -34,6 +34,7 @@ using Mono.Unix;
 
 using Banshee.Base;
 using Banshee.Collection;
+using Banshee.Query;
 using Banshee.SmartPlaylist;
 using Banshee.Preferences;
 using Banshee.Configuration;
@@ -127,7 +128,12 @@ namespace Banshee.Library
             new SmartPlaylistDefinition (
                 Catalog.GetString ("Recently Added"),
                 Catalog.GetString ("Songs imported within the last week"),
-                "added<\"1 week ago\"", true),
+                "added<\"1 week ago\"", true) { Order = BansheeQuery.FindOrder (BansheeQuery.DateAddedField, false) },
+
+            new SmartPlaylistDefinition (
+                Catalog.GetString ("Recently Played"),
+                Catalog.GetString ("Recently played songs"),
+                "played<\"2 weeks ago\" plays>0", true) { Order = BansheeQuery.FindOrder (BansheeQuery.LastPlayedField, false) },
 
             new SmartPlaylistDefinition (
                 Catalog.GetString ("Unheard"),
diff --git a/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs b/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
index 4f51d07..ec8fbb2 100644
--- a/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
+++ b/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
@@ -28,6 +28,7 @@
 //
 
 using System;
+using System.Linq;
 using System.Text;
 using System.Collections.Generic;
 
@@ -514,7 +515,7 @@ namespace Banshee.Query
 
         private static QueryOrder CreateQueryOrder (string name, bool asc, string label, QueryField field)
         {
-            return new QueryOrder (CreateOrderName (name, asc), label, GetSort (name, asc), field);
+            return new QueryOrder (CreateOrderName (name, asc), label, GetSort (name, asc), field, asc);
         }
 
         public static QueryLimit FindLimit (string name)
@@ -526,6 +527,11 @@ namespace Banshee.Query
             return null;
         }
 
+        public static QueryOrder FindOrder (QueryField field, bool asc)
+        {
+            return Orders.FirstOrDefault (o => o != null && o.Field == field && o.Ascending == asc);
+        }
+
         public static QueryOrder FindOrder (string name, bool asc)
         {
             return FindOrder (CreateOrderName (name, asc));
diff --git a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
index bea8be0..c1058a8 100644
--- a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
+++ b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
@@ -149,7 +149,16 @@ namespace Banshee.SmartPlaylist
 
         public QueryOrder QueryOrder {
             get { return query_order; }
-            set { query_order = value; }
+            set {
+                query_order = value;
+                if (value != null) {
+                    Properties.Set<string> ("TrackListSortField", value.Field.Name);
+                    Properties.Set<bool> ("TrackListSortAscending", value.Ascending);
+                } else {
+                    Properties.Remove ("TrackListSortField");
+                    Properties.Remove ("TrackListSortAscending");
+                }
+            }
         }
 
         public IntegerQueryValue LimitValue {
@@ -163,7 +172,7 @@ namespace Banshee.SmartPlaylist
         }
 
         protected string OrderSql {
-            get { return QueryOrder == null ? null : QueryOrder.ToSql (); }
+            get { return !IsLimited || QueryOrder == null ? null : QueryOrder.ToSql (); }
         }
 
         protected string LimitSql {
@@ -214,7 +223,6 @@ namespace Banshee.SmartPlaylist
             LimitValue = limit_value;
             IsHiddenWhenEmpty = hiddenWhenEmpty;
 
-            SetProperties ();
             UpdateDependencies ();
         }
 
@@ -309,7 +317,7 @@ namespace Banshee.SmartPlaylist
                     (Name, Condition, OrderBy, LimitNumber, LimitCriterion, PrimarySourceID, IsTemporary, IsHiddenWhenEmpty)
                     VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
                 Name, ConditionXml,
-                IsLimited ? QueryOrder.Name : null,
+                QueryOrder != null ? QueryOrder.Name : null,
                 IsLimited ? LimitValue.ToSql () : null,
                 IsLimited ? Limit.Name : null,
                 PrimarySourceId, IsTemporary, IsHiddenWhenEmpty
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
index e1ebe21..4128fca 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
@@ -27,6 +27,7 @@
 //
 
 using System;
+using System.Linq;
 using Mono.Unix;
 using Gtk;
 
@@ -57,7 +58,8 @@ namespace Banshee.Collection.Gui
             //Console.WriteLine ("TrackListView.SetModel for {0} with vpos {1}", value, vpos);
 
             if (value != null) {
-                Source source = ServiceManager.SourceManager.ActiveSource;
+                Source active_source = ServiceManager.SourceManager.ActiveSource;
+                Source source = active_source;
                 ColumnController controller = null;
 
                 // Get the controller from this source, or its parent(s) if it doesn't have one
@@ -79,7 +81,21 @@ namespace Banshee.Collection.Gui
                 PersistentColumnController persistent_controller = controller as PersistentColumnController;
                 if (persistent_controller != null) {
                     //Hyena.Log.InformationFormat ("Setting controller source to {0}", ServiceManager.SourceManager.ActiveSource.Name);
-                    persistent_controller.Source = ServiceManager.SourceManager.ActiveSource;
+                    persistent_controller.Source = active_source;
+                }
+
+                var sort_field = active_source.Properties.Get<string> ("TrackListSortField");
+                if (sort_field != null) {
+                    var column = controller.FirstOrDefault (c => {
+                        var s = c as SortableColumn;
+                        return s != null && s.Field.Name == sort_field;
+                    }) as SortableColumn;
+
+                    if (column != null) {
+                        column.Visible = true;
+                        column.SortType = active_source.Properties.Get<bool> ("TrackListSortAscending") ? Hyena.Data.SortType.Ascending : Hyena.Data.SortType.Descending;
+                        controller.DefaultSortColumn = column;
+                    }
                 }
 
                 ColumnController = controller;
diff --git a/src/Hyena b/src/Hyena
index 2ddc000..c370de7 160000
--- a/src/Hyena
+++ b/src/Hyena
@@ -1 +1 @@
-Subproject commit 2ddc00021f803db2145ded975b75c29392960b24
+Subproject commit c370de7581706102a60621b2943fda925981dac3



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