Skip to content
Draft
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
6 changes: 5 additions & 1 deletion src/api/IBMi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ export default class IBMi {
}
}

const connectConfig: node_ssh.Config = {
const connectConfig: node_ssh.Config = {
...connectionObject,
privateKeyPath: connectionObject.privateKeyPath ? Tools.resolvePath(connectionObject.privateKeyPath) : undefined,
passphrase: connectionObject.privateKeyPath ? connectionObject.passphrase : undefined,
Expand Down Expand Up @@ -1255,6 +1255,10 @@ export default class IBMi {
return this.sqlJob?.id;
}

public getSqlJobJDBCOptions() {
return this.sqlJob?.options;
}

/**
* Generates path to a temp file on the IBM i
* @param {string} key Key to the temp file to be re-used
Expand Down
17 changes: 3 additions & 14 deletions src/commands/actions.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import path from "path";
import { commands, Disposable, env, l10n, TreeItem, Uri, window, WorkspaceFolder } from "vscode";
import { commands, Disposable, l10n, TreeItem, Uri, window, WorkspaceFolder } from "vscode";
import IBMi from "../api/IBMi";
import { Tools } from "../api/Tools";
import Instance from "../Instance";
Expand Down Expand Up @@ -127,7 +127,7 @@ export function registerActionsCommands(instance: Instance): Disposable[] {
ext: undefined
};

let inputPath: string | undefined
let inputPath: string | undefined
const connection = instance.getConnection()!; //safe as action requires to be connected

if (options.qualifiedObject) {
Expand All @@ -137,7 +137,7 @@ export function registerActionsCommands(instance: Instance): Disposable[] {
// Value collected from user input

let initialPath = ``;
const editor = window.activeTextEditor;
const editor = window.activeTextEditor;

if (editor && connection) {
const config = connection.getConfig();
Expand Down Expand Up @@ -183,16 +183,5 @@ export function registerActionsCommands(instance: Instance): Disposable[] {
}
}
}),

commands.registerCommand(`code-for-ibmi.copyJobId`, async () => {
const connection = instance.getConnection();
const sqlJobId = connection?.getSqlJobId();
if (sqlJobId) {
await env.clipboard.writeText(sqlJobId);
window.showInformationMessage(`Job ID copied: ${sqlJobId}`);
} else {
window.showWarningMessage(`No job ID available`);
}
}),
]
}
23 changes: 22 additions & 1 deletion src/commands/connection.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { commands, Disposable, ExtensionContext, window } from "vscode";
import { commands, Disposable, ExtensionContext, window, env } from "vscode";
import { ConnectionResult } from "../api/IBMi";
import { setStoredPassword } from "../config/passwords";
import Instance from "../Instance";
Expand Down Expand Up @@ -30,5 +30,26 @@ export function registerConnectionCommands(context: ExtensionContext, instance:
window.showErrorMessage(`Not currently connected to any system.`);
}
}),
commands.registerCommand(`code-for-ibmi.copyJobId`, async () => {
const connection = instance.getConnection();
const sqlJobId = connection?.getSqlJobId();
if (sqlJobId) {
await env.clipboard.writeText(sqlJobId);
window.showInformationMessage(`Job ID copied: ${sqlJobId}`);
} else {
window.showWarningMessage(`No job ID available`);
}
}),
commands.registerCommand(`code-for-ibmi.showIBMiJobInfo`, async () => {
const connection = instance.getConnection();
if (connection) {
const job = await connection.getSqlJobId();
if (job) {
await commands.executeCommand('vscode-ibmi-fs.wrkjob', job);
} else {
window.showErrorMessage(`Unable to retrieve current SQL job ID.`);
}
}
}),
]
}
5 changes: 3 additions & 2 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import { SettingsUI } from "./webviews/settings";

let temporaryPassword: string | undefined;
export let getPassword: (connection: IBMi, prompt: string) => Promise<string | undefined>;
export const setTemporaryPassword = (password:string) => temporaryPassword = password;
export const setTemporaryPassword = (password: string) => temporaryPassword = password;
export const clearPassword = () => temporaryPassword = undefined;

export async function activate(context: ExtensionContext): Promise<CodeForIBMi> {
Expand Down Expand Up @@ -128,6 +128,7 @@ export async function activate(context: ExtensionContext): Promise<CodeForIBMi>
commands.executeCommand("code-for-ibmi.refreshLibraryListView");
commands.executeCommand("code-for-ibmi.refreshIFSBrowser");
commands.executeCommand("code-for-ibmi.environment.refresh");
commands.executeCommand("code-for-ibmi.updateJobInfoBar");
});

getPassword = async (connection, prompt) => {
Expand All @@ -136,7 +137,7 @@ export async function activate(context: ExtensionContext): Promise<CodeForIBMi>
if (password) {
return password;
}

return temporaryPassword = await window.showInputBox({
password: true,
prompt
Expand Down
43 changes: 37 additions & 6 deletions src/instantiate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ connectedBarItem.command = {
title: `Show connection settings`
};

const jobInfoBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 10);
jobInfoBarItem.command = {
command: `code-for-ibmi.copyJobId`,
title: `Copy job ID to clipboard`
};

export async function safeDisconnect(): Promise<boolean> {
let doDisconnect = true;

Expand Down Expand Up @@ -64,6 +70,7 @@ export async function loadAllofExtension(context: vscode.ExtensionContext) {
context.subscriptions.push(
connectedBarItem,
disconnectBarItem,
jobInfoBarItem,

...registerConnectionCommands(context, instance),

Expand All @@ -80,6 +87,8 @@ export async function loadAllofExtension(context: vscode.ExtensionContext) {
...registerPasswordCommands(context, instance),

vscode.commands.registerCommand("code-for-ibmi.updateConnectedBar", updateConnectedBar),

vscode.commands.registerCommand("code-for-ibmi.updateJobInfoBar", updateJobInfoBar),
);

instance.subscribe(context, 'connected', 'Load status bars', onConnected);
Expand All @@ -104,7 +113,7 @@ async function updateConnectedBar() {

const remoteConnectionConfig = connection.getConfigFile<RemoteConfigFile>(`settings`);
const serverConfigOk = remoteConnectionConfig.getState() === `ok`;
let serverConfig: RemoteConfigFile|undefined;
let serverConfig: RemoteConfigFile | undefined;
if (serverConfigOk) {
serverConfig = await remoteConnectionConfig.get();
}
Expand All @@ -115,9 +124,7 @@ async function updateConnectedBar() {
const actionsMenuItem = systemReadOnly ? `` : `[$(file-binary) Actions](command:code-for-ibmi.environment.actions.focus)`;
const debugRunning = await isDebugEngineRunning();
const connectedBarItemTooltips: String[] = systemReadOnly ? [`[System-wide read only](https://codefori.github.io/docs/settings/system/)`] : [];
const sqlJobId = connection.getSqlJobId();
const sqlJobInfo = sqlJobId ? `[$(database) Job: ${sqlJobId}](command:code-for-ibmi.copyJobId)` : `$(database) Job: Not available`;


connectedBarItemTooltips.push(
`[$(settings-gear) Settings](command:code-for-ibmi.showAdditionalSettings)`,
terminalMenuItem,
Expand All @@ -126,8 +133,7 @@ async function updateConnectedBar() {
debugPTFInstalled(connection) ?
`[$(${debugRunning ? "bug" : "debug"}) Debugger ${((await getDebugServiceDetails(connection)).version)} (${debugRunning ? "on" : "off"})](command:ibmiDebugBrowser.focus)`
:
`[$(debug) No debug PTF](https://codefori.github.io/docs/developing/debug/#required-ptfs)`,
sqlJobInfo
`[$(debug) No debug PTF](https://codefori.github.io/docs/developing/debug/#required-ptfs)`
);
connectedBarItem.tooltip = new vscode.MarkdownString(connectedBarItemTooltips.join(`\n\n---\n\n`), true);
connectedBarItem.tooltip.isTrusted = true;
Expand All @@ -137,10 +143,34 @@ async function updateConnectedBar() {
}
}

async function updateJobInfoBar() {
const connection = instance.getConnection();
if (connection && connection.sqlRunnerAvailable()) {
const sqlJobId = connection.getSqlJobId();
const jdbcOptions = connection.getSqlJobJDBCOptions() || {};
const jdbcInfo = [
`Active JDBC connection options:`,
``,
...Object.entries(jdbcOptions).map(([key, value]) => `- ${key}: ${value}`)
].join(`\n`);

jobInfoBarItem.text = `$(server-environment) ${sqlJobId}`;
const jobInfoBarItemTooltips: String[] = [];
const sqlJobInfo = sqlJobId ? `[$(server-process) Job Info](command:code-for-ibmi.showIBMiJobInfo)` : ``;
jobInfoBarItemTooltips.push(
jdbcInfo,
sqlJobInfo,
);
jobInfoBarItem.tooltip = new vscode.MarkdownString(jobInfoBarItemTooltips.join(`\n\n---\n\n`), true);
jobInfoBarItem.tooltip.isTrusted = true;
}
}

async function onConnected() {
[
connectedBarItem,
disconnectBarItem,
jobInfoBarItem,
].forEach(barItem => barItem.show());
}

Expand All @@ -149,5 +179,6 @@ async function onDisconnected() {
[
disconnectBarItem,
connectedBarItem,
jobInfoBarItem,
].forEach(barItem => barItem.hide())
}
Loading