water my otter

This commit is contained in:
legop3
2026-05-28 01:59:17 -04:00
parent c1a2a3465f
commit c84724c1b6
7 changed files with 240 additions and 140 deletions
+1
View File
@@ -17,3 +17,4 @@ server/data/discord-guilds.json
server/data/global-objective.json server/data/global-objective.json
server/data/admin-reason.json server/data/admin-reason.json
server/data server/data
webui/package-lock.json
+8 -5
View File
@@ -1,11 +1,14 @@
1. FIX NO AUDIO DURING NOT YOUR TURN!!! 1. FIX NO AUDIO DURING NOT YOUR TURN!!!
2. make sure audio forwarding doesnt stop when you switch tabs 2. make sure audio forwarding doesnt stop when you switch tabs
3. add "reboot your own rover" feature 3. add "reboot your own rover" feature
1. 1. time delay and you can only do it if youre the only one on. server locks the rover then tells it to reboot
4. add faster way for admins to login, like an invisible button in top left or something 4. add a clear socket disconnection indicator in the web UI
5. add discord bot typing thing for when someone requests a replay 5. add votekicking
6. change replay title for ones requested from discord, something other than "requester driving rover" 1. simply just disconnect the users socket.
7. fix rover request spam queue cheat 6. add faster way for admins to login, like an invisible button in top left or something
7. add discord bot typing thing for when someone requests a replay
8. change replay title for ones requested from discord, something other than "requester driving rover"
9. fix rover request spam queue cheat
# relative pipe dreams: # relative pipe dreams:
File diff suppressed because one or more lines are too long
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="Roomba Rover" /> <meta name="apple-mobile-web-app-title" content="Roomba Rover" />
<title>Roomba Rover</title> <title>Roomba Rover</title>
<script type="module" crossorigin src="/assets/index-CboMb02p.js"></script> <script type="module" crossorigin src="/assets/index-BEU30yxg.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BGy4iG0w.css"> <link rel="stylesheet" crossorigin href="/assets/index-BGy4iG0w.css">
</head> </head>
<body> <body>
+93
View File
@@ -25,6 +25,7 @@
"eslint-plugin-react-refresh": "^0.4.24", "eslint-plugin-react-refresh": "^0.4.24",
"globals": "^16.5.0", "globals": "^16.5.0",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"socket.io-client": "4.8.3",
"tailwindcss": "^3.4.14", "tailwindcss": "^3.4.14",
"vite": "^7.2.2" "vite": "^7.2.2"
} }
@@ -1407,6 +1408,13 @@
"win32" "win32"
] ]
}, },
"node_modules/@socket.io/component-emitter": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/babel__core": { "node_modules/@types/babel__core": {
"version": "7.20.5", "version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -1994,6 +2002,30 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/engine.io-client": {
"version": "6.6.5",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.5.tgz",
"integrity": "sha512-QCwxUDULPlXv8F6tqMMKx5dNkTe6OaBYRMPYeXKBlyOoKvAmE0ac6pW7fFhSscJ/5SI7666/U/B+MElbsrJlIg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.4.1",
"engine.io-parser": "~5.2.1",
"ws": "~8.20.1",
"xmlhttprequest-ssl": "~2.1.1"
}
},
"node_modules/engine.io-parser": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.25.12", "version": "0.25.12",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
@@ -3661,6 +3693,36 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/socket.io-client": {
"version": "4.8.3",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz",
"integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.4.1",
"engine.io-client": "~6.6.1",
"socket.io-parser": "~4.2.4"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/socket.io-parser": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz",
"integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.4.1"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/source-map-js": { "node_modules/source-map-js": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -4192,6 +4254,37 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1" "url": "https://github.com/chalk/ansi-styles?sponsor=1"
} }
}, },
"node_modules/ws": {
"version": "8.20.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz",
"integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/xmlhttprequest-ssl": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
"integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/yallist": { "node_modules/yallist": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -34,17 +34,18 @@ export default function RoverMediaPlayer({
); );
const hasAudio = Boolean(rosterEntry?.media?.audioPublishUrl); const hasAudio = Boolean(rosterEntry?.media?.audioPublishUrl);
const autoVideoEnabled = videoMode ? videoMode === 'whep' : true; const autoVideoEnabled = videoMode ? videoMode === 'whep' : true;
const autoAudioEnabled = hasAudio;
const autoEntries = useMemo(() => { const autoEntries = useMemo(() => {
if (!effectiveRoverId || !autoVideoEnabled) return []; if (!effectiveRoverId) return [];
return [ return [
{ type: 'rover', id: effectiveRoverId, key: effectiveRoverId }, ...(autoVideoEnabled ? [{ type: 'rover', id: effectiveRoverId, key: effectiveRoverId }] : []),
...(hasAudio ...(autoAudioEnabled
? [{ type: 'rover', id: `${effectiveRoverId}-audio`, key: `${effectiveRoverId}-audio` }] ? [{ type: 'rover', id: `${effectiveRoverId}-audio`, key: `${effectiveRoverId}-audio` }]
: []), : []),
]; ];
}, [effectiveRoverId, autoVideoEnabled, hasAudio]); }, [effectiveRoverId, autoVideoEnabled, autoAudioEnabled]);
const autoSources = useVideoRequests(autoEntries, { const autoSources = useVideoRequests(autoEntries, {
enabled: Boolean(effectiveRoverId && autoVideoEnabled), enabled: Boolean(effectiveRoverId && (autoVideoEnabled || autoAudioEnabled)),
version: mode, version: mode,
}); });
const resolvedSessionInfo = const resolvedSessionInfo =
@@ -435,8 +436,10 @@ export default function RoverMediaPlayer({
.play() .play()
.then(() => { .then(() => {
logAudio('retry/play-ok'); logAudio('retry/play-ok');
setAudioStatus((prev) => (prev === 'connected' ? 'playing' : prev)); setAudioStatus((prev) =>
setAudioDetail((prev) => (prev === 'paused' ? null : prev)); ['error', 'failed', 'disconnected', 'closed'].includes(prev) ? prev : 'playing',
);
setAudioDetail(null);
}) })
.catch((err) => { .catch((err) => {
logAudio('retry/play-fail', { error: err?.message }); logAudio('retry/play-fail', { error: err?.message });
@@ -519,7 +522,7 @@ export default function RoverMediaPlayer({
const renderedAudioStatus = resolvedAudioSessionInfo?.error const renderedAudioStatus = resolvedAudioSessionInfo?.error
? `Error: ${resolvedAudioSessionInfo.error}` ? `Error: ${resolvedAudioSessionInfo.error}`
: !resolvedAudioSessionInfo?.url : !resolvedAudioSessionInfo?.url
? null ? 'waiting'
: audioStatus === 'error' : audioStatus === 'error'
? `Error: ${audioDetail || 'unknown'}` ? `Error: ${audioDetail || 'unknown'}`
: audioDetail : audioDetail
@@ -528,7 +531,7 @@ export default function RoverMediaPlayer({
const showConnectingOverlay = const showConnectingOverlay =
!usingSnapshot && !usingSnapshot &&
!resolvedSessionInfo?.error && !resolvedSessionInfo?.error &&
['idle', 'new', 'connecting'].includes(status); status !== 'playing';
return ( return (
<> <>