Example #1
0
 /// <summary>
 /// Sets global tracks filters.
 /// </summary>
 /// <param name="albumArtistFilter">Optionnal; <see cref="AlbumData.AlbumArtist"/> filter.</param>
 /// <param name="albumFilter">Optionnal; <see cref="TrackData.Album"/> filter.</param>
 /// <param name="genreFilter">Optionnal; <see cref="TrackData.Genres"/> filter.</param>
 /// <param name="performerFilter">Optionnal; <see cref="TrackData.Performers"/> filter.</param>
 /// <param name="yearFilter">Optionnal; <see cref="TrackData.Year"/> filter.</param>
 public void SetGlobalTracksFilters(AlbumArtistData albumArtistFilter = null, AlbumData albumFilter         = null,
                                    GenreData genreFilter             = null, PerformerData performerFilter = null, uint?yearFilter = null)
 {
     _albumArtistGlobalFilter = albumArtistFilter;
     _albumGlobalFilter       = albumFilter;
     _genreGlobalFilter       = genreFilter;
     _performerGlobalFilter   = performerFilter;
     _yearGlobalFilter        = yearFilter;
 }
Example #2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="sourceData"><see cref="BaseItemData.SourceData"/></param>
        /// <param name="library"><see cref="LibraryEngine"/></param>
        /// <exception cref="ArgumentNullException"><paramref name="library"/> is <c>Null</c>.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="sourceData"/> is <c>Null</c>.</exception>
        public PerformerItemData(PerformerData sourceData, LibraryEngine library) : base(sourceData)
        {
            if (library == null)
            {
                throw new ArgumentNullException(nameof(library));
            }

            if (sourceData == null)
            {
                throw new ArgumentNullException(nameof(sourceData));
            }

            IEnumerable <TrackData> tracks = library.Tracks.Where(t => t.Performers.Contains(sourceData));

            TracksCount  = tracks.Count();
            TracksLength = new TimeSpan(0, 0, (int)tracks.Sum(t => t.Length.TotalSeconds));
        }
