Ejemplo n.º 1
0
        public virtual IClip GetClip(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IArtist artist, IAlbum album)
        {
            var clip = mediaItemRepository.GetByTarget <IClip>(Location).FirstOrDefault();

            if (clip != null)
            {
                return(clip);
            }

            var  name     = GetClipName();
            var  summary  = string.Empty;
            var  number   = GetClipNumber();
            var  date     = GetDate();
            var  duration = TimeSpan.FromMinutes(10); //file != null && file.Properties != null ? file.Properties.Duration : TimeSpan.FromMinutes(5);
            uint height   = 480;                      //file != null && file.Properties != null ? (uint)file.Properties.VideoHeight : 480;
            uint width    = 640;                      //file != null && file.Properties != null ? (uint)file.Properties.VideoWidth : 640;

            var builder = new MediaItemBuilder <IClip>(securityContext, mediaFactory)
                          .Identity(name, summary, date, date, number)
                          .Size(duration, height, width)
                          .Creator(artist.Location, artist.Name)
                          .Catalog(album.Location, album.Name)
                          .Target(Location, Type.Name);

            return(builder.ToMediaItem());
        }
Ejemplo n.º 2
0
        public override IAlbum GetAlbum(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IArtist artist)
        {
            IAlbum album = null;
            var    track = mediaItemRepository.GetByTarget <ITrack>(Location).FirstOrDefault();

            if (track != null)
            {
                album = mediaItemRepository.GetByLocation <IAlbum>(track.Catalog);
                if (album != null)
                {
                    return(album);
                }
            }

            var albumTitle = "Unknown Album";
            var summary    = string.Empty;

            //var albumTag = GetTags().Where(x => x.Type == Id3v2TagType.Album).FirstOrDefault();
            if (id3v2Tag != null && id3v2Tag.Album != null)
            {
                albumTitle = id3v2Tag.Album; //albumTag.Tuple.ToString();
                album      = mediaItemRepository.GetByCreatorAndName <IAlbum>(artist.Location, albumTitle);
                if (album != null)
                {
                    return(album);
                }
            }

            var builder = new MediaItemBuilder <IAlbum>(securityContext, mediaFactory)
                          .Identity(albumTitle, summary)
                          .Creator(artist.Location, artist.Name);

            return(builder.ToMediaItem());
        }
Ejemplo n.º 3
0
        public virtual IAlbum GetAlbum(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IArtist artist)
        {
            IAlbum album = null;
            var    clip  = mediaItemRepository.GetByTarget <IClip>(Location).FirstOrDefault();

            if (clip != null)
            {
                album = mediaItemRepository.GetByLocation <IAlbum>(clip.Catalog);
                if (album != null)
                {
                    return(album);
                }
            }

            var albumName = GetAlbumName();
            var summary   = string.Empty;

            album = mediaItemRepository.GetByName <IAlbum>(albumName).FirstOrDefault();
            if (album != null)
            {
                return(album);
            }

            var albumNumber = GetAlbumNumber();
            var date        = GetDate();

            var builder = new MediaItemBuilder <IAlbum>(securityContext, mediaFactory)
                          .Identity(albumName, summary, date, date, albumNumber)
                          .Creator(artist.Location, artist.Name);

            return(builder.ToMediaItem());
        }
Ejemplo n.º 4
0
        public override IArtist GetArtist(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository)
        {
            IArtist artist = null;
            var     track  = mediaItemRepository.GetByTarget <ITrack>(Location).FirstOrDefault();

            if (track != null)
            {
                artist = mediaItemRepository.GetByLocation <IArtist>(track.Creator);
                if (artist != null)
                {
                    return(artist);
                }
            }

            if (id3v2Tag == null || id3v2Tag.JoinedPerformers == null)
            {
                return(new MediaItemBuilder <IArtist>(securityContext, mediaFactory).GetDefault());
            }

            var artistName = id3v2Tag.JoinedPerformers;
            var summary    = string.Empty;

            artist = mediaItemRepository.GetByName <IArtist>(artistName).FirstOrDefault();
            if (artist != null)
            {
                return(artist);
            }

            var builder = new MediaItemBuilder <IArtist>(securityContext, mediaFactory)
                          .Identity(artistName, summary);

            return(builder.ToMediaItem());
        }
