public static IQueryable<ArtistForAlbum> WhereHasArtistParticipationStatus(this IQueryable<ArtistForAlbum> query, Artist artist, ArtistAlbumParticipationStatus participation) { if (participation == ArtistAlbumParticipationStatus.Everything || artist == null) return query; var musicProducerTypes = new[] {ArtistType.Producer, ArtistType.Circle, ArtistType.OtherGroup}; if (musicProducerTypes.Contains(artist.ArtistType)) { var producerRoles = ArtistRoles.Composer | ArtistRoles.Arranger; switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return query.Where(a => !a.IsSupport && ((a.Roles == ArtistRoles.Default) || ((a.Roles & producerRoles) != ArtistRoles.Default)) && a.Album.ArtistString.Default != ArtistHelper.VariousArtists); case ArtistAlbumParticipationStatus.OnlyCollaborations: return query.Where(a => a.IsSupport || ((a.Roles != ArtistRoles.Default) && ((a.Roles & producerRoles) == ArtistRoles.Default)) || a.Album.ArtistString.Default == ArtistHelper.VariousArtists); default: return query; } } else { switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return query.Where(a => !a.IsSupport); case ArtistAlbumParticipationStatus.OnlyCollaborations: return query.Where(a => a.IsSupport); default: return query; } } }
public ArtistParticipationQueryParams(EntryIdsCollection artistIds, ArtistAlbumParticipationStatus participation, bool childVoicebanks, bool includeMembers) { ArtistIds = artistIds; Participation = participation; ChildVoicebanks = childVoicebanks; IncludeMembers = includeMembers; }
public PartialFindResult <SongForApiContract> GetList( string query = "", string songTypes = null, [FromUri] string[] tagName = null, [FromUri] int[] tagId = null, bool childTags = false, [FromUri] int[] artistId = null, ArtistAlbumParticipationStatus artistParticipationStatus = ArtistAlbumParticipationStatus.Everything, bool childVoicebanks = false, bool includeMembers = false, bool onlyWithPvs = false, [FromUri] PVServices?pvServices = null, int?since = null, int?minScore = null, int?userCollectionId = null, int?releaseEventId = null, EntryStatus?status = null, [FromUri] AdvancedSearchFilter[] advancedFilters = null, int start = 0, int maxResults = defaultMax, bool getTotalCount = false, SongSortRule sort = SongSortRule.Name, bool preferAccurateMatches = false, NameMatchMode nameMatchMode = NameMatchMode.Exact, SongOptionalFields fields = SongOptionalFields.None, ContentLanguagePreference lang = ContentLanguagePreference.Default) { var textQuery = SearchTextQuery.Create(query, nameMatchMode); var types = EnumVal <SongType> .ParseMultiple(songTypes); var param = new SongQueryParams(textQuery, types, start, Math.Min(maxResults, absoluteMax), getTotalCount, sort, false, preferAccurateMatches, null) { ArtistParticipation = { ArtistIds = artistId, Participation = artistParticipationStatus, ChildVoicebanks = childVoicebanks, IncludeMembers = includeMembers }, TagIds = tagId, Tags = tagName, ChildTags = childTags, OnlyWithPVs = onlyWithPvs, TimeFilter = since.HasValue ? TimeSpan.FromHours(since.Value) : TimeSpan.Zero, MinScore = minScore ?? 0, PVServices = pvServices, UserCollectionId = userCollectionId ?? 0, ReleaseEventId = releaseEventId ?? 0, AdvancedFilters = advancedFilters, LanguagePreference = lang }; param.Common.EntryStatus = status; var artists = service.Find(s => new SongForApiContract(s, null, lang, fields), param); return(artists); }
public PartialFindResult <AlbumForApiContract> GetList( string query = "", DiscType discTypes = DiscType.Unknown, [FromUri] string[] tagName = null, [FromUri] int[] tagId = null, bool childTags = false, [FromUri] int[] artistId = null, ArtistAlbumParticipationStatus artistParticipationStatus = ArtistAlbumParticipationStatus.Everything, bool childVoicebanks = false, bool includeMembers = false, string barcode = null, EntryStatus?status = null, DateTime?releaseDateAfter = null, DateTime?releaseDateBefore = null, [FromUri] AdvancedSearchFilter[] advancedFilters = null, int start = 0, int maxResults = defaultMax, bool getTotalCount = false, AlbumSortRule?sort = null, bool preferAccurateMatches = false, bool deleted = false, NameMatchMode nameMatchMode = NameMatchMode.Exact, AlbumOptionalFields fields = AlbumOptionalFields.None, ContentLanguagePreference lang = ContentLanguagePreference.Default) { var textQuery = SearchTextQuery.Create(query, nameMatchMode); var queryParams = new AlbumQueryParams(textQuery, discTypes, start, Math.Min(maxResults, absoluteMax), getTotalCount, sort ?? AlbumSortRule.Name, preferAccurateMatches) { ArtistParticipation = { ArtistIds = artistId, Participation = artistParticipationStatus, ChildVoicebanks = childVoicebanks, IncludeMembers = includeMembers }, Tags = tagName, TagIds = tagId, ChildTags = childTags, Barcode = barcode, Deleted = deleted, ReleaseDateAfter = releaseDateAfter, ReleaseDateBefore = releaseDateBefore, AdvancedFilters = advancedFilters, LanguagePreference = lang }; queryParams.Common.EntryStatus = status; var ssl = WebHelper.IsSSL(Request); var entries = service.Find(a => new AlbumForApiContract(a, null, lang, thumbPersister, ssl, fields, SongOptionalFields.None), queryParams); return(entries); }
public static IQueryable <Album> WhereHasArtistParticipationStatus( this IQueryable <Album> query, int artistId, ArtistAlbumParticipationStatus participation, bool childVoicebanks, Func <int, Artist> artistGetter) { if (artistId == 0) { return(query); } if (participation == ArtistAlbumParticipationStatus.Everything) { return(query.WhereHasArtist(artistId, childVoicebanks)); } var artist = artistGetter(artistId); var musicProducerTypes = new[] { ArtistType.Producer, ArtistType.Circle, ArtistType.OtherGroup }; if (musicProducerTypes.Contains(artist.ArtistType)) { var various = Model.Helpers.ArtistHelper.VariousArtists; var producerRoles = ArtistRoles.Composer | ArtistRoles.Arranger; switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return(query.Where(al => al.AllArtists.Any(a => a.Artist.Id == artistId && !a.IsSupport && ((a.Roles == ArtistRoles.Default) || ((a.Roles & producerRoles) != ArtistRoles.Default)) && a.Album.ArtistString.Default != various))); case ArtistAlbumParticipationStatus.OnlyCollaborations: return(query.Where(al => al.AllArtists.Any(a => a.Artist.Id == artistId && (a.IsSupport || ((a.Roles != ArtistRoles.Default) && ((a.Roles & producerRoles) == ArtistRoles.Default)) || a.Album.ArtistString.Default == various)))); default: return(query); } } else { switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return(query.Where(al => al.AllArtists.Any(a => (a.Artist.Id == artistId || (childVoicebanks && a.Artist.BaseVoicebank.Id == artistId)) && !a.IsSupport))); case ArtistAlbumParticipationStatus.OnlyCollaborations: return(query.Where(al => al.AllArtists.Any(a => (a.Artist.Id == artistId || (childVoicebanks && a.Artist.BaseVoicebank.Id == artistId)) && a.IsSupport))); default: return(query); } } }
public static IQueryable <Album> WhereHasArtistParticipationStatus( this IQueryable <Album> query, EntryIdsCollection artistIds, ArtistAlbumParticipationStatus participation, bool childVoicebanks, Func <int, Artist> artistGetter) { var various = Model.Helpers.ArtistHelper.VariousArtists; var producerRoles = ArtistRoles.Composer | ArtistRoles.Arranger; var artistId = artistIds.Primary; return(EntryWithArtistsQueryableExtender.WhereHasArtistParticipationStatus(new ArtistParticipationQueryParams <Album, ArtistForAlbum>(query, artistIds, participation, childVoicebanks, artistGetter, al => al.AllArtists.Any(a => a.Artist.Id == artistId && !a.IsSupport && ((a.Roles == ArtistRoles.Default) || ((a.Roles & producerRoles) != ArtistRoles.Default)) && a.Album.ArtistString.Default != various), al => al.AllArtists.Any(a => a.Artist.Id == artistId && (a.IsSupport || ((a.Roles != ArtistRoles.Default) && ((a.Roles & producerRoles) == ArtistRoles.Default)) || a.Album.ArtistString.Default == various)) ))); }
public ArtistParticipationQueryParams(IQueryable <TEntry> query, EntryIdsCollection artistIds, ArtistAlbumParticipationStatus participation, bool childVoicebanks, Func <int, Artist> artistGetter, Expression <Func <TEntry, bool> > mainEntriesExpression, Expression <Func <TEntry, bool> > collaborationsExpression) : this() { Query = query; ArtistIds = artistIds; Participation = participation; ChildVoicebanks = childVoicebanks; ArtistGetter = artistGetter; MainEntriesExpression = mainEntriesExpression; CollaborationsExpression = collaborationsExpression; }
public PartialFindResult <SongForApiContract> GetList( string query = "", string songTypes = null, string tag = null, int?artistId = null, ArtistAlbumParticipationStatus artistParticipationStatus = ArtistAlbumParticipationStatus.Everything, bool childVoicebanks = false, bool onlyWithPvs = false, [FromUri] PVServices?pvServices = null, int?since = null, int?minScore = null, [FromUri] ContentLanguageSelections?lyrics = null, int?userCollectionId = null, EntryStatus?status = null, int start = 0, int maxResults = defaultMax, bool getTotalCount = false, SongSortRule sort = SongSortRule.Name, bool preferAccurateMatches = false, NameMatchMode nameMatchMode = NameMatchMode.Exact, SongOptionalFields fields = SongOptionalFields.None, ContentLanguagePreference lang = ContentLanguagePreference.Default) { var textQuery = SearchTextQuery.Create(query, nameMatchMode); var types = EnumVal <SongType> .ParseMultiple(songTypes); var param = new SongQueryParams(textQuery, types, start, Math.Min(maxResults, absoluteMax), false, getTotalCount, sort, false, preferAccurateMatches, null) { Tag = tag, OnlyWithPVs = onlyWithPvs, ArtistId = artistId ?? 0, ArtistParticipationStatus = artistParticipationStatus, ChildVoicebanks = childVoicebanks, TimeFilter = since.HasValue ? TimeSpan.FromHours(since.Value) : TimeSpan.Zero, LyricsLanguages = lyrics != null?lyrics.Value.ToIndividualSelections().ToArray() : null, MinScore = minScore ?? 0, PVServices = pvServices, UserCollectionId = userCollectionId ?? 0 }; param.Common.EntryStatus = status; var artists = service.Find(s => new SongForApiContract(s, null, lang, fields), param); return(artists); }
public static IQueryable<Album> WhereHasArtistParticipationStatus( this IQueryable<Album> query, int artistId, ArtistAlbumParticipationStatus participation, bool childVoicebanks, Func<int, Artist> artistGetter) { if (artistId == 0) return query; if (participation == ArtistAlbumParticipationStatus.Everything) return query.WhereHasArtist(artistId, childVoicebanks); var artist = artistGetter(artistId); var musicProducerTypes = new[] {ArtistType.Producer, ArtistType.Circle, ArtistType.OtherGroup}; if (musicProducerTypes.Contains(artist.ArtistType)) { var various = Model.Helpers.ArtistHelper.VariousArtists; var producerRoles = ArtistRoles.Composer | ArtistRoles.Arranger; switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return query.Where(al => al.AllArtists.Any(a => a.Artist.Id == artistId && !a.IsSupport && ((a.Roles == ArtistRoles.Default) || ((a.Roles & producerRoles) != ArtistRoles.Default)) && a.Album.ArtistString.Default != various)); case ArtistAlbumParticipationStatus.OnlyCollaborations: return query.Where(al => al.AllArtists.Any(a => a.Artist.Id == artistId && (a.IsSupport || ((a.Roles != ArtistRoles.Default) && ((a.Roles & producerRoles) == ArtistRoles.Default)) || a.Album.ArtistString.Default == various))); default: return query; } } else { switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return query.Where(al => al.AllArtists.Any(a => (a.Artist.Id == artistId || (childVoicebanks && a.Artist.BaseVoicebank.Id == artistId)) && !a.IsSupport)); case ArtistAlbumParticipationStatus.OnlyCollaborations: return query.Where(al => al.AllArtists.Any(a => (a.Artist.Id == artistId || (childVoicebanks && a.Artist.BaseVoicebank.Id == artistId)) && a.IsSupport)); default: return query; } } }
public PartialFindResult <SongForApiContract> GetList( string query = "", SongType songTypes = SongType.Unspecified, string tag = null, int?artistId = null, ArtistAlbumParticipationStatus artistParticipationStatus = ArtistAlbumParticipationStatus.Everything, bool childVoicebanks = false, bool onlyWithPvs = false, int?since = null, [FromUri] ContentLanguageSelections?lyrics = null, int?userCollectionId = null, EntryStatus?status = null, int start = 0, int maxResults = defaultMax, bool getTotalCount = false, SongSortRule sort = SongSortRule.Name, NameMatchMode nameMatchMode = NameMatchMode.Exact, SongOptionalFields fields = SongOptionalFields.None, ContentLanguagePreference lang = ContentLanguagePreference.Default) { query = FindHelpers.GetMatchModeAndQueryForSearch(query, ref nameMatchMode); var types = songTypes != SongType.Unspecified ? new[] { songTypes } : new SongType[0]; var param = new SongQueryParams(query, types, start, Math.Min(maxResults, absoluteMax), false, getTotalCount, nameMatchMode, sort, false, false, null) { Tag = tag, OnlyWithPVs = onlyWithPvs, ArtistId = artistId ?? 0, ArtistParticipationStatus = artistParticipationStatus, ChildVoicebanks = childVoicebanks, TimeFilter = since.HasValue ? TimeSpan.FromHours(since.Value) : TimeSpan.Zero, LyricsLanguages = lyrics != null?lyrics.Value.ToIndividualSelections().ToArray() : null, UserCollectionId = userCollectionId ?? 0 }; param.Common.EntryStatus = status; var artists = service.Find(s => new SongForApiContract(s, null, lang, fields), param); return(artists); }
public PartialFindResult <AlbumForApiContract> GetList( string query = "", DiscType discTypes = DiscType.Unknown, string tag = null, int?artistId = null, ArtistAlbumParticipationStatus artistParticipationStatus = ArtistAlbumParticipationStatus.Everything, bool childVoicebanks = false, string barcode = null, EntryStatus?status = null, int start = 0, int maxResults = defaultMax, bool getTotalCount = false, AlbumSortRule?sort = null, bool preferAccurateMatches = false, bool deleted = false, NameMatchMode nameMatchMode = NameMatchMode.Exact, AlbumOptionalFields fields = AlbumOptionalFields.None, ContentLanguagePreference lang = ContentLanguagePreference.Default) { var textQuery = SearchTextQuery.Create(query, nameMatchMode); var queryParams = new AlbumQueryParams(textQuery, discTypes, start, Math.Min(maxResults, absoluteMax), false, getTotalCount, sort ?? AlbumSortRule.Name, preferAccurateMatches) { Tag = tag, ArtistId = artistId ?? 0, ArtistParticipationStatus = artistParticipationStatus, ChildVoicebanks = childVoicebanks, Barcode = barcode, Deleted = deleted }; queryParams.Common.EntryStatus = status; var ssl = WebHelper.IsSSL(Request); var entries = service.Find(a => new AlbumForApiContract(a, null, lang, thumbPersister, ssl, fields), queryParams); return(entries); }
public PartialViewResult AlbumsPaged(int id, ArtistAlbumParticipationStatus? artistParticipation, int? page) { var pageIndex = (page - 1) ?? 0; var queryParams = new AlbumQueryParams { Paging = PagingProperties.CreateFromPage(pageIndex, entriesPerPage, true), SortRule = AlbumSortRule.ReleaseDateWithNulls, ArtistId = id, ArtistParticipationStatus = artistParticipation ?? ArtistAlbumParticipationStatus.Everything }; var result = Services.Albums.Find(queryParams); var target = queryParams.ArtistParticipationStatus == ArtistAlbumParticipationStatus.OnlyCollaborations ? "ui-tabs-3" : "ui-tabs-2"; var data = new PagingData<AlbumContract>(result.Items.ToPagedList(pageIndex, entriesPerPage, result.TotalCount), id, "AlbumsPaged", target); data.RouteValues = new RouteValueDictionary(new { artistParticipation }); return PartialView("PagedAlbums", data); }
public static IQueryable <ArtistForAlbum> WhereHasArtistParticipationStatus(this IQueryable <ArtistForAlbum> query, Artist artist, ArtistAlbumParticipationStatus participation) { if (participation == ArtistAlbumParticipationStatus.Everything || artist == null) { return(query); } var musicProducerTypes = new[] { ArtistType.Producer, ArtistType.Circle, ArtistType.OtherGroup }; if (musicProducerTypes.Contains(artist.ArtistType)) { var producerRoles = ArtistRoles.Composer | ArtistRoles.Arranger; switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return(query.Where(a => !a.IsSupport && ((a.Roles == ArtistRoles.Default) || ((a.Roles & producerRoles) != ArtistRoles.Default)) && a.Album.ArtistString.Default != ArtistHelper.VariousArtists)); case ArtistAlbumParticipationStatus.OnlyCollaborations: return(query.Where(a => a.IsSupport || ((a.Roles != ArtistRoles.Default) && ((a.Roles & producerRoles) == ArtistRoles.Default)) || a.Album.ArtistString.Default == ArtistHelper.VariousArtists)); default: return(query); } } else { switch (participation) { case ArtistAlbumParticipationStatus.OnlyMainAlbums: return(query.Where(a => !a.IsSupport)); case ArtistAlbumParticipationStatus.OnlyCollaborations: return(query.Where(a => a.IsSupport)); default: return(query); } } }
public PartialFindResult<AlbumForApiContract> GetList( string query = "", DiscType discTypes = DiscType.Unknown, string tag = null, int? artistId = null, ArtistAlbumParticipationStatus artistParticipationStatus = ArtistAlbumParticipationStatus.Everything, bool childVoicebanks = false, string barcode = null, EntryStatus? status = 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) { query = FindHelpers.GetMatchModeAndQueryForSearch(query, ref nameMatchMode); var queryParams = new AlbumQueryParams(query, discTypes, start, Math.Min(maxResults, absoluteMax), false, getTotalCount, nameMatchMode, sort ?? AlbumSortRule.Name) { Tag = tag, ArtistId = artistId ?? 0, ArtistParticipationStatus = artistParticipationStatus, ChildVoicebanks = childVoicebanks, Barcode = barcode }; queryParams.Common.EntryStatus = status; var ssl = WebHelper.IsSSL(Request); var entries = service.Find(a => new AlbumForApiContract(a, null, lang, thumbPersister, ssl, fields), queryParams); return entries; }
public PartialFindResult<SongForApiContract> GetList( string query = "", SongType songTypes = SongType.Unspecified, string tag = null, int? artistId = null, ArtistAlbumParticipationStatus artistParticipationStatus = ArtistAlbumParticipationStatus.Everything, bool childVoicebanks = false, bool onlyWithPvs = false, int? since = null, [FromUri] ContentLanguageSelections? lyrics = null, int? userCollectionId = null, EntryStatus? status = null, int start = 0, int maxResults = defaultMax, bool getTotalCount = false, SongSortRule sort = SongSortRule.Name, NameMatchMode nameMatchMode = NameMatchMode.Exact, SongOptionalFields fields = SongOptionalFields.None, ContentLanguagePreference lang = ContentLanguagePreference.Default) { query = FindHelpers.GetMatchModeAndQueryForSearch(query, ref nameMatchMode); var types = songTypes != SongType.Unspecified ? new[] { songTypes } : new SongType[0]; var param = new SongQueryParams(query, types, start, Math.Min(maxResults, absoluteMax), false, getTotalCount, nameMatchMode, sort, false, false, null) { Tag = tag, OnlyWithPVs = onlyWithPvs, ArtistId = artistId ?? 0, ArtistParticipationStatus = artistParticipationStatus, ChildVoicebanks = childVoicebanks, TimeFilter = since.HasValue ? TimeSpan.FromHours(since.Value) : TimeSpan.Zero, LyricsLanguages = lyrics != null ? lyrics.Value.ToIndividualSelections().ToArray() : null, UserCollectionId = userCollectionId ?? 0 }; param.Common.EntryStatus = status; var artists = service.Find(s => new SongForApiContract(s, null, lang, fields), param); return artists; }