public IList<WebTVEpisodeDetailed> GetTVEpisodesDetailedForTVShowByRange(int? provider, string id, int start, int end, WebSortField? sort = WebSortField.TVEpisodeNumber, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllEpisodesDetailed().AsQueryable().Where(p => p.ShowId == id).SortMediaItemList(sort, order, WebSortField.TVEpisodeNumber).TakeRange(start, end - start).Finalize(provider, ProviderType.TVShow);
 }
 public IList<WebPlaylistItem> GetPlaylistItemsByRange(int? provider, string playlistId, int start, int end, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return GetAllPlaylistItems(provider, playlistId).AsQueryable().TakeRange(start, end).Finalize(provider, ProviderType.Music);
 }
 public IList<WebTVEpisodeBasic> GetTVEpisodesBasicForTVShow(int? provider, string id, WebSortField? sort = WebSortField.TVEpisodeNumber, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllEpisodesBasic().AsQueryable().Where(p => p.ShowId == id).SortMediaItemList(sort, order, WebSortField.TVEpisodeNumber).Finalize(provider, ProviderType.TVShow);
 }
 public IList<WebMusicTrackDetailed> GetMusicTracksDetailed(int? provider, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MusicLibraries[provider].GetAllTracksDetailed().AsQueryable().Filter(filter).SortMediaItemList(sort, order).Finalize(provider, ProviderType.Music);
 }
 public IList<WebPictureDetailed> GetPicturesDetailed(int? provider, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return PictureLibraries[provider].GetAllPicturesDetailed().AsQueryable().SortMediaItemList(sort, order).Finalize(provider, ProviderType.Picture);
 }
Example #6
0
 public static IOrderedEnumerable <TSource> ThenBy <TSource, TKey>(this IOrderedEnumerable <TSource> source, Func <TSource, TKey> keySelector, WebSortOrder order)
 {
     if (order == WebSortOrder.Asc)
     {
         return(Enumerable.ThenBy(source, keySelector));
     }
     return(Enumerable.ThenByDescending(source, keySelector));
 }
 public IList<WebMusicTrackBasic> GetMusicTracksBasicByRange(int? provider, int start, int end, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MusicLibraries[provider].GetAllTracks().AsQueryable().Filter(filter).SortMediaItemList(sort, order).TakeRange(start, end).Finalize(provider, ProviderType.Music);
 }
Example #8
0
 public IList<WebScheduledRecording> GetScheduledRecordingsForDate(DateTime date, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return Schedule.ListAll().Select(x => GetScheduledRecording(x, date)).Where(x => x != null).Filter(filter).SortScheduledRecordingList(sort, order).ToList();
 }
Example #9
0
 public IList<WebScheduledRecording> GetScheduledRecordingsForToday(string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return GetScheduledRecordingsForDate(DateTime.Today, filter, sort, order);
 }
        public static IOrderedQueryable <TSource> OrderByNatural <TSource>(this IQueryable <TSource> source, Func <TSource, string> keySelector, WebSortOrder order)
        {
            var sortFunction = GetSortFunction(keySelector);

            if (order == WebSortOrder.Asc)
            {
                return(Queryable.OrderBy(source, x => sortFunction(x), _objectComparer));
            }
            return(Queryable.OrderByDescending(source, x => sortFunction(x), _objectComparer));
        }
Example #11
0
 public IList<WebRecordingBasic> GetRecordingsByRange(int start, int end, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return Recording.ListAll().Select(rec => rec.ToWebRecording()).Filter(filter).SortRecordingList(sort, order).TakeRange(start, end).ToList();
 }
 public static IOrderedEnumerable <TSource> OrderByNatural <TSource>(this IEnumerable <TSource> source, Func <TSource, string> keySelector, WebSortOrder order)
 {
     if (order == WebSortOrder.Asc)
     {
         return(Enumerable.OrderBy(source, GetSortFunction(keySelector), _objectComparer));
     }
     return(Enumerable.OrderByDescending(source, GetSortFunction(keySelector), _objectComparer));
 }
