public Func <CancellationToken, Task <MediaBundle <Album> > > CreateMethod(IMetadataRepository metadataRepository)
        {
            return(async cancelToken =>
            {
                var mediaBundle = await metadataRepository.GetAlbumAsync(UserId, Artists, Name, CollectionId, Populate, cancelToken).ConfigureAwait(false);

                Album album = null;

                if (mediaBundle != null)
                {
                    album = mediaBundle.Media;
                }

                if (album != null)
                {
                    return mediaBundle;
                }

                var now = DateTime.UtcNow;

                var artistMediaBundles = new HashSet <MediaBundle <Artist> >();

                foreach (var artist in Artists)
                {
                    var artistMediaBundle = new MediaBundle <Artist>
                    {
                        Media = artist
                    };

                    artistMediaBundles.Add(artistMediaBundle);
                }

                album = new Album
                {
                    Artists = artistMediaBundles,
                    Name = Name,
                    CollectionId = CollectionId,
                    DateAdded = now,
                    DateModified = now
                };

                await metadataRepository.InsertOrUpdateAlbumAsync(album, cancelToken).ConfigureAwait(false);

                mediaBundle = new MediaBundle <Album>
                {
                    Media = album,
                    Dispositions = new List <Disposition>(),
                    Playback = new List <Playback>()
                };

                return mediaBundle;
            });
        }
 public Func <CancellationToken, Task <MediaBundle <Album> > > CreateMethod(IMetadataRepository metadataRepository)
 {
     return(cancelToken => metadataRepository.GetAlbumAsync(UserId, Id, Populate, cancelToken));
 }