@@ -89,7 +89,7 @@ export default {
},
computed: {
token() {
- return this.$store.getters.getToken
+ return this.$store.getters['user/getToken']
},
totalDurationPretty() {
return this.$secondsToTimestamp(this.totalDuration)
@@ -130,12 +130,22 @@ export default {
},
updatePlaybackRate(playbackRate) {
if (this.audioEl) {
- console.log('UpdatePlaybackRate', playbackRate)
- this.audioEl.playbackRate = playbackRate
+ try {
+ this.audioEl.playbackRate = playbackRate
+ this.audioEl.defaultPlaybackRate = playbackRate
+ } catch (error) {
+ console.error('Update playback rate failed', error)
+ }
} else {
console.error('No Audio El updatePlaybackRate')
}
},
+ playbackRateChanged(playbackRate) {
+ this.updatePlaybackRate(playbackRate)
+ this.$store.dispatch('user/updateUserSettings', { playbackRate }).catch((err) => {
+ console.error('Failed to update settings', err)
+ })
+ },
mousemoveTrack(e) {
var offsetX = e.offsetX
var time = (offsetX / this.trackWidth) * this.totalDuration
@@ -355,7 +365,8 @@ export default {
this.hlsInstance = new Hls(hlsOptions)
var audio = this.$refs.audio
audio.volume = this.volume
- audio.playbackRate = this.playbackRate
+ audio.defaultPlaybackRate = this.playbackRate
+
this.hlsInstance.attachMedia(audio)
this.hlsInstance.on(Hls.Events.MEDIA_ATTACHED, () => {
// console.log('[HLS] MEDIA ATTACHED')
@@ -410,17 +421,27 @@ export default {
this.set(this.url, startTime, true)
},
init() {
+ this.playbackRate = this.$store.getters['user/getUserSetting']('playbackRate') || 1
+
this.audioEl = this.$refs.audio
if (this.$refs.track) {
this.trackWidth = this.$refs.track.clientWidth
} else {
console.error('Track not loaded', this.$refs)
}
+ },
+ settingsUpdated(settings) {
+ if (settings.playbackRate && this.playbackRate !== settings.playbackRate) {
+ this.updatePlaybackRate(settings.playbackRate)
+ }
}
},
mounted() {
- // this.$nextTick(this.init)
+ this.$store.commit('user/addSettingsListener', { id: 'audioplayer', meth: this.settingsUpdated })
this.init()
+ },
+ beforeDestroy() {
+ this.$store.commit('user/removeSettingsListener', 'audioplayer')
}
}
diff --git a/client/components/app/Appbar.vue b/client/components/app/Appbar.vue
index a1ef9b74..0346c859 100644
--- a/client/components/app/Appbar.vue
+++ b/client/components/app/Appbar.vue
@@ -43,7 +43,7 @@ export default {
return this.$route.name !== 'index'
},
user() {
- return this.$store.state.user
+ return this.$store.state.user.user
},
username() {
return this.user ? this.user.username : 'err'
diff --git a/client/components/app/BookShelf.vue b/client/components/app/BookShelf.vue
index 8514ee56..62e262b3 100644
--- a/client/components/app/BookShelf.vue
+++ b/client/components/app/BookShelf.vue
@@ -32,13 +32,13 @@ export default {
},
computed: {
userAudiobooks() {
- return this.$store.state.user ? this.$store.state.user.audiobooks || {} : {}
+ return this.$store.state.user.user ? this.$store.state.user.user.audiobooks || {} : {}
},
audiobooks() {
return this.$store.state.audiobooks.audiobooks
},
filterOrderKey() {
- return this.$store.getters['settings/getFilterOrderKey']
+ return this.$store.getters['user/getFilterOrderKey']
}
},
methods: {
@@ -100,7 +100,7 @@ export default {
},
mounted() {
this.$store.commit('audiobooks/addListener', { id: 'bookshelf', meth: this.audiobooksUpdated })
- this.$store.commit('settings/addListener', { id: 'bookshelf', meth: this.settingsUpdated })
+ this.$store.commit('user/addSettingsListener', { id: 'bookshelf', meth: this.settingsUpdated })
this.$store.dispatch('audiobooks/load')
this.init()
@@ -108,7 +108,7 @@ export default {
},
beforeDestroy() {
this.$store.commit('audiobooks/removeListener', 'bookshelf')
- this.$store.commit('settings/removeListener', 'bookshelf')
+ this.$store.commit('user/removeSettingsListener', 'bookshelf')
window.removeEventListener('resize', this.resize)
}
}
diff --git a/client/components/app/BookShelfToolbar.vue b/client/components/app/BookShelfToolbar.vue
index 8617e3fc..e4bccb1b 100644
--- a/client/components/app/BookShelfToolbar.vue
+++ b/client/components/app/BookShelfToolbar.vue
@@ -14,7 +14,8 @@
export default {
data() {
return {
- settings: {}
+ settings: {},
+ hasInit: false
}
},
computed: {
@@ -30,15 +31,24 @@ export default {
this.saveSettings()
},
saveSettings() {
- // Send to server
- this.$store.commit('settings/setSettings', this.settings)
+ this.$store.commit('user/setSettings', this.settings) // Immediate update
+ this.$store.dispatch('user/updateUserSettings', this.settings)
},
init() {
- this.settings = { ...this.$store.state.settings.settings }
+ this.settings = { ...this.$store.state.user.settings }
+ },
+ settingsUpdated(settings) {
+ for (const key in settings) {
+ this.settings[key] = settings[key]
+ }
}
},
mounted() {
this.init()
+ this.$store.commit('user/addSettingsListener', { id: 'bookshelftoolbar', meth: this.settingsUpdated })
+ },
+ beforeDestroy() {
+ this.$store.commit('user/removeSettingsListener', 'bookshelftoolbar')
}
}
diff --git a/client/components/app/StreamContainer.vue b/client/components/app/StreamContainer.vue
index 24a12965..71c3da5c 100644
--- a/client/components/app/StreamContainer.vue
+++ b/client/components/app/StreamContainer.vue
@@ -22,6 +22,7 @@
export default {
data() {
return {
+ audioPlayerReady: false,
lastServerUpdateSentSeconds: 0,
stream: null
}
@@ -32,7 +33,7 @@ export default {
return 'Logo.png'
},
user() {
- return this.$store.state.user
+ return this.$store.state.user.user
},
isLoading() {
if (!this.streamAudiobook) return false
@@ -63,6 +64,7 @@ export default {
},
methods: {
audioPlayerMounted() {
+ this.audioPlayerReady = true
if (this.stream) {
console.log('[STREAM-CONTAINER] audioPlayerMounted w/ Stream', this.stream)
this.openStream()
@@ -104,7 +106,7 @@ export default {
if (this.$refs.audioPlayer) {
console.log('[STREAM-CONTAINER] streamOpen', stream)
this.openStream()
- } else {
+ } else if (this.audioPlayerReady) {
console.error('No Audio Ref')
}
},
diff --git a/client/components/controls/PlaybackSpeedControl.vue b/client/components/controls/PlaybackSpeedControl.vue
index 614d2b96..f1306f7c 100644
--- a/client/components/controls/PlaybackSpeedControl.vue
+++ b/client/components/controls/PlaybackSpeedControl.vue
@@ -8,12 +8,24 @@
-