[banshee] [SmartPlaylists] Use OrderBy to sort track list
- From: Gabriel Burt <gburt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] [SmartPlaylists] Use OrderBy to sort track list
- Date: Thu, 18 Nov 2010 19:29:38 +0000 (UTC)
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]