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()); }
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()); }
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()); }
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()); }
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)); }
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 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); }
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); }
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()); }
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()); }
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(); }
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; } }
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()); }
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(); }
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(); }
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(); }