mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.5 KiB
110 lines
4.5 KiB
using System.Diagnostics.CodeAnalysis; |
|
using ErsatzTV.Core.Domain; |
|
using ErsatzTV.Core.Interfaces.Repositories; |
|
|
|
namespace ErsatzTV.Core.Scheduling; |
|
|
|
[SuppressMessage("Naming", "CA1711:Identifiers should not have incorrect suffix")] |
|
public static class MediaItemsForCollection |
|
{ |
|
public static async Task<List<MediaItem>> Collect( |
|
IMediaCollectionRepository mediaCollectionRepository, |
|
ITelevisionRepository televisionRepository, |
|
IArtistRepository artistRepository, |
|
CollectionKey collectionKey, |
|
CancellationToken cancellationToken) |
|
{ |
|
var result = new List<MediaItem>(); |
|
|
|
switch (collectionKey.CollectionType) |
|
{ |
|
case CollectionType.Collection: |
|
result.AddRange(await mediaCollectionRepository.GetItems(collectionKey.CollectionId ?? 0)); |
|
break; |
|
case CollectionType.TelevisionShow: |
|
result.AddRange(await televisionRepository.GetShowItems(collectionKey.MediaItemId ?? 0)); |
|
break; |
|
case CollectionType.TelevisionSeason: |
|
result.AddRange(await televisionRepository.GetSeasonItems(collectionKey.MediaItemId ?? 0)); |
|
break; |
|
case CollectionType.Artist: |
|
result.AddRange(await artistRepository.GetArtistItems(collectionKey.MediaItemId ?? 0)); |
|
break; |
|
case CollectionType.MultiCollection: |
|
result.AddRange( |
|
await mediaCollectionRepository.GetMultiCollectionItems( |
|
collectionKey.MultiCollectionId ?? 0, |
|
cancellationToken)); |
|
break; |
|
case CollectionType.SmartCollection: |
|
result.AddRange( |
|
await mediaCollectionRepository.GetSmartCollectionItems( |
|
collectionKey.SmartCollectionId ?? 0, |
|
cancellationToken)); |
|
break; |
|
case CollectionType.RerunFirstRun or CollectionType.RerunRerun: |
|
result.AddRange( |
|
await mediaCollectionRepository.GetRerunCollectionItems( |
|
collectionKey.RerunCollectionId ?? 0, |
|
cancellationToken)); |
|
break; |
|
case CollectionType.Playlist: |
|
result.AddRange( |
|
await mediaCollectionRepository.GetPlaylistItems(collectionKey.PlaylistId ?? 0, cancellationToken)); |
|
break; |
|
case CollectionType.Movie: |
|
foreach (int mediaItemId in Optional(collectionKey.MediaItemId)) |
|
{ |
|
result.AddRange(await mediaCollectionRepository.GetMovie(mediaItemId)); |
|
} |
|
|
|
break; |
|
case CollectionType.Episode: |
|
foreach (int mediaItemId in Optional(collectionKey.MediaItemId)) |
|
{ |
|
result.AddRange(await mediaCollectionRepository.GetEpisode(mediaItemId)); |
|
} |
|
|
|
break; |
|
case CollectionType.MusicVideo: |
|
foreach (int mediaItemId in Optional(collectionKey.MediaItemId)) |
|
{ |
|
result.AddRange(await mediaCollectionRepository.GetMusicVideo(mediaItemId)); |
|
} |
|
|
|
break; |
|
case CollectionType.OtherVideo: |
|
foreach (int mediaItemId in Optional(collectionKey.MediaItemId)) |
|
{ |
|
result.AddRange(await mediaCollectionRepository.GetOtherVideo(mediaItemId)); |
|
} |
|
|
|
break; |
|
case CollectionType.Song: |
|
foreach (int mediaItemId in Optional(collectionKey.MediaItemId)) |
|
{ |
|
result.AddRange(await mediaCollectionRepository.GetSong(mediaItemId)); |
|
} |
|
|
|
break; |
|
case CollectionType.Image: |
|
foreach (int mediaItemId in Optional(collectionKey.MediaItemId)) |
|
{ |
|
result.AddRange(await mediaCollectionRepository.GetImage(mediaItemId)); |
|
} |
|
|
|
break; |
|
case CollectionType.RemoteStream: |
|
foreach (int mediaItemId in Optional(collectionKey.MediaItemId)) |
|
{ |
|
result.AddRange(await mediaCollectionRepository.GetRemoteStream(mediaItemId)); |
|
} |
|
|
|
break; |
|
default: |
|
throw new ArgumentOutOfRangeException(nameof(collectionKey)); |
|
} |
|
|
|
return result.DistinctBy(x => x.Id).ToList(); |
|
} |
|
}
|
|
|