Example #3
0
        private void TreatSingleFile(int i, string file,
                                     Dictionary <KeyValuePair <string, bool>, AlbumArtistData> localAlbumArtistDatas,
                                     Dictionary <KeyValuePair <KeyValuePair <string, AlbumArtistData>, bool>, AlbumData> localAlbumDatas,
                                     Dictionary <KeyValuePair <string, bool>, GenreData> localGenreDatas,
                                     Dictionary <KeyValuePair <string, bool>, PerformerData> localPerformerDatas)
        {
            try
            {
                TagFile tagFile = TagFile.Create(file);

                TrackData track;
                if (tagFile != null)
                {
                    if (tagFile.Tag != null)
                    {
                        TagLib.Tag tag = tagFile.Tag;

                        AlbumArtistData albumArtist        = localAlbumArtistDatas[new KeyValuePair <string, bool>(_NULL, true)];
                        AlbumData       album              = localAlbumDatas[new KeyValuePair <KeyValuePair <string, AlbumArtistData>, bool>(new KeyValuePair <string, AlbumArtistData>(_NULL, albumArtist), true)];
                        var             performers         = new List <PerformerData>();
                        var             genres             = new List <GenreData>();
                        var             sourceAlbumArtists = new List <string>();

                        if (tag.AlbumArtists?.Length > 1)
                        {
                            LoadingLogHandler?.BeginInvoke(this, new LoadingLogEventArgs(new LogData($"Multiple album artists for the file : {file}.", LogLevel.Warning), i), null, null);
                        }

                        if (tag.AlbumArtists != null)
                        {
                            sourceAlbumArtists = tag.AlbumArtists.Where(aa => aa != null).ToList();
                        }

                        if (tag.FirstAlbumArtist != null)
                        {
                            if (!localAlbumArtistDatas.TryGetValue(new KeyValuePair <string, bool>(tag.FirstAlbumArtist, false), out albumArtist))
                            {
                                albumArtist = new AlbumArtistData(tag.FirstAlbumArtist, false);
                                localAlbumArtistDatas.Add(new KeyValuePair <string, bool>(tag.FirstAlbumArtist, false), albumArtist);
                            }
                        }

                        if (tag.Album != null)
                        {
                            var key = new KeyValuePair <string, AlbumArtistData>(tag.Album, albumArtist);
                            if (!localAlbumDatas.TryGetValue(new KeyValuePair <KeyValuePair <string, AlbumArtistData>, bool>(key, false), out album))
                            {
                                album = new AlbumData(albumArtist, tag.Album, false);
                                localAlbumDatas.Add(new KeyValuePair <KeyValuePair <string, AlbumArtistData>, bool>(key, false), album);
                            }
                        }

                        if (tag.Performers != null)
                        {
                            foreach (string performer in tag.Performers)
                            {
                                PerformerData performerd = localPerformerDatas[new KeyValuePair <string, bool>(_NULL, true)];
                                if (performer != null)
                                {
                                    if (!localPerformerDatas.TryGetValue(new KeyValuePair <string, bool>(performer, false), out performerd))
                                    {
                                        performerd = new PerformerData(performer, false);
                                        localPerformerDatas.Add(new KeyValuePair <string, bool>(performer, false), performerd);
                                    }
                                }
                                if (!performers.Contains(performerd))
                                {
                                    performers.Add(performerd);
                                }
                            }
                        }

                        if (tag.Genres != null)
                        {
                            foreach (string genre in tag.Genres)
                            {
                                GenreData genred = localGenreDatas[new KeyValuePair <string, bool>(_NULL, true)];
                                if (genre != null)
                                {
                                    if (!localGenreDatas.TryGetValue(new KeyValuePair <string, bool>(genre, false), out genred))
                                    {
                                        genred = new GenreData(genre, false);
                                        localGenreDatas.Add(new KeyValuePair <string, bool>(genre, false), genred);
                                    }
                                }
                                if (!genres.Contains(genred))
                                {
                                    genres.Add(genred);
                                }
                            }
                        }

                        List <byte> frontCoverDatas = ExtractFrontCoverInformations(tag, out string frontCoverMimeType);

                        track = new TrackData(tag.Track, tag.Title ?? _NULL, album,
                                              performers, genres, tag.Year,
                                              (tagFile.Properties?.Duration).GetValueOrDefault(TimeSpan.Zero),
                                              tagFile.Name, sourceAlbumArtists, GetMimeType(tagFile.MimeType),
                                              frontCoverMimeType, frontCoverDatas);
                    }
                    else
                    {
                        track = new TrackData(tagFile.Name, (tagFile.Properties?.Duration).GetValueOrDefault(TimeSpan.Zero), localAlbumDatas[new KeyValuePair <KeyValuePair <string, AlbumArtistData>, bool>(new KeyValuePair <string, AlbumArtistData>(_NULL, localAlbumArtistDatas[new KeyValuePair <string, bool>(_NULL, true)]), false)], GetMimeType(tagFile.MimeType));
                    }
                }
                else
                {
                    track = new TrackData(file, TimeSpan.Zero, localAlbumDatas[new KeyValuePair <KeyValuePair <string, AlbumArtistData>, bool>(new KeyValuePair <string, AlbumArtistData>(_NULL, localAlbumArtistDatas[new KeyValuePair <string, bool>(_NULL, true)]), false)], tagFile.MimeType);
                }
                _tracks.Add(track);
                LoadingLogHandler?.BeginInvoke(this, new LoadingLogEventArgs(new LogData($"The file {file} has been processed.", LogLevel.Information), i), null, null);
            }
            catch (Exception exLocal)
            {
                LoadingLogHandler?.BeginInvoke(this, new LoadingLogEventArgs(new LogData($"Error while processing {file}.", LogLevel.Error, new KeyValuePair <string, string>("Error message", exLocal.Message)), i), null, null);
            }
        }