Example #13
0
 public static IOrderedQueryable <TSource> ThenBy <TSource, TKey>(this IOrderedQueryable <TSource> source, Expression <Func <TSource, TKey> > keySelector, WebSortOrder order)
 {
     if (order == WebSortOrder.Asc)
     {
         return(Queryable.ThenBy(source, keySelector));
     }
     return(Queryable.ThenByDescending(source, keySelector));
 }
Example #14
0
        public static IOrderedQueryable <T> SortMediaItemList <T>(this IQueryable <T> list, WebSortField?sortInput, WebSortOrder?orderInput, WebSortField defaultSort, WebSortOrder defaultOrder)
        {
            // parse arguments
            if (orderInput != null && orderInput != WebSortOrder.Asc && orderInput != WebSortOrder.Desc)
            {
                Log.Warn("Invalid OrderBy value {0} given", orderInput);
                throw new Exception("Invalid OrderBy value specified");
            }
            WebSortField sort  = sortInput.HasValue ? sortInput.Value : defaultSort;
            WebSortOrder order = orderInput.HasValue ? orderInput.Value : defaultOrder;

            // do the actual sorting
            try
            {
                switch (sort)
                {
                // generic
                case WebSortField.Title:
                    return(list.OrderBy(x => ((ITitleSortable)x).Title, order));

                case WebSortField.DateAdded:
                    return(list.OrderBy(x => ((IDateAddedSortable)x).DateAdded, order));

                case WebSortField.Year:
                    return(list.OrderBy(x => ((IYearSortable)x).Year, order));

                case WebSortField.Genre:
                    return(list.OrderBy(x => ((IGenreSortable)x).Genres.First(), order));

                case WebSortField.Rating:
                    return(list.OrderBy(x => ((IRatingSortable)x).Rating, order));

                case WebSortField.Categories:
                    return(list.OrderBy(x => ((ICategorySortable)x).Categories.First().Title, order));

                case WebSortField.Type:
                    return(list.OrderBy(x => ((ITypeSortable)x).Type, order));

                // music
                case WebSortField.MusicTrackNumber:
                    return(list.OrderBy(x => ((IMusicTrackNumberSortable)x).TrackNumber, order));

                case WebSortField.MusicComposer:
                    return(list.OrderBy(x => ((IMusicComposerSortable)x).Composer.First(), order));

                // tv
                case WebSortField.TVEpisodeNumber:
                    return(list.OrderBy(x => ((ITVEpisodeNumberSortable)x).SeasonNumber, order).ThenBy(x => ((ITVEpisodeNumberSortable)x).EpisodeNumber, order));

                case WebSortField.TVSeasonNumber:
                    return(list.OrderBy(x => ((ITVSeasonNumberSortable)x).SeasonNumber, order));

                case WebSortField.TVDateAired:
                    return(list.OrderBy(x => ((ITVDateAiredSortable)x).FirstAired, order));

                // picture
                case WebSortField.PictureDateTaken:
                    return(list.OrderBy(x => ((IPictureDateTakenSortable)x).DateTaken, order));

                default:
                    Log.Warn("Invalid SortBy value {0}", sortInput);
                    throw new Exception("Sorting on this property is not supported for this media type");
                }
            }
            catch (Exception ex)
            {
                Log.Warn(String.Format("Tried to do invalid sorting; actual values SortBy={0}, OrderBy={1}", sort, order), ex);
                throw new Exception("Sorting on this property is not supported for this media type");
            }
        }
Example #15
0
 public IList<WebActor> GetTVShowActorsByRange(int? provider, int start, int end, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllTVShowsBasic().AsQueryable().SelectMany(x => x.Actors).Distinct().Filter(filter).SortMediaItemList(sort, order, WebSortField.Title).TakeRange(start, end).Finalize(provider, ProviderType.TVShow);
 }
