Skip to content
Snippets Groups Projects
player.js 3.02 KiB
Newer Older
onny's avatar
onny committed
/*
 * @copyright Copyright (c) 2021 Jonas Heinrich <onny@project-insanity.org>
 *
 * @author Jonas Heinrich <onny@project-insanity.org>
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 */

import axios from '@nextcloud/axios'
import { generateUrl } from '@nextcloud/router'
const requesttoken = axios.defaults.headers.requesttoken

export default {
	state: {
		isPlaying: false,
		isBuffering: false,
		isMute: false,
		isPaused: false,
		volume: 0.5,
		oldVolume: 0,
		title: '',
		episodePlaying: null,
	},
	mutations: {
		isPlaying(state, playerState) {
			state.player.isPlaying = playerState
		},
		isBuffering(state, bufferingState) {
			state.player.isBuffering = bufferingState
		},
		changeVolume(state, volume) {
			state.player.volume = volume
		},
		toggleMute(state) {
			if (state.player.isMute) {
				state.player.volume = state.player.oldVolume
				state.player.isMute = false
			} else {
				state.player.oldVolume = state.player.volume
				state.player.volume = 0
				state.player.isMute = true
			}
		},
		togglePlay(state) {
			if (state.player.isPlaying) {
				state.player.isPlaying = false
				state.player.isPaused = true
			} else {
				state.player.isPlaying = true
				state.player.isPaused = false
			}
		},
		setTitle(state, title) {
			state.player.title = title
		},
		setVolumeState(state, volumeState) {
			axios.defaults.headers.requesttoken = requesttoken
			axios.post(generateUrl('/apps/podcast/settings/volumeState'), {
				volumeState,
			})
		},
		getVolumeState(state) {
			axios.defaults.headers.requesttoken = requesttoken
			axios
				.get(generateUrl('/apps/podcast/settings/volumeState'))
				.then(async response => {
					const {
						data: { volumeState: value },
					} = response
					state.player.volume = value
				})
		},
	},
	actions: {
		isPlaying(context, playerState) {
			context.commit('isPlaying', playerState)
		},
		isBuffering(context, bufferingState) {
			context.commit('isBuffering', bufferingState)
		},
		changeVolume(context, volume) {
			context.commit('changeVolume', volume)
		},
		toggleMute(context) {
			context.commit('toggleMute')
		},
		togglePlay(context) {
			context.commit('togglePlay')
		},
		setTitle(context, title) {
			context.commit('setTitle', title)
		},
		setVolumeState(context, volumeState) {
			context.commit('setVolumeState', volumeState)
		},
		getVolumeState(context) {
			context.commit('getVolumeState')
		},
	},
}