public static string GetSort(QueryField field, bool asc) { if (field == null) { throw new ArgumentNullException("field"); } bool sort_by_year = Banshee.Configuration.Schema.LibrarySchema.SortByAlbumYear.Get(); string sort_by_year_part = sort_by_year ? YearField.Column + " ASC," : ""; string sort = sort_by_year ? default_sort_by_year : default_sort; string ascDesc = asc ? "ASC" : "DESC"; string sort_query = null; if (field.Equals(GroupingField) || field.Equals(TrackNumberField)) { sort_query = String.Format(@" CoreAlbums.ArtistNameSortKey ASC, {0} CoreAlbums.TitleSortKey ASC, {1} ASC, {2} {3}", sort_by_year_part, DiscNumberField.Column, TrackNumberField.Column, ascDesc); } else if (field.Equals(AlbumArtistField)) { sort_query = String.Format(@" CoreAlbums.ArtistNameSortKey {0}, {1} CoreAlbums.TitleSortKey ASC, {2} ASC, {3} ASC", ascDesc, sort_by_year_part, DiscNumberField.Column, TrackNumberField.Column); } else if (field.Equals(ArtistField)) { sort_query = String.Format(@" CoreArtists.NameSortKey {0}, {1} CoreAlbums.TitleSortKey ASC, {2} ASC, {3} ASC", ascDesc, sort_by_year_part, DiscNumberField.Column, TrackNumberField.Column); } else if (field.Equals(AlbumField)) { sort_query = String.Format(@" CoreAlbums.TitleSortKey {0}, {1} {2} ASC, {3} ASC", ascDesc, sort_by_year_part, DiscNumberField.Column, TrackNumberField.Column); } else if (field.Equals(TitleField)) { sort_query = String.Format(@" CoreTracks.TitleSortKey {0}, CoreAlbums.ArtistNameSortKey ASC, {1} CoreAlbums.TitleSortKey ASC", ascDesc, sort_by_year_part); } else if (field.Equals(DiscNumberField)) { sort_query = String.Format(@" CoreAlbums.ArtistNameSortKey ASC, {0} CoreAlbums.TitleSortKey ASC, {1} {2}, {3} ASC", sort_by_year_part, DiscNumberField.Column, ascDesc, TrackNumberField.Column); } else if (field.Equals(ScoreField)) { sort_query = String.Format(@" {0} {1}, {2} {1}, {3}", field.Column, ascDesc, PlayCountField.Column, sort); } else if (field.Equals(ComposerField) || field.Equals(GenreField) || field.Equals(ComposerField) || field.Equals(ConductorField) || field.Equals(CommentField)) { sort_query = String.Format( "HYENA_COLLATION_KEY({0}) {1}, {2}", field.Column, ascDesc, sort ); } else if (field.Equals(LastPlayedField) || field.Equals(LastSkippedField) || field.Equals(DateAddedField) || field.Equals(YearField) || field.Equals(BitRateField) || field.Equals(SampleRateField) || field.Equals(BitsPerSampleField) || field.Equals(BpmField) || field.Equals(TrackCountField) || field.Equals(DiscCountField) || field.Equals(DurationField) || field.Equals(RatingField) || field.Equals(PlayCountField) || field.Equals(SkipCountField) || field.Equals(FileSizeField) || field.Equals(UriField) || field.Equals(MimeTypeField) || field.Equals(LicenseUriField)) { sort_query = String.Format( "{0} {1}, {2}", field.Column, ascDesc, sort ); } else { Hyena.Log.ErrorFormat("Unknown query field passed in! {0} not recognized", field.Name); } return(sort_query); }