Ejemplo n.º 5
0
        public IPlaylistViewModel ToPlaylist(ISecurityContext securityContext, IMediaFactory mediaFactory)
        {
            if (securityContext == null)
                throw new ArgumentNullException("securityContext");
            if (mediaFactory == null)
                throw new ArgumentNullException("mediaFactory");

            var date = DateTime.Now.ToUniversalTime();

            var builder = new MediaItemBuilder<IPlaylist>(securityContext, mediaFactory)
            .Identity(Name, Summary, date, date, 0)
            .Thumbnail(item.Thumbnail, item.ThumbnailData);

            var playlist = builder.ToMediaItem();
            var playlistItems = new List<IPlaylistItemViewModel>();
            uint number = 0;
            foreach (var track in tracks)
            {
                number++;
                var playlistItem = track.ToPlaylistItem(securityContext, mediaFactory, number);
                playlistItems.Add(playlistItem);
            }
            foreach (var clip in clips)
            {
                number++;
                var playlistItem = clip.ToPlaylistItem(securityContext, mediaFactory, number);
                playlistItems.Add(playlistItem);
            }

            return new PlaylistViewModel(controller, playlist, playlistItems);
        }
        public async Task CallsEveryLoaderThatCanLoadFromExistingData()
        {
            _mediaItem = Substitute.For <IMediaItem>();

            _sourceDataLoaders = new[]
            {
                Data.SourceDataLoader(_mediaItem, _initialSourceData, "SourceA"),
                Data.SourceDataLoader(_mediaItem, _initialSourceData, "SourceB"),
                Data.SourceDataLoader(_mediaItem, _initialSourceData, "SourceC")
            }.ToList();

            var existingLoader     = Substitute.For <ISourceDataLoader>();
            var existingSourceData = Data.SourceData("ExistingSource");
            var newLoaders         = _sourceDataLoaders.ToList();

            _sourceDataLoaders.Add(existingLoader);

            _mediaItem.GetAllSourceData().Returns(Option <ISourceData> .Some(existingSourceData));
            _mediaItem.AddData(Arg.Any <ISourceData>()).Returns(Right <ProcessFailedResult, IMediaItem>(_mediaItem));

            existingLoader.CanLoadFrom(existingSourceData).Returns(false);
            newLoaders.Iter(l => l.CanLoadFrom(existingSourceData).Returns(true));

            Builder = new MediaItemBuilder(PluginConfiguration, _sourceDataLoaders, new ConsoleLogManager());

            await Builder.BuildMediaItemAsync(_mediaItem);

            newLoaders.Iter(s => s.Received(1).LoadFrom(_mediaItem, existingSourceData));
            existingLoader.DidNotReceive().LoadFrom(_mediaItem, existingSourceData);
        }
            public async Task BuildsMediaItem()
            {
                MediaItemBuilder.IdentifyAsync(Arg.Any <EmbyItemData>(), MediaItemType)
                .Returns(Right <ProcessFailedResult, IMediaItem>(MediaItem));

                var result = await Processor.GetResultAsync(EmbyInfo, MediaItemType, Enumerable.Empty <EmbyItemId>());

                result.IsRight.Should().BeTrue();
                MediaItemBuilder.Received(1).BuildMediaItemAsync(MediaItem);
            }
            public override void Setup()
            {
                base.Setup();

                MediaItem = Data.MediaItem();
                EmbyInfo  = Data.EmbyInfo();

                MediaItemBuilder.IdentifyAsync(Arg.Any <EmbyItemData>(), MediaItemType)
                .Returns(Right <ProcessFailedResult, IMediaItem>(MediaItem));
            }
