private void Add(IGrouping <string, EditTextFrame> frameIdGroup, EditID3File file)
        {
            List <EditTextFrame>            frames       = frameIdGroup.ToList();
            List <MultipleFrameSyncronizer> syncronizers = this.Where(c => c.FrameId == frameIdGroup.Key).ToList();

            foreach (EditTextFrame frame in frames.ToArray())
            {
                MultipleFrameSyncronizer syncronizer = syncronizers.FirstOrDefault(c => c.Value == frame.Text);

                if (syncronizer == null)
                {
                    continue;
                }

                syncronizer.AddFrame(frame, file);

                syncronizers.Remove(syncronizer);
                frames.Remove(frame);
            }

            foreach (EditTextFrame frame in frames)
            {
                MultipleFrameSyncronizer syncronizer = syncronizers.FirstOrDefault();

                if (syncronizer == null)
                {
                    syncronizer = new MultipleFrameSyncronizer(parent, frame.FrameId);
                    Add(syncronizer);
                }

                syncronizer.AddFrame(frame, file);
                syncronizers.Remove(syncronizer);
            }
        }
        protected override void SetValue(string value, EditID3File file)
        {
            EditTextFrame frame;

            if (!frames.TryGetValue(file, out frame))
            {
                frame = EditTextFrame.GetFrameFromId(FrameId);

                frames.Add(file, frame);

                file.V2Tag.Add(frame);
            }

            lock (settingTextFrames)
            {
                settingTextFrames.Add(frame);
            }

            frame.Text = value;

            lock (settingTextFrames)
            {
                settingTextFrames.Remove(frame);
            }
        }
        private Tuple <EditID3File, IsUnsynchronizedDetector> GetFileTuple(FileInfo source)
        {
            EditID3File file = new EditID3File(source);
            IsUnsynchronizedDetector detector = new IsUnsynchronizedDetector(file);

            return((file, detector).ToTuple());
        }
        protected override void Unsubscribe(EditID3File file)
        {
            EditTextFrame frame;

            if (frames.TryGetValue(file, out frame))
            {
                frame.PropertyChanged -= Frame_PropertyChanged;
                frames.Remove(file);
            }
        }
        private void File_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            EditID3File file = (EditID3File)sender;

            if (e.PropertyName == nameof(file.V2Tag))
            {
                Remove(file);
                Add(file);
            }
        }
        public void AddFrame(EditTextFrame frame, EditID3File file)
        {
            if (frames.ContainsKey(file))
            {
                return;
            }

            frames.Add(file, frame);
            frame.PropertyChanged += Frame_PropertyChanged;

            Update();
        }
Exemple #7
0
        protected override void Unsubscribe(EditID3File file)
        {
            file.PropertyChanged -= File_PropertyChanged;

            PropertySynchronizer synchronizer;

            if (!synchronizers.TryGetValue(file, out synchronizer))
            {
                return;
            }

            synchronizer.PropertyChanged -= OnPropertySynchronizer_PropertyChanged;
            synchronizers.Remove(file);
        }
Exemple #8
0
        private void File_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            EditID3File file = (EditID3File)sender;

            if (e.PropertyName == GetPropertyName())
            {
                PropertySynchronizer synchronizer = synchronizers[file];

                synchronizer.PropertyChanged -= OnPropertySynchronizer_PropertyChanged;
                synchronizers[file]           = synchronizer = GetPropertySynchornizer(file);
                synchronizer.PropertyChanged += OnPropertySynchronizer_PropertyChanged;

                Update();
            }
        }
