Skip to content

Commit

Permalink
Merge pull request #1845 from chrjorgensen/feature/connection-browser…
Browse files Browse the repository at this point in the history
…-enhancements

Connection browser enhancements
  • Loading branch information
sebjulliand authored Feb 17, 2024
2 parents d9af640 + db65c72 commit 7c12bc2
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 9 deletions.
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

0 comments on commit 7c12bc2

Please sign in to comment.