Ejemplo n.º 9
0
        private void clipListBoxItem_DoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                var element = e.OriginalSource as UIElement;
                if (element == null)
                {
                    return;
                }

                var listBoxItem = element.FindContainingItem <ListBoxItem>();
                if (listBoxItem == null)
                {
                    return;
                }

                var clipViewModel = listBoxItem.DataContext as IClipViewModel;
                if (clipViewModel == null)
                {
                    return;
                }

                var summary       = string.Empty;
                var thumbnail     = Guid.Empty.ToUrn();
                var thumbnailData = new byte[0];

                var album = mediaItemController.GetAlbum(clipViewModel.Id);
                if (album != null)
                {
                    summary       = "Based on: " + album.Name;
                    thumbnail     = album.Thumbnail;
                    thumbnailData = album.ThumbnailData;
                }

                var date = DateTime.Now.ToUniversalTime();

                var builder = new MediaItemBuilder <IPlaylist>(securityContext, mediaFactory)
                              .Identity(clipViewModel.Name, summary, date, date, 1)
                              .Size(clipViewModel.Duration)
                              .Thumbnail(thumbnail, thumbnailData);

                var playlist          = builder.ToMediaItem();
                var playlistItem      = clipViewModel.ToPlaylistItem(securityContext, mediaFactory, 1);
                var playlistViewModel = new PlaylistViewModel(mediaItemController, playlist, new List <IPlaylistItemViewModel> {
                    playlistItem
                });

                var taskViewModel = taskController.GetPlaylistViewModel(playlistViewModel);
                taskResultView.Playlist(taskViewModel, playlistViewModel);
            }
            catch (Exception ex)
            {
                logger.Error("  SearchResultView.clipListBoxItem_DoubleClick", ex);
            }
        }
Ejemplo n.º 10
0
        public IPlaylistViewModel ToPlaylist(ISecurityContext securityContext, IMediaFactory mediaFactory)
        {
            var date = DateTime.Now.ToUniversalTime();

            var builder = new MediaItemBuilder<IPlaylist>(securityContext, mediaFactory)
                .Identity(Name, Summary, date, date, 0, item.Location)
                .Thumbnail(item.Thumbnail, item.ThumbnailData);

            var playlist = builder.ToMediaItem();
            var playlistItems = new List<IPlaylistItemViewModel> { ToPlaylistItem(securityContext, mediaFactory, 1) };
            return new PlaylistViewModel(controller, playlist, playlistItems);
        }
Ejemplo n.º 11
0
        public IPlaylistItemViewModel ToPlaylistItem(ISecurityContext securityContext, IMediaFactory mediaFactory, uint number)
        {
            var builder = new MediaItemBuilder<IPlaylistItem>(securityContext, mediaFactory)
                .Identity(Name, Summary, item.FromDate, item.ToDate, number)
                .Size(item.Duration, item.Height, item.Width)
                .Creator(item.Creator, item.CreatorName)
                .Catalog(item.Catalog, item.CatalogName)
                .Target(item.Target, item.TargetType)
                .Thumbnail(item.Thumbnail, item.ThumbnailData);

            var playlistItem = builder.ToMediaItem();
            return new PlaylistItemViewModel(controller, playlistItem);
        }
