diff --git a/src/extension.coffee b/src/extension.coffee index ee230c8..14037ef 100644 --- a/src/extension.coffee +++ b/src/extension.coffee @@ -1,5 +1,4 @@ -``###* @typedef {{ command: 'response', data?: any, error?: any, id: number }} MsgResponse ### -``###* @typedef {{ command: string, data: any, id: number }} MsgRequest ### +``###* @typedef {{ type: 'response' | 'request' | 'push', command?: string, data?: any, error?: any, id: number | string }} BridgeMessage ### vscode = require 'vscode' util = require('util') @@ -25,36 +24,45 @@ module.exports.activate = (###* @type vscode.ExtensionContext ### context) => panel.iconPath = vscode.Uri.joinPath(context.extensionUri, "logo.png") view = panel.webview - view.onDidReceiveMessage (###* @type MsgRequest ### message) => + view.onDidReceiveMessage (###* @type BridgeMessage ### message) => d = message.data h = (###* @type {() => any} ### func) => - ``###* @type MsgResponse ### + ``###* @type BridgeMessage ### resp = - command: 'response' + type: 'response' id: message.id try resp.data = await func() catch e resp.error = e view.postMessage resp - switch message.command - when 'git' - h => git d - when 'show-error-message' - h => vscode.window.showErrorMessage d - when 'show-information-message' - h => vscode.window.showInformationMessage d - when 'get-state' - h => context.globalState.get d - when 'set-state' - h => context.globalState.update d.key, d.value - when 'open-diff' - h => - uri_1 = vscode.Uri.parse "git-show:#{d.hash}~1:#{d.filename}" - uri_2 = vscode.Uri.parse "git-show:#{d.hash}:#{d.filename}" - vscode.commands.executeCommand 'vscode.diff', uri_1, uri_2, "#{d.filename} @#{d.hash}" - when 'get-config' - h => vscode.workspace.getConfiguration(EXT_ID).get d + switch message.type + when 'request' + switch message.command + when 'git' + h => git d + when 'show-error-message' + h => vscode.window.showErrorMessage d + when 'show-information-message' + h => vscode.window.showInformationMessage d + when 'get-state' + h => context.globalState.get d + when 'set-state' + h => context.globalState.update d.key, d.value + when 'open-diff' + h => + uri_1 = vscode.Uri.parse "git-show:#{d.hash}~1:#{d.filename}" + uri_2 = vscode.Uri.parse "git-show:#{d.hash}:#{d.filename}" + vscode.commands.executeCommand 'vscode.diff', uri_1, uri_2, "#{d.filename} @#{d.hash}" + when 'get-config' + h => vscode.workspace.getConfiguration(EXT_ID).get d + vscode.workspace.onDidChangeConfiguration (event) => + if event.affectsConfiguration EXT_ID + ``###* @type BridgeMessage ### + msg = + type: 'push' + id: 'config-change' + view.postMessage msg is_production = context.extensionMode == vscode.ExtensionMode.Production dev_server_url = 'http://localhost:8080' diff --git a/web/src/App.vue b/web/src/App.vue index b1f6fde..9c63ed0 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -5,10 +5,15 @@