Exemple #9
0
        protected override void Subscribe(EditID3File file)
        {
            file.PropertyChanged += File_PropertyChanged;

            PropertySynchronizer synchronizer = GetPropertySynchornizer(file);

            if (synchronizers.ContainsKey(file))
            {
                synchronizers[file] = synchronizer;
            }
            else
            {
                synchronizers.Add(file, synchronizer);
            }

            synchronizer.PropertyChanged += OnPropertySynchronizer_PropertyChanged;
        }
        private void Add(EditID3File file)
        {
            foreach (var frameIdGroup in file.V2Tag.OfType <EditTextFrame>().GroupBy(f => f.FrameId))
            {
                Add(frameIdGroup, file);
            }

            file.PropertyChanged         += File_PropertyChanged;
            file.V2Tag.CollectionChanged += ID3v2Tag_CollectionChanged;

            if (tags.ContainsKey(file))
            {
                tags[file] = file.V2Tag;
            }
            else
            {
                tags.Add(file, file.V2Tag);
            }
        }
        private void Remove(EditID3File file)
        {
            foreach (MultipleFrameSyncronizer syncronizer in this.ToArray())
            {
                if (syncronizer.RemoveFrame(file) && !syncronizer.GetFrames().Any())
                {
                    Remove(syncronizer);
                }
            }

            file.PropertyChanged -= File_PropertyChanged;

            EditID3v2Tag tag;

            if (tags.TryGetValue(file, out tag))
            {
                tag.CollectionChanged -= ID3v2Tag_CollectionChanged;
            }
        }
        private void ID3v2Tag_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            EditID3File file = parent.FirstOrDefault(f => f.V2Tag == sender);

            if (file != null)
            {
                foreach (EditTextFrame frame in e.NewItems?.OfType <EditTextFrame>() ?? Enumerable.Empty <EditTextFrame>())
                {
                    MultipleFrameSyncronizer syncornizer = this.FirstOrDefault
                                                               (s => s.FrameId == frame.FrameId && s.GetFrames().Any(f => f.Key == file));

                    if (syncornizer == null)
                    {
                        syncornizer = new MultipleFrameSyncronizer(parent, frame.FrameId);
                        Add(syncornizer);
                    }

                    syncornizer.AddFrame(frame, file);
                }
            }

            foreach (EditTextFrame frame in e.OldItems?.OfType <EditTextFrame>() ?? Enumerable.Empty <EditTextFrame>())
            {
                foreach (MultipleFrameSyncronizer syncronizer in this.ToArray())
                {
                    if (syncronizer.RemoveFrame(frame))
                    {
                        if (!syncronizer.GetFrames().Any())
                        {
                            Remove(syncronizer);
                        }

                        break;
                    }
                }
            }
        }
        public bool RemoveFrame(EditTextFrame frame)
        {
            EditID3File file = null;

            foreach (KeyValuePair <EditID3File, EditTextFrame> pair in frames)
            {
                if (pair.Value != frame)
                {
                    continue;
                }

                file = pair.Key;
                break;
            }

            if (file == null)
            {
                return(false);
            }

            frame.PropertyChanged -= Frame_PropertyChanged;

            return(frames.Remove(file));
        }
 protected abstract void Unsubscribe(EditID3File file);
 protected abstract void SetValue(string value, EditID3File file);
 protected abstract bool GetIsSync(EditID3File file);
 protected abstract string GetValue(EditID3File file);
        protected override string GetValue(EditID3File file)
        {
            EditTextFrame frame;

            return(frames.TryGetValue(file, out frame) ? frame.Text : string.Empty);
        }
 protected override bool GetIsSync(EditID3File file)
 {
     return(true);
 }
 protected override void Subscribe(EditID3File file)
 {
 }
Exemple #21
0
 protected override void SetValue(string value, EditID3File file)
 {
     GetPropertySynchornizer(file).Value = value;
 }
Exemple #22
0
 protected override bool GetIsSync(EditID3File file)
 {
     return(GetPropertySynchornizer(file).IsSync);
 }
Exemple #23
0
 protected override string GetValue(EditID3File file)
 {
     return(GetPropertySynchornizer(file).Value);
 }
Exemple #24
0
 protected abstract PropertySynchronizer GetPropertySynchornizer(EditID3File file);
 protected override PropertySynchronizer GetPropertySynchornizer(EditID3File file)
 {
     return(file.TrackNumber);
 }
 protected override PropertySynchronizer GetPropertySynchornizer(EditID3File file)
 {
     return(file.Album);
 }
 public bool RemoveFrame(EditID3File file)
 {
     return(frames.Remove(file));
 }