diff --git a/client/src/pages/AdminPage.jsx b/client/src/pages/AdminPage.jsx index 1b28105..a668bd7 100644 --- a/client/src/pages/AdminPage.jsx +++ b/client/src/pages/AdminPage.jsx @@ -298,11 +298,18 @@ function MatchAdminCard({ m, run, busy, token, reload, setNotice }) { {current.live?.roundsPlayed != null && Runde {current.live.roundsPlayed + 1}} )} - {m.server?.address && m.server.status !== 'stopped' && ( + {m.server && (m.server.requestedAt || (m.server.address && m.server.status !== 'stopped')) && (
- Server {m.server.address.host}:{m.server.address.port} - {m.server.address.tvPort && ( - CSTV {m.server.address.host}:{m.server.address.tvPort} + {m.server.address && m.server.status !== 'stopped' && ( + <> + Server {m.server.address.host}:{m.server.address.port} + {m.server.address.tvPort && ( + CSTV {m.server.address.host}:{m.server.address.tvPort} + )} + + )} + {m.server.requestedAt && ( + Angefordert {formatDateTime(m.server.requestedAt)} )}
)} @@ -686,3 +693,7 @@ function DockerHostsPanel({ token, setNotice }) { ); } +/** Datum und Uhrzeit auf Deutsch, z. B. 29.10.2026, 12:54 Uhr */ +function formatDateTime(ms) { + return `${new Date(ms).toLocaleString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' })} Uhr`; +} diff --git a/server/src/matchService.js b/server/src/matchService.js index f4a61d4..6a9f698 100644 --- a/server/src/matchService.js +++ b/server/src/matchService.js @@ -956,8 +956,10 @@ export class MatchService extends EventEmitter { updatedAt: row.updated_at, idleTimeoutMinutes: this.config.idleTimeoutMinutes, }; - if (viewer.isOrganizer && row.host) { - view.address = { host: row.host, port: row.port, tvPort: row.tv_port }; + if (viewer.isOrganizer) { + // Zeitpunkt der letzten Anforderung (neuer Start oder "Server neu starten / wiederholen") + view.requestedAt = row.started_at ?? null; + if (row.host) view.address = { host: row.host, port: row.port, tvPort: row.tv_port }; } const configured = row.status === 'configured'; if (!configured || viewer.role === 'public') return view;