|
|
|
@ -7,6 +7,7 @@ import { OSC_ADDRESS } from "./utils/constant"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const DefaultFadeDuration = 3; // 1 second |
|
|
|
const DefaultFadeDuration = 3; // 1 second |
|
|
|
|
|
|
|
const CLIENT_COUNT=12; |
|
|
|
|
|
|
|
|
|
|
|
const CueType={ |
|
|
|
const CueType={ |
|
|
|
Bg: 'bg', |
|
|
|
Bg: 'bg', |
|
|
|
@ -31,11 +32,11 @@ function App() { |
|
|
|
const refNextCue = useRef(null); |
|
|
|
const refNextCue = useRef(null); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function sendOsc(addr, message){ |
|
|
|
function sendOsc(addr, message, id){ |
|
|
|
|
|
|
|
|
|
|
|
invoke('send_osc_message', { |
|
|
|
invoke('send_osc_message', { |
|
|
|
key: addr, |
|
|
|
key: addr, |
|
|
|
message, |
|
|
|
message: `${id}#${message}`, |
|
|
|
host:'0.0.0.0:0', |
|
|
|
host:'0.0.0.0:0', |
|
|
|
target:'192.168.234.255:8000', |
|
|
|
target:'192.168.234.255:8000', |
|
|
|
}); |
|
|
|
}); |
|
|
|
@ -97,7 +98,7 @@ function App() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(props.clientCue){ |
|
|
|
if(props.clientCue){ |
|
|
|
sendOsc(OSC_ADDRESS.PLAYCUE, props.clientCue); |
|
|
|
sendOsc(OSC_ADDRESS.PLAYCUE, props.clientCue,'all'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(props.lightCue){ |
|
|
|
if(props.lightCue){ |
|
|
|
@ -108,7 +109,7 @@ function App() { |
|
|
|
function stop() { |
|
|
|
function stop() { |
|
|
|
console.log('Stop all'); |
|
|
|
console.log('Stop all'); |
|
|
|
|
|
|
|
|
|
|
|
sendOsc(OSC_ADDRESS.STOPCUE,''); |
|
|
|
sendOsc(OSC_ADDRESS.STOPCUE,'','all'); |
|
|
|
sendOscToSound(OSC_ADDRESS.SCS_STOP_ALL, ''); |
|
|
|
sendOscToSound(OSC_ADDRESS.SCS_STOP_ALL, ''); |
|
|
|
} |
|
|
|
} |
|
|
|
function secondToTime(seconds) { |
|
|
|
function secondToTime(seconds) { |
|
|
|
@ -163,9 +164,9 @@ function App() { |
|
|
|
},[]); |
|
|
|
},[]); |
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<main className="container"> |
|
|
|
<main className="overflow-y-auto flex flex-row gap-8 p-4 min-h-screen"> |
|
|
|
<div className="overflow-y-auto flex flex-col gap-8 p-4"> |
|
|
|
<section className="flex flex-col gap-4"> |
|
|
|
<section className="flex flex-row gap-4 justify-between items-center"> |
|
|
|
<section className="flex flex-row justify-between items-center"> |
|
|
|
<div className="text-6xl p-4 bg-pink-300">{currentCue ? `${currentCue.name}` : 'None'}</div> |
|
|
|
<div className="text-6xl p-4 bg-pink-300">{currentCue ? `${currentCue.name}` : 'None'}</div> |
|
|
|
<p> |
|
|
|
<p> |
|
|
|
{timestamp} |
|
|
|
{timestamp} |
|
|
|
@ -181,7 +182,7 @@ function App() { |
|
|
|
<span className="text-2xl">{fadeDuration}s</span> |
|
|
|
<span className="text-2xl">{fadeDuration}s</span> |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
<table className="border-collapse w-full **:p-2 border-green-500 border-4"> |
|
|
|
<table className="border-collapse w-full **:p-1 border-green-500 border-4"> |
|
|
|
<thead className="bg-green-500"> |
|
|
|
<thead className="bg-green-500"> |
|
|
|
<tr className="text-left lowercase font-[900]"> |
|
|
|
<tr className="text-left lowercase font-[900]"> |
|
|
|
{/* <th>ID</th> */} |
|
|
|
{/* <th>ID</th> */} |
|
|
|
@ -200,7 +201,7 @@ function App() { |
|
|
|
<td className="flex flex-row gap-2"> |
|
|
|
<td className="flex flex-row gap-2"> |
|
|
|
<button |
|
|
|
<button |
|
|
|
onClick={()=>{ |
|
|
|
onClick={()=>{ |
|
|
|
playCue({id, name, description, type, auto, audioFile, ...props}); |
|
|
|
playCue({id, name, description, type, auto, ...props}); |
|
|
|
}}>go</button> |
|
|
|
}}>go</button> |
|
|
|
{type==CueType.Announce && <button |
|
|
|
{type==CueType.Announce && <button |
|
|
|
onClick={()=>{ |
|
|
|
onClick={()=>{ |
|
|
|
@ -219,7 +220,7 @@ function App() { |
|
|
|
))} |
|
|
|
))} |
|
|
|
</tbody> |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
</table> |
|
|
|
|
|
|
|
</section> |
|
|
|
<table> |
|
|
|
<table> |
|
|
|
<thead className="bg-blue-500"> |
|
|
|
<thead className="bg-blue-500"> |
|
|
|
<tr className="text-left lowercase font-[900]"> |
|
|
|
<tr className="text-left lowercase font-[900]"> |
|
|
|
@ -231,23 +232,30 @@ function App() { |
|
|
|
</tr> |
|
|
|
</tr> |
|
|
|
</thead> |
|
|
|
</thead> |
|
|
|
<tbody> |
|
|
|
<tbody> |
|
|
|
{Object.entries(clientStatus).map(([id, log])=>( |
|
|
|
{Array.from(Array(CLIENT_COUNT).keys()).map((i) => { |
|
|
|
|
|
|
|
const id=i+1; |
|
|
|
|
|
|
|
const log = clientStatus[id]; |
|
|
|
|
|
|
|
return ( |
|
|
|
<tr key={id} className="text-left lowercase font-[900]"> |
|
|
|
<tr key={id} className="text-left lowercase font-[900]"> |
|
|
|
<td className="font-[900]">{id}</td> |
|
|
|
<td className="font-[900]">{id}</td> |
|
|
|
<td>{log[0]?.status}</td> |
|
|
|
{<> |
|
|
|
<td>{log[0]?.name}</td> |
|
|
|
<td>{log?.length>0 &&log[0]?.status}</td> |
|
|
|
<td>{log[0]?.timestamp}</td> |
|
|
|
<td>{log?.length>0 && log[0]?.name}</td> |
|
|
|
<td> |
|
|
|
<td>{log?.length>0 &&log[0]?.timestamp}</td> |
|
|
|
<button>stop</button> |
|
|
|
</>} |
|
|
|
<button>Q1</button> |
|
|
|
<td className="flex flex-row gap-1 p-1"> |
|
|
|
<button>Q2</button> |
|
|
|
<button onClick={()=>sendOsc(OSC_ADDRESS.STOPCUE,'',id)}>stop</button> |
|
|
|
<button>Q6</button> |
|
|
|
{cuelist?.filter(c=>c.clientCue).map(c=>( |
|
|
|
|
|
|
|
<button key={c.clientCue} onClick={()=>{ |
|
|
|
|
|
|
|
sendOsc(OSC_ADDRESS.PLAYCUE, c.clientCue, id); |
|
|
|
|
|
|
|
}}>{c.clientCue}</button> |
|
|
|
|
|
|
|
))} |
|
|
|
</td> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</tr> |
|
|
|
))} |
|
|
|
); |
|
|
|
|
|
|
|
})} |
|
|
|
</tbody> |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
|
|
|
|
</main> |
|
|
|
</main> |
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|