|
| 1 | +import { CommonActionType, CommonActionTypeMapping } from '../../../datascience-ui/interactive-common/redux/reducers/types'; |
| 2 | +import { CssMessages, SharedMessages } from '../messages'; |
| 3 | +import { IInteractiveWindowMapping, InteractiveWindowMessages } from './interactiveWindowTypes'; |
| 4 | +import { BaseReduxActionPayload } from './types'; |
| 5 | + |
| 6 | +// Copyright (c) Microsoft Corporation. All rights reserved. |
| 7 | +// Licensed under the MIT License. |
| 8 | + |
| 9 | +export enum MessageType { |
| 10 | + other = 0, |
| 11 | + /** |
| 12 | + * Messages must be re-broadcasted across other editors of the same file in the same session. |
| 13 | + */ |
| 14 | + syncAcrossSameNotebooks = 1 << 0, |
| 15 | + /** |
| 16 | + * Messages must be re-broadcasted across all sessions. |
| 17 | + */ |
| 18 | + syncWithLiveShare = 1 << 1, |
| 19 | + noIdea = 1 << 2 |
| 20 | +} |
| 21 | + |
| 22 | +type MessageMapping<T> = { |
| 23 | + [P in keyof T]: MessageType; |
| 24 | +}; |
| 25 | + |
| 26 | +export type IInteractiveActionMapping = MessageMapping<IInteractiveWindowMapping>; |
| 27 | + |
| 28 | +// Do not change to a dictionary or a record. |
| 29 | +// The current structure ensures all new enums added will be categorized. |
| 30 | +// This way, if a new message is added, we'll make the decision early on whether it needs to be synchronized and how. |
| 31 | +// Rather than waiting for users to report issues related to new messages. |
| 32 | +const messageWithMessageTypes: MessageMapping<IInteractiveWindowMapping> & MessageMapping<CommonActionTypeMapping> = { |
| 33 | + [CommonActionType.ADD_NEW_CELL]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 34 | + [CommonActionType.ARROW_DOWN]: MessageType.syncWithLiveShare, |
| 35 | + [CommonActionType.ARROW_UP]: MessageType.syncWithLiveShare, |
| 36 | + [CommonActionType.CHANGE_CELL_TYPE]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 37 | + [CommonActionType.CLICK_CELL]: MessageType.syncWithLiveShare, |
| 38 | + [CommonActionType.CODE_CREATED]: MessageType.noIdea, |
| 39 | + [CommonActionType.COPY_CELL_CODE]: MessageType.other, |
| 40 | + [CommonActionType.EDITOR_LOADED]: MessageType.other, |
| 41 | + [CommonActionType.EDIT_CELL]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 42 | + [CommonActionType.EXECUTE_ABOVE]: MessageType.other, |
| 43 | + [CommonActionType.EXECUTE_ALL_CELLS]: MessageType.other, |
| 44 | + [CommonActionType.EXECUTE_CELL]: MessageType.other, |
| 45 | + [CommonActionType.EXECUTE_CELL_AND_BELOW]: MessageType.other, |
| 46 | + [CommonActionType.EXPORT]: MessageType.other, |
| 47 | + [CommonActionType.FOCUS_CELL]: MessageType.syncWithLiveShare, |
| 48 | + [CommonActionType.GATHER_CELL]: MessageType.other, |
| 49 | + [CommonActionType.GET_VARIABLE_DATA]: MessageType.other, |
| 50 | + [CommonActionType.GOTO_CELL]: MessageType.syncWithLiveShare, |
| 51 | + [CommonActionType.INSERT_ABOVE]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 52 | + [CommonActionType.INSERT_ABOVE_FIRST]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 53 | + [CommonActionType.INSERT_BELOW]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 54 | + [CommonActionType.INTERRUPT_KERNEL]: MessageType.other, |
| 55 | + [CommonActionType.LOADED_ALL_CELLS]: MessageType.other, |
| 56 | + [CommonActionType.LINK_CLICK]: MessageType.other, |
| 57 | + [CommonActionType.MOVE_CELL_DOWN]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 58 | + [CommonActionType.MOVE_CELL_UP]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 59 | + [CommonActionType.RESTART_KERNEL]: MessageType.other, |
| 60 | + [CommonActionType.SAVE]: MessageType.other, |
| 61 | + [CommonActionType.SCROLL]: MessageType.syncWithLiveShare, |
| 62 | + [CommonActionType.SELECT_CELL]: MessageType.syncWithLiveShare, |
| 63 | + [CommonActionType.SELECT_SERVER]: MessageType.other, |
| 64 | + [CommonActionType.SEND_COMMAND]: MessageType.other, |
| 65 | + [CommonActionType.SHOW_DATA_VIEWER]: MessageType.other, |
| 66 | + [CommonActionType.SUBMIT_INPUT]: MessageType.other, |
| 67 | + [CommonActionType.TOGGLE_INPUT_BLOCK]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 68 | + [CommonActionType.TOGGLE_LINE_NUMBERS]: MessageType.syncWithLiveShare, |
| 69 | + [CommonActionType.TOGGLE_OUTPUT]: MessageType.syncWithLiveShare, |
| 70 | + [CommonActionType.TOGGLE_VARIABLE_EXPLORER]: MessageType.syncWithLiveShare, |
| 71 | + [CommonActionType.UNFOCUS_CELL]: MessageType.syncWithLiveShare, |
| 72 | + [CommonActionType.UNMOUNT]: MessageType.other, |
| 73 | + |
| 74 | + // Types from InteractiveWindowMessages |
| 75 | + [InteractiveWindowMessages.Activate]: MessageType.other, |
| 76 | + [InteractiveWindowMessages.AddCell]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 77 | + [InteractiveWindowMessages.AddedSysInfo]: MessageType.other, |
| 78 | + [InteractiveWindowMessages.CancelCompletionItemsRequest]: MessageType.other, |
| 79 | + [InteractiveWindowMessages.CancelHoverRequest]: MessageType.other, |
| 80 | + [InteractiveWindowMessages.CancelResolveCompletionItemRequest]: MessageType.other, |
| 81 | + [InteractiveWindowMessages.CancelSignatureHelpRequest]: MessageType.other, |
| 82 | + [InteractiveWindowMessages.ClearAllOutputs]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 83 | + [InteractiveWindowMessages.CollapseAll]: MessageType.syncWithLiveShare, |
| 84 | + [InteractiveWindowMessages.CopyCodeCell]: MessageType.other, |
| 85 | + [InteractiveWindowMessages.DeleteAllCells]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 86 | + [InteractiveWindowMessages.DeleteCell]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 87 | + [InteractiveWindowMessages.DoSave]: MessageType.other, |
| 88 | + [InteractiveWindowMessages.EditCell]: MessageType.other, |
| 89 | + [InteractiveWindowMessages.ExecutionRendered]: MessageType.other, |
| 90 | + [InteractiveWindowMessages.ExpandAll]: MessageType.syncWithLiveShare, |
| 91 | + [InteractiveWindowMessages.Export]: MessageType.other, |
| 92 | + [InteractiveWindowMessages.FinishCell]: MessageType.other, |
| 93 | + [InteractiveWindowMessages.FocusedCellEditor]: MessageType.syncWithLiveShare, |
| 94 | + [InteractiveWindowMessages.GatherCodeRequest]: MessageType.other, |
| 95 | + [InteractiveWindowMessages.GetAllCells]: MessageType.other, |
| 96 | + [InteractiveWindowMessages.GetVariablesRequest]: MessageType.other, |
| 97 | + [InteractiveWindowMessages.GetVariablesResponse]: MessageType.other, |
| 98 | + [InteractiveWindowMessages.GotoCodeCell]: MessageType.syncWithLiveShare, |
| 99 | + [InteractiveWindowMessages.GotoCodeCell]: MessageType.syncWithLiveShare, |
| 100 | + [InteractiveWindowMessages.InsertCell]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 101 | + [InteractiveWindowMessages.Interrupt]: MessageType.other, |
| 102 | + [InteractiveWindowMessages.LoadAllCells]: MessageType.other, |
| 103 | + [InteractiveWindowMessages.LoadAllCellsComplete]: MessageType.other, |
| 104 | + [InteractiveWindowMessages.LoadOnigasmAssemblyRequest]: MessageType.other, |
| 105 | + [InteractiveWindowMessages.LoadOnigasmAssemblyResponse]: MessageType.other, |
| 106 | + [InteractiveWindowMessages.LoadTmLanguageRequest]: MessageType.other, |
| 107 | + [InteractiveWindowMessages.LoadTmLanguageResponse]: MessageType.other, |
| 108 | + [InteractiveWindowMessages.MonacoReady]: MessageType.other, |
| 109 | + [InteractiveWindowMessages.NativeCommand]: MessageType.other, |
| 110 | + [InteractiveWindowMessages.NotebookAddCellBelow]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 111 | + [InteractiveWindowMessages.NotebookClean]: MessageType.other, |
| 112 | + [InteractiveWindowMessages.NotebookDirty]: MessageType.other, |
| 113 | + [InteractiveWindowMessages.NotebookExecutionActivated]: MessageType.other, |
| 114 | + [InteractiveWindowMessages.NotebookIdentity]: MessageType.other, |
| 115 | + [InteractiveWindowMessages.NotebookRunAllCells]: MessageType.other, |
| 116 | + [InteractiveWindowMessages.NotebookRunSelectedCell]: MessageType.other, |
| 117 | + [InteractiveWindowMessages.OpenLink]: MessageType.other, |
| 118 | + [InteractiveWindowMessages.ProvideCompletionItemsRequest]: MessageType.other, |
| 119 | + [InteractiveWindowMessages.ProvideCompletionItemsResponse]: MessageType.other, |
| 120 | + [InteractiveWindowMessages.ProvideHoverRequest]: MessageType.other, |
| 121 | + [InteractiveWindowMessages.ProvideHoverResponse]: MessageType.other, |
| 122 | + [InteractiveWindowMessages.ProvideSignatureHelpRequest]: MessageType.other, |
| 123 | + [InteractiveWindowMessages.ProvideSignatureHelpResponse]: MessageType.other, |
| 124 | + [InteractiveWindowMessages.ReExecuteCell]: MessageType.other, |
| 125 | + [InteractiveWindowMessages.Redo]: MessageType.other, |
| 126 | + [InteractiveWindowMessages.RemoteAddCode]: MessageType.other, |
| 127 | + [InteractiveWindowMessages.RemoteReexecuteCode]: MessageType.other, |
| 128 | + [InteractiveWindowMessages.RemoveCell]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 129 | + [InteractiveWindowMessages.ResolveCompletionItemRequest]: MessageType.other, |
| 130 | + [InteractiveWindowMessages.ResolveCompletionItemResponse]: MessageType.other, |
| 131 | + [InteractiveWindowMessages.RestartKernel]: MessageType.other, |
| 132 | + [InteractiveWindowMessages.ReturnAllCells]: MessageType.other, |
| 133 | + [InteractiveWindowMessages.SaveAll]: MessageType.other, |
| 134 | + [InteractiveWindowMessages.SavePng]: MessageType.other, |
| 135 | + [InteractiveWindowMessages.ScrollToCell]: MessageType.syncWithLiveShare, |
| 136 | + [InteractiveWindowMessages.SelectJupyterServer]: MessageType.other, |
| 137 | + [InteractiveWindowMessages.SelectKernel]: MessageType.other, |
| 138 | + [InteractiveWindowMessages.SendInfo]: MessageType.other, |
| 139 | + [InteractiveWindowMessages.SettingsUpdated]: MessageType.other, |
| 140 | + [InteractiveWindowMessages.ShowDataViewer]: MessageType.other, |
| 141 | + [InteractiveWindowMessages.ShowPlot]: MessageType.other, |
| 142 | + [InteractiveWindowMessages.StartCell]: MessageType.other, |
| 143 | + [InteractiveWindowMessages.StartDebugging]: MessageType.other, |
| 144 | + [InteractiveWindowMessages.StartProgress]: MessageType.other, |
| 145 | + [InteractiveWindowMessages.Started]: MessageType.other, |
| 146 | + [InteractiveWindowMessages.StopDebugging]: MessageType.other, |
| 147 | + [InteractiveWindowMessages.StopProgress]: MessageType.other, |
| 148 | + [InteractiveWindowMessages.SubmitNewCell]: MessageType.other, |
| 149 | + [InteractiveWindowMessages.SwapCells]: MessageType.syncAcrossSameNotebooks | MessageType.syncWithLiveShare, |
| 150 | + [InteractiveWindowMessages.Sync]: MessageType.other, |
| 151 | + [InteractiveWindowMessages.Undo]: MessageType.other, |
| 152 | + [InteractiveWindowMessages.UnfocusedCellEditor]: MessageType.syncWithLiveShare, |
| 153 | + [InteractiveWindowMessages.UpdateCell]: MessageType.other, |
| 154 | + [InteractiveWindowMessages.UpdateKernel]: MessageType.other, |
| 155 | + [InteractiveWindowMessages.VariableExplorerToggle]: MessageType.other, |
| 156 | + [InteractiveWindowMessages.VariablesComplete]: MessageType.other, |
| 157 | + // Types from CssMessages |
| 158 | + [CssMessages.GetCssRequest]: MessageType.other, |
| 159 | + [CssMessages.GetCssResponse]: MessageType.other, |
| 160 | + [CssMessages.GetMonacoThemeRequest]: MessageType.other, |
| 161 | + [CssMessages.GetMonacoThemeResponse]: MessageType.other, |
| 162 | + // Types from Shared Messages |
| 163 | + [SharedMessages.LocInit]: MessageType.other, |
| 164 | + [SharedMessages.Started]: MessageType.other, |
| 165 | + [SharedMessages.UpdateSettings]: MessageType.other |
| 166 | +}; |
| 167 | + |
| 168 | +export function isActionPerformedByUser(action: BaseReduxActionPayload<{}> | BaseReduxActionPayload<never>) { |
| 169 | + return action.messageType === undefined; |
| 170 | +} |
| 171 | + |
| 172 | +export function shouldRebroadcast(message: keyof IInteractiveWindowMapping): [boolean, MessageType] { |
| 173 | + const messageType: MessageType | undefined = messageWithMessageTypes[message]; |
| 174 | + // Support for liveshare is turned off for now, we can enable that later. |
| 175 | + // I.e. we only support synchronizing across editors in the same session. |
| 176 | + if (messageType === undefined || (messageType & MessageType.syncAcrossSameNotebooks) !== MessageType.syncAcrossSameNotebooks) { |
| 177 | + return [false, MessageType.other]; |
| 178 | + } |
| 179 | + |
| 180 | + return [(messageType & MessageType.syncAcrossSameNotebooks) > 0 || (messageType & MessageType.syncWithLiveShare) > 0, messageType]; |
| 181 | +} |
0 commit comments