You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
5.6 KiB
Vue
171 lines
5.6 KiB
Vue
<template>
|
|
<div class="flex h-screen overflow-hidden">
|
|
<div class="relative w-96 text-white bg-gray-800 py-10 flex flex-col items-center">
|
|
<h2 class="text-2xl mb-10 font-black text-red-500 uppercase">Slapdash</h2>
|
|
<p class="nav-item" @click="nav = 'dash'" :class="nav === 'dash' ? 'active' : ''">Dashboard</p>
|
|
<p class="nav-item" @click="nav = 'events'" :class="nav === 'events' ? 'active' : ''">Events</p>
|
|
<p class="nav-item" @click="nav = 'rosters'" :class="nav === 'rosters' ? 'active' : ''">Rosters</p>
|
|
<p class="nav-item" @click="nav = 'matches'" :class="nav === 'matches' ? 'active' : ''">Matches</p>
|
|
<p class="nav-item" @click="nav = 'casters'" :class="nav === 'casters' ? 'active' : ''">Casters / Hosts</p>
|
|
<p class="nav-item" @click="nav = 'stats'" :class="nav === 'stats' ? 'active' : ''">Stats</p>
|
|
<p class="nav-item" @click="nav = 'streams'" :class="nav === 'streams' ? 'active' : ''">Streams</p>
|
|
<p class="nav-item" @click="nav = 'brackets'" :class="nav === 'brackets' ? 'active' : ''">Brackets</p>
|
|
<img class="block w-16 h-16 absolute bottom-10" src="https://cms.aplesports.com/storage/uploads/2020/04/23/5ea178d6570e1APL_New.png" alt="APL Logo">
|
|
</div>
|
|
<div class="bg-gray-200 w-full px-10 py-4 overflow-y-auto">
|
|
<div v-if="nav === 'dash'" class="flex flex-col justify-center items-center h-full">
|
|
<h1 class="text-4xl font-bold mb-4"> Welcome, {{ store.state.name }}</h1>
|
|
<p class="text-xl">Select Stream for ingame overlay</p>
|
|
<select v-model="streamid" class="block my-4 border border-gray-500 rounded-lg bg-white w-64 h-8 px-4">
|
|
<option v-for="s in store.state.streams" :value="s._id" :key="s._id">{{ s.name }}</option>
|
|
</select>
|
|
<button :disabled="streamid === ''" @click.prevent="serverDo(true)" class="block w-64 h-10 text-white bg-red-700 rounded-lg hover:bg-red-600">
|
|
<span v-if="store.state.server">Update</span>
|
|
<span v-if="!store.state.server">Start</span>
|
|
overlay
|
|
</button>
|
|
<button @click.prevent="relayDo()" class="block mt-4 w-64 h-10 text-white bg-red-700 rounded-lg hover:bg-red-600">
|
|
<span v-if="store.state.relay">Stop Relay</span>
|
|
<span v-if="!store.state.relay">Start relay</span>
|
|
</button>
|
|
<!-- <button v-if="store.state.server" :disabled="streamid === ''" @click.prevent="serverDo" class="block mt-4 w-64 h-10 text-white bg-red-700 rounded-lg hover:bg-red-600">
|
|
Stop overlay
|
|
</button> -->
|
|
</div>
|
|
<Events v-if="nav === 'events'" />
|
|
<Rosters v-if="nav === 'rosters'" />
|
|
<Matches v-if="nav === 'matches'" />
|
|
<Casters v-if="nav === 'casters'" />
|
|
<Stats v-if="nav === 'stats'" />
|
|
<Streams v-if="nav === 'streams'" />
|
|
<Brackets v-if="nav === 'brackets'" />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { update, sub } from '../utils/websocket'
|
|
import { inject, ref } from 'vue'
|
|
import Events from '@/components/Events.vue'
|
|
import Rosters from '@/components/Rosters.vue'
|
|
import Matches from '@/components/Matches.vue'
|
|
import Casters from '@/components/Casters.vue'
|
|
import Hosts from '@/components/Hosts.vue'
|
|
import Stats from '@/components/Stats.vue'
|
|
import Streams from '@/components/Streams.vue'
|
|
import Brackets from '@/components/Brackets.vue'
|
|
|
|
export default {
|
|
components: {
|
|
Events,
|
|
Rosters,
|
|
Matches,
|
|
Casters,
|
|
Hosts,
|
|
Stats,
|
|
Streams,
|
|
Brackets,
|
|
},
|
|
setup() {
|
|
const store = inject('store')
|
|
store.methods.connect('ws://localhost:5000/ws')
|
|
|
|
|
|
const check = async () => {
|
|
const status = await window.ipcRenderer.invoke('status')
|
|
const relayStatus = await window.ipcRenderer.invoke('relayStatus')
|
|
if (status) {
|
|
store.state.server = true
|
|
}
|
|
if (relayStatus) {
|
|
store.state.relay = true
|
|
}
|
|
}
|
|
|
|
check()
|
|
|
|
const nav = ref('dash')
|
|
|
|
const streamid = ref('')
|
|
|
|
const sendData = async () => {
|
|
await window.ipcRenderer.invoke('massSend')
|
|
}
|
|
|
|
const updateServer = async () => {
|
|
if (streamid.value) {
|
|
const s = store.state.streamsFull.filter(x => x._id === streamid.value)[0]
|
|
store.state.overlayStream = s
|
|
await window.ipcRenderer.invoke('state', JSON.stringify(s))
|
|
}
|
|
}
|
|
|
|
sub.push(updateServer)
|
|
sub.push(sendData)
|
|
|
|
window.ipcRenderer.on('test', (e, msg) => {
|
|
const data = JSON.parse(msg)
|
|
|
|
update('matches', data.id, {
|
|
started: data.started,
|
|
done: data.done,
|
|
series: data.series,
|
|
resets: data.resets,
|
|
})
|
|
|
|
updateServer()
|
|
|
|
window.ipcRenderer.invoke('massSend')
|
|
|
|
console.warn('RUNNING UPDATE!', data)
|
|
})
|
|
|
|
const serverDo = (x) => {
|
|
if (x === true) {
|
|
const s = store.state.streamsFull.filter(x => x._id === streamid.value)[0]
|
|
store.state.overlayStream = s
|
|
window.ipcRenderer.invoke('state', JSON.stringify(s))
|
|
if (!store.state.server) {
|
|
window.ipcRenderer.invoke('server', true)
|
|
store.state.server = true
|
|
}
|
|
} else {
|
|
store.state.server = false
|
|
window.ipcRenderer.invoke('server', false)
|
|
}
|
|
}
|
|
|
|
const relayDo = () => {
|
|
if (!store.state.relay) {
|
|
window.ipcRenderer.invoke('relay', true)
|
|
store.state.relay = true
|
|
} else {
|
|
store.state.relay = false
|
|
window.ipcRenderer.invoke('relay', false);
|
|
}
|
|
}
|
|
|
|
|
|
return {
|
|
store,
|
|
nav,
|
|
streamid,
|
|
serverDo,
|
|
relayDo,
|
|
}
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.nav-item {
|
|
@apply flex justify-center items-center w-96 h-14;
|
|
}
|
|
.nav-item:hover {
|
|
@apply bg-gray-700 cursor-pointer;
|
|
}
|
|
.nav-item.active {
|
|
@apply bg-gray-600;
|
|
}
|
|
</style>
|