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 }