|
|
Index: src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/TrackEditor.cs
===================================================================
--- src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/TrackEditor.cs (revision 3103)
+++ src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/TrackEditor.cs (working copy)
@@ -53,6 +53,7 @@
public string Genre;
public SafeUri Uri;
+ public int DiscNumber;
public int TrackNumber;
public int TrackCount;
public int Year;
@@ -81,6 +82,7 @@
AlbumTitle = track.AlbumTitle == null ? String.Empty : track.AlbumTitle;
TrackTitle = track.TrackTitle == null ? String.Empty : track.TrackTitle;
Genre = track.Genre == null ? String.Empty : track.Genre;
+ DiscNumber = track.DiscNumber;
TrackNumber = track.TrackNumber;
TrackCount = track.TrackCount;
Year = track.Year;
@@ -94,6 +96,7 @@
track.AlbumTitle = AlbumTitle;
track.TrackTitle = TrackTitle;
track.Genre = Genre;
+ track.DiscNumber = DiscNumber;
track.TrackNumber = TrackNumber;
track.TrackCount = TrackCount;
track.Uri = Uri;
@@ -118,6 +121,7 @@
[Widget] private Button AlbumSync;
[Widget] private Button YearSync;
[Widget] private Button GenreSync;
+ [Widget] private Button DiscNumberSync;
[Widget] private Button RatingSync;
[Widget] private Button EnterNextTitle;
[Widget] private SpinButton TrackCount;
@@ -127,6 +131,7 @@
[Widget] private Entry Album;
[Widget] private Entry Title;
[Widget] private ComboBoxEntry Genre;
+ [Widget] private Entry DiscNumber;
[Widget] private Entry Uri;
[Widget] private Entry Location;
[Widget] private Label BitRate;
@@ -179,6 +184,7 @@
ArtistSync.Clicked += OnArtistSyncClicked;
AlbumSync.Clicked += OnAlbumSyncClicked;
GenreSync.Clicked += OnGenreSyncClicked;
+ DiscNumberSync.Clicked += OnDiscNumberSyncClicked;
YearSync.Clicked += OnYearSyncClicked;
SyncAll.Clicked += OnSyncAllClicked;
RatingSync.Clicked += OnRatingSyncClicked;
@@ -191,6 +197,7 @@
Title.Activated += OnTitleActivated;
Year.Changed += OnValueEdited;
Genre.Entry.Changed += OnValueEdited;
+ DiscNumber.Entry.Changed += OnValueEdited;
rating_entry.Changed += OnValueEdited;
ListStore genre_model = new ListStore(typeof(string));
@@ -211,6 +218,7 @@
ArtistSync.Visible = TrackSet.Count > 1;
AlbumSync.Visible = TrackSet.Count > 1;
GenreSync.Visible = TrackSet.Count > 1;
+ DiscNumberSync.Visible = TrackSet.Count > 1;
YearSync.Visible = TrackSet.Count > 1;
RatingSync.Visible = TrackSet.Count > 1;
EnterNextTitle.Visible = TrackSet.Count > 1;
@@ -223,6 +231,7 @@
tips.SetTip(ArtistSync, Catalog.GetString("Set all artists to this value"), "artists");
tips.SetTip(AlbumSync, Catalog.GetString("Set all albums to this value"), "albums");
tips.SetTip(GenreSync, Catalog.GetString("Set all genres to this value"), "genres");
+ tips.SetTip(DiscNumberSync, Catalog.GetString("Set all disc numbers to this value"), "disc numbers");
tips.SetTip(YearSync, Catalog.GetString("Set all years to this value"), "years");
tips.SetTip(SyncAll, Catalog.GetString("Apply the values of this track set for the Artist, Album Title, Genre, Track count, Year, and Rating fields to the rest of the selected tracks in this editor."), "all");
tips.SetTip(RatingSync, Catalog.GetString("Set all ratings to this value"), "ratings");
@@ -274,6 +283,7 @@
TrackNumber.Value = track.TrackNumber;
TrackCount.Value = track.TrackCount;
+ DiscNumber.Text = track.DiscNumber.ToString();
Year.Text = track.Year.ToString();
rating_entry.Value = (int)track.Rating;
@@ -449,6 +459,17 @@
}
}
}
+
+ private void OnDiscNumberSyncClicked(object o, EventArgs args)
+ {
+ foreach(EditorTrack track in TrackSet) {
+ try {
+ track.DiscNumber = Convert.ToInt32(DiscNumber.Text);
+ } catch {
+ track.DiscNumber = 1;
+ }
+ }
+ }
private void OnArtistSyncClicked(object o, EventArgs args)
{
@@ -468,6 +489,7 @@
{
OnTrackCountSyncClicked(o, args);
OnGenreSyncClicked(o, args);
+ OnDiscNumberSyncClicked(o, args);
OnAlbumSyncClicked(o, args);
OnArtistSyncClicked(o, args);
OnYearSyncClicked(o, args);
@@ -554,6 +576,12 @@
} catch {
track.Year = 0;
}
+
+ try {
+ track.DiscNumber = Convert.ToInt32(DiscNumber.Text);
+ } catch {
+ track.DiscNumber = 0;
+ }
return track;
}
Index: src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs
===================================================================
--- src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs (revision 3103)
+++ src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs (working copy)
@@ -126,7 +126,7 @@
sort_query = GetSort (sort_column.SortKey, AscDesc ());
}
- private const string default_sort = "lower(CoreArtists.Name) ASC, lower(CoreAlbums.Title) ASC, CoreTracks.TrackNumber ASC, CoreTracks.Uri ASC";
+ private const string default_sort = "lower(CoreArtists.Name) ASC, lower(CoreAlbums.Title) ASC, CoreTracks.Disc ASC, CoreTracks.TrackNumber ASC, CoreTracks.Uri ASC";
public static string GetSort (string key, string ascDesc)
{
string sort_query = null;
@@ -141,7 +141,8 @@
case "Artist":
sort_query = String.Format (@"
lower(CoreArtists.Name) {0},
lower(CoreAlbums.Title) ASC,
+ CoreTracks.Disc ASC,
CoreTracks.TrackNumber ASC,
CoreTracks.Uri ASC", ascDesc);
break;
@@ -150,6 +151,7 @@
sort_query = String.Format (@"
lower(CoreAlbums.Title) {0},
lower(CoreArtists.Name) ASC,
+ CoreTracks.Disc ASC,
CoreTracks.TrackNumber ASC,
CoreTracks.Uri ASC", ascDesc);
break;
@@ -166,6 +168,7 @@
break;
case "Year":
+ case "Disc":
case "Duration":
case "Rating":
case "PlayCount":
@@ -460,6 +463,12 @@
"on", "album", "from", "albumtitle"
),
new QueryField (
+ "disc", Catalog.GetString ("Disc"), "CoreTracks.Disc", typeof(IntegerQueryValue),
+ // Translators: These are unique search fields. Please, no spaces. Blank ok.
+ Catalog.GetString ("disc"), Catalog.GetString ("cd"), CatalogGetString ("discnum"),
+ "disc", "cd", "discnum"
+ ),
+ new QueryField (
"title", Catalog.GetString ("Track Title"), "CoreTracks.Title", true,
// Translators: These are unique search fields. Please, no spaces. Blank ok.
Catalog.GetString ("title"), Catalog.GetString ("titled"), Catalog.GetString ("name"), Catalog.GetString ("named"),
Index: src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
===================================================================
--- src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs (revision 3103)
+++ src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs (working copy)
@@ -58,6 +58,7 @@
track.MimeType = file.MimeType;
track.ArtistName = Choose(file.Tag.JoinedPerformers, track.ArtistName);
track.AlbumTitle = Choose(file.Tag.Album, track.AlbumTitle);
+ track.Disc = file.Tag.Disc == 0 ? track.Disc : (int)file.Tag.Disc;
track.TrackTitle = Choose(file.Tag.Title, track.TrackTitle);
track.Genre = Choose(file.Tag.FirstGenre, track.Genre);
track.TrackNumber = file.Tag.Track == 0 ? track.TrackNumber : (int)file.Tag.Track;
@@ -80,6 +81,10 @@
case CommonTags.Album:
track.AlbumTitle = Choose((string)tag.Value, track.AlbumTitle);
break;
+ case CommonTags.Disc:
+ int disc_number = (int)tag.Value;
+ track.Disc = track_number == 0 ? track.Disc : disc_number;
+ break;
case CommonTags.Genre:
track.Genre = Choose((string)tag.Value, track.Genre);
break;
|