private void EncodingSelection_OnClick(object sender, RoutedEventArgs e) { if (!(sender is MenuFlyoutItem item)) { return; } var encoding = EncodingUtility.GetEncodingByName((string)item.Tag); var textEditor = NotepadsCore.GetSelectedTextEditor(); if (textEditor != null) { NotepadsCore.ChangeEncoding(textEditor, encoding); } }
private async Task <ITextEditor> RecoverTextEditorAsync(TextEditorSessionDataV1 editorSessionData) { StorageFile editingFile = null; if (editorSessionData.EditingFileFutureAccessToken != null) { editingFile = await FileSystemUtility.GetFileFromFutureAccessList(editorSessionData.EditingFileFutureAccessToken); } string lastSavedFile = editorSessionData.LastSavedBackupFilePath; string pendingFile = editorSessionData.PendingBackupFilePath; ITextEditor textEditor; if (editingFile == null && lastSavedFile == null && pendingFile == null) { textEditor = null; } else if (editingFile != null && lastSavedFile == null && pendingFile == null) // File without pending changes { textEditor = await _notepadsCore.CreateTextEditor(editorSessionData.Id, editingFile, ignoreFileSizeLimit : true); textEditor.ResetEditorState(editorSessionData.StateMetaData); } else // File with pending changes { string lastSavedText = string.Empty; string pendingText = null; if (lastSavedFile != null) { TextFile lastSavedTextFile = await FileSystemUtility.ReadFile(lastSavedFile, ignoreFileSizeLimit : true, EncodingUtility.GetEncodingByName(editorSessionData.StateMetaData.LastSavedEncoding)); lastSavedText = lastSavedTextFile.Content; } var textFile = new TextFile(lastSavedText, EncodingUtility.GetEncodingByName(editorSessionData.StateMetaData.LastSavedEncoding), LineEndingUtility.GetLineEndingByName(editorSessionData.StateMetaData.LastSavedLineEnding), editorSessionData.StateMetaData.DateModifiedFileTime); textEditor = _notepadsCore.CreateTextEditor( editorSessionData.Id, textFile, editingFile, editorSessionData.StateMetaData.IsModified); if (pendingFile != null) { TextFile pendingTextFile = await FileSystemUtility.ReadFile(pendingFile, ignoreFileSizeLimit : true, EncodingUtility.GetEncodingByName(editorSessionData.StateMetaData.LastSavedEncoding)); pendingText = pendingTextFile.Content; } textEditor.ResetEditorState(editorSessionData.StateMetaData, pendingText); } return(textEditor); }
private async void Sets_Drop(object sender, DragEventArgs args) { if (!(sender is SetsView)) { return; } var sets = sender as SetsView; // Handle non Notepads drop event if (string.IsNullOrEmpty(args.DataView?.Properties?.ApplicationName) || !string.Equals(args.DataView?.Properties?.ApplicationName, App.ApplicationName)) { if (args.DataView == null || !args.DataView.Contains(StandardDataFormats.StorageItems)) { return; } var fileDropDeferral = args.GetDeferral(); var storageItems = await args.DataView.GetStorageItemsAsync(); StorageItemsDropped?.Invoke(this, storageItems); fileDropDeferral.Complete(); return; } var deferral = args.GetDeferral(); try { args.DataView.Properties.TryGetValue(NotepadsTextEditorMetaData, out object dataObj); if (!(dataObj is string data)) { throw new Exception("Failed to drop editor set: NotepadsTextEditorMetaData is invalid (Not String)."); } TextEditorStateMetaData metaData = JsonConvert.DeserializeObject <TextEditorStateMetaData>(data); if (args.DataView.Properties.TryGetValue(NotepadsTextEditorEditingFilePath, out object editingFilePathObj) && editingFilePathObj is string editingFilePath) { var editor = GetTextEditor(editingFilePath); if (editor != null) { SwitchTo(editor); NotificationCenter.Instance.PostNotification(_resourceLoader.GetString("TextEditor_NotificationMsg_FileAlreadyOpened"), 2500); throw new Exception("Failed to drop editor set: File already opened."); } } StorageFile editingFile = null; if (metaData.HasEditingFile && args.DataView.Contains(StandardDataFormats.StorageItems)) { var storageItems = await args.DataView.GetStorageItemsAsync(); if (storageItems.Count == 1 && storageItems[0] is StorageFile file) { editingFile = file; } else { throw new Exception("Failed to read storage file from dropped set: Expecting only one storage file."); } } string lastSavedText = null; string pendingText = null; if (args.DataView.Properties.TryGetValue(NotepadsTextEditorLastSavedContent, out object lastSavedContentObj) && lastSavedContentObj is string lastSavedContent) { lastSavedText = lastSavedContent; } else { throw new Exception($"Failed to get last saved content from DataView: NotepadsTextEditorLastSavedContent property Is null"); } if (args.DataView.Properties.TryGetValue(NotepadsTextEditorPendingContent, out object pendingContentObj) && pendingContentObj is string pendingContent) { pendingText = pendingContent; } ApplicationSettingsStore.Write(SetDragAndDropActionStatus, "Handled"); var index = -1; // Determine which items in the list our pointer is in between. for (int i = 0; i < sets.Items?.Count; i++) { var item = sets.ContainerFromIndex(i) as SetsViewItem; if (args.GetPosition(item).X - item?.ActualWidth < 0) { index = i; break; } } var atIndex = index == -1 ? sets.Items.Count : index; var textFile = new TextFile(lastSavedText, EncodingUtility.GetEncodingByName(metaData.LastSavedEncoding), LineEndingUtility.GetLineEndingByName(metaData.LastSavedLineEnding), metaData.DateModifiedFileTime); var newEditor = CreateTextEditor(Guid.NewGuid(), textFile, editingFile, metaData.FileNamePlaceholder, metaData.IsModified); OpenTextEditor(newEditor, atIndex); newEditor.ResetEditorState(metaData, pendingText); if (metaData.IsContentPreviewPanelOpened) { newEditor.ShowHideContentPreview(); } if (metaData.IsInDiffPreviewMode) { newEditor.OpenSideBySideDiffViewer(); } deferral.Complete(); Analytics.TrackEvent("OnSetDropped"); } catch (Exception ex) { LoggingService.LogException(ex); deferral.Complete(); } }
public override Encoding ReadJson(JsonReader reader, Type objectType, Encoding existingValue, bool hasExistingValue, JsonSerializer serializer) { return(EncodingUtility.GetEncodingByName((string)reader.Value, fallbackEncoding: new UTF8Encoding(false))); }