Example #16
0
 public IList<WebScheduleBasic> GetSchedulesByRange(int start, int end, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return Schedule.ListAll().Select(s => s.ToWebSchedule()).Filter(filter).SortScheduleList(sort, order).TakeRange(start, end).ToList();
 }
Example #17
0
 public IList<WebTVShowBasic> GetTVShowsBasic(int? provider, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllTVShowsBasic().AsQueryable().Filter(filter).SortMediaItemList(sort, order).Finalize(provider, ProviderType.TVShow);
 }
Example #18
0
 private IEnumerable<Channel> GetRadioChannels(int? groupId, WebSortField? sort, WebSortOrder? order)
 {
     return groupId == null ?
         (IEnumerable<Channel>)Channel.ListAll().Where(ch => ch.IsRadio).OrderBy(ch => sort == WebSortField.User ? ch.SortOrder : 1, order) :
         (IEnumerable<Channel>)_tvBusiness.GetRadioGuideChannelsForGroup(groupId.Value);
 }
Example #19
0
 public IList<WebGenre> GetMusicGenres(int? provider, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MusicLibraries[provider].GetAllGenres().AsQueryable().SortMediaItemList(sort, order).Finalize(provider, ProviderType.Music);
 }
Example #20
0
 public IList<WebFileBasic> GetFileSystemFiles(int? provider, string id, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return FileSystemLibraries[provider].GetFilesListing(id).AsQueryable().SortMediaItemList(sort, order).Finalize(provider, ProviderType.Filesystem).ToList();
 }
Example #21
0
 public IList<WebMusicTrackBasic> GetMusicTracksBasicForAlbum(int? provider, string id, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MusicLibraries[provider].GetAllTracks().AsQueryable().Where(p => p.AlbumId == id).SortMediaItemList(sort, order).Finalize(provider, ProviderType.Music);
 }
Example #22
0
 public IList<WebFilesystemItem> GetFileSystemFilesAndFoldersByRange(int? provider, string id, int start, int end, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     var listA = FileSystemLibraries[provider].GetFilesListing(id).AsQueryable().Select(x => x.ToWebFilesystemItem());
     var listB = FileSystemLibraries[provider].GetFoldersListing(id).AsQueryable().Select(x => x.ToWebFilesystemItem());
     return listA.Concat(listB).SortMediaItemList(sort, order).TakeRange(start, end).Finalize(provider, ProviderType.Filesystem).ToList();
 }
Example #23
0
 public IList<WebMusicTrackDetailed> GetMusicTracksDetailedForArtist(int? provider, string id, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MusicLibraries[provider].GetAllTracksDetailed().AsQueryable().Where(p => p.ArtistId.Contains(id)).SortMediaItemList(sort, order).Finalize(provider, ProviderType.Music);
 }
Example #24
0
 public IList<WebFolderBasic> GetFileSystemFoldersByRange(int? provider, string id, int start, int end, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return FileSystemLibraries[provider].GetFoldersListing(id).AsQueryable().SortMediaItemList(sort, order).TakeRange(start, end).Finalize(provider, ProviderType.Filesystem).ToList();
 }
Example #25
0
 public IList<Interfaces.Playlist.WebPlaylistItem> GetPlaylistItems(int? provider, string playlistId, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return PlaylistLibraries[provider].GetPlaylistItems(playlistId).Finalize(provider, ProviderType.Music);
 }
