Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Connection browser enhancements #1845

Merged
47 changes: 44 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -1003,6 +1003,12 @@
"category": "IBM i",
"icon": "$(refresh)"
},
{
"command": "code-for-ibmi.sortConnections",
"title": "Sort Connections",
"category": "IBM i",
"icon": "$(list-ordered)"
},
{
"command": "code-for-ibmi.showAdditionalSettings",
"title": "Connection Settings",
Expand All @@ -1013,6 +1019,11 @@
"title": "Login Settings",
"category": "IBM i"
},
{
"command": "code-for-ibmi.renameConnection",
"title": "Rename Connection",
"category": "IBM i"
},
{
"command": "code-for-ibmi.deleteConnection",
"title": "Delete Connection",
Expand Down Expand Up @@ -1782,10 +1793,30 @@
"command": "code-for-ibmi.connectToAndReload",
"when": "never"
},
{
"command": "code-for-ibmi.refreshConnections",
"when": "never"
},
{
"command": "code-for-ibmi.renameConnection",
"when": "never"
},
{
"command": "code-for-ibmi.sortConnections",
"when": "never"
},
{
"command": "code-for-ibmi.deleteConnection",
"when": "never"
},
{
"command": "code-for-ibmi.disconnect",
"when": "code-for-ibmi:connected"
},
{
"command": "code-for-ibmi.showAdditionalSettings",
"when": "code-for-ibmi:connected"
},
{
"command": "code-for-ibmi.selectForCompare",
"when": "code-for-ibmi:connected"
Expand Down Expand Up @@ -1994,13 +2025,18 @@
"when": "view == connectionBrowser"
},
{
"command": "code-for-ibmi.refreshConnections",
"command": "code-for-ibmi.sortConnections",
"group": "navigation@2",
"when": "view == connectionBrowser"
},
{
"command": "code-for-ibmi.connectToPrevious",
"command": "code-for-ibmi.refreshConnections",
"group": "navigation@3",
"when": "view == connectionBrowser"
},
{
"command": "code-for-ibmi.connectToPrevious",
"group": "navigation@4",
"when": "view == connectionBrowser && code-for-ibmi:hasPreviousConnection"
},
{
Expand Down Expand Up @@ -2133,10 +2169,15 @@
],
"view/item/context": [
{
"command": "code-for-ibmi.deleteConnection",
"command": "code-for-ibmi.renameConnection",
"when": "view == connectionBrowser && viewItem == server",
"group": "2_delete@1"
},
{
"command": "code-for-ibmi.deleteConnection",
"when": "view == connectionBrowser && viewItem == server",
"group": "2_delete@2"
},
{
"command": "code-for-ibmi.showAdditionalSettings",
"when": "view == connectionBrowser && viewItem == server",
Expand Down
8 changes: 7 additions & 1 deletion src/locale/ids/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,13 @@ export const da: Locale = {
'connectionBrowser.connectTo.lastUsed': `Senest brugt: {0}`,
'connectionBrowser.connectTo.title': `Seneste IBM i forbindelser`,
'connectionBrowser.connectTo.error': `Brug Servere vinduet til at vælge hvilket system, der skal forbindes til.`,
'connectionBrowser.deleteConnection.warning': `Er du sikker på at du vil slette forbindelsen {0}?`,
'connectionBrowser.renameConnection.prompt': `Omdøb forbindelsen '{0}'`,
'connectionBrowser.renameConnection.alreadyExists': `Forbindelsen '{0}' findes allerede.`,
'connectionBrowser.renameConnection.invalid.input': `Nyt forbindelses navn skal være forskelligt fra det nuværende navn`,
'connectionBrowser.renameConnection.noConnectionFound': `Ingen forbindelse med navnet '{0}' blev fundet`,
'connectionBrowser.renameConnection.noConnParmsFound': `Ingen parametre til forbindelsen '{0}' blev fundet`,
'connectionBrowser.renameConnection.error': `Fejl ved omdøbning af forbindelsen '{0}'! {1}`,
'connectionBrowser.deleteConnection.warning': `Er du sikker på at du vil slette forbindelsen '{0}'?`,
'connectionBrowser.ServerItem.tooltip': ` (forrige forbindelse)`,
'connectionBrowser.ServerItem.title': `Forbind`,
// helpView:
Expand Down
8 changes: 7 additions & 1 deletion src/locale/ids/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,13 @@ export const en: Locale = {
'connectionBrowser.connectTo.lastUsed': `Last used: {0}`,
'connectionBrowser.connectTo.title': `Last IBM i connections`,
'connectionBrowser.connectTo.error': `Use the Server Browser to select which system to connect to.`,
'connectionBrowser.deleteConnection.warning': `Are you sure you want to delete the connection {0}?`,
'connectionBrowser.renameConnection.prompt': `Rename connection '{0}'`,
'connectionBrowser.renameConnection.alreadyExists': `Connection '{0}' already exists.`,
'connectionBrowser.renameConnection.invalid.input': `New connection name must be different from its current name`,
'connectionBrowser.renameConnection.noConnectionFound': `No connection named '{0}' was found`,
'connectionBrowser.renameConnection.noConnParmsFound': `No parameters for connection '{0}' was found`,
'connectionBrowser.renameConnection.error': `Error renaming connection '{0}'! {1}`,
'connectionBrowser.deleteConnection.warning': `Are you sure you want to delete the connection '{0}'?`,
'connectionBrowser.ServerItem.tooltip': ` (previous connection)`,
'connectionBrowser.ServerItem.title': `Connect`,
// helpView:
Expand Down
10 changes: 8 additions & 2 deletions src/locale/ids/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,13 @@ export const fr: Locale = {
'connectionBrowser.connectTo.lastUsed': `Dernière utilisation: {0}`,
'connectionBrowser.connectTo.title': `Dernières connexions IBM i`,
'connectionBrowser.connectTo.error': `Utilisez l'Explorateur de Serveur pour sélectionner le serveur auquel se connecter.`,
'connectionBrowser.deleteConnection.warning': `Êtes vous sûr de vouloir supprimer la connexion {0}?`,
'connectionBrowser.renameConnection.prompt': `Renommer la connexion '{0}'`,
'connectionBrowser.renameConnection.alreadyExists': `La connexion '{0}' existe déjà.`,
'connectionBrowser.renameConnection.invalid.input': `Le nouveau nom de la connexion doit être différent de son nom actuel`,
'connectionBrowser.renameConnection.noConnectionFound': `Aucune connexion nommée '{0}' n' a été trouvée`,
'connectionBrowser.renameConnection.noConnParmsFound': `Aucun paramètre pour la connexion '{0}' n'a été trouvé`,
'connectionBrowser.renameConnection.error': `Erreur lors du renommage de la connexion '{0}'! {1}`,
'connectionBrowser.deleteConnection.warning': `Êtes vous sûr de vouloir supprimer la connexion '{0}'?`,
'connectionBrowser.ServerItem.tooltip': ` (précédente connexion)`,
'connectionBrowser.ServerItem.title': `Se Connecter`,
// helpView:
Expand Down Expand Up @@ -124,7 +130,7 @@ export const fr: Locale = {
'LibraryListView.addToLibraryList.alreadyInList': `La bibliohtèque {0} est déjà dans la liste des bibliothèques.`,
'LibraryListView.addToLibraryList.invalidLib': `La bibliohtèque {0} n'existe pas.`,
'LibraryListView.addToLibraryList.addedLib': `La bibliohtèque {0} a été ajoutée à la liste des bibliothèques.`,
'LibraryListView.addToLibraryList.removedLibs': `Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}`,
'LibraryListView.addToLibraryList.removedLibs': `Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}`,
'LibraryListView.removeFromLibraryList.removedLib': `La bibliohtèque {0} a été retirée de la liste des bibliothèques.`,
'LibraryListView.cleanupLibraryList.removedLibs': `Les bibliothèques suivantes ont été retirées de la liste des bibliothèques mise à jour car elles sont invalides: {0}`,
'LibraryListView.cleanupLibraryList.validated': `La liste des bibliothèques a été validée avec succès.`,
Expand Down
64 changes: 64 additions & 0 deletions src/views/ConnectionBrowser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,70 @@ export class ObjectBrowserProvider {
this.refresh();
}),

vscode.commands.registerCommand(`code-for-ibmi.renameConnection`, async (server: Server) => {
if (!this._attemptingConnection && server) {
const existingConnections = GlobalConfiguration.get<ConnectionData[]>(`connections`) || [];
const newName = await vscode.window.showInputBox({
prompt: t(`connectionBrowser.renameConnection.prompt`, server.name),
value: server.name,
validateInput: newName => {
if (newName === server.name) {
return t(`connectionBrowser.renameConnection.invalid.input`);
} else if (existingConnections.findIndex(item => item.name === newName) !== -1) {
return t(`connectionBrowser.renameConnection.alreadyExists`, newName);
}
}
});

if (newName) {
try {
let index;
// First rename the connection details
const connections = GlobalConfiguration.get<ConnectionData[]>(`connections`) || [];
index = connections.findIndex(connection => connection.name === server.name);
if (index === -1) throw(t(`connectionBrowser.renameConnection.noConnectionFound`, server.name));
connections[index].name = newName;

// Then rename the connection settings
const connectionSettings = GlobalConfiguration.get<ConnectionConfiguration.Parameters[]>(`connectionSettings`) || [];
index = connectionSettings.findIndex(connection => connection.name === server.name);
if (index === -1) throw(t(`connectionBrowser.renameConnection.noConnParmsFound`, server.name));
connectionSettings[index].name = newName;

// Then get the cached connection settings
const cachedConnectionSettings = GlobalStorage.get().getServerSettingsCache(server.name);

// Then get the password key
const secret = await context.secrets.get(`${server.name}_password`);

// No errors - update the settings.
await GlobalConfiguration.set(`connectionSettings`, connectionSettings);
await GlobalConfiguration.set(`connections`, connections);
if(cachedConnectionSettings) {
GlobalStorage.get().setServerSettingsCache(newName, cachedConnectionSettings);
GlobalStorage.get().deleteServerSettingsCache(server.name);
}
if (secret) {
await context.secrets.store(`${newName}_password`, secret);
await context.secrets.delete(`${server.name}_password`);
}

this.refresh();
} catch (e: any) {
vscode.window.showErrorMessage(
t(`connectionBrowser.renameConnection.error`, server.name, e.message || String(e)));
}
}
}
}),

vscode.commands.registerCommand(`code-for-ibmi.sortConnections`, async () => {
const connections = GlobalConfiguration.get<ConnectionData[]>(`connections`) || [];
connections.sort((conn1, conn2) => conn1.name.localeCompare(conn2.name));
await GlobalConfiguration.set(`connections`, connections);
this.refresh();
}),

vscode.commands.registerCommand(`code-for-ibmi.deleteConnection`, (server: Server) => {
if (!this._attemptingConnection && server) {
vscode.window.showWarningMessage(
Expand Down
8 changes: 6 additions & 2 deletions src/webviews/settings/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import vscode from "vscode";
import { ConnectionConfiguration, GlobalConfiguration } from "../../api/Configuration";
import { GlobalStorage } from '../../api/Storage';
import { ComplexTab, CustomUI, Section } from "../../api/CustomUI";
import { Tools } from "../../api/Tools";
import { isManaged } from "../../api/debug";
Expand Down Expand Up @@ -256,11 +257,14 @@ export class SettingsUI {
if (restartFields.some(item => data[item] && data[item] !== config[item])) {
restart = true;
}

const reloadBrowsers = config.protectedPaths.join(",") !== data.protectedPaths.join(",") || config.showHiddenFiles !== data.showHiddenFiles;

const reloadBrowsers = config.protectedPaths.join(",") !== data.protectedPaths.join(",");
const removeCachedSettings = (!data.quickConnect && data.quickConnect !== config.quickConnect);

Object.assign(config, data);
await instance.setConfig(config);
if (removeCachedSettings)
GlobalStorage.get().deleteServerSettingsCache(config.name);

if (connection) {
if (restart) {
Expand Down