diff --git a/package.json b/package.json index 22d39a9..18bf6ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "proxmox-spice-client", - "version": "1.0.3", + "version": "1.0.4", "description": "VDI SPICE Client f\u00fcr Proxmox", "main": "src/main.js", "scripts": { diff --git a/src/main.js b/src/main.js index 2d445b2..665a52b 100644 --- a/src/main.js +++ b/src/main.js @@ -229,6 +229,15 @@ ipcMain.handle('settings:browseViewerPath', async () => { return chosen; }); +// Only one VM can be marked for autostart at a time — identified by +// host+vmid since the same vmid can exist on several hosts. +ipcMain.handle('settings:getAutoConnect', () => store.get('autoConnect', null)); + +ipcMain.handle('settings:setAutoConnect', (_e, target) => { + if (target) store.set('autoConnect', target); + else store.delete('autoConnect'); +}); + // ---------- SPICE helpers ---------- function buildVVFile(params, vmid, client) { diff --git a/src/preload.js b/src/preload.js index 1f6114f..1744722 100644 --- a/src/preload.js +++ b/src/preload.js @@ -17,5 +17,7 @@ contextBridge.exposeInMainWorld('api', { getViewerPath: () => ipcRenderer.invoke('settings:getViewerPath'), browseViewerPath: () => ipcRenderer.invoke('settings:browseViewerPath'), clearViewerPath: () => ipcRenderer.invoke('settings:clearViewerPath'), + getAutoConnect: () => ipcRenderer.invoke('settings:getAutoConnect'), + setAutoConnect: (target) => ipcRenderer.invoke('settings:setAutoConnect', target), }, }); diff --git a/src/renderer/styles.css b/src/renderer/styles.css index 917f579..e8f9d82 100644 --- a/src/renderer/styles.css +++ b/src/renderer/styles.css @@ -250,6 +250,20 @@ body.vms-page { .vm-info { flex: 1; min-width: 0; } +.vm-autostart { + display: flex; + align-items: center; + gap: 0.35rem; + font-size: 0.75rem; + color: var(--muted); + cursor: pointer; + white-space: nowrap; + flex-shrink: 0; + user-select: none; +} + +.vm-autostart input { cursor: pointer; } + .vm-name { font-size: 0.97rem; font-weight: 600; diff --git a/src/renderer/vms.js b/src/renderer/vms.js index 47f92bb..4b0d2a2 100644 --- a/src/renderer/vms.js +++ b/src/renderer/vms.js @@ -83,20 +83,37 @@ async function loadVMs() { return; } - renderList(vms); + // Auto-connect the VM the user marked for autostart (only one at a time) + const autoConnect = await api.settings.getAutoConnect(); + const autoMatch = autoConnect && vms.find( + (vm) => vm.host === autoConnect.host && String(vm.vmid) === String(autoConnect.vmid) + ); + + if (autoMatch) { + showNotice(`Autostart-VM „${autoMatch.name}" markiert — verbinde …`); + await connectVM(autoMatch); + return; + } + + renderList(vms, autoConnect); } loadVMs(); // ── Render ──────────────────────────────────────────────── -function renderList(vms) { +function renderList(vms, autoConnect) { // Only show the host when there's more than one — single-host setups don't need the noise. const multiHost = new Set(vms.map((vm) => vm.host)).size > 1; listEl.innerHTML = vms - .map( - (vm) => ` + .map((vm) => { + const isAutostart = !!( + autoConnect && + autoConnect.host === vm.host && + String(autoConnect.vmid) === String(vm.vmid) + ); + return `