diff --git a/CHANGELOG.md b/CHANGELOG.md
index 29529bd..3f58739 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,8 @@
[235](https://git.project-insanity.org/onny/nextcloud-app-radio/-/issues/235) @onny
- Update license year to 2021
[234](https://git.project-insanity.org/onny/nextcloud-app-radio/-/issues/234) @onny
+- Move menuState and volumeState into localStorage
+ [236](https://git.project-insanity.org/onny/nextcloud-app-radio/-/issues/236) @onny
## 1.0.1 - 2020-12
### Added
diff --git a/src/components/Main.vue b/src/components/Main.vue
deleted file mode 100644
index dd12eab..0000000
--- a/src/components/Main.vue
+++ /dev/null
@@ -1,483 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ emptyContentMessage }}
-
- {{ emptyContentDesc }}
-
-
-
-
-
-
-
-
-
-
diff --git a/src/router.js b/src/router.js
index bec9c04..63c5922 100644
--- a/src/router.js
+++ b/src/router.js
@@ -24,7 +24,7 @@ import Vue from 'vue'
import Router from 'vue-router'
import { generateUrl } from '@nextcloud/router'
-import Main from './components/Main'
+import Main from './views/Main'
import store from './store/main.js'
Vue.use(Router)
diff --git a/src/store/favorites.js b/src/store/favorites.js
new file mode 100644
index 0000000..989f125
--- /dev/null
+++ b/src/store/favorites.js
@@ -0,0 +1,21 @@
+/*
+ * @copyright Copyright (c) 2021 Jonas Heinrich
+ *
+ * @author Jonas Heinrich
+ *
+ * @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 .
+ *
+ */
diff --git a/src/store/main.js b/src/store/main.js
new file mode 100644
index 0000000..3c6bd29
--- /dev/null
+++ b/src/store/main.js
@@ -0,0 +1,49 @@
+/*
+ * @copyright Copyright (c) 2021 Jonas Heinrich
+ *
+ * @author Jonas Heinrich
+ *
+ * @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 .
+ *
+ */
+
+import Vue from 'vue'
+import Vuex from 'vuex'
+import player from './player'
+import favorites from './favorites'
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+ modules: {
+ player,
+ favorites,
+ },
+ state: {
+ menu: localStorage.getItem('radio.menu') || 'top',
+ },
+ mutations: {
+ setMenuState(state, menuState) {
+ localStorage.setItem('radio.menu', menuState)
+ state.menu = menuState
+ },
+ },
+ actions: {
+ setMenuState(context, menuState) {
+ context.commit('setMenuState', menuState)
+ },
+ },
+})
diff --git a/src/store/player.js b/src/store/player.js
new file mode 100644
index 0000000..c990e50
--- /dev/null
+++ b/src/store/player.js
@@ -0,0 +1,87 @@
+/*
+ * @copyright Copyright (c) 2021 Jonas Heinrich
+ *
+ * @author Jonas Heinrich
+ *
+ * @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 .
+ *
+ */
+
+export default ({
+ state: {
+ isPlaying: false,
+ isBuffering: false,
+ isMute: false,
+ isPaused: false,
+ volume: localStorage.getItem('radio.volume') || 0.5,
+ oldVolume: localStorage.getItem('radio.volume') || 0.5,
+ title: '',
+ },
+ mutations: {
+ setPlaying(state, playerState) {
+ state.isPlaying = playerState
+ },
+ setBuffering(state, bufferingState) {
+ state.isBuffering = bufferingState
+ },
+ setVolume(state, volume) {
+ state.volume = volume
+ localStorage.setItem('radio.volume', volume)
+ },
+ toggleMute(state) {
+ if (state.isMute) {
+ state.volume = state.player.oldVolume
+ state.isMute = false
+ } else {
+ state.oldVolume = state.player.volume
+ state.volume = 0
+ state.isMute = true
+ }
+ },
+ togglePlay(state) {
+ if (state.isPlaying) {
+ state.isPlaying = false
+ state.isPaused = true
+ } else {
+ state.isPlaying = true
+ state.isPaused = false
+ }
+ },
+ setTitle(state, title) {
+ state.title = title
+ },
+ },
+ actions: {
+ setPlaying(context, playerState) {
+ context.commit('setPlaying', playerState)
+ },
+ setBuffering(context, bufferingState) {
+ context.commit('setBuffering', bufferingState)
+ },
+ setVolume(context, volume) {
+ context.commit('setVolume', volume)
+ },
+ toggleMute(context) {
+ context.commit('toggleMute')
+ },
+ togglePlay(context) {
+ context.commit('togglePlay')
+ },
+ setTitle(context, title) {
+ context.commit('setTitle', title)
+ },
+ },
+})