Ejemplo n.º 12
0
        private T BuildItem <T>(IdentityInfo identityInfo, SizeInfo sizeInfo, CreatorInfo creatorInfo, CatalogInfo catalogInfo, TargetInfo targetInfo, UserInfo userInfo, ThumbnailInfo thumbnailInfo)
            where T : class, IMetadata
        {
            var builder = new MediaItemBuilder <T>(securityContext, mediaFactory)
                          .Identity(identityInfo.Name, identityInfo.Summary, identityInfo.FromDate, identityInfo.ToDate, identityInfo.Number, identityInfo.Location)
                          .Size(sizeInfo.Duration, sizeInfo.Height, sizeInfo.Width)
                          .Creator(creatorInfo.Location, creatorInfo.Name)
                          .Catalog(catalogInfo.Location, catalogInfo.Name)
                          .Target(targetInfo.Location, targetInfo.Type)
                          .User(userInfo.Location, userInfo.Name)
                          .Thumbnail(thumbnailInfo.Location, thumbnailInfo.Data);

            return(builder.ToMediaItem());
        }
        public override void Setup()
        {
            _initialSourceData = Data.SourceData("InitialSource");
            _mediaItem         = new MediaItem(Substitute.For <IEmbyItemData>(), MediaItemTypes.Series,
                                               _initialSourceData);

            _sourceDataLoaders = new[]
            {
                Data.SourceDataLoader(_mediaItem, _initialSourceData, "SourceA"),
                Data.SourceDataLoader(_mediaItem, _initialSourceData, "SourceB"),
                Data.SourceDataLoader(_mediaItem, _initialSourceData, "SourceC")
            }.ToList();

            Builder = new MediaItemBuilder(PluginConfiguration, _sourceDataLoaders, new ConsoleLogManager());
        }
            public async Task CreatesResult()
            {
                var embyInfo       = Data.EmbyInfo();
                var mediaItem      = Data.MediaItem();
                var builtMediaItem = Data.MediaItem();

                MediaItemBuilder.IdentifyAsync(Arg.Any <EmbyItemData>(), MediaItemType)
                .Returns(Right <ProcessFailedResult, IMediaItem>(mediaItem));
                MediaItemBuilder.BuildMediaItemAsync(mediaItem)
                .Returns(Right <ProcessFailedResult, IMediaItem>(builtMediaItem));

                var result = await Processor.GetResultAsync(embyInfo, MediaItemType, Enumerable.Empty <EmbyItemId>());

                result.IsRight.Should().BeTrue();
                result.IfRight(r => r.MediaItem.Should().Be(builtMediaItem));
            }
            public async Task IdentifiesItem()
            {
                var embyInfo  = Data.EmbyInfo();
                var mediaItem = Data.MediaItem();

                MediaItemBuilder.IdentifyAsync(Arg.Any <EmbyItemData>(), MediaItemType)
                .Returns(Right <ProcessFailedResult, IMediaItem>(mediaItem));

                var result = await Processor.GetResultAsync(embyInfo, MediaItemType, Enumerable.Empty <EmbyItemId>());

                result.IsRight.Should().BeTrue();

                MediaItemBuilder.Received(1)
                .IdentifyAsync(Arg.Is <EmbyItemData>(d => d.Identifier.Index == 1 &&
                                                     d.Identifier.ParentIndex == 2 &&
                                                     d.Identifier.Name == "name"), MediaItemType);
            }
        public virtual void Setup()
        {
            PluginConfiguration = Substitute.For <IPluginConfiguration>();

            MediaItemBuilder = Substitute.For <IMediaItemBuilder>();
            MediaItemBuilder.BuildMediaItemAsync(Arg.Any <IMediaItem>())
            .Returns(x => Right <ProcessFailedResult, IMediaItem>(x.Arg <IMediaItem>()));

            MediaItemType = Substitute.For <IMediaItemType <Series> >();
            MediaItemType.CreateMetadataFoundResult(PluginConfiguration, Arg.Any <IMediaItem>(), Arg.Any <ILogManager>())
            .Returns(x => Right <ProcessFailedResult, IMetadataFoundResult <Series> >(new MetadataFoundResult <Series>(
                                                                                          x.Arg <IMediaItem>(), new MetadataResult <Series>
            {
                Item = new Series()
            })));

            Processor = new MediaItemProcessor(PluginConfiguration, MediaItemBuilder, new ConsoleLogManager());
        }
