From a0cf9560a4c8c6ca56f926d65cb8ebfb9401f3bd Mon Sep 17 00:00:00 2001 From: chme Date: Sat, 14 Mar 2020 14:13:37 +0100 Subject: [PATCH 01/25] [web-src] Add settings page for artwork providers --- web-src/src/components/SettingsCheckbox.vue | 113 ++++++++++++ web-src/src/components/SettingsTextfield.vue | 117 ++++++++++++ web-src/src/components/TabsSettings.vue | 5 + web-src/src/pages/SettingsPageArtwork.vue | 50 +++++ .../src/pages/SettingsPageWebinterface.vue | 172 ++---------------- web-src/src/router/index.js | 6 + 6 files changed, 305 insertions(+), 158 deletions(-) create mode 100644 web-src/src/components/SettingsCheckbox.vue create mode 100644 web-src/src/components/SettingsTextfield.vue create mode 100644 web-src/src/pages/SettingsPageArtwork.vue diff --git a/web-src/src/components/SettingsCheckbox.vue b/web-src/src/components/SettingsCheckbox.vue new file mode 100644 index 00000000..90a333b5 --- /dev/null +++ b/web-src/src/components/SettingsCheckbox.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/web-src/src/components/SettingsTextfield.vue b/web-src/src/components/SettingsTextfield.vue new file mode 100644 index 00000000..50f94997 --- /dev/null +++ b/web-src/src/components/SettingsTextfield.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/web-src/src/components/TabsSettings.vue b/web-src/src/components/TabsSettings.vue index be78f900..389ae68b 100644 --- a/web-src/src/components/TabsSettings.vue +++ b/web-src/src/components/TabsSettings.vue @@ -15,6 +15,11 @@ Remotes & Outputs + + + Artwork + + Online Services diff --git a/web-src/src/pages/SettingsPageArtwork.vue b/web-src/src/pages/SettingsPageArtwork.vue new file mode 100644 index 00000000..5be4c25c --- /dev/null +++ b/web-src/src/pages/SettingsPageArtwork.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/web-src/src/pages/SettingsPageWebinterface.vue b/web-src/src/pages/SettingsPageWebinterface.vue index 115f961a..47cdcb44 100644 --- a/web-src/src/pages/SettingsPageWebinterface.vue +++ b/web-src/src/pages/SettingsPageWebinterface.vue @@ -8,36 +8,15 @@ @@ -59,140 +38,17 @@ diff --git a/web-src/src/router/index.js b/web-src/src/router/index.js index 7b6d3f8b..6b4d6319 100644 --- a/web-src/src/router/index.js +++ b/web-src/src/router/index.js @@ -32,6 +32,7 @@ import SpotifyPageAlbum from '@/pages/SpotifyPageAlbum' import SpotifyPagePlaylist from '@/pages/SpotifyPagePlaylist' import SpotifyPageSearch from '@/pages/SpotifyPageSearch' import SettingsPageWebinterface from '@/pages/SettingsPageWebinterface' +import SettingsPageArtwork from '@/pages/SettingsPageArtwork' import SettingsPageOnlineServices from '@/pages/SettingsPageOnlineServices' import SettingsPageRemotesOutputs from '@/pages/SettingsPageRemotesOutputs' @@ -225,6 +226,11 @@ export const router = new VueRouter({ name: 'Settings Webinterface', component: SettingsPageWebinterface }, + { + path: '/settings/artwork', + name: 'Settings Artwork', + component: SettingsPageArtwork + }, { path: '/settings/online-services', name: 'Settings Online Services', From baf90f689f0a4482beb90d77cb8ae623578dd0e6 Mon Sep 17 00:00:00 2001 From: chme Date: Sun, 15 Mar 2020 10:00:16 +0100 Subject: [PATCH 02/25] [web-src] Show pop up dialog for remote pairing requests --- web-src/src/App.vue | 8 +- .../components/ModalDialogRemotePairing.vue | 82 +++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 web-src/src/components/ModalDialogRemotePairing.vue diff --git a/web-src/src/App.vue b/web-src/src/App.vue index 44066251..8dd8d089 100644 --- a/web-src/src/App.vue +++ b/web-src/src/App.vue @@ -6,6 +6,7 @@ + @@ -15,19 +16,21 @@ import NavbarTop from '@/components/NavbarTop' import NavbarBottom from '@/components/NavbarBottom' import Notifications from '@/components/Notifications' +import ModalDialogRemotePairing from '@/components/ModalDialogRemotePairing' import webapi from '@/webapi' import * as types from '@/store/mutation_types' import ReconnectingWebSocket from 'reconnectingwebsocket' export default { name: 'App', - components: { NavbarTop, NavbarBottom, Notifications }, + components: { NavbarTop, NavbarBottom, Notifications, ModalDialogRemotePairing }, template: '', data () { return { token_timer_id: 0, - reconnect_attempts: 0 + reconnect_attempts: 0, + pairing_active: false } }, @@ -204,6 +207,7 @@ export default { update_pairing: function () { webapi.pairing().then(({ data }) => { this.$store.commit(types.UPDATE_PAIRING, data) + this.pairing_active = data.active }) } }, diff --git a/web-src/src/components/ModalDialogRemotePairing.vue b/web-src/src/components/ModalDialogRemotePairing.vue new file mode 100644 index 00000000..bb576211 --- /dev/null +++ b/web-src/src/components/ModalDialogRemotePairing.vue @@ -0,0 +1,82 @@ + + + + + From 7481365dc2e0cdea2ca83e09afc437f7f9374a04 Mon Sep 17 00:00:00 2001 From: whatdoineed2do/Ray Date: Fri, 21 Feb 2020 20:21:08 +0000 Subject: [PATCH 03/25] [web-src] RSS feed maintainence updates to podcast pages and new add/remove RSS modal --- web-src/src/components/ModalDialogAddRss.vue | 85 ++++++++++++++++++++ web-src/src/components/NavbarTop.vue | 2 +- web-src/src/pages/PagePlaylists.vue | 2 +- web-src/src/pages/PagePodcast.vue | 47 ++++++++++- web-src/src/pages/PagePodcasts.vue | 46 ++++++++++- web-src/src/webapi/index.js | 12 +++ 6 files changed, 188 insertions(+), 6 deletions(-) create mode 100644 web-src/src/components/ModalDialogAddRss.vue diff --git a/web-src/src/components/ModalDialogAddRss.vue b/web-src/src/components/ModalDialogAddRss.vue new file mode 100644 index 00000000..7b74cdd6 --- /dev/null +++ b/web-src/src/components/ModalDialogAddRss.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/web-src/src/components/NavbarTop.vue b/web-src/src/components/NavbarTop.vue index 4f32b97d..e6f79b00 100644 --- a/web-src/src/components/NavbarTop.vue +++ b/web-src/src/components/NavbarTop.vue @@ -7,7 +7,7 @@ - + diff --git a/web-src/src/pages/PagePlaylists.vue b/web-src/src/pages/PagePlaylists.vue index 4b8504ee..9ffdbff3 100644 --- a/web-src/src/pages/PagePlaylists.vue +++ b/web-src/src/pages/PagePlaylists.vue @@ -8,7 +8,7 @@ @@ -158,7 +161,7 @@ export default { this.new_episodes.items = { } }, - open_add_stream_dialog: function (item) { + open_add_podcast_dialog: function (item) { this.show_url_modal = true }, From b298fc117083e780c0389b206659d1500ac1b55b Mon Sep 17 00:00:00 2001 From: chme Date: Sat, 18 Apr 2020 06:57:55 +0200 Subject: [PATCH 13/25] [web-src] Restyling of navbars and now playing page --- web-src/src/App.vue | 39 +- web-src/src/components/NavbarBottom.vue | 358 +++++++++++++++++- web-src/src/components/NavbarItemLink.vue | 35 +- web-src/src/components/NavbarTop.vue | 266 +++---------- .../src/components/PlayerButtonConsume.vue | 8 +- web-src/src/components/PlayerButtonNext.vue | 8 +- .../src/components/PlayerButtonPlayPause.vue | 2 +- .../src/components/PlayerButtonPrevious.vue | 8 +- web-src/src/components/PlayerButtonRepeat.vue | 8 +- .../src/components/PlayerButtonShuffle.vue | 8 +- web-src/src/pages/PageNowPlaying.vue | 78 ++-- web-src/src/router/index.js | 12 +- web-src/src/store/index.js | 6 +- web-src/src/store/mutation_types.js | 1 + 14 files changed, 567 insertions(+), 270 deletions(-) diff --git a/web-src/src/App.vue b/web-src/src/App.vue index 8972f475..e985a277 100644 --- a/web-src/src/App.vue +++ b/web-src/src/App.vue @@ -8,7 +8,10 @@ - + +
@@ -35,8 +38,21 @@ export default { }, computed: { - show_burger_menu () { - return this.$store.state.show_burger_menu + show_burger_menu: { + get () { + return this.$store.state.show_burger_menu + }, + set (value) { + this.$store.commit(types.SHOW_BURGER_MENU, value) + } + }, + show_player_menu: { + get () { + return this.$store.state.show_player_menu + }, + set (value) { + this.$store.commit(types.SHOW_PLAYER_MENU, value) + } } }, @@ -209,16 +225,23 @@ export default { this.$store.commit(types.UPDATE_PAIRING, data) this.pairing_active = data.active }) + }, + + update_is_clipped: function () { + if (this.show_burger_menu || this.show_player_menu) { + document.querySelector('html').classList.add('is-clipped') + } else { + document.querySelector('html').classList.remove('is-clipped') + } } }, watch: { 'show_burger_menu' () { - if (this.show_burger_menu) { - document.querySelector('html').classList.add('is-clipped') - } else { - document.querySelector('html').classList.remove('is-clipped') - } + this.update_is_clipped() + }, + 'show_player_menu' () { + this.update_is_clipped() } } } diff --git a/web-src/src/components/NavbarBottom.vue b/web-src/src/components/NavbarBottom.vue index ae5ccd95..c4d2ea01 100644 --- a/web-src/src/components/NavbarBottom.vue +++ b/web-src/src/components/NavbarBottom.vue @@ -1,40 +1,380 @@ diff --git a/web-src/src/components/NavbarItemLink.vue b/web-src/src/components/NavbarItemLink.vue index 54270a71..0a0b42b1 100644 --- a/web-src/src/components/NavbarItemLink.vue +++ b/web-src/src/components/NavbarItemLink.vue @@ -1,5 +1,5 @@ @@ -9,17 +9,46 @@ import * as types from '@/store/mutation_types' export default { name: 'NavbarItemLink', - props: ['to'], + props: { + to: String, + exact: Boolean + }, computed: { is_active () { + if (this.exact) { + return this.$route.path === this.to + } return this.$route.path.startsWith(this.to) + }, + + show_player_menu: { + get () { + return this.$store.state.show_player_menu + }, + set (value) { + this.$store.commit(types.SHOW_PLAYER_MENU, value) + } + }, + + show_burger_menu: { + get () { + return this.$store.state.show_burger_menu + }, + set (value) { + this.$store.commit(types.SHOW_BURGER_MENU, value) + } } }, methods: { open_link: function () { - this.$store.commit(types.SHOW_BURGER_MENU, false) + if (this.show_burger_menu) { + this.$store.commit(types.SHOW_BURGER_MENU, false) + } + if (this.show_player_menu) { + this.$store.commit(types.SHOW_PLAYER_MENU, false) + } this.$router.push({ path: this.to }) }, diff --git a/web-src/src/components/NavbarTop.vue b/web-src/src/components/NavbarTop.vue index e6f79b00..ff8c7665 100644 --- a/web-src/src/components/NavbarTop.vue +++ b/web-src/src/components/NavbarTop.vue @@ -1,5 +1,5 @@ diff --git a/web-src/src/components/PlayerButtonConsume.vue b/web-src/src/components/PlayerButtonConsume.vue index 8a6d87c5..7b45a61f 100644 --- a/web-src/src/components/PlayerButtonConsume.vue +++ b/web-src/src/components/PlayerButtonConsume.vue @@ -1,6 +1,6 @@ @@ -10,6 +10,10 @@ import webapi from '@/webapi' export default { name: 'PlayerButtonConsume', + props: { + icon_style: String + }, + computed: { is_consume () { return this.$store.state.player.consume diff --git a/web-src/src/components/PlayerButtonNext.vue b/web-src/src/components/PlayerButtonNext.vue index 7d0139fa..f7fae15a 100644 --- a/web-src/src/components/PlayerButtonNext.vue +++ b/web-src/src/components/PlayerButtonNext.vue @@ -1,6 +1,6 @@ @@ -10,6 +10,10 @@ import webapi from '@/webapi' export default { name: 'PlayerButtonNext', + props: { + icon_style: String + }, + computed: { disabled () { return !this.$store.state.queue || this.$store.state.queue.count <= 0 diff --git a/web-src/src/components/PlayerButtonPlayPause.vue b/web-src/src/components/PlayerButtonPlayPause.vue index 440e3869..10e247de 100644 --- a/web-src/src/components/PlayerButtonPlayPause.vue +++ b/web-src/src/components/PlayerButtonPlayPause.vue @@ -1,6 +1,6 @@ diff --git a/web-src/src/components/PlayerButtonPrevious.vue b/web-src/src/components/PlayerButtonPrevious.vue index 1afab093..913e297a 100644 --- a/web-src/src/components/PlayerButtonPrevious.vue +++ b/web-src/src/components/PlayerButtonPrevious.vue @@ -1,6 +1,6 @@ @@ -10,6 +10,10 @@ import webapi from '@/webapi' export default { name: 'PlayerButtonPrevious', + props: { + icon_style: String + }, + computed: { disabled () { return !this.$store.state.queue || this.$store.state.queue.count <= 0 diff --git a/web-src/src/components/PlayerButtonRepeat.vue b/web-src/src/components/PlayerButtonRepeat.vue index dce2029c..0d31503d 100644 --- a/web-src/src/components/PlayerButtonRepeat.vue +++ b/web-src/src/components/PlayerButtonRepeat.vue @@ -1,6 +1,6 @@ @@ -10,8 +10,8 @@ import webapi from '@/webapi' export default { name: 'PlayerButtonRepeat', - data () { - return { } + props: { + icon_style: String }, computed: { diff --git a/web-src/src/components/PlayerButtonShuffle.vue b/web-src/src/components/PlayerButtonShuffle.vue index cfedf9be..9c1199d6 100644 --- a/web-src/src/components/PlayerButtonShuffle.vue +++ b/web-src/src/components/PlayerButtonShuffle.vue @@ -1,6 +1,6 @@ @@ -10,6 +10,10 @@ import webapi from '@/webapi' export default { name: 'PlayerButtonShuffle', + props: { + icon_style: String + }, + computed: { is_shuffle () { return this.$store.state.player.shuffle diff --git a/web-src/src/pages/PageNowPlaying.vue b/web-src/src/pages/PageNowPlaying.vue index f312eb80..945caa8f 100644 --- a/web-src/src/pages/PageNowPlaying.vue +++ b/web-src/src/pages/PageNowPlaying.vue @@ -1,8 +1,51 @@ + + diff --git a/web-src/src/components/PlayerButtonSkipFwd.vue b/web-src/src/components/PlayerButtonSkipFwd.vue new file mode 100644 index 00000000..9d5d9b5c --- /dev/null +++ b/web-src/src/components/PlayerButtonSkipFwd.vue @@ -0,0 +1,25 @@ + + + + + From 45e7816637cef0c4c3f8fad61964b7d905c39742 Mon Sep 17 00:00:00 2001 From: whatdoineed2do/Ray Date: Wed, 1 May 2019 08:58:05 +0100 Subject: [PATCH 15/25] [web-src] skip fwd/back only for non url/pipe --- web-src/src/components/PlayerButtonSkipBack.vue | 15 +++++++++++++-- web-src/src/components/PlayerButtonSkipFwd.vue | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/web-src/src/components/PlayerButtonSkipBack.vue b/web-src/src/components/PlayerButtonSkipBack.vue index 7672b931..b011cafc 100644 --- a/web-src/src/components/PlayerButtonSkipBack.vue +++ b/web-src/src/components/PlayerButtonSkipBack.vue @@ -1,6 +1,11 @@ @@ -11,9 +16,15 @@ export default { name: 'PlayerButtonSkipBack', props: [ 'when_ms' ], + computed: { + is_skip_allowed () { + return this.$store.state.player.state !== 'stop' && this.$store.getters.now_playing && this.$store.getters.now_playing.data_kind !== 'url' && this.$store.getters.now_playing.data_kind !== 'pipe' + } + }, + methods: { play_skip_back: function () { - if (this.$store.state.player.state !== 'stop') { + if (this.is_skip_allowed) { webapi.player_seek(this.when_ms - 10000) } } diff --git a/web-src/src/components/PlayerButtonSkipFwd.vue b/web-src/src/components/PlayerButtonSkipFwd.vue index 9d5d9b5c..d65246dc 100644 --- a/web-src/src/components/PlayerButtonSkipFwd.vue +++ b/web-src/src/components/PlayerButtonSkipFwd.vue @@ -1,6 +1,11 @@ @@ -11,9 +16,15 @@ export default { name: 'PlayerButtonSkipFwd', props: [ 'when_ms' ], + computed: { + is_skip_allowed () { + return this.$store.state.player.state !== 'stop' && this.$store.getters.now_playing && this.$store.getters.now_playing.data_kind !== 'url' && this.$store.getters.now_playing.data_kind !== 'pipe' + } + }, + methods: { play_skip_fwd: function () { - if (this.$store.state.player.state !== 'stop') { + if (this.is_skip_allowed) { webapi.player_seek(this.when_ms + 10000) } } From bbacf3e40651e546b31ec40ddf111d1b0866e7a6 Mon Sep 17 00:00:00 2001 From: chme Date: Fri, 17 Apr 2020 06:23:28 +0200 Subject: [PATCH 16/25] [web-src] Add seek forward/backward buttons for podcasts/audiobooks --- web-src/src/components/NavbarBottom.vue | 98 +++++++++---------- .../src/components/PlayerButtonSeekBack.vue | 38 +++++++ .../components/PlayerButtonSeekForward.vue | 38 +++++++ .../src/components/PlayerButtonSkipBack.vue | 36 ------- .../src/components/PlayerButtonSkipFwd.vue | 36 ------- web-src/src/pages/PageNowPlaying.vue | 2 +- web-src/src/webapi/index.js | 6 +- 7 files changed, 127 insertions(+), 127 deletions(-) create mode 100644 web-src/src/components/PlayerButtonSeekBack.vue create mode 100644 web-src/src/components/PlayerButtonSeekForward.vue delete mode 100644 web-src/src/components/PlayerButtonSkipBack.vue delete mode 100644 web-src/src/components/PlayerButtonSkipFwd.vue diff --git a/web-src/src/components/NavbarBottom.vue b/web-src/src/components/NavbarBottom.vue index c4d2ea01..2bca4146 100644 --- a/web-src/src/components/NavbarBottom.vue +++ b/web-src/src/components/NavbarBottom.vue @@ -19,8 +19,10 @@ + + @@ -99,22 +101,11 @@