Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions bas-platform/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"name": "bas-platform",
"displayName": "BAS Platform Extension",
"description": "SAP Business Application Studio platform extension",
"version": "0.0.6",
"version": "0.0.7",
"publisher": "SAPOSS",
"license": "Apache-2.0",
"engines": {
"vscode": "^1.44.2"
"vscode": "^1.44.2"
},
"repository": {
"type": "git",
Expand Down Expand Up @@ -39,11 +39,14 @@
"test": "node ./out/test/runTest.js",
"package": "vsce package ."
},
"dependencies": {
"lodash": "^4.17.20"
},
"devDependencies": {
"@types/lodash": "^4.14.165",
"@types/vscode": "^1.40.0",
"typescript": "^3.9.7",
"vsce": "^1.69.0",
"vscode-test": "^1.2.2"
},
"dependencies": {}
}
}
}
71 changes: 71 additions & 0 deletions bas-platform/src/actions/basctlAction.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import * as vscode from 'vscode';
import * as net from 'net';
import * as fs from 'fs';
import * as _ from 'lodash';
// import { bas } from '../api';

const SOCKETFILE = '/extbin/basctlSocket';

let basctlServer: net.Server;


function _addBasctlAction(socket: net.Socket) {
//const openExternal = new bas.actions.ExecuteAction();
//openExternal.executeAction = async () => {
socket.on("data", dataBuffer => {
const data: any = getRequestData(dataBuffer);

if (data.command === "open") {
const uri = vscode.Uri.parse(data.url, true);
vscode.env.openExternal(uri);
}
});
// }

//bas.actions.performAction(openExternal);
}

function getRequestData(dataBuffer: any) {
try {
return JSON.parse(_.toString(dataBuffer));
} catch (error) {
showErrorMessage(error, "failed to parse basctl request data");
return {};
}
}

function showErrorMessage(error: any, defaultError: string) {
const errorMessage = _.get(error, "stack", _.get(error, "message", defaultError));
vscode.window.showErrorMessage(errorMessage);
}

export function closeBasctlServer() {
if (basctlServer) {
basctlServer.close();
}
}

function createBasctlServer() {
try {
basctlServer = net.createServer(socket => {
_addBasctlAction(socket);
}).listen(SOCKETFILE);
} catch (error) {
showErrorMessage(error, "failed to start basctl server");
}
}

export function startBasctlServer() {
fs.stat(SOCKETFILE, err => {
if (err) {
createBasctlServer();
} else {
fs.unlink(SOCKETFILE, err => {
if (err) {
throw new Error(err.message);
}
createBasctlServer();
});
}
});
}
13 changes: 9 additions & 4 deletions bas-platform/src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import * as vscode from 'vscode';
import { bas } from './api';
import { _performAction } from "./actions/performer";
import { startBasctlServer, closeBasctlServer } from './actions/basctlAction';

const subscriptions: Array<vscode.Disposable>= [];
const subscriptions: Array<vscode.Disposable> = [];

function performScheduledActions() {
const actionsSettings = vscode.workspace.getConfiguration();
let actionsList: any[] | undefined = actionsSettings.get("actions");
if (actionsList && actionsList.length > 0) {
const actionsList: any[] | undefined = actionsSettings.get("actions");
if (actionsList && actionsList.length) {
for (const action of actionsList) {
console.log(`performing action ${action.name} of type ${action.constructor.name}`)
_performAction(action);
Expand All @@ -16,13 +17,17 @@ function performScheduledActions() {
}
}

export async function activate(context: vscode.ExtensionContext) {
export async function activate() {
startBasctlServer();

performScheduledActions();

return bas;
}

export function deactivate() {
closeBasctlServer();

for (const subscription of subscriptions) {
subscription.dispose();
}
Expand Down