Ejemplo n.º 17
0
        public override IClip GetClip(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IArtist artist, IAlbum album)
        {
            var clip = mediaItemRepository.GetByTarget<IClip>(Location).FirstOrDefault();
            if (clip != null)
            {
                return clip;
            }

            var name = GetClipName();
            var summary = string.Empty;
            var number = GetClipNumber();
            var date = GetDate();
            var duration = file != null && file.Properties != null ? file.Properties.Duration : TimeSpan.FromMinutes(5);
            var height = file != null && file.Properties != null ? (uint)file.Properties.VideoHeight : 480;
            var width = file != null && file.Properties != null ? (uint)file.Properties.VideoWidth : 640;

            var builder = new MediaItemBuilder<IClip>(securityContext, mediaFactory)
                .Identity(name, summary, date, date, number)
                .Size(duration, height, width)
                .Target(Location, Type.Name);

            return builder.ToMediaItem();
        }
        private void clipListBoxItem_DoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                var element = e.OriginalSource as UIElement;
                if (element == null)
                    return;

                var listBoxItem = element.FindContainingItem<ListBoxItem>();
                if (listBoxItem == null)
                    return;

                var clipViewModel = listBoxItem.DataContext as IClipViewModel;
                if (clipViewModel == null)
                    return;

                var summary = string.Empty;
                var thumbnail = Guid.Empty.ToUrn();
                var thumbnailData = new byte[0];

                var album = mediaItemController.GetAlbum(clipViewModel.Id);
                if (album != null)
                {
                    summary = "Based on: " + album.Name;
                    thumbnail = album.Thumbnail;
                    thumbnailData = album.ThumbnailData;
                }

                var date = DateTime.Now.ToUniversalTime();

                var builder = new MediaItemBuilder<IPlaylist>(securityContext, mediaFactory)
                    .Identity(clipViewModel.Name, summary, date, date, 1)
                    .Size(clipViewModel.Duration)
                    .Thumbnail(thumbnail, thumbnailData);

                var playlist = builder.ToMediaItem();
                var playlistItem = clipViewModel.ToPlaylistItem(securityContext, mediaFactory, 1);
                var playlistViewModel = new PlaylistViewModel(mediaItemController, playlist, new List<IPlaylistItemViewModel> { playlistItem });

                var taskViewModel = taskController.GetPlaylistViewModel(playlistViewModel);
                taskResultView.Playlist(taskViewModel, playlistViewModel);
            }
            catch (Exception ex)
            {
                logger.Error("  SearchResultView.clipListBoxItem_DoubleClick", ex);
            }
        }
        public virtual void Setup()
        {
            PluginConfiguration = Substitute.For <IPluginConfiguration>();

            Builder = new MediaItemBuilder(PluginConfiguration, null, new ConsoleLogManager());
        }
Ejemplo n.º 20
0
        public virtual IAlbum GetAlbum(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IArtist artist)
        {
            IAlbum album = null;
            var clip = mediaItemRepository.GetByTarget<IClip>(Location).FirstOrDefault();
            if (clip != null)
            {
                album = mediaItemRepository.GetByLocation<IAlbum>(clip.Catalog);
                if (album != null)
                    return album;
            }

            var albumName = GetAlbumName();
            var summary = string.Empty;
            album = mediaItemRepository.GetByName<IAlbum>(albumName).FirstOrDefault();
            if (album != null)
            {
                return album;
            }

            var albumNumber = GetAlbumNumber();
            var date = GetDate();

            var builder = new MediaItemBuilder<IAlbum>(securityContext, mediaFactory)
                .Identity(albumName, summary, date, date, albumNumber)
                .Creator(artist.Location, artist.Name);

            return builder.ToMediaItem();
        }
