Пример #1
0
        public PartialFindResult <T> GetAlbumCollection <T>(AlbumCollectionQueryParams queryParams, Func <AlbumForUser, bool, T> fac)
        {
            ParamIs.NotNull(() => queryParams);

            return(HandleQuery(session => {
                var paging = queryParams.Paging;
                var loggedUserId = PermissionContext.LoggedUserId;
                var user = session.Load(queryParams.UserId);
                var shouldShowCollectionStatus = user.Id == loggedUserId || user.Options.PublicAlbumCollection;

                var query = session.OfType <AlbumForUser>().Query()
                            .Where(a => a.User.Id == user.Id &&
                                   !a.Album.Deleted &&
                                   (shouldShowCollectionStatus || a.Rating > 0))
                            .WhereHasName(queryParams.Query, queryParams.NameMatchMode)
                            .WhereHasCollectionStatus(queryParams.FilterByStatus)
                            .WhereHasArtist(queryParams.ArtistId)
                            .WhereHasReleaseEventName(queryParams.ReleaseEventName)
                            .WhereAlbumHasTag(queryParams.Tag);

                var albums = query
                             .OrderBy(queryParams.Sort, PermissionContext.LanguagePreference)
                             .Skip(paging.Start)
                             .Take(paging.MaxEntries)
                             .ToArray()
                             .Select(afu => fac(afu, shouldShowCollectionStatus))
                             .ToArray();

                var count = paging.GetTotalCount ? query.Count() : 0;

                return new PartialFindResult <T>(albums, count);
            }));
        }
Пример #2
0
 public PartialFindResult <AlbumForUserContract> GetAlbumCollection(AlbumCollectionQueryParams queryParams)
 {
     return(GetAlbumCollection(queryParams, (albumForUser, shouldShowCollectionStatus) => new AlbumForUserContract(albumForUser, PermissionContext.LanguagePreference)
     {
         ShouldShowCollectionStatus = shouldShowCollectionStatus
     }));
 }
Пример #3
0
        public PartialFindResult <AlbumForUserForApiContract> GetAlbumCollection(
            int userId,
            string query = "",
            string tag   = null,
            int?artistId = null,
            [FromUri] PurchaseStatuses?purchaseStatuses = null,
            string releaseEventName = null,
            int start                      = 0,
            int maxResults                 = defaultMax,
            bool getTotalCount             = false,
            AlbumSortRule?sort             = null,
            NameMatchMode nameMatchMode    = NameMatchMode.Exact,
            AlbumOptionalFields fields     = AlbumOptionalFields.None,
            ContentLanguagePreference lang = ContentLanguagePreference.Default)
        {
            maxResults = Math.Min(maxResults, absoluteMax);
            query      = FindHelpers.GetMatchModeAndQueryForSearch(query, ref nameMatchMode);
            var ssl = WebHelper.IsSSL(Request);

            var queryParams = new AlbumCollectionQueryParams(userId, new PagingProperties(start, maxResults, getTotalCount))
            {
                ArtistId       = artistId ?? 0,
                FilterByStatus = purchaseStatuses != null?purchaseStatuses.Value.ToIndividualSelections().ToArray() : null,
                                     NameMatchMode    = nameMatchMode,
                                     Query            = query,
                                     ReleaseEventName = releaseEventName,
                                     Sort             = sort ?? AlbumSortRule.Name,
                                     Tag = tag
            };

            var albums = queries.GetAlbumCollection(queryParams, (afu, shouldShowCollectionStatus) =>
                                                    new AlbumForUserForApiContract(afu, lang, thumbPersister, ssl, fields, shouldShowCollectionStatus));

            return(albums);
        }