Example #26
0
 /// <summary>
 /// Get all available values for a given field
 /// </summary>
 public IList<string> GetFilterValues(int? provider, WebMediaType mediaType, string filterField, string op, int? limit, WebSortOrder? order = WebSortOrder.Asc)
 {
     switch (mediaType)
     {
         case WebMediaType.Drive:
             return AutoSuggestion.GetValuesForField(filterField, GetFileSystemDrives(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.Movie:
             return AutoSuggestion.GetValuesForField(filterField, GetMoviesDetailed(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.MusicAlbum:
             return AutoSuggestion.GetValuesForField(filterField, GetMusicAlbumsBasic(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.MusicArtist:
             return AutoSuggestion.GetValuesForField(filterField, GetMusicArtistsDetailed(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.MusicTrack:
             return AutoSuggestion.GetValuesForField(filterField, GetMusicTracksDetailed(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.Picture:
             return AutoSuggestion.GetValuesForField(filterField, GetPicturesDetailed(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.Playlist:
             return AutoSuggestion.GetValuesForField(filterField, GetPlaylists(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.TVEpisode:
             return AutoSuggestion.GetValuesForField(filterField, GetTVEpisodesDetailed(provider), op, limit).OrderBy(x => x, order).ToList();
         case WebMediaType.TVShow:
             return AutoSuggestion.GetValuesForField(filterField, GetTVShowsDetailed(provider), op, limit).OrderBy(x => x, order).ToList();
         default:
             Log.Info("GetFilterValues() called with unsupported mediaType='{0}' filterField='{1}' op='{2}' limit='{3}'", mediaType, filterField, op, limit);
             throw new ArgumentException("Unsupported MediaType for GetFilterValues()");
     }
 }
Example #27
0
 public IList<WebTVEpisodeBasic> GetTVEpisodesBasicByRange(int? provider, int start, int end, WebSortField? sort = WebSortField.TVEpisodeNumber, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllEpisodesBasic().AsQueryable().SortMediaItemList(sort, order, WebSortField.TVEpisodeNumber).TakeRange(start, end).Finalize(provider, ProviderType.TVShow);
 }
Example #28
0
 public IList<string> GetFilterValuesByRange(int? provider, int start, int end, WebMediaType mediaType, string filterField, string op = null, int? limit = null, WebSortOrder? order = WebSortOrder.Asc)
 {
     return GetFilterValues(provider, mediaType, filterField, op, limit, order).TakeRange(start, end).ToList();
 }
Example #29
0
 public IList<WebTVEpisodeDetailed> GetTVEpisodesDetailed(int? provider, WebSortField? sort = WebSortField.TVEpisodeNumber, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllEpisodesDetailed().AsQueryable().SortMediaItemList(sort, order, WebSortField.TVEpisodeNumber).Finalize(provider, ProviderType.TVShow);
 }
Example #30
0
 public IList<WebActor> GetMovieActors(int? provider, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MovieLibraries[provider].GetAllMovies().AsQueryable().SelectMany(x => x.Actors).Distinct().Filter(filter).SortMediaItemList(sort, order, WebSortField.Title).Finalize(provider, ProviderType.Movie);
 }
Example #31
0
 public IList<WebTVSeasonDetailed> GetTVSeasonsDetailedForTVShow(int? provider, string id, WebSortField? sort = WebSortField.TVSeasonNumber, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllSeasonsDetailed().AsQueryable().Where(x => x.ShowId == id).SortMediaItemList(sort, order, WebSortField.TVSeasonNumber).Finalize(provider, ProviderType.TVShow);
 }
Example #32
0
 public IList<WebCategory> GetMovieCategories(int? provider, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MovieLibraries[provider].GetAllCategories().AsQueryable().SortMediaItemList(sort, order).Finalize(provider, ProviderType.Movie);
 }
Example #33
0
 public IList<WebGenre> GetTVShowGenresByRange(int? provider, int start, int end, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllGenres().AsQueryable().SortMediaItemList(sort, order).TakeRange(start, end).Finalize(provider, ProviderType.TVShow);
 }
Example #34
0
 public IList<WebMovieBasic> GetMoviesBasic(int? provider, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return MovieLibraries[provider].GetAllMovies().AsQueryable().Filter(filter).SortMediaItemList(sort, order).Finalize(provider, ProviderType.Movie);
 }
Example #35
0
 public IList<WebTVShowDetailed> GetTVShowsDetailedByRange(int? provider, int start, int end, string filter = null, WebSortField? sort = WebSortField.Title, WebSortOrder? order = WebSortOrder.Asc)
 {
     return TVShowLibraries[provider].GetAllTVShowsDetailed().AsQueryable().Filter(filter).SortMediaItemList(sort, order).TakeRange(start, end).Finalize(provider, ProviderType.TVShow);
 }
Example #36
0
        public static IOrderedQueryable <T> SortMediaItemList <T>(this IQueryable <T> list, WebSortField?sortInput, WebSortOrder?orderInput, WebSortField defaultSort, WebSortOrder defaultOrder)
        {
            // parse arguments
            if (orderInput != null && orderInput != WebSortOrder.Asc && orderInput != WebSortOrder.Desc)
            {
                Log.Warn("Invalid OrderBy value {0} given", orderInput);
                throw new Exception("Invalid OrderBy value specified");
            }
            WebSortField sort  = sortInput.HasValue ? sortInput.Value : defaultSort;
            WebSortOrder order = orderInput.HasValue ? orderInput.Value : defaultOrder;

            // do the actual sorting
            try
            {
                switch (sort)
                {
                // generic
                case WebSortField.Title:
                    return(list.OrderBy(x => ((ITitleSortable)x).Title, order));

                case WebSortField.NaturalTitle:
                    return(list.OrderByNatural(x => ((ITitleSortable)x).Title, order));

                case WebSortField.DateAdded:
                    return(list.OrderBy(x => ((IDateAddedSortable)x).DateAdded, order));

                case WebSortField.Year:
                    return(list.OrderBy(x => ((IYearSortable)x).Year, order));

                case WebSortField.Genre:
                    return(list.OrderBy(x => ((IGenreSortable)x).Genres.First(), order));

                case WebSortField.Rating:
                    return(list.OrderBy(x => ((IRatingSortable)x).Rating, order));

                case WebSortField.Categories:
                    return(list.OrderBy(x => ((ICategorySortable)x).Categories.First().Title, order));

                case WebSortField.Type:
                    return(list.OrderBy(x => ((ITypeSortable)x).Type, order));

                // music
                case WebSortField.MusicTrackNumber:
                    return(list.OrderBy(x => ((IMusicTrackNumberSortable)x).DiscNumber, order).ThenBy(x => ((IMusicTrackNumberSortable)x).TrackNumber, order));

                case WebSortField.MusicComposer:
                    return(list.OrderBy(x => ((IMusicComposerSortable)x).Composer.First(), order));

                // tv
                case WebSortField.TVEpisodeNumber:
                    return(list.OrderBy(x => ((ITVEpisodeNumberSortable)x).SeasonNumber, order).ThenBy(x => ((ITVEpisodeNumberSortable)x).EpisodeNumber, order));

                case WebSortField.TVSeasonNumber:
                    return(list.OrderBy(x => ((ITVSeasonNumberSortable)x).SeasonNumber, order));

                case WebSortField.TVDateAired:
                    return(list.OrderBy(x => ((ITVDateAiredSortable)x).FirstAired, order));

                // picture
                case WebSortField.PictureDateTaken:
                    return(list.OrderBy(x => ((IPictureDateTakenSortable)x).DateTaken, order));

                default:
                    Log.Warn("Invalid SortBy value {0}", sortInput);
                    throw new Exception("Sorting on this property is not supported for this media type");
                }
            }
            catch (Exception ex)
            {
                Log.Warn(String.Format("Executing OrderBy(sortBy={0}, orderBy={1}) on list failed, sort parameters are invalid or list iterator failed " +
                                       "(might be caused by an invalid or unexpected database or a broken query).", sort, order), ex);
                throw new Exception("Failed to load data from source, please see the log file for more details.");
            }
        }