public static Task <IList <WebPlaylistItem> > ProcessAsync(IOwinContext context, string playlistId, string filter, WebSortField?sort, WebSortOrder?order) { // get the playlist PlaylistRawData playlistRawData = ServiceRegistration.Get <IMediaLibrary>().ExportPlaylist(Guid.Parse(playlistId)); IFilter searchFilter = new MediaItemIdFilter(playlistRawData.MediaItemIds); IList <MediaItem> items = MediaLibraryAccess.Search(context, BasicNecessaryMIATypeIds, BasicOptionalMIATypeIds, searchFilter); if (items.Count == 0) { return(System.Threading.Tasks.Task.FromResult <IList <WebPlaylistItem> >(new List <WebPlaylistItem>())); } var tracks = items.Select(item => MusicTrackBasic(item)) .Filter(filter); // sort and filter if (sort != null && order != null) { tracks = tracks.SortWebMusicTrackBasic(sort, order); } var output = tracks.Select(t => new WebPlaylistItem(t)); return(System.Threading.Tasks.Task.FromResult <IList <WebPlaylistItem> >(output.ToList())); }
internal static void AssignArtists(IOwinContext context, IEnumerable <WebMusicTrackDetailed> tracks) { // assign artists var searchFilter = new MediaItemIdFilter(tracks.SelectMany(t => t.ArtistId).Concat(tracks.Select(t => t.AlbumArtistId)).Select(s => Guid.Parse(s)).Distinct()); var artists = MediaLibraryAccess.Search(context, BaseMusicArtistBasic.BasicNecessaryMIATypeIds, BaseMusicArtistBasic.BasicOptionalMIATypeIds, searchFilter); foreach (var track in tracks) { var albumArtist = artists.FirstOrDefault(a => a.MediaItemId.ToString() == track.AlbumArtistId); if (albumArtist != null) { track.AlbumArtistObject = BaseMusicArtistBasic.MusicArtistBasic(albumArtist); } track.Artists = new List <WebMusicArtistBasic>(); foreach (var artistsId in track.ArtistId) { var artist = artists.FirstOrDefault(a => a.MediaItemId.ToString() == artistsId); if (artist != null) { track.Artists.Add(BaseMusicArtistBasic.MusicArtistBasic(artist)); } } } }