[banshee] Option to sub-sort the track list by album year (bgo#577680)
- From: Alexander Kojevnikov <alexk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] Option to sub-sort the track list by album year (bgo#577680)
- Date: Tue, 23 Feb 2010 23:55:39 +0000 (UTC)
commit 3d5f74cd137087e8a8b15e9378b14c92d2f00f5b
Author: Alexander Kojevnikov <alexander kojevnikov com>
Date: Wed Feb 24 10:53:46 2010 +1100
Option to sub-sort the track list by album year (bgo#577680)
.../DatabaseTrackListModel.cs | 7 ++++
.../Banshee.Library/LibrarySchema.cs | 7 ++++
.../Banshee.Library/MusicLibrarySource.cs | 11 +++++-
.../Banshee.Services/Banshee.Query/BansheeQuery.cs | 36 ++++++++++++++-----
4 files changed, 50 insertions(+), 11 deletions(-)
---
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
index 7279c3a..b5bfd80 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
@@ -159,6 +159,13 @@ namespace Banshee.Collection.Database
return true;
}
+ public void Resort ()
+ {
+ var column = sort_column;
+ sort_column = null;
+ Sort (column);
+ }
+
private void HandleCacheAggregatesUpdated (IDataReader reader)
{
filtered_duration = TimeSpan.FromMilliseconds (reader.IsDBNull (1) ? 0 : Convert.ToInt64 (reader[1]));
diff --git a/src/Core/Banshee.Services/Banshee.Library/LibrarySchema.cs b/src/Core/Banshee.Services/Banshee.Library/LibrarySchema.cs
index a95ee1a..22b540a 100644
--- a/src/Core/Banshee.Services/Banshee.Library/LibrarySchema.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/LibrarySchema.cs
@@ -85,5 +85,12 @@ namespace Banshee.Configuration.Schema
"Store ratings within supported files",
"If enabled, rating and playcount metadata will be written back to audio files."
);
+
+ public static readonly SchemaEntry<bool> SortByAlbumYear = new SchemaEntry<bool>(
+ "library", "sort_albums_by_year",
+ false,
+ "Sort tracks by album year",
+ "If set the tracks will be sorted by album year instead of by album name"
+ );
}
}
diff --git a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
index 9c39611..053c854 100644
--- a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
@@ -72,7 +72,16 @@ namespace Banshee.Library
SetFileNamePattern (MusicFileNamePattern);
- PreferencesPage.Add (new Section ("misc", Catalog.GetString ("Miscellaneous"), 10));
+ Section misc = PreferencesPage.Add (new Section ("misc",
+ Catalog.GetString ("Miscellaneous"), 10));
+
+ misc.Add (new SchemaPreference<bool> (LibrarySchema.SortByAlbumYear,
+ Catalog.GetString ("_Sort an artist's albums by year, not title"), null,
+ delegate {
+ DatabaseTrackModel.Resort ();
+ DatabaseTrackModel.Reload ();
+ }
+ ));
}
public static string GetDefaultBaseDirectory ()
diff --git a/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs b/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
index 1754568..3d48fdd 100644
--- a/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
+++ b/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
@@ -372,9 +372,15 @@ namespace Banshee.Query
BpmField.ShortLabel = Catalog.GetString ("BPM");
SkipCountField.ShortLabel = Catalog.GetString ("Skips");
PlayCountField.ShortLabel = Catalog.GetString ("Plays");
+
+ default_sort = String.Format (default_sort_template, "");
+ default_sort_by_year = String.Format (default_sort_template, "CoreTracks.Year ASC, ");
}
- private const string default_sort = @"CoreAlbums.ArtistNameSortKey ASC, CoreAlbums.TitleSortKey ASC, CoreTracks.Disc ASC, CoreTracks.TrackNumber ASC";
+ private const string default_sort_template = @"CoreAlbums.ArtistNameSortKey ASC, {0}CoreAlbums.TitleSortKey ASC, CoreTracks.Disc ASC, CoreTracks.TrackNumber ASC";
+ private static readonly string default_sort;
+ private static readonly string default_sort_by_year;
+
public static string GetSort (string key)
{
return GetSort (key, false);
@@ -382,6 +388,10 @@ namespace Banshee.Query
public static string GetSort (string key, bool asc)
{
+ bool sort_by_year = Banshee.Configuration.Schema.LibrarySchema.SortByAlbumYear.Get ();
+ string sort_by_year_part = sort_by_year ? "CoreTracks.Year ASC," : "";
+ string sort = sort_by_year ? default_sort_by_year : default_sort;
+
string ascDesc = asc ? "ASC" : "DESC";
string sort_query = null;
// TODO use the QueryFields here instead of matching on a string key
@@ -391,39 +401,44 @@ namespace Banshee.Query
case "grouping":
sort_query = String.Format (@"
CoreAlbums.ArtistNameSortKey ASC,
+ {1}
CoreAlbums.TitleSortKey ASC,
CoreTracks.Disc ASC,
- CoreTracks.TrackNumber {0}", ascDesc);
+ CoreTracks.TrackNumber {0}", ascDesc, sort_by_year_part);
break;
case "albumartist":
sort_query = String.Format (@"
CoreAlbums.ArtistNameSortKey {0},
+ {1}
CoreAlbums.TitleSortKey ASC,
CoreTracks.Disc ASC,
- CoreTracks.TrackNumber ASC", ascDesc);
+ CoreTracks.TrackNumber ASC", ascDesc, sort_by_year_part);
break;
case "artist":
sort_query = String.Format (@"
CoreArtists.NameSortKey {0},
+ {1}
CoreAlbums.TitleSortKey ASC,
CoreTracks.Disc ASC,
- CoreTracks.TrackNumber ASC", ascDesc);
+ CoreTracks.TrackNumber ASC", ascDesc, sort_by_year_part);
break;
case "album":
sort_query = String.Format (@"
CoreAlbums.TitleSortKey {0},
+ {1}
CoreTracks.Disc ASC,
- CoreTracks.TrackNumber ASC", ascDesc);
+ CoreTracks.TrackNumber ASC", ascDesc, sort_by_year_part);
break;
case "title":
sort_query = String.Format (@"
CoreTracks.TitleSortKey {0},
CoreAlbums.ArtistNameSortKey ASC,
- CoreAlbums.TitleSortKey ASC", ascDesc);
+ {1}
+ CoreAlbums.TitleSortKey ASC", ascDesc, sort_by_year_part);
break;
case "random":
@@ -433,9 +448,10 @@ namespace Banshee.Query
case "disc":
sort_query = String.Format (@"
CoreAlbums.ArtistNameSortKey ASC,
+ {1}
CoreAlbums.TitleSortKey ASC,
CoreTracks.Disc {0},
- CoreTracks.TrackNumber ASC", ascDesc);
+ CoreTracks.TrackNumber ASC", ascDesc, sort_by_year_part);
break;
// FIXME hacks to aid in migration of these sort keys to actually
@@ -454,14 +470,14 @@ namespace Banshee.Query
case "comment":
sort_query = String.Format (
"HYENA_COLLATION_KEY(CoreTracks.{0}) {1}, {2}",
- column ?? key, ascDesc, default_sort
+ column ?? key, ascDesc, sort
);
break;
case "score":
sort_query = String.Format (@"
CoreTracks.Score {0},
- CoreTracks.Playcount {0}, {1}", ascDesc, default_sort);
+ CoreTracks.Playcount {0}, {1}", ascDesc, sort);
break;
case "year":
@@ -484,7 +500,7 @@ namespace Banshee.Query
case "licenseuri":
sort_query = String.Format (
"CoreTracks.{0} {1}, {2}",
- column ?? key, ascDesc, default_sort
+ column ?? key, ascDesc, sort
);
break;
default:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]