142 lines
3.3 KiB
JavaScript
142 lines
3.3 KiB
JavaScript
const state = {
|
|
admin: false,
|
|
roomStatus: {
|
|
roomName: '',
|
|
roomCode: '',
|
|
player: {
|
|
timeCode: 0,
|
|
playing: true
|
|
},
|
|
current: {
|
|
link: '',
|
|
title: '',
|
|
votes: 0,
|
|
voters: []
|
|
},
|
|
playlist: []
|
|
}
|
|
}
|
|
|
|
const getters = {
|
|
}
|
|
|
|
const actions = {
|
|
setRoomCode ({ commit }, roomCode) {
|
|
commit('SET_ROOMCODE', roomCode)
|
|
},
|
|
setRoomName ({ commit }, roomName) {
|
|
commit('SET_ROOMNAME', roomName)
|
|
},
|
|
setRoomStatus ({ commit }, roomStatus) {
|
|
commit('SET_ROOMSTATUS', roomStatus)
|
|
},
|
|
setAdmin ({ commit }) {
|
|
commit('SET_ADMIN')
|
|
},
|
|
vote ({ commit, dispatch, state }, { link, isPositive, voterName }) {
|
|
console.log('vote on ' + link + ' (' + isPositive + ') by ' + voterName)
|
|
if (isPositive) {
|
|
commit('ADD_VOTE', {
|
|
link: link,
|
|
voterName: voterName
|
|
})
|
|
} else {
|
|
commit('REMOVE_VOTE', {
|
|
link: link,
|
|
voterName: voterName
|
|
})
|
|
}
|
|
dispatch('rtc/broadcast', { message: state.roomStatus, type: 'status' }, { root: true })
|
|
},
|
|
setCurrent ({ commit, dispatch }, { playerStatus, timeCode }) {
|
|
switch (playerStatus) {
|
|
case 0:
|
|
commit('CURRENT_END')
|
|
break
|
|
case 1:
|
|
commit('CURRENT_PLAY', timeCode)
|
|
break
|
|
case 2:
|
|
commit('CURRENT_PAUSE', timeCode)
|
|
break
|
|
}
|
|
dispatch('rtc/broadcast', { message: state.roomStatus, type: 'status' }, { root: true })
|
|
}
|
|
}
|
|
|
|
const mutations = {
|
|
SET_ROOMCODE (state, code) {
|
|
state.roomStatus.roomCode = code
|
|
},
|
|
SET_ROOMNAME (state, name) {
|
|
state.roomStatus.roomName = name
|
|
},
|
|
SET_ROOMSTATUS (state, roomStatus) {
|
|
state.roomStatus = roomStatus
|
|
},
|
|
SET_ADMIN (state) {
|
|
state.admin = true
|
|
},
|
|
ADD_VOTE (state, { link, voterName }) {
|
|
var play = state.roomStatus.playlist.find(play => play.link === link)
|
|
if (play === undefined) {
|
|
play = {
|
|
link: link,
|
|
votes: 1,
|
|
voters: [
|
|
voterName
|
|
]
|
|
}
|
|
if (state.roomStatus.current.votes === 0) state.roomStatus.current = play
|
|
else state.roomStatus.playlist.push(play)
|
|
} else {
|
|
play.votes++
|
|
play.voters.push(voterName)
|
|
}
|
|
},
|
|
REMOVE_VOTE (state, { link, voterName }) {
|
|
var play = state.roomStatus.playlist.find(play => play.link === link)
|
|
play.votes--
|
|
const index = play.voters.indexOf(voterName)
|
|
if (index > -1) {
|
|
play.voters.splice(index, 1)
|
|
}
|
|
|
|
if (play.vote === 0) {
|
|
const index = state.roomStatus.playlist.indexOf(play)
|
|
if (index > -1) {
|
|
state.roomStatus.playlist.splice(index, 1)
|
|
}
|
|
}
|
|
},
|
|
CURRENT_END (state) {
|
|
if (state.roomStatus.playlist.length === 0) {
|
|
state.roomStatus.current.link = ''
|
|
state.roomStatus.current.title = ''
|
|
state.roomStatus.current.votes = 0
|
|
state.roomStatus.current.voters = []
|
|
} else {
|
|
state.roomStatus.playlist.sort((a, b) => {
|
|
return b.votes - a.votes
|
|
})
|
|
state.roomStatus.current = state.roomStatus.playlist.shift()
|
|
}
|
|
},
|
|
CURRENT_PAUSE (state, timeCode) {
|
|
state.roomStatus.player.playing = false
|
|
state.roomStatus.player.timeCode = timeCode
|
|
},
|
|
CURRENT_PLAY (state, timeCode) {
|
|
state.roomStatus.player.playing = true
|
|
state.roomStatus.player.timeCode = timeCode
|
|
}
|
|
}
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state,
|
|
getters,
|
|
actions,
|
|
mutations
|
|
}
|