/// <summary> /// Serializes and saves the state of the current instance /// </summary> public async Task SaveStateAsync() { IdeState state = new IdeState { FilePath = Code.File?.Path, Text = Text.ToString(), Row = Row, Column = Column }; string json = JsonSerializer.Serialize(state), temporaryPath = FilesService.TemporaryFilesPath, statePath = Path.Combine(temporaryPath, "state.json"); IFile file = await FilesService.CreateOrOpenFileFromPathAsync(statePath); using Stream stream = await file.OpenStreamForWriteAsync(); stream.SetLength(0); using StreamWriter writer = new StreamWriter(stream); await writer.WriteAsync(json); }
/// <summary> /// Loads and restores the serialized state of the current instance, if available /// </summary> /// <param name="file">The optional file to load, if present</param> public async Task RestoreStateAsync(IFile?file) { if (file is null) { string temporaryPath = FilesService.TemporaryFilesPath, statePath = Path.Combine(temporaryPath, "state.json"); if (!(await FilesService.TryGetFileFromPathAsync(statePath) is IFile jsonFile)) { return; } using Stream stream = await jsonFile.OpenStreamForReadAsync(); using StreamReader reader = new StreamReader(stream); string json = await reader.ReadToEndAsync(); IdeState state = JsonSerializer.Deserialize <IdeState>(json); if (state.FilePath is null) { Code = SourceCode.CreateEmpty(); } else { IFile?sourceFile = await FilesService.TryGetFileFromPathAsync(state.FilePath); if (sourceFile is null) { Code = SourceCode.CreateEmpty(); } else { Code = await SourceCode.TryLoadFromEditableFileAsync(sourceFile) ?? SourceCode.CreateEmpty(); } } Text = state.Text.AsMemory(); Row = state.Row; Column = state.Column; if (!(Code.File is null)) { _ = FilesHistoryService.LogOrUpdateActivityAsync(Code.File); } StateRestored?.Invoke(this, state); } else { await TryLoadTextFromFileAsync(file); } }
private void ViewModel_OnStateRestored(object sender, IdeState e) { CodeEditor.LoadText(e.Text); CodeEditor.Move(e.Row, e.Column); }
public IpsTimer(BasicOne basicOne, IdeState state) { BasicOne = basicOne; RequiredState = state; }