Ejemplo n.º 21
0
        public void UpdateThumbnail <T>(Uri id, Uri thumbnail, byte[] thumbnailData)
            where T : class, IMetadata
        {
            if (id == null)
            {
                throw new ArgumentNullException("id");
            }
            if (thumbnail == null)
            {
                throw new ArgumentNullException("thumbnail");
            }
            if (thumbnailData == null)
            {
                throw new ArgumentNullException("thumbnailData");
            }

            try
            {
                var item = mediaItemRepository.GetByLocation <T>(id);
                if (item == null)
                {
                    return;
                }

                var builder = new MediaItemBuilder <T>(securityContext, mediaFactory, item)
                              .Thumbnail(thumbnail, thumbnailData);

                mediaItemRepository.Save <T>(new List <T> {
                    builder.ToMediaItem()
                });


                //if (typeof(T) == typeof(IArtist) || typeof(T) == typeof(Artist))
                //{
                //    var item = artistRepository.GetByLocation(id);
                //    if (item == null)
                //        return;

                //    var identityInfo = new IdentityInfo(item.Location, item.Type, item.Name, item.Summary, item.FromDate, item.ToDate, item.Number);
                //    var sizeInfo = new SizeInfo(item.Duration, item.Height, item.Width);
                //    var creatorInfo = new CreatorInfo(item.Creator, item.CreatorName);
                //    var catalogInfo = new CatalogInfo(item.Catalog, item.CatalogName);
                //    var targetInfo = new TargetInfo(item.Target, item.TargetType);
                //    var userInfo = new UserInfo(item.User, item.UserName);
                //    var thumbnailInfo = new ThumbnailInfo(thumbnail, thumbnailData);
                //    var updated = new Artist(identityInfo, sizeInfo, creatorInfo, catalogInfo, targetInfo, userInfo, thumbnailInfo);
                //    artistRepository.Save(new List<IArtist> { updated });
                //}
                //else if (typeof(T) == typeof(IAlbum) || typeof(T) == typeof(Album))
                //{
                //    var item = albumRepository.GetByLocation(id);
                //    if (item == null)
                //        return;
                //    var identityInfo = new IdentityInfo(item.Location, item.Type, item.Name, item.Summary, item.FromDate, item.ToDate, item.Number);
                //    var sizeInfo = new SizeInfo(item.Duration, item.Height, item.Width);
                //    var creatorInfo = new CreatorInfo(item.Creator, item.CreatorName);
                //    var catalogInfo = new CatalogInfo(item.Catalog, item.CatalogName);
                //    var targetInfo = new TargetInfo(item.Target, item.TargetType);
                //    var userInfo = new UserInfo(item.User, item.UserName);
                //    var thumbnailInfo = new ThumbnailInfo(thumbnail, thumbnailData);
                //    var updated = new Album(identityInfo, sizeInfo, creatorInfo, catalogInfo, targetInfo, userInfo, thumbnailInfo);
                //    albumRepository.Save(new List<IAlbum> { updated });
                //}
                //else if (typeof(T) == typeof(ITrack) || typeof(T) == typeof(Track))
                //{
                //    var item = trackRepository.GetByLocation(id);
                //    if (item == null)
                //        return;

                //    var identityInfo = new IdentityInfo(item.Location, item.Type, item.Name, item.Summary, item.FromDate, item.ToDate, item.Number);
                //    var sizeInfo = new SizeInfo(item.Duration, item.Height, item.Width);
                //    var creatorInfo = new CreatorInfo(item.Creator, item.CreatorName);
                //    var catalogInfo = new CatalogInfo(item.Catalog, item.CatalogName);
                //    var targetInfo = new TargetInfo(item.Target, item.TargetType);
                //    var userInfo = new UserInfo(item.User, item.UserName);
                //    var thumbnailInfo = new ThumbnailInfo(thumbnail, thumbnailData);
                //    var updated = new Track(identityInfo, sizeInfo, creatorInfo, catalogInfo, targetInfo, userInfo, thumbnailInfo);
                //    trackRepository.Save(new List<ITrack> { updated });
                //}
                //else if (typeof(T) == typeof(IClip) || typeof(T) == typeof(Clip))
                //{
                //    var item = clipRepository.GetByLocation(id);
                //    if (item == null)
                //        return;

                //    var identityInfo = new IdentityInfo(item.Location, item.Type, item.Name, item.Summary, item.FromDate, item.ToDate, item.Number);
                //    var sizeInfo = new SizeInfo(item.Duration, item.Height, item.Width);
                //    var creatorInfo = new CreatorInfo(item.Creator, item.CreatorName);
                //    var catalogInfo = new CatalogInfo(item.Catalog, item.CatalogName);
                //    var targetInfo = new TargetInfo(item.Target, item.TargetType);
                //    var userInfo = new UserInfo(item.User, item.UserName);
                //    var thumbnailInfo = new ThumbnailInfo(thumbnail, thumbnailData);
                //    var updated = new Clip(identityInfo, sizeInfo, creatorInfo, catalogInfo, targetInfo, userInfo, thumbnailInfo);
                //    clipRepository.Save(new List<IClip> { updated });
                //}
            }
            catch (Exception ex)
            {
                logger.Error("  UpdateTrackThumbnail", ex);
                throw;
            }
        }
