public async Task DumpAsync() { if (!isChanged) { return; } BinaryFormatter formatter = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); formatter.Serialize(ms, CustomPatterns); FileActionRequestEventArgs args = new FileActionRequestEventArgs(Name + "CustomPatterns", ms.ToArray()); await OnWriteToFileRequest(args); Dictionary <string, Dictionary <string, object> > currentState = new Dictionary <string, Dictionary <string, object> >(); foreach (PatternViewModel pattern in PatternEntries) { Dictionary <string, object> entry = new Dictionary <string, object>(); entry.Add("PatternCommondDownloadFolderPath", pattern.PatternCommondDownloadFolderPathText); entry.Add("PatternEntries", pattern.PatternEntries.ToList()); currentState.Add(pattern.SelectedPattern, entry); } formatter = new BinaryFormatter(); ms = new MemoryStream(); formatter.Serialize(ms, currentState); args = new FileActionRequestEventArgs(Name + "State", ms.ToArray()); await OnWriteToFileRequest(args); }
public async Task RestoreAsync() { SavePatternWindow = new ObservableCollection <AddNewPatternViewModel>(); FileActionRequestEventArgs args = new FileActionRequestEventArgs(Name + "State"); await OnReadFromFileRequest(args); if (args.Exception != null) { throw args.Exception; } Patterns = new List <Pattern>(); Patterns.Add(GetDefaultPattern()); await GetCustomPatterns(); Patterns.AddRange(CustomPatterns); if (args.InOutData == null) { PatternEntries = new ObservableCollection <PatternViewModel>(); var entry = new PatternViewModel(Patterns, this); entry.SelectedPattern = Pattern.Default; entry.PatternChanged += OnPatternEntryChanged; PatternEntries.Add(entry); return; } await Task.Run(() => { MemoryStream ms = new MemoryStream(); ms.Write(args.InOutData, 0, args.InOutData.Length); ms.Position = 0; BinaryFormatter formatter = new BinaryFormatter(); formatter.Binder = new Binder(); AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler); var pluginViewModelState = (Dictionary <string, Dictionary <string, object> >)formatter.Deserialize(ms); PatternEntries = new ObservableCollection <PatternViewModel>(); foreach (string key in pluginViewModelState.Keys) { PatternViewModel patternView = new PatternViewModel(Patterns, this); patternView.PatternChanged += OnPatternEntryChanged; patternView.SelectedPattern = key; patternView.PatternEntries.Clear(); patternView.PatternCommondDownloadFolderPathText = (string)pluginViewModelState[key]["PatternCommondDownloadFolderPath"]; foreach (PatternEntryViewModel entry in (List <PatternEntryViewModel>)pluginViewModelState[key]["PatternEntries"]) { entry.PatternDownloadStatusVisibility = Visibility.Collapsed; patternView.AddPatternEntry(entry); } PatternEntries.Add(patternView); } }); }
private async Task GetCustomPatterns() { FileActionRequestEventArgs args = new FileActionRequestEventArgs(Name + "CustomPatterns"); await OnReadFromFileRequest(args); if (args.Exception != null) { throw args.Exception; } if (args.InOutData != null) { MemoryStream ms = new MemoryStream(); ms.Write(args.InOutData, 0, args.InOutData.Length); ms.Position = 0; BinaryFormatter formatter = new BinaryFormatter(); formatter.Binder = new Binder(); CustomPatterns = (List <Pattern>)formatter.Deserialize(ms); } }
protected virtual async Task OnWriteToFileRequest(FileActionRequestEventArgs args) { await WriteToFileRequest?.Invoke(this, args); }
protected virtual async Task OnReadFromFileRequest(FileActionRequestEventArgs args) { await ReadFromFileRequest?.Invoke(this, args); }