コード例 #1
0
ファイル: BansheeQuery.cs プロジェクト: thoja21/banshee-1
        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);
        }