Ejemplo n.º 22
0
        public override ITrack GetTrack(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IAudioStreamFactory audioStreamFactory, IArtist artist, IAlbum album)
        {
            var track = mediaItemRepository.GetByTarget <ITrack>(Location).FirstOrDefault();

            //if (track != null)
            //return track;

            if (id3v2Tag == null)
            {
                if (track != null)
                {
                    return(track);
                }

                var builder = new MediaItemBuilder <ITrack>(securityContext, mediaFactory)
                              .Identity("Unknown", string.Empty)
                              .Creator(artist.Location, artist.Name)
                              .Catalog(album.Location, album.Name)
                              .Target(Location, Type.Name);

                return(builder.ToMediaItem());
            }

            var name    = id3v2Tag.Title != null ? id3v2Tag.Title : "Unknown Track";
            var summary = id3v2Tag.Lyrics ?? string.Empty;

            var recordDate = DateTime.MinValue;

            if (id3v2Tag != null && id3v2Tag.RecordingDate > DateTime.MinValue)
            {
                recordDate = id3v2Tag.RecordingDate;
            }
            else if (id3v1Tag != null && id3v1Tag.Year >= DateTime.MinValue.Year && id3v1Tag.Year <= DateTime.MaxValue.Year)
            {
                recordDate = new DateTime((int)id3v1Tag.Year, 1, 1);
            }

            var releaseDate = DateTime.MinValue;

            if (id3v2Tag != null && id3v2Tag.ReleaseDate > DateTime.MinValue)
            {
                releaseDate = id3v2Tag.ReleaseDate;
            }
            else if (id3v1Tag != null && id3v1Tag.Year >= DateTime.MinValue.Year && id3v1Tag.Year <= DateTime.MaxValue.Year)
            {
                releaseDate = new DateTime((int)id3v1Tag.Year, 1, 1);
            }

            var number   = id3v2Tag.Track;
            var duration = id3v2Tag.Duration;

            if (duration == TimeSpan.Zero)
            {
                using (var audioStream = audioStreamFactory.CreateAudioStream(Location))
                {
                    if (audioStream != null)
                    {
                        duration = audioStream.Duration;
                    }
                }
            }

            var thumbnail     = Guid.Empty.ToUrn();
            var thumbnailData = id3v2Tag.Pictures != null && id3v2Tag.Pictures.Length > 0 ? id3v2Tag.Pictures[0].Data.ToArray() : new byte[0];

            var trackId = track != null ? track.Location : Guid.NewGuid().ToUrn();

            var fullBuilder = new MediaItemBuilder <ITrack>(securityContext, mediaFactory)
                              .Identity(name, summary, recordDate, releaseDate, number, trackId)
                              .Size(duration)
                              .Creator(artist.Location, artist.Name)
                              .Catalog(album.Location, album.Name)
                              .Target(Location, Type.Name)
                              .Thumbnail(thumbnail, thumbnailData);

            return(fullBuilder.ToMediaItem());
        }
