This commit is contained in:
legop3
2026-01-28 14:09:09 -05:00
parent ae81f8914f
commit d2722e40cc
5 changed files with 32 additions and 4 deletions
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -11,7 +11,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-title" content="Multi Roomba Rover" /> <meta name="apple-mobile-web-app-title" content="Multi Roomba Rover" />
<title>Multi Roomba Rover</title> <title>Multi Roomba Rover</title>
<script type="module" crossorigin src="/assets/index-COFUfdDa.js"></script> <script type="module" crossorigin src="/assets/index-256lFfdi.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-lg9md4T4.css"> <link rel="stylesheet" crossorigin href="/assets/index-lg9md4T4.css">
</head> </head>
<body> <body>
+28
View File
@@ -22,8 +22,11 @@ logger.info('Discord invite loaded:', discordInvite ? 'present' : 'not configure
logger.info('Ko-fi link loaded:', kofiLink ? 'present' : 'not configured'); logger.info('Ko-fi link loaded:', kofiLink ? 'present' : 'not configured');
const ACTIVITY_SYNC_COOLDOWN_MS = 3000; const ACTIVITY_SYNC_COOLDOWN_MS = 3000;
const NIGHT_VISION_SYNC_COOLDOWN_MS = 1000;
let lastActivitySync = 0; let lastActivitySync = 0;
let pendingActivitySync = null; let pendingActivitySync = null;
let lastNightVisionSync = 0;
let pendingNightVisionSync = null;
function buildUserEntry(socket) { function buildUserEntry(socket) {
if (!socket) return null; if (!socket) return null;
@@ -103,10 +106,35 @@ modeEvents.on('change', () => {
}); });
managerEvents.on('rover', () => { managerEvents.on('rover', () => {
if (pendingNightVisionSync) {
clearTimeout(pendingNightVisionSync);
pendingNightVisionSync = null;
}
logger.info('Rover roster change; syncing all clients'); logger.info('Rover roster change; syncing all clients');
syncAll(); syncAll();
}); });
managerEvents.on('rover', (event = {}) => {
if (event.action !== 'nightVision') return;
const now = Date.now();
const elapsed = now - lastNightVisionSync;
if (elapsed >= NIGHT_VISION_SYNC_COOLDOWN_MS) {
lastNightVisionSync = now;
logger.info('Night vision update; syncing all clients (immediate)');
syncAll();
return;
}
if (!pendingNightVisionSync) {
const delay = NIGHT_VISION_SYNC_COOLDOWN_MS - elapsed;
pendingNightVisionSync = setTimeout(() => {
lastNightVisionSync = Date.now();
pendingNightVisionSync = null;
logger.info('Night vision update; syncing all clients (delayed)');
syncAll();
}, delay);
}
});
managerEvents.on('lock', ({ roverId, locked }) => { managerEvents.on('lock', ({ roverId, locked }) => {
logger.info('Rover lock change', roverId, locked); logger.info('Rover lock change', roverId, locked);
syncAll(); syncAll();
+1 -1
View File
@@ -65,7 +65,7 @@ export default function ControlSummary() {
</div> </div>
<div className="grid h-full grid-rows-[1fr_1fr_auto] gap-0.5"> <div className="grid h-full grid-rows-[1fr_1fr_auto] gap-0.5">
<div className="row-span-2"> <div className="row-span-2">
<DriveDockAction layout="desktop" expand driveDockState={driveDockState} /> <DriveDockAction layout="desktop" expand={hideInlineControls} driveDockState={driveDockState} />
</div> </div>
{!hideInlineControls ? <InlineCameraTilt keymap={keymap} /> : null} {!hideInlineControls ? <InlineCameraTilt keymap={keymap} /> : null}
</div> </div>
+1 -1
View File
@@ -39,7 +39,7 @@ function DriveDockPanel() {
return ( return (
<section className="panel-section flex h-full flex-col gap-0.5"> <section className="panel-section flex h-full flex-col gap-0.5">
<DriveDockAction layout="desktop" expand driveDockState={driveDockState} /> <DriveDockAction layout="desktop" expand={hideInlineControls} driveDockState={driveDockState} />
{!hideInlineControls ? <InlineCameraTilt keymap={keymap} /> : null} {!hideInlineControls ? <InlineCameraTilt keymap={keymap} /> : null}
</section> </section>
); );