public async Task MergeFromMetaDataAsync(IFullAlbumDescriptor iad, IMergeStrategy Strategy)
 {
     await Task.Run( () => MergeFromMetaData(iad, Strategy));
 }
        public void MergeFromMetaData(IFullAlbumDescriptor iad, IMergeStrategy Strategy)
        {
            if (Strategy.AlbumMetaData != IndividualMergeStategy.Never)
            {
                if ((Year == 0) || Strategy.AlbumMetaData == IndividualMergeStategy.Always)
                    Year = iad.Year;

                if (string.IsNullOrEmpty(Name) || Strategy.AlbumMetaData == IndividualMergeStategy.Always)
                    Name = iad.Name;

                if ((_Artists.MofifiableCollection.Count == 0) || (Strategy.AlbumMetaData == IndividualMergeStategy.Always))
                {
                    _Artists.MofifiableCollection.Clear();
                    _Artists.MofifiableCollection.AddCollection(this._IT.GetArtistFromName(iad.Artist));
                }

                if ((string.IsNullOrEmpty(Genre)) || (Strategy.AlbumMetaData == IndividualMergeStategy.Always))
                    Genre = iad.Genre;
            }

            if ((Strategy.InjectAlbumImage == IndividualMergeStategy.Always) || ((Strategy.InjectAlbumImage == IndividualMergeStategy.IfDummyValue) && Images.Count == 0))
            {
                int i = 0;
                if (iad.Images != null)
                {
                    foreach (IIMageInfo Im in iad.Images)
                    {
                        if (AddImage(AlbumImage.GetFromBuffer(_AM, Im.ImageBuffer), i) != null)
                            i++;
                    }
                }
            }

            if (Strategy.TrackMetaData == IndividualMergeStategy.Never)
                return;

            //var OrderedTracksInput = (from r in iad.TrackDescriptors orderby r.Duration.TotalMilliseconds ascending select r).ToList();
            //var OrderedTracks = (from r in Tracks orderby r.Duration.TotalMilliseconds ascending select r).ToList();

            var OrderedTracksInput = iad.TrackDescriptors.OrderBy(r => r.DiscNumber).ThenBy(r=>r.TrackNumber).ToList();
            var OrderedTracks = Tracks.OrderBy(r => r.DiscNumber).ThenBy(r=>r.TrackNumber).ToList();

            if (OrderedTracksInput.Count != OrderedTracks.Count)
                return;

            int j = 0;

            foreach (IModifiableTrack INT in OrderedTracks)
            {
                ITrackMetaDataDescriptor Tr = OrderedTracksInput[j++];

                if ((Strategy.TrackMetaData == IndividualMergeStategy.Always) || (new StringTrackParser(INT.Name, false).IsDummy))
                    INT.Name = Tr.Name;

                if ((Strategy.TrackMetaData == IndividualMergeStategy.Always) || string.IsNullOrEmpty(INT.Artist))
                    INT.Artist = Tr.Artist;

                if ((Strategy.TrackMetaData == IndividualMergeStategy.Always) || (INT.TrackNumber == 0))
                    INT.TrackNumber = Tr.TrackNumber;

                TimeSpan delta = (Tr.Duration - INT.Duration);
                Trace.WriteLine(delta);
            }
        }
 public AmbigueousCDInformationArgs(IList<WebMatch<IFullAlbumDescriptor>> iCDInfos, IFullAlbumDescriptor ifad)
 {
     CDInfos = iCDInfos;
     SelectedInfo = null;
     Continue = false;
     Default = ifad;
 }
        private void ImportImageFromDescriptor(IFullAlbumDescriptor iad)
        {
            if ((iad == null) || (iad.Images==null) || (iad.Images.Count==0))
                return;

            PersistentImages = new List<AlbumImage>();

            foreach (IIMageInfo im in iad.Images)
            {
                if (im.ImageBuffer.IsOK)
                {
                    AlbumImage ai = AlbumImage.GetFromBuffer(this, im.ImageBuffer);
                    PersistentImages.Add(ai);
                    ai.Rank = im.ID;
                }
            }
        }
        private IFullEditableAlbumDescriptor FromIFullAlbumDescriptor(IFullAlbumDescriptor entry)
        {
            IFullEditableAlbumDescriptor res = entry.GetEditable();
            if (res.TrackDescriptors.Count == 0)
                return res;

            uint dc = res.TrackDescriptors[0].DiscNumber;
            res.EditableTrackDescriptors.Apply(tr => tr.DiscNumber = dc);

            return res;
        }
 public IFullAlbumDescriptorWrapper(IFullAlbumDescriptor desc)
 {
     _Desc = desc as LoadingAlbumDescriptor;
 }
 internal ICDInfosHelperAdpt(IFullAlbumDescriptor ICI)
 {
     _ICI = ICI;
 }