From 35d6acee9a40533ab295bdb2f18d8baf2019d46e Mon Sep 17 00:00:00 2001 From: MCHost Date: Sun, 22 Jun 2025 18:49:03 -0400 Subject: [PATCH] fix issues with /start /restart and status during restore of status --- public/app.js | 75 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/public/app.js b/public/app.js index 98efdb9..6a87fc6 100644 --- a/public/app.js +++ b/public/app.js @@ -403,10 +403,10 @@ document.addEventListener('DOMContentLoaded', () => { function updateDockerUI(message) { if (message.error) { if (elements.serverStatus) elements.serverStatus.textContent = 'Not Running'; - toggleSections('error'); + toggleSections('Not Running'); return; } - + const memoryPercent = parseFloat(message.data?.memory?.percent) || 0; if (state.memoryPercent !== memoryPercent && elements.memoryPercent && memoryMeter) { memoryMeter.data.datasets[0].data = [memoryPercent, 100 - memoryPercent]; @@ -414,7 +414,7 @@ document.addEventListener('DOMContentLoaded', () => { elements.memoryPercent.textContent = `${memoryPercent.toFixed(1)}%`; state.memoryPercent = memoryPercent; } - + const cpuPercent = parseFloat(message.data?.cpu) || 0; if (state.cpuPercent !== cpuPercent && elements.cpuPercent && cpuMeter) { const scaledCpuPercent = Math.min((cpuPercent / 600) * 100, 100); @@ -423,12 +423,12 @@ document.addEventListener('DOMContentLoaded', () => { elements.cpuPercent.textContent = `${cpuPercent.toFixed(1)}%`; state.cpuPercent = cpuPercent; } - + const status = message.data?.status || 'Unknown'; - if (state.serverStatus !== status && elements.serverStatus) { + if (elements.serverStatus) { elements.serverStatus.textContent = status; state.serverStatus = status; - toggleSections(status); + toggleSections(status); // Always call toggleSections } } @@ -1365,10 +1365,14 @@ document.addEventListener('DOMContentLoaded', () => { const messageHandler = (event) => { try { const message = JSON.parse(event.data); - if (message.type === 'docker' && message.data?.status === 'running') { - updateNotification(notification, 'Server started successfully', 'success'); - toggleSections('running'); - ws.removeEventListener('message', messageHandler); + if (message.type === 'docker') { + state.serverStatus = message.data?.status || 'Unknown'; // Force update state + elements.serverStatus.textContent = state.serverStatus; // Update UI + toggleSections(state.serverStatus); // Update section visibility + if (message.data?.status === 'running') { + updateNotification(notification, 'Server started successfully', 'success'); + ws.removeEventListener('message', messageHandler); + } } } catch (error) { console.error('Error parsing WebSocket message:', error); @@ -1380,6 +1384,7 @@ document.addEventListener('DOMContentLoaded', () => { ws.removeEventListener('message', messageHandler); if (state.serverStatus !== 'running') { updateNotification(notification, 'Server failed to start', 'error'); + toggleSections(state.serverStatus); // Ensure UI reflects failure } } }, 30000); @@ -1400,17 +1405,47 @@ document.addEventListener('DOMContentLoaded', () => { } }); - document.getElementById('restartBtn').addEventListener('click', async () => { - try { - await wsRequest('/restart'); - initializeTerminal(); - if (ws && ws.readyState === WebSocket.OPEN) { - ws.send(JSON.stringify({ type: 'subscribe', endpoints: ['docker-logs'] })); - } - } catch (error) { - console.error('Restart server error:', error); +document.getElementById('restartBtn').addEventListener('click', async () => { + try { + const notification = showNotification('Restarting server...'); + await wsRequest('/restart'); + initializeTerminal(); + if (ws && ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ type: 'subscribe', endpoints: ['docker', 'docker-logs'] })); + const messageHandler = (event) => { + try { + const message = JSON.parse(event.data); + if (message.type === 'docker') { + state.serverStatus = message.data?.status || 'Unknown'; // Force update state + elements.serverStatus.textContent = state.serverStatus; // Update UI + toggleSections(state.serverStatus); // Update section visibility + if (message.data?.status === 'running') { + updateNotification(notification, 'Server restarted successfully', 'success'); + ws.removeEventListener('message', messageHandler); + } + } + } catch (error) { + console.error('Error parsing WebSocket message:', error); + } + }; + ws.addEventListener('message', messageHandler); + setTimeout(() => { + if (ws && ws.readyState === WebSocket.OPEN) { + ws.removeEventListener('message', messageHandler); + if (state.serverStatus !== 'running') { + updateNotification(notification, 'Server failed to restart', 'error'); + toggleSections(state.serverStatus); // Ensure UI reflects failure + } + } + }, 60000); // Increased timeout for restart + } else { + updateNotification(notification, 'WebSocket not connected', 'error'); } - }); + } catch (error) { + console.error('Restart server error:', error); + showNotification(`Failed to restart server: ${error.message}`, 'error'); + } +}); elements.updateModsBtn.addEventListener('click', updateMods);