Ejemplo n.º 23
0
        public override ITrack GetTrack(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IAudioStreamFactory audioStreamFactory, IArtist artist, IAlbum album)
        {
            var track = mediaItemRepository.GetByTarget<ITrack>(Location).FirstOrDefault();
            //if (track != null)
                //return track;

            if (id3v2Tag == null)
            {
                if (track != null)
                    return track;

                var builder = new MediaItemBuilder<ITrack>(securityContext, mediaFactory)
                    .Identity("Unknown", string.Empty)
                    .Creator(artist.Location, artist.Name)
                    .Catalog(album.Location, album.Name)
                    .Target(Location, Type.Name);

                return builder.ToMediaItem();
            }

            var name = id3v2Tag.Title != null ? id3v2Tag.Title : "Unknown Track";
            var summary = id3v2Tag.Lyrics ?? string.Empty;
            
            var recordDate = DateTime.MinValue;
            if (id3v2Tag != null && id3v2Tag.RecordingDate > DateTime.MinValue)
                recordDate = id3v2Tag.RecordingDate;
            else if (id3v1Tag != null && id3v1Tag.Year >= DateTime.MinValue.Year && id3v1Tag.Year <= DateTime.MaxValue.Year)
                recordDate = new DateTime((int)id3v1Tag.Year, 1, 1);

            var releaseDate = DateTime.MinValue;
            if (id3v2Tag != null && id3v2Tag.ReleaseDate > DateTime.MinValue)
                releaseDate = id3v2Tag.ReleaseDate;
            else if (id3v1Tag != null && id3v1Tag.Year >= DateTime.MinValue.Year && id3v1Tag.Year <= DateTime.MaxValue.Year)
                releaseDate = new DateTime((int)id3v1Tag.Year, 1, 1);

            var number = id3v2Tag.Track;
            var duration = id3v2Tag.Duration;
            if (duration == TimeSpan.Zero)
            {
                using (var audioStream = audioStreamFactory.CreateAudioStream(Location))
                {
                    if (audioStream != null)
                    {
                        duration = audioStream.Duration;
                    }
                }
            }

            var thumbnail = Guid.Empty.ToUrn();
            var thumbnailData = id3v2Tag.Pictures != null && id3v2Tag.Pictures.Length > 0 ? id3v2Tag.Pictures[0].Data.ToArray() : new byte[0];

            var trackId = track != null ? track.Location : Guid.NewGuid().ToUrn();

            var fullBuilder = new MediaItemBuilder<ITrack>(securityContext, mediaFactory)
                .Identity(name, summary, recordDate, releaseDate, number, trackId)
                .Size(duration)
                .Creator(artist.Location, artist.Name)
                .Catalog(album.Location, album.Name)
                .Target(Location, Type.Name)
                .Thumbnail(thumbnail, thumbnailData);

            return fullBuilder.ToMediaItem();
        }
Ejemplo n.º 24
0
        public override IAlbum GetAlbum(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository, IArtist artist)
        {
            IAlbum album = null;
            var track = mediaItemRepository.GetByTarget<ITrack>(Location).FirstOrDefault();
            if (track != null)
            {
                album = mediaItemRepository.GetByLocation<IAlbum>(track.Catalog);
                if (album != null)
                    return album;
            }

            var albumTitle = "Unknown Album";
            var summary = string.Empty;
            //var albumTag = GetTags().Where(x => x.Type == Id3v2TagType.Album).FirstOrDefault();
            if (id3v2Tag != null && id3v2Tag.Album != null)
            {
                albumTitle = id3v2Tag.Album; //albumTag.Tuple.ToString();
                album = mediaItemRepository.GetByCreatorAndName<IAlbum>(artist.Location, albumTitle);
                if (album != null)
                    return album;
            }

            var builder = new MediaItemBuilder<IAlbum>(securityContext, mediaFactory)
                .Identity(albumTitle, summary)
                .Creator(artist.Location, artist.Name);

            return builder.ToMediaItem();
        }
Ejemplo n.º 25
0
        public override IArtist GetArtist(ISecurityContext securityContext, IMediaFactory mediaFactory, IMetadataRepository mediaItemRepository)
        {
            IArtist artist = null;
            var track = mediaItemRepository.GetByTarget<ITrack>(Location).FirstOrDefault();
            if (track != null)
            {
                artist = mediaItemRepository.GetByLocation<IArtist>(track.Creator);
                if (artist != null)
                    return artist;
            }

            if (id3v2Tag == null || id3v2Tag.JoinedPerformers == null)
                return new MediaItemBuilder<IArtist>(securityContext, mediaFactory).GetDefault();

            var artistName = id3v2Tag.JoinedPerformers;
            var summary = string.Empty;
            artist = mediaItemRepository.GetByName<IArtist>(artistName).FirstOrDefault();
            if (artist != null)
                return artist;

            var builder = new MediaItemBuilder<IArtist>(securityContext, mediaFactory)
                .Identity(artistName, summary);

            return builder.ToMediaItem();
        }