Пример #4
0
        public PartialFindResult <AlbumForUserForApiContract> GetAlbumCollection(
            int id,
            string query = "",
            int?tagId    = null,
            string tag   = null,
            int?artistId = null,
            [FromUri] PurchaseStatuses?purchaseStatuses = null,
            int releaseEventId  = 0,
            DiscType albumTypes = DiscType.Unknown,
            [FromUri] AdvancedSearchFilter[] advancedFilters = null,
            int start                      = 0,
            int maxResults                 = defaultMax,
            bool getTotalCount             = false,
            AlbumSortRule?sort             = null,
            NameMatchMode nameMatchMode    = NameMatchMode.Exact,
            AlbumOptionalFields fields     = AlbumOptionalFields.None,
            ContentLanguagePreference lang = ContentLanguagePreference.Default)
        {
            maxResults = Math.Min(maxResults, absoluteMax);
            var textQuery = SearchTextQuery.Create(query, nameMatchMode);
            var ssl       = WebHelper.IsSSL(Request);

            var queryParams = new AlbumCollectionQueryParams(id, new PagingProperties(start, maxResults, getTotalCount))
            {
                AlbumType      = albumTypes,
                ArtistId       = artistId ?? 0,
                FilterByStatus = purchaseStatuses != null?purchaseStatuses.Value.ToIndividualSelections().ToArray() : null,
                                     TextQuery       = textQuery,
                                     ReleaseEventId  = releaseEventId,
                                     Sort            = sort ?? AlbumSortRule.Name,
                                     TagId           = tagId ?? 0,
                                     Tag             = tag,
                                     AdvancedFilters = advancedFilters
            };

            var albums = queries.GetAlbumCollection(queryParams, (afu, shouldShowCollectionStatus) =>
                                                    new AlbumForUserForApiContract(afu, lang, thumbPersister, ssl, fields, shouldShowCollectionStatus));

            return(albums);
        }
Пример #5
0
        public PartialFindResult <AlbumForUserContract> GetAlbumCollection(AlbumCollectionQueryParams queryParams)
        {
            ParamIs.NotNull(() => queryParams);

            return(HandleQuery(session => {
                var status = queryParams.FilterByStatus;
                var paging = queryParams.Paging;

                var albums = session.Query <AlbumForUser>()
                             .Where(a => a.User.Id == queryParams.UserId && !a.Album.Deleted && (status == PurchaseStatus.Nothing || a.PurchaseStatus == status))
                             .AddNameOrder(LanguagePreference)
                             .Skip(paging.Start)
                             .Take(paging.MaxEntries)
                             .ToArray()
                             .Select(a => new AlbumForUserContract(a, PermissionContext.LanguagePreference))
                             .ToArray();

                var count = paging.GetTotalCount ? session.Query <AlbumForUser>()
                            .Count(a => a.User.Id == queryParams.UserId && !a.Album.Deleted && (status == PurchaseStatus.Nothing || a.PurchaseStatus == status)) : 0;

                return new PartialFindResult <AlbumForUserContract>(albums, count);
            }));
        }
Пример #6
0
        public ActionResult AlbumCollectionPaged(AlbumCollectionRouteParams routeParams)
        {
            var id = routeParams.id;

            if (id == invalidId)
            {
                return(NoId());
            }

            const int entriesPerPage = 50;
            var       pageIndex      = (routeParams.page - 1) ?? 0;
            var       queryParams    = new AlbumCollectionQueryParams(id, PagingProperties.CreateFromPage(pageIndex, entriesPerPage, routeParams.count == 0))
            {
                FilterByStatus = routeParams.purchaseStatus ?? PurchaseStatus.Nothing
            };
            var albums = Service.GetAlbumCollection(queryParams);

            routeParams.count = (albums.TotalCount != 0 ? albums.TotalCount : routeParams.count);
            var paged = new PagingData <AlbumForUserContract>(albums.Items.ToPagedList(pageIndex, entriesPerPage, routeParams.count), id, "AlbumCollection", "ui-tabs-1");

            paged.RouteValues = new RouteValueDictionary(new { action = "AlbumCollection", id, count = routeParams.count, purchaseStatus = routeParams.purchaseStatus });

            return(PartialView("AlbumCollectionPaged", paged));
        }
Пример #7
0
        public ActionResult AlbumCollectionPaged(AlbumCollectionRouteParams routeParams)
        {
            var id = routeParams.id;

            if (id == invalidId)
            {
                return(NoId());
            }

            int pageSize    = Math.Min(routeParams.pageSize ?? 50, 200);
            var pageIndex   = (routeParams.page - 1) ?? 0;
            var queryParams = new AlbumCollectionQueryParams(id, PagingProperties.CreateFromPage(pageIndex, pageSize, routeParams.totalCount == 0))
            {
                FilterByStatus = routeParams.purchaseStatus != null ? new[] { routeParams.purchaseStatus.Value } : null
            };
            var albums = Data.GetAlbumCollection(queryParams);

            routeParams.totalCount = (albums.TotalCount != 0 ? albums.TotalCount : routeParams.totalCount);
            var paged = new PagingData <AlbumForUserContract>(albums.Items.ToPagedList(pageIndex, pageSize, routeParams.totalCount), id, "AlbumCollection", "ui-tabs-1", addTotalCount: true);

            paged.RouteValues = new RouteValueDictionary(new { routeParams.purchaseStatus, pageSize });

            return(PartialView("AlbumCollectionPaged", paged));
        }