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(); }
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); }
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(); } }
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) { }
protected override void SetValue(string value, EditID3File file) { GetPropertySynchornizer(file).Value = value; }
protected override bool GetIsSync(EditID3File file) { return(GetPropertySynchornizer(file).IsSync); }
protected override string GetValue(EditID3File file) { return(GetPropertySynchornizer(file).Value); }
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)); }