Files
Voozik/client/src/store/roomModule.js

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
}