Add UI for streamdelay start/stop functionality

This commit is contained in:
Max Goodhart
2020-09-06 21:05:22 -07:00
parent cc842247a7
commit e2c5414608
4 changed files with 43 additions and 9 deletions

View File

@@ -50,4 +50,8 @@ export default class StreamdelayClient extends EventEmitter {
setCensored(isCensored) { setCensored(isCensored) {
this.ws.send(JSON.stringify({ isCensored })) this.ws.send(JSON.stringify({ isCensored }))
} }
setStreamRunning(isStreamRunning) {
this.ws.send(JSON.stringify({ isStreamRunning }))
}
} }

View File

@@ -306,6 +306,8 @@ async function main() {
} }
} else if (msg.type === 'set-stream-censored' && streamdelayClient) { } else if (msg.type === 'set-stream-censored' && streamdelayClient) {
streamdelayClient.setCensored(msg.isCensored) streamdelayClient.setCensored(msg.isCensored)
} else if (msg.type === 'set-stream-running' && streamdelayClient) {
streamdelayClient.setStreamRunning(msg.isStreamRunning)
} else if (msg.type === 'create-invite') { } else if (msg.type === 'create-invite') {
const { secret } = await auth.createToken({ const { secret } = await auth.createToken({
kind: 'invite', kind: 'invite',

View File

@@ -5,6 +5,7 @@ const operatorActions = new Set([
'set-custom-streams', 'set-custom-streams',
'reload-view', 'reload-view',
'set-stream-censored', 'set-stream-censored',
'set-stream-running',
'mutate-state-doc', 'mutate-state-doc',
]) ])

View File

@@ -422,6 +422,13 @@ function App({ wsEndpoint, role }) {
}) })
}, []) }, [])
const setStreamRunning = useCallback((isStreamRunning) => {
send({
type: 'set-stream-running',
isStreamRunning,
})
}, [])
const [newInvite, setNewInvite] = useState() const [newInvite, setNewInvite] = useState()
const handleCreateInvite = useCallback(({ name, role }) => { const handleCreateInvite = useCallback(({ name, role }) => {
@@ -510,8 +517,10 @@ function App({ wsEndpoint, role }) {
</StyledHeader> </StyledHeader>
{delayState && ( {delayState && (
<StreamDelayBox <StreamDelayBox
role={role}
delayState={delayState} delayState={delayState}
setStreamCensored={setStreamCensored} setStreamCensored={setStreamCensored}
setStreamRunning={setStreamRunning}
/> />
)} )}
<StyledDataContainer isConnected={isConnected}> <StyledDataContainer isConnected={isConnected}>
@@ -662,10 +671,20 @@ const Stack = styled.div`
${({ minHeight }) => minHeight && `min-height: ${minHeight}px`}; ${({ minHeight }) => minHeight && `min-height: ${minHeight}px`};
` `
function StreamDelayBox({ delayState, setStreamCensored }) { function StreamDelayBox({
role,
delayState,
setStreamCensored,
setStreamRunning,
}) {
const handleToggleStreamCensored = useCallback(() => { const handleToggleStreamCensored = useCallback(() => {
setStreamCensored(!delayState.isCensored) setStreamCensored(!delayState.isCensored)
}, [delayState.isCensored, setStreamCensored]) }, [delayState.isCensored, setStreamCensored])
const handleToggleStreamRunning = useCallback(() => {
if (!delayState.isStreamRunning || confirm('End stream?')) {
setStreamRunning(!delayState.isStreamRunning)
}
}, [delayState.isStreamRunning, setStreamRunning])
let buttonText let buttonText
if (delayState.isConnected) { if (delayState.isConnected) {
if (delayState.state.matches('censorship.censored.deactivating')) { if (delayState.state.matches('censorship.censored.deactivating')) {
@@ -680,10 +699,12 @@ function StreamDelayBox({ delayState, setStreamCensored }) {
<div> <div>
<StyledStreamDelayBox> <StyledStreamDelayBox>
<strong>Streamdelay</strong> <strong>Streamdelay</strong>
<span>{delayState.isConnected ? 'connected' : 'connecting...'}</span> {!delayState.isConnected && <span>connecting...</span>}
{!delayState.isStreamRunning && <span>stream stopped</span>}
{delayState.isConnected && ( {delayState.isConnected && (
<> <>
<span>delay: {delayState.delaySeconds}s</span> <span>delay: {delayState.delaySeconds}s</span>
{delayState.isStreamRunning && (
<StyledButton <StyledButton
isActive={delayState.isCensored} isActive={delayState.isCensored}
onClick={handleToggleStreamCensored} onClick={handleToggleStreamCensored}
@@ -691,6 +712,12 @@ function StreamDelayBox({ delayState, setStreamCensored }) {
> >
{buttonText} {buttonText}
</StyledButton> </StyledButton>
)}
{roleCan(role, 'set-stream-running') && (
<StyledButton onClick={handleToggleStreamRunning} tabIndex={1}>
{delayState.isStreamRunning ? 'End stream' : 'Start stream'}
</StyledButton>
)}
</> </>
)} )}
</StyledStreamDelayBox> </StyledStreamDelayBox>