mirror of
https://github.com/owntone/owntone-server.git
synced 2025-04-15 16:48:22 -04:00
[web] Lint code
This commit is contained in:
parent
966d563418
commit
c22372daa6
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -18,15 +18,16 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
offset: { required: true, type: Number }
|
offset: { required: true, type: Number }
|
||||||
},
|
},
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
return {
|
return {
|
||||||
playerStore: usePlayerStore(),
|
playerStore: usePlayerStore(),
|
||||||
queueStore: useQueueStore()
|
queueStore: useQueueStore()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
current() {
|
||||||
|
return this.queueStore.current
|
||||||
|
},
|
||||||
disabled() {
|
disabled() {
|
||||||
return (
|
return (
|
||||||
this.queueStore?.count <= 0 ||
|
this.queueStore?.count <= 0 ||
|
||||||
@ -37,9 +38,6 @@ export default {
|
|||||||
is_stopped() {
|
is_stopped() {
|
||||||
return this.player.state === 'stop'
|
return this.player.state === 'stop'
|
||||||
},
|
},
|
||||||
current() {
|
|
||||||
return this.queueStore.current
|
|
||||||
},
|
|
||||||
player() {
|
player() {
|
||||||
return this.playerStore
|
return this.playerStore
|
||||||
},
|
},
|
||||||
@ -47,7 +45,6 @@ export default {
|
|||||||
return ['podcast', 'audiobook'].includes(this.current.media_kind)
|
return ['podcast', 'audiobook'].includes(this.current.media_kind)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
seek() {
|
seek() {
|
||||||
if (!this.disabled) {
|
if (!this.disabled) {
|
||||||
|
@ -15,7 +15,6 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
show_disabled_message: Boolean
|
show_disabled_message: Boolean
|
||||||
},
|
},
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
return {
|
return {
|
||||||
notificationsStore: useNotificationsStore(),
|
notificationsStore: useNotificationsStore(),
|
||||||
@ -23,7 +22,6 @@ export default {
|
|||||||
queueStore: useQueueStore()
|
queueStore: useQueueStore()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
disabled() {
|
disabled() {
|
||||||
return this.queueStore?.count <= 0
|
return this.queueStore?.count <= 0
|
||||||
@ -44,7 +42,6 @@ export default {
|
|||||||
return this.playerStore.state === 'play'
|
return this.playerStore.state === 'play'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
toggle() {
|
toggle() {
|
||||||
if (this.disabled) {
|
if (this.disabled) {
|
||||||
|
@ -22,16 +22,16 @@
|
|||||||
export default {
|
export default {
|
||||||
name: 'ControlUrlField',
|
name: 'ControlUrlField',
|
||||||
props: {
|
props: {
|
||||||
placeholder: { type: String, required: true },
|
help: { default: '', type: String },
|
||||||
icon: { type: String, required: true },
|
icon: { required: true, type: String },
|
||||||
help: { type: String, default: '' },
|
loading: { default: false, type: Boolean },
|
||||||
loading: { type: Boolean, default: false }
|
placeholder: { required: true, type: String }
|
||||||
},
|
},
|
||||||
emits: ['url-changed'],
|
emits: ['url-changed'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
url: '',
|
disabled: true,
|
||||||
disabled: true
|
url: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -83,11 +83,9 @@ export default {
|
|||||||
media_kind: { default: '', type: String }
|
media_kind: { default: '', type: String }
|
||||||
},
|
},
|
||||||
emits: ['play-count-changed', 'podcast-deleted'],
|
emits: ['play-count-changed', 'podcast-deleted'],
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
return { settingsStore: useSettingsStore() }
|
return { settingsStore: useSettingsStore() }
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
rss_playlist_to_remove: {},
|
rss_playlist_to_remove: {},
|
||||||
@ -96,19 +94,17 @@ export default {
|
|||||||
show_remove_podcast_modal: false
|
show_remove_podcast_modal: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
return [
|
return [
|
||||||
{ key: 'page.podcast.cancel', handler: 'cancel', icon: 'cancel' },
|
{ handler: 'cancel', icon: 'cancel', key: 'page.podcast.cancel' },
|
||||||
{ key: 'page.podcast.remove', handler: 'remove', icon: 'delete' }
|
{ handler: 'remove', icon: 'delete', key: 'page.podcast.remove' }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
media_kind_resolved() {
|
media_kind_resolved() {
|
||||||
return this.media_kind || this.selected_item.media_kind
|
return this.media_kind || this.selected_item.media_kind
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
open(item) {
|
open(item) {
|
||||||
this.selected_item = item
|
this.selected_item = item
|
||||||
|
@ -36,11 +36,9 @@ import { usePlayerStore } from '@/stores/player'
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'LyricsPane',
|
name: 'LyricsPane',
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
return { lyricsStore: useLyricsStore(), playerStore: usePlayerStore() }
|
return { lyricsStore: useLyricsStore(), playerStore: usePlayerStore() }
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
/*
|
/*
|
||||||
* Non reactive. Used as a cache to speed up the finding of lyrics
|
* Non reactive. Used as a cache to speed up the finding of lyrics
|
||||||
@ -54,7 +52,6 @@ export default {
|
|||||||
autoScrolling: true
|
autoScrolling: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
is_playing() {
|
is_playing() {
|
||||||
return this.playerStore.state === 'play'
|
return this.playerStore.state === 'play'
|
||||||
@ -85,7 +82,7 @@ export default {
|
|||||||
verse.words = verse.text.match(/\S+\s*/gu).map((text) => {
|
verse.words = verse.text.match(/\S+\s*/gu).map((text) => {
|
||||||
const duration = text.length * unitDuration
|
const duration = text.length * unitDuration
|
||||||
delay += duration
|
delay += duration
|
||||||
return { duration, delay, text }
|
return { delay, duration, text }
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -31,9 +31,9 @@
|
|||||||
export default {
|
export default {
|
||||||
name: 'ModalDialog',
|
name: 'ModalDialog',
|
||||||
props: {
|
props: {
|
||||||
actions: { type: Array, required: true },
|
actions: { required: true, type: Array },
|
||||||
show: Boolean,
|
show: Boolean,
|
||||||
title: { type: String, default: '' }
|
title: { default: '', type: String }
|
||||||
},
|
},
|
||||||
emits: ['close'],
|
emits: ['close'],
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -29,32 +29,28 @@ export default {
|
|||||||
emits: ['close', 'podcast-added'],
|
emits: ['close', 'podcast-added'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
|
||||||
disabled: true,
|
disabled: true,
|
||||||
|
loading: false,
|
||||||
url: ''
|
url: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
if (this.loading) {
|
if (this.loading) {
|
||||||
return [{ key: 'dialog.add.rss.processing', icon: 'web' }]
|
return [{ icon: 'web', key: 'dialog.add.rss.processing' }]
|
||||||
}
|
}
|
||||||
return [
|
return [
|
||||||
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
|
{ handler: this.cancel, icon: 'cancel', key: 'actions.cancel' },
|
||||||
{
|
{
|
||||||
key: 'actions.add',
|
|
||||||
disabled: this.disabled,
|
disabled: this.disabled,
|
||||||
handler: this.add,
|
handler: this.add,
|
||||||
icon: 'playlist-plus'
|
icon: 'playlist-plus',
|
||||||
|
key: 'actions.add'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onUrlChanged(url, disabled) {
|
|
||||||
this.url = url
|
|
||||||
this.disabled = disabled
|
|
||||||
},
|
|
||||||
add() {
|
add() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
webapi
|
webapi
|
||||||
@ -70,6 +66,10 @@ export default {
|
|||||||
},
|
},
|
||||||
cancel() {
|
cancel() {
|
||||||
this.$emit('close')
|
this.$emit('close')
|
||||||
|
},
|
||||||
|
onUrlChanged(url, disabled) {
|
||||||
|
this.url = url
|
||||||
|
this.disabled = disabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,38 +30,34 @@ export default {
|
|||||||
emits: ['close'],
|
emits: ['close'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
|
||||||
disabled: true,
|
disabled: true,
|
||||||
|
loading: false,
|
||||||
url: ''
|
url: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
if (this.loading) {
|
if (this.loading) {
|
||||||
return [{ key: 'dialog.add.stream.processing', icon: 'web' }]
|
return [{ icon: 'web', key: 'dialog.add.stream.processing' }]
|
||||||
}
|
}
|
||||||
return [
|
return [
|
||||||
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
|
{ handler: this.cancel, icon: 'cancel', key: 'actions.cancel' },
|
||||||
{
|
{
|
||||||
key: 'actions.add',
|
|
||||||
disabled: this.disabled,
|
disabled: this.disabled,
|
||||||
handler: this.add,
|
handler: this.add,
|
||||||
icon: 'playlist-plus'
|
icon: 'playlist-plus',
|
||||||
|
key: 'actions.add'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'actions.play',
|
|
||||||
disabled: this.disabled,
|
disabled: this.disabled,
|
||||||
handler: this.play,
|
handler: this.play,
|
||||||
icon: 'play'
|
icon: 'play',
|
||||||
|
key: 'actions.play'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onUrlChanged(url, disabled) {
|
|
||||||
this.url = url
|
|
||||||
this.disabled = disabled
|
|
||||||
},
|
|
||||||
add() {
|
add() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
webapi
|
webapi
|
||||||
@ -77,6 +73,10 @@ export default {
|
|||||||
cancel() {
|
cancel() {
|
||||||
this.$emit('close')
|
this.$emit('close')
|
||||||
},
|
},
|
||||||
|
onUrlChanged(url, disabled) {
|
||||||
|
this.url = url
|
||||||
|
this.disabled = disabled
|
||||||
|
},
|
||||||
play() {
|
play() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
webapi
|
webapi
|
||||||
|
@ -25,11 +25,11 @@ export default {
|
|||||||
if (this.media_kind_resolved === 'podcast') {
|
if (this.media_kind_resolved === 'podcast') {
|
||||||
if (this.item.data_kind === 'url') {
|
if (this.item.data_kind === 'url') {
|
||||||
return [
|
return [
|
||||||
{ key: 'actions.mark-as-played', handler: this.mark_played },
|
{ handler: this.mark_played, key: 'actions.mark-as-played' },
|
||||||
{ key: 'actions.remove-podcast', handler: this.remove_podcast }
|
{ handler: this.remove_podcast, key: 'actions.remove-podcast' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
return [{ key: 'actions.mark-as-played', handler: this.mark_played }]
|
return [{ handler: this.mark_played, key: 'actions.mark-as-played' }]
|
||||||
}
|
}
|
||||||
return []
|
return []
|
||||||
},
|
},
|
||||||
@ -38,15 +38,14 @@ export default {
|
|||||||
},
|
},
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
|
||||||
handler: this.open,
|
handler: this.open,
|
||||||
image: this.item.artwork_url,
|
image: this.item.artwork_url,
|
||||||
uri: this.item.uri,
|
name: this.item.name,
|
||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
|
handler: this.open_artist,
|
||||||
key: 'property.artist',
|
key: 'property.artist',
|
||||||
value: this.item.artist,
|
value: this.item.artist
|
||||||
handler: this.open_artist
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'property.release-date',
|
key: 'property.release-date',
|
||||||
@ -66,7 +65,8 @@ export default {
|
|||||||
key: 'property.added-on',
|
key: 'property.added-on',
|
||||||
value: this.$filters.toDateTime(this.item.time_added)
|
value: this.$filters.toDateTime(this.item.time_added)
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -17,22 +17,22 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name || '',
|
|
||||||
image: this.item?.images?.[0]?.url || '',
|
|
||||||
handler: this.open,
|
handler: this.open,
|
||||||
uri: this.item.uri,
|
image: this.item?.images?.[0]?.url || '',
|
||||||
|
name: this.item.name || '',
|
||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
|
handler: this.open_artist,
|
||||||
key: 'property.artist',
|
key: 'property.artist',
|
||||||
value: this.item?.artists?.[0]?.name,
|
value: this.item?.artists?.[0]?.name
|
||||||
handler: this.open_artist
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'property.release-date',
|
key: 'property.release-date',
|
||||||
value: this.$filters.toDate(this.item.release_date)
|
value: this.$filters.toDate(this.item.release_date)
|
||||||
},
|
},
|
||||||
{ key: 'property.type', value: this.item.album_type }
|
{ key: 'property.type', value: this.item.album_type }
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -17,9 +17,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
|
||||||
handler: this.open,
|
handler: this.open,
|
||||||
uri: this.item.uri,
|
name: this.item.name,
|
||||||
properties: [
|
properties: [
|
||||||
{ key: 'property.albums', value: this.item.album_count },
|
{ key: 'property.albums', value: this.item.album_count },
|
||||||
{ key: 'property.tracks', value: this.item.track_count },
|
{ key: 'property.tracks', value: this.item.track_count },
|
||||||
@ -31,7 +30,8 @@ export default {
|
|||||||
key: 'property.added-on',
|
key: 'property.added-on',
|
||||||
value: this.$filters.toDateTime(this.item.time_added)
|
value: this.$filters.toDateTime(this.item.time_added)
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -17,9 +17,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
|
||||||
handler: this.open,
|
handler: this.open,
|
||||||
uri: this.item.uri,
|
name: this.item.name,
|
||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
key: 'property.popularity',
|
key: 'property.popularity',
|
||||||
@ -28,7 +27,8 @@ export default {
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
{ key: 'property.genres', value: this.item.genres?.join(', ') }
|
{ key: 'property.genres', value: this.item.genres?.join(', ') }
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -17,19 +17,19 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
|
||||||
handler: this.open_albums,
|
|
||||||
expression: `composer is "${this.item.name}" and media_kind is music`,
|
expression: `composer is "${this.item.name}" and media_kind is music`,
|
||||||
|
handler: this.open_albums,
|
||||||
|
name: this.item.name,
|
||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
|
handler: this.open_albums,
|
||||||
key: 'property.albums',
|
key: 'property.albums',
|
||||||
value: this.item.album_count,
|
value: this.item.album_count
|
||||||
handler: this.open_albums
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
handler: this.open_tracks,
|
||||||
key: 'property.tracks',
|
key: 'property.tracks',
|
||||||
value: this.item.track_count,
|
value: this.item.track_count
|
||||||
handler: this.open_tracks
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'property.duration',
|
key: 'property.duration',
|
||||||
|
@ -17,8 +17,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item,
|
expression: `path starts with "${this.item}" order by path asc`,
|
||||||
expression: `path starts with "${this.item}" order by path asc`
|
name: this.item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,9 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
|
||||||
handler: this.open,
|
|
||||||
expression: `genre is "${this.item.name}" and media_kind is ${this.media_kind}`,
|
expression: `genre is "${this.item.name}" and media_kind is ${this.media_kind}`,
|
||||||
|
handler: this.open,
|
||||||
|
name: this.item.name,
|
||||||
properties: [
|
properties: [
|
||||||
{ key: 'property.albums', value: this.item.album_count },
|
{ key: 'property.albums', value: this.item.album_count },
|
||||||
{ key: 'property.tracks', value: this.item.track_count },
|
{ key: 'property.tracks', value: this.item.track_count },
|
||||||
|
@ -34,13 +34,13 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
return [
|
return [
|
||||||
{ key: 'actions.add', handler: this.queue_add, icon: 'playlist-plus' },
|
{ handler: this.queue_add, icon: 'playlist-plus', key: 'actions.add' },
|
||||||
{
|
{
|
||||||
key: 'actions.add-next',
|
|
||||||
handler: this.queue_add_next,
|
handler: this.queue_add_next,
|
||||||
icon: 'playlist-play'
|
icon: 'playlist-play',
|
||||||
|
key: 'actions.add-next'
|
||||||
},
|
},
|
||||||
{ key: 'actions.play', handler: this.play, icon: 'play' }
|
{ handler: this.play, icon: 'play', key: 'actions.play' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -21,10 +21,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
|
||||||
handler: this.open,
|
handler: this.open,
|
||||||
uri: this.item.uri,
|
name: this.item.name,
|
||||||
uris: this.uris,
|
|
||||||
properties: [
|
properties: [
|
||||||
{ key: 'property.tracks', value: this.item.item_count },
|
{ key: 'property.tracks', value: this.item.item_count },
|
||||||
{
|
{
|
||||||
@ -32,7 +30,9 @@ export default {
|
|||||||
value: this.$t(`playlist.type.${this.item.type}`)
|
value: this.$t(`playlist.type.${this.item.type}`)
|
||||||
},
|
},
|
||||||
{ key: 'property.path', value: this.item.path }
|
{ key: 'property.path', value: this.item.path }
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri,
|
||||||
|
uris: this.uris
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -47,15 +47,15 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
if (this.loading) {
|
if (this.loading) {
|
||||||
return [{ key: 'dialog.playlist.save.saving', icon: 'web' }]
|
return [{ icon: 'web', key: 'dialog.playlist.save.saving' }]
|
||||||
}
|
}
|
||||||
return [
|
return [
|
||||||
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
|
{ handler: this.cancel, icon: 'cancel', key: 'actions.cancel' },
|
||||||
{
|
{
|
||||||
key: 'actions.save',
|
|
||||||
disabled: this.disabled,
|
disabled: this.disabled,
|
||||||
handler: this.save,
|
handler: this.save,
|
||||||
icon: 'download'
|
icon: 'download',
|
||||||
|
key: 'actions.save'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -17,14 +17,14 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
|
||||||
handler: this.open,
|
handler: this.open,
|
||||||
uri: this.item.uri,
|
name: this.item.name,
|
||||||
properties: [
|
properties: [
|
||||||
{ key: 'property.owner', value: this.item.owner?.display_name },
|
{ key: 'property.owner', value: this.item.owner?.display_name },
|
||||||
{ key: 'property.tracks', value: this.item.tracks?.total },
|
{ key: 'property.tracks', value: this.item.tracks?.total },
|
||||||
{ key: 'property.path', value: this.item.uri }
|
{ key: 'property.path', value: this.item.uri }
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -29,31 +29,30 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
return [
|
return [
|
||||||
{ key: 'actions.remove', handler: this.remove, icon: 'delete' },
|
{ handler: this.remove, icon: 'delete', key: 'actions.remove' },
|
||||||
{ key: 'actions.play', handler: this.play, icon: 'play' }
|
{ handler: this.play, icon: 'play', key: 'actions.play' }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.title,
|
name: this.item.title,
|
||||||
uri: this.item.uri,
|
|
||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
|
handler: this.open_album,
|
||||||
key: 'property.album',
|
key: 'property.album',
|
||||||
value: this.item.album,
|
value: this.item.album
|
||||||
handler: this.open_album
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
handler: this.open_album_artist,
|
||||||
key: 'property.album-artist',
|
key: 'property.album-artist',
|
||||||
value: this.item.album_artist,
|
value: this.item.album_artist
|
||||||
handler: this.open_album_artist
|
|
||||||
},
|
},
|
||||||
{ key: 'property.composer', value: this.item.composer },
|
{ key: 'property.composer', value: this.item.composer },
|
||||||
{ key: 'property.year', value: this.item.year },
|
{ key: 'property.year', value: this.item.year },
|
||||||
{
|
{
|
||||||
|
handler: this.open_genre,
|
||||||
key: 'property.genre',
|
key: 'property.genre',
|
||||||
value: this.item.genre,
|
value: this.item.genre
|
||||||
handler: this.open_genre
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'property.position',
|
key: 'property.position',
|
||||||
@ -71,13 +70,14 @@ export default {
|
|||||||
{
|
{
|
||||||
key: 'property.quality',
|
key: 'property.quality',
|
||||||
value: this.$t('dialog.track.quality-value', {
|
value: this.$t('dialog.track.quality-value', {
|
||||||
format: this.item.type,
|
|
||||||
bitrate: this.item.bitrate,
|
bitrate: this.item.bitrate,
|
||||||
channels: this.$t('count.channels', this.item.channels),
|
channels: this.$t('count.channels', this.item.channels),
|
||||||
|
format: this.item.type,
|
||||||
samplerate: this.item.samplerate
|
samplerate: this.item.samplerate
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -46,8 +46,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
return [
|
return [
|
||||||
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' },
|
{ handler: this.cancel, icon: 'cancel', key: 'actions.cancel' },
|
||||||
{ key: 'actions.pair', handler: this.pair, icon: 'cellphone' }
|
{ handler: this.pair, icon: 'cellphone', key: 'actions.pair' }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
pairing() {
|
pairing() {
|
||||||
|
@ -22,23 +22,22 @@ export default {
|
|||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
return this.item.play_count > 0
|
return this.item.play_count > 0
|
||||||
? [{ key: 'actions.mark-as-new', handler: this.mark_new }]
|
? [{ handler: this.mark_new, key: 'actions.mark-as-new' }]
|
||||||
: [{ key: 'actions.mark-as-played', handler: this.mark_played }]
|
: [{ handler: this.mark_played, key: 'actions.mark-as-played' }]
|
||||||
},
|
},
|
||||||
playable() {
|
playable() {
|
||||||
return {
|
return {
|
||||||
name: this.item.title,
|
name: this.item.title,
|
||||||
uri: this.item.uri,
|
|
||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
|
handler: this.open_album,
|
||||||
key: 'property.album',
|
key: 'property.album',
|
||||||
value: this.item.album,
|
value: this.item.album
|
||||||
handler: this.open_album
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
handler: this.open_artist,
|
||||||
key: 'property.album-artist',
|
key: 'property.album-artist',
|
||||||
value: this.item.album_artist,
|
value: this.item.album_artist
|
||||||
handler: this.open_artist
|
|
||||||
},
|
},
|
||||||
{ key: 'property.composer', value: this.item.composer },
|
{ key: 'property.composer', value: this.item.composer },
|
||||||
{
|
{
|
||||||
@ -68,9 +67,9 @@ export default {
|
|||||||
value:
|
value:
|
||||||
this.item.data_kind !== 'spotify' &&
|
this.item.data_kind !== 'spotify' &&
|
||||||
this.$t('dialog.track.quality-value', {
|
this.$t('dialog.track.quality-value', {
|
||||||
format: this.item.type,
|
|
||||||
bitrate: this.item.bitrate,
|
bitrate: this.item.bitrate,
|
||||||
channels: this.$t('count.channels', this.item.channels),
|
channels: this.$t('count.channels', this.item.channels),
|
||||||
|
format: this.item.type,
|
||||||
samplerate: this.item.samplerate
|
samplerate: this.item.samplerate
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@ -86,7 +85,8 @@ export default {
|
|||||||
},
|
},
|
||||||
{ key: 'property.comment', value: this.item.comment },
|
{ key: 'property.comment', value: this.item.comment },
|
||||||
{ key: 'property.path', value: this.item.path }
|
{ key: 'property.path', value: this.item.path }
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -21,17 +21,16 @@ export default {
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
name: this.item.name,
|
name: this.item.name,
|
||||||
uri: this.item.uri,
|
|
||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
|
handler: this.open_album,
|
||||||
key: 'property.album',
|
key: 'property.album',
|
||||||
value: this.item.album.name,
|
value: this.item.album.name
|
||||||
handler: this.open_album
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
handler: this.open_artist,
|
||||||
key: 'property.album-artist',
|
key: 'property.album-artist',
|
||||||
value: this.item.artists[0]?.name,
|
value: this.item.artists[0]?.name
|
||||||
handler: this.open_artist
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'property.release-date',
|
key: 'property.release-date',
|
||||||
@ -46,7 +45,8 @@ export default {
|
|||||||
value: this.$filters.toTimecode(this.item.duration_ms)
|
value: this.$filters.toTimecode(this.item.duration_ms)
|
||||||
},
|
},
|
||||||
{ key: 'property.path', value: this.item.uri }
|
{ key: 'property.path', value: this.item.uri }
|
||||||
]
|
],
|
||||||
|
uri: this.item.uri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -67,13 +67,13 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
actions() {
|
actions() {
|
||||||
const actions = [
|
const actions = [
|
||||||
{ key: 'actions.cancel', handler: this.cancel, icon: 'cancel' }
|
{ handler: this.cancel, icon: 'cancel', key: 'actions.cancel' }
|
||||||
]
|
]
|
||||||
if (!this.libraryStore.updating) {
|
if (!this.libraryStore.updating) {
|
||||||
actions.push({
|
actions.push({
|
||||||
key: 'actions.rescan',
|
|
||||||
handler: this.analyse,
|
handler: this.analyse,
|
||||||
icon: 'check'
|
icon: 'check',
|
||||||
|
key: 'actions.rescan'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return actions
|
return actions
|
||||||
@ -86,16 +86,16 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
cancel() {
|
|
||||||
this.$emit('close')
|
|
||||||
this.libraryStore.update_dialog_scan_kind = ''
|
|
||||||
},
|
|
||||||
analyse() {
|
analyse() {
|
||||||
if (this.rescan_metadata) {
|
if (this.rescan_metadata) {
|
||||||
webapi.library_rescan(this.libraryStore.update_dialog_scan_kind)
|
webapi.library_rescan(this.libraryStore.update_dialog_scan_kind)
|
||||||
} else {
|
} else {
|
||||||
webapi.library_update(this.libraryStore.update_dialog_scan_kind)
|
webapi.library_update(this.libraryStore.update_dialog_scan_kind)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.$emit('close')
|
||||||
|
this.libraryStore.update_dialog_scan_kind = ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,8 +92,8 @@ export default {
|
|||||||
name: 'NavbarBottom',
|
name: 'NavbarBottom',
|
||||||
components: {
|
components: {
|
||||||
ControlLink,
|
ControlLink,
|
||||||
ControlOutputVolume,
|
|
||||||
ControlMainVolume,
|
ControlMainVolume,
|
||||||
|
ControlOutputVolume,
|
||||||
ControlPlayerBack,
|
ControlPlayerBack,
|
||||||
ControlPlayerConsume,
|
ControlPlayerConsume,
|
||||||
ControlPlayerForward,
|
ControlPlayerForward,
|
||||||
@ -116,11 +116,11 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
is_now_playing_page() {
|
|
||||||
return this.$route.name === 'now-playing'
|
|
||||||
},
|
|
||||||
current() {
|
current() {
|
||||||
return this.queueStore.current
|
return this.queueStore.current
|
||||||
|
},
|
||||||
|
is_now_playing_page() {
|
||||||
|
return this.$route.name === 'now-playing'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -81,83 +81,83 @@ export default {
|
|||||||
menus() {
|
menus() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
name: 'playlists',
|
|
||||||
key: 'navigation.playlists',
|
|
||||||
icon: 'music-box-multiple',
|
icon: 'music-box-multiple',
|
||||||
|
key: 'navigation.playlists',
|
||||||
|
name: 'playlists',
|
||||||
show: this.settingsStore.show_menu_item_playlists
|
show: this.settingsStore.show_menu_item_playlists
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'music',
|
|
||||||
key: 'navigation.music',
|
|
||||||
icon: 'music',
|
icon: 'music',
|
||||||
|
key: 'navigation.music',
|
||||||
|
name: 'music',
|
||||||
show: this.settingsStore.show_menu_item_music
|
show: this.settingsStore.show_menu_item_music
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'music-artists',
|
|
||||||
key: 'navigation.artists',
|
key: 'navigation.artists',
|
||||||
|
name: 'music-artists',
|
||||||
show: true,
|
show: true,
|
||||||
sub: true
|
sub: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'music-albums',
|
|
||||||
key: 'navigation.albums',
|
key: 'navigation.albums',
|
||||||
|
name: 'music-albums',
|
||||||
show: true,
|
show: true,
|
||||||
sub: true
|
sub: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'music-genres',
|
|
||||||
key: 'navigation.genres',
|
key: 'navigation.genres',
|
||||||
|
name: 'music-genres',
|
||||||
show: true,
|
show: true,
|
||||||
sub: true
|
sub: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'music-spotify',
|
|
||||||
key: 'navigation.spotify',
|
key: 'navigation.spotify',
|
||||||
|
name: 'music-spotify',
|
||||||
show: this.servicesStore.spotify.webapi_token_valid,
|
show: this.servicesStore.spotify.webapi_token_valid,
|
||||||
sub: true
|
sub: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'podcasts',
|
|
||||||
key: 'navigation.podcasts',
|
|
||||||
icon: 'microphone',
|
icon: 'microphone',
|
||||||
|
key: 'navigation.podcasts',
|
||||||
|
name: 'podcasts',
|
||||||
show: this.settingsStore.show_menu_item_podcasts
|
show: this.settingsStore.show_menu_item_podcasts
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'audiobooks',
|
|
||||||
key: 'navigation.audiobooks',
|
|
||||||
icon: 'book-open-variant',
|
icon: 'book-open-variant',
|
||||||
|
key: 'navigation.audiobooks',
|
||||||
|
name: 'audiobooks',
|
||||||
show: this.settingsStore.show_menu_item_audiobooks
|
show: this.settingsStore.show_menu_item_audiobooks
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'radio',
|
|
||||||
key: 'navigation.radio',
|
|
||||||
icon: 'radio',
|
icon: 'radio',
|
||||||
|
key: 'navigation.radio',
|
||||||
|
name: 'radio',
|
||||||
show: this.settingsStore.show_menu_item_radio
|
show: this.settingsStore.show_menu_item_radio
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'files',
|
|
||||||
key: 'navigation.files',
|
|
||||||
icon: 'folder-open',
|
icon: 'folder-open',
|
||||||
|
key: 'navigation.files',
|
||||||
|
name: 'files',
|
||||||
show: this.settingsStore.show_menu_item_files
|
show: this.settingsStore.show_menu_item_files
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: this.searchStore.search_source,
|
|
||||||
key: 'navigation.search',
|
|
||||||
icon: 'magnify',
|
icon: 'magnify',
|
||||||
|
key: 'navigation.search',
|
||||||
|
name: this.searchStore.search_source,
|
||||||
show: this.settingsStore.show_menu_item_search
|
show: this.settingsStore.show_menu_item_search
|
||||||
},
|
},
|
||||||
{ separator: true, show: true },
|
{ separator: true, show: true },
|
||||||
{
|
{
|
||||||
name: 'settings-webinterface',
|
|
||||||
key: 'navigation.settings',
|
key: 'navigation.settings',
|
||||||
|
name: 'settings-webinterface',
|
||||||
show: true
|
show: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'navigation.update-library',
|
|
||||||
action: this.open_update_dialog,
|
action: this.open_update_dialog,
|
||||||
|
key: 'navigation.update-library',
|
||||||
show: true
|
show: true
|
||||||
},
|
},
|
||||||
{ name: 'about', key: 'navigation.about', show: true }
|
{ key: 'navigation.about', name: 'about', show: true }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
zindex() {
|
zindex() {
|
||||||
|
@ -12,19 +12,19 @@ export default {
|
|||||||
links() {
|
links() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
to: { name: 'audiobooks-artists' },
|
|
||||||
icon: 'account-music',
|
icon: 'account-music',
|
||||||
key: 'page.audiobooks.tabs.authors'
|
key: 'page.audiobooks.tabs.authors',
|
||||||
|
to: { name: 'audiobooks-artists' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: { name: 'audiobooks-albums' },
|
|
||||||
icon: 'album',
|
icon: 'album',
|
||||||
key: 'page.audiobooks.tabs.audiobooks'
|
key: 'page.audiobooks.tabs.audiobooks',
|
||||||
|
to: { name: 'audiobooks-albums' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: { name: 'audiobooks-genres' },
|
|
||||||
icon: 'speaker',
|
icon: 'speaker',
|
||||||
key: 'page.audiobooks.tabs.genres'
|
key: 'page.audiobooks.tabs.genres',
|
||||||
|
to: { name: 'audiobooks-genres' }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -16,36 +16,36 @@ export default {
|
|||||||
links() {
|
links() {
|
||||||
const links = [
|
const links = [
|
||||||
{
|
{
|
||||||
to: { name: 'music-history' },
|
|
||||||
icon: 'history',
|
icon: 'history',
|
||||||
key: 'page.music.tabs.history'
|
key: 'page.music.tabs.history',
|
||||||
|
to: { name: 'music-history' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: { name: 'music-artists' },
|
|
||||||
icon: 'account-music',
|
icon: 'account-music',
|
||||||
key: 'page.music.tabs.artists'
|
key: 'page.music.tabs.artists',
|
||||||
|
to: { name: 'music-artists' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: { name: 'music-albums' },
|
|
||||||
icon: 'album',
|
icon: 'album',
|
||||||
key: 'page.music.tabs.albums'
|
key: 'page.music.tabs.albums',
|
||||||
|
to: { name: 'music-albums' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: { name: 'music-genres' },
|
|
||||||
icon: 'speaker',
|
icon: 'speaker',
|
||||||
key: 'page.music.tabs.genres'
|
key: 'page.music.tabs.genres',
|
||||||
|
to: { name: 'music-genres' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: { name: 'music-composers' },
|
|
||||||
icon: 'book-open-page-variant',
|
icon: 'book-open-page-variant',
|
||||||
key: 'page.music.tabs.composers'
|
key: 'page.music.tabs.composers',
|
||||||
|
to: { name: 'music-composers' }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
if (this.servicesStore.spotify.webapi_token_valid) {
|
if (this.servicesStore.spotify.webapi_token_valid) {
|
||||||
links.push({
|
links.push({
|
||||||
to: { name: 'music-spotify' },
|
|
||||||
icon: 'spotify',
|
icon: 'spotify',
|
||||||
key: 'page.music.tabs.spotify'
|
key: 'page.music.tabs.spotify',
|
||||||
|
to: { name: 'music-spotify' }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return links
|
return links
|
||||||
|
@ -39,11 +39,9 @@ import { useServicesStore } from '@/stores/services'
|
|||||||
export default {
|
export default {
|
||||||
name: 'TabsSearch',
|
name: 'TabsSearch',
|
||||||
emits: ['search-library', 'search-spotify'],
|
emits: ['search-library', 'search-spotify'],
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
return { servicesStore: useServicesStore() }
|
return { servicesStore: useServicesStore() }
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
spotify_enabled() {
|
spotify_enabled() {
|
||||||
return this.servicesStore.spotify.webapi_token_valid
|
return this.servicesStore.spotify.webapi_token_valid
|
||||||
|
@ -35,10 +35,9 @@ export const filters = {
|
|||||||
return this.toDuration(duration)
|
return this.toDuration(duration)
|
||||||
},
|
},
|
||||||
toRelativeDuration(value) {
|
toRelativeDuration(value) {
|
||||||
return DateTime.fromISO(value).toRelative({ unit, locale: locale.value })
|
return DateTime.fromISO(value).toRelative({ locale: locale.value, unit })
|
||||||
},
|
},
|
||||||
toTimecode(value) {
|
toTimecode(value) {
|
||||||
const format = value >= 3600000 ? 'h:mm:ss' : 'm:ss'
|
return Duration.fromMillis(value).toFormat('h:mm:ss').replace(/^0:/u, '')
|
||||||
return Duration.fromMillis(value).toFormat(format)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,6 +131,25 @@
|
|||||||
"spotify": "Spotify",
|
"spotify": "Spotify",
|
||||||
"update-library": "Bibliothek neu einlesen"
|
"update-library": "Bibliothek neu einlesen"
|
||||||
},
|
},
|
||||||
|
"options": {
|
||||||
|
"filter": {
|
||||||
|
"hide-singles": "Verbirgt Singles",
|
||||||
|
"hide-singles-help": "Wenn aktiv, blendet Singles und alles, was mit ihnen verbunden ist, aus.",
|
||||||
|
"hide-spotify": "Verbirgt Spotify-Inhalt",
|
||||||
|
"hide-spotify-help": "Wenn aktiv, blendet Inhalte aus, die von Spotify stammen.",
|
||||||
|
"title": "Filtern"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"artist-name": "Künstler › Name",
|
||||||
|
"artist-date": "Künstler › Erscheinungsdatum",
|
||||||
|
"name": "Namen",
|
||||||
|
"rating": "Bewertung",
|
||||||
|
"recently-added": "Kürzlich hinzugefügt",
|
||||||
|
"recently-released": "Kürzlich erschienen",
|
||||||
|
"release-date": "Erscheinungsdatum",
|
||||||
|
"title": "Sortieren"
|
||||||
|
}
|
||||||
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"about": {
|
"about": {
|
||||||
"built-with": "Oberfläche erstellt mit {bulma}, {mdi}, {vuejs}, {axios} und {others}.",
|
"built-with": "Oberfläche erstellt mit {bulma}, {mdi}, {vuejs}, {axios} und {others}.",
|
||||||
@ -141,49 +160,9 @@
|
|||||||
"version": "Version {version}"
|
"version": "Version {version}"
|
||||||
},
|
},
|
||||||
"albums": {
|
"albums": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "Nach Aktivierung werden keine Singles angezeigt",
|
|
||||||
"hide-singles-help": "Nach Aktivierung werden keine Singles und Alben angezeigt, die nur in Playlisten enthalten sind.",
|
|
||||||
"hide-spotify": "Verbirgt Spotify-Alben",
|
|
||||||
"hide-spotify-help": "Nach Aktivierung werden keine Alben angezeigt, die nur in der Spotify-Bibliothek enthalten sind.",
|
|
||||||
"title": "Filtern"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"artist-name": "Künstler › Name",
|
|
||||||
"artist-date": "Künstler › Erscheinungsdatum",
|
|
||||||
"name": "Name",
|
|
||||||
"recently-added": "Kürzlich hinzugefügt",
|
|
||||||
"recently-released": "Kürzlich erschienen",
|
|
||||||
"title": "Sortieren"
|
|
||||||
},
|
|
||||||
"title": "Alben"
|
"title": "Alben"
|
||||||
},
|
},
|
||||||
"artist": {
|
|
||||||
"filter": {
|
|
||||||
"hide-spotify": "Verbirgt Spotify-Inhalt",
|
|
||||||
"hide-spotify-help": "Nach Aktivierung wird kein Inhalt angezeigt, der nur in der Spotify-Bibliothek enthalten ist.",
|
|
||||||
"title": "Filtern"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "Name",
|
|
||||||
"rating": "Bewertung",
|
|
||||||
"release-date": "Erscheinungsdatum",
|
|
||||||
"title": "Sortieren"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"artists": {
|
"artists": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "Nach Aktivierung werden keine Singles angezeigt",
|
|
||||||
"hide-singles-help": "Nach Aktivierung werden keine Singles und Alben angezeigt, die nur in Playlisten enthalten sind.",
|
|
||||||
"hide-spotify": "Verbirgt Künstler auf Spotify",
|
|
||||||
"hide-spotify-help": "Nach Aktivierung werden keine Alben angezeigt, die nur in der Spotify-Bibliothek enthalten sind.",
|
|
||||||
"title": "Filtern"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "Namen",
|
|
||||||
"recently-added": "Kürzlich hinzugefügt",
|
|
||||||
"title": "Sortieren"
|
|
||||||
},
|
|
||||||
"title": "Künstler"
|
"title": "Künstler"
|
||||||
},
|
},
|
||||||
"audiobooks": {
|
"audiobooks": {
|
||||||
@ -199,26 +178,12 @@
|
|||||||
"genres": "Genres"
|
"genres": "Genres"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"composer": {
|
|
||||||
"sort": {
|
|
||||||
"name": "Name",
|
|
||||||
"rating": "Bewertung",
|
|
||||||
"title": "Sortieren"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"composers": {
|
"composers": {
|
||||||
"title": "Komponisten"
|
"title": "Komponisten"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"title": "Dateien"
|
"title": "Dateien"
|
||||||
},
|
},
|
||||||
"genre": {
|
|
||||||
"sort": {
|
|
||||||
"name": "Name",
|
|
||||||
"rating": "Bewertung",
|
|
||||||
"title": "Sortieren"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"genres": {
|
"genres": {
|
||||||
"title": "Genres"
|
"title": "Genres"
|
||||||
},
|
},
|
||||||
|
@ -131,6 +131,25 @@
|
|||||||
"spotify": "Spotify",
|
"spotify": "Spotify",
|
||||||
"update-library": "Update Library"
|
"update-library": "Update Library"
|
||||||
},
|
},
|
||||||
|
"options": {
|
||||||
|
"filter": {
|
||||||
|
"hide-singles": "Hide singles",
|
||||||
|
"hide-singles-help": "If active, hides singles and anything associated with them.",
|
||||||
|
"hide-spotify": "Hide Spotify content",
|
||||||
|
"hide-spotify-help": "If active, hides content from Spotify.",
|
||||||
|
"title": "Filter"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"artist-name": "Artist › Name",
|
||||||
|
"artist-date": "Artist › Release date",
|
||||||
|
"name": "Name",
|
||||||
|
"rating": "Rating",
|
||||||
|
"recently-added": "Recently added",
|
||||||
|
"recently-released": "Recently released",
|
||||||
|
"release-date": "Release date",
|
||||||
|
"title": "Sort"
|
||||||
|
}
|
||||||
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"about": {
|
"about": {
|
||||||
"built-with": "Web interface built with {bulma}, {mdi}, {vuejs}, {axios} and {others}.",
|
"built-with": "Web interface built with {bulma}, {mdi}, {vuejs}, {axios} and {others}.",
|
||||||
@ -141,49 +160,9 @@
|
|||||||
"version": "Version {version}"
|
"version": "Version {version}"
|
||||||
},
|
},
|
||||||
"albums": {
|
"albums": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "Hide singles",
|
|
||||||
"hide-singles-help": "If active, hides singles and albums with tracks that only appear in playlists.",
|
|
||||||
"hide-spotify": "Hide albums from Spotify",
|
|
||||||
"hide-spotify-help": "If active, hides albums that only appear in your Spotify library.",
|
|
||||||
"title": "Filter"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"artist-name": "Artist › Name",
|
|
||||||
"artist-date": "Artist › Release date",
|
|
||||||
"name": "Name",
|
|
||||||
"recently-added": "Recently added",
|
|
||||||
"recently-released": "Recently released",
|
|
||||||
"title": "Sort"
|
|
||||||
},
|
|
||||||
"title": "Albums"
|
"title": "Albums"
|
||||||
},
|
},
|
||||||
"artist": {
|
|
||||||
"filter": {
|
|
||||||
"hide-spotify": "Hide the content from Spotify",
|
|
||||||
"hide-spotify-help": "If active, hides the content only appearing in your Spotify library.",
|
|
||||||
"title": "Filter"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "Name",
|
|
||||||
"rating": "Rating",
|
|
||||||
"release-date": "Release date",
|
|
||||||
"title": "Sort"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"artists": {
|
"artists": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "Hide singles",
|
|
||||||
"hide-singles-help": "If active, hides artists that only appear on singles or playlists.",
|
|
||||||
"hide-spotify": "Hide artists from Spotify",
|
|
||||||
"hide-spotify-help": "If active, hides artists that only appear in your Spotify library.",
|
|
||||||
"title": "Filter"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "Name",
|
|
||||||
"recently-added": "Recently added",
|
|
||||||
"title": "Sort"
|
|
||||||
},
|
|
||||||
"title": "Artists"
|
"title": "Artists"
|
||||||
},
|
},
|
||||||
"audiobooks": {
|
"audiobooks": {
|
||||||
@ -199,26 +178,12 @@
|
|||||||
"genres": "Genres"
|
"genres": "Genres"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"composer": {
|
|
||||||
"sort": {
|
|
||||||
"name": "Name",
|
|
||||||
"rating": "Rating",
|
|
||||||
"title": "Sort"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"composers": {
|
"composers": {
|
||||||
"title": "Composers"
|
"title": "Composers"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"title": "Files"
|
"title": "Files"
|
||||||
},
|
},
|
||||||
"genre": {
|
|
||||||
"sort": {
|
|
||||||
"name": "Name",
|
|
||||||
"rating": "Rating",
|
|
||||||
"title": "Sort"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"genres": {
|
"genres": {
|
||||||
"title": "Genres"
|
"title": "Genres"
|
||||||
},
|
},
|
||||||
|
@ -131,6 +131,25 @@
|
|||||||
"spotify": "Spotify",
|
"spotify": "Spotify",
|
||||||
"update-library": "Actualiser la bibliothèque"
|
"update-library": "Actualiser la bibliothèque"
|
||||||
},
|
},
|
||||||
|
"options": {
|
||||||
|
"filter": {
|
||||||
|
"hide-singles": "Masquer les singles",
|
||||||
|
"hide-singles-help": "Si actif, masque les singles et tout ce qui leur est associé.",
|
||||||
|
"hide-spotify": "Masquer le contenu de Spotify",
|
||||||
|
"hide-spotify-help": "Si actif, masque le contenu qui provient de Spotify.",
|
||||||
|
"title": "Filtrer"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"artist-name": "Artiste › Nom",
|
||||||
|
"artist-date": "Artiste › Date de sortie",
|
||||||
|
"name": "Nom",
|
||||||
|
"rating": "Classement",
|
||||||
|
"recently-added": "Ajouts récents",
|
||||||
|
"recently-released": "Sorties récentes",
|
||||||
|
"release-date": "Date de sortie",
|
||||||
|
"title": "Trier"
|
||||||
|
}
|
||||||
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"about": {
|
"about": {
|
||||||
"built-with": "Interface utilisateur construite avec {bulma}, {mdi}, {vuejs}, {axios} et {others}.",
|
"built-with": "Interface utilisateur construite avec {bulma}, {mdi}, {vuejs}, {axios} et {others}.",
|
||||||
@ -141,49 +160,9 @@
|
|||||||
"version": "Version {version}"
|
"version": "Version {version}"
|
||||||
},
|
},
|
||||||
"albums": {
|
"albums": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "Masquer les singles",
|
|
||||||
"hide-singles-help": "Si actif, masque les singles et les albums dont les pistes n’apparaissent que dans les listes de lecture.",
|
|
||||||
"hide-spotify": "Masquer les albums de Spotify",
|
|
||||||
"hide-spotify-help": "Si actif, masque les albums qui n’apparaissent que dans votre bibliothèque Spotify.",
|
|
||||||
"title": "Filtrer"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"artist-name": "Artiste › Nom",
|
|
||||||
"artist-date": "Artiste › Date de sortie",
|
|
||||||
"name": "Nom",
|
|
||||||
"recently-added": "Ajouts récents",
|
|
||||||
"recently-released": "Sorties récentes",
|
|
||||||
"title": "Trier"
|
|
||||||
},
|
|
||||||
"title": "Albums"
|
"title": "Albums"
|
||||||
},
|
},
|
||||||
"artist": {
|
|
||||||
"filter": {
|
|
||||||
"hide-spotify": "Masquer le contenu de Spotify",
|
|
||||||
"hide-spotify-help": "Si actif, masque le contenu qui n’apparaît que dans votre bibliothèque Spotify.",
|
|
||||||
"title": "Filtrer"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "Nom",
|
|
||||||
"rating": "Classement",
|
|
||||||
"release-date": "Date de sortie",
|
|
||||||
"title": "Trier"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"artists": {
|
"artists": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "Masquer les singles",
|
|
||||||
"hide-singles-help": "Si actif, masque les artistes qui n’apparaissent que dans des singles ou des listes de lecture.",
|
|
||||||
"hide-spotify": "Masquer les artistes de Spotify",
|
|
||||||
"hide-spotify-help": "Si actif, masque les artistes qui n’apparaissent que dans votre bibliothèque Spotify.",
|
|
||||||
"title": "Filtrer"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "Nom",
|
|
||||||
"recently-added": "Ajouts récents",
|
|
||||||
"title": "Trier"
|
|
||||||
},
|
|
||||||
"title": "Artistes"
|
"title": "Artistes"
|
||||||
},
|
},
|
||||||
"audiobooks": {
|
"audiobooks": {
|
||||||
@ -199,26 +178,12 @@
|
|||||||
"genres": "Genres"
|
"genres": "Genres"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"composer": {
|
|
||||||
"sort": {
|
|
||||||
"name": "Nom",
|
|
||||||
"rating": "Classement",
|
|
||||||
"title": "Trier"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"composers": {
|
"composers": {
|
||||||
"title": "Compositeurs"
|
"title": "Compositeurs"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"title": "Fichiers"
|
"title": "Fichiers"
|
||||||
},
|
},
|
||||||
"genre": {
|
|
||||||
"sort": {
|
|
||||||
"name": "Nom",
|
|
||||||
"rating": "Classement",
|
|
||||||
"title": "Trier"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"genres": {
|
"genres": {
|
||||||
"title": "Genres"
|
"title": "Genres"
|
||||||
},
|
},
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
import { createI18n } from 'vue-i18n'
|
import { createI18n } from 'vue-i18n'
|
||||||
|
|
||||||
/*
|
|
||||||
* All i18n resources specified in the plugin `include` option can be loaded
|
|
||||||
* at once using the import syntax.
|
|
||||||
*/
|
|
||||||
import messages from '@intlify/unplugin-vue-i18n/messages'
|
import messages from '@intlify/unplugin-vue-i18n/messages'
|
||||||
|
|
||||||
export default createI18n({
|
export default createI18n({
|
||||||
|
@ -131,6 +131,25 @@
|
|||||||
"spotify": "Spotify",
|
"spotify": "Spotify",
|
||||||
"update-library": "更新资料库"
|
"update-library": "更新资料库"
|
||||||
},
|
},
|
||||||
|
"options": {
|
||||||
|
"filter": {
|
||||||
|
"hide-singles": "隐藏单曲",
|
||||||
|
"hide-singles-help": "如果处于活动状态,则隐藏单曲和与其关联的任何内容",
|
||||||
|
"hide-spotify": "隐藏来自Spotify的内容",
|
||||||
|
"hide-spotify-help": "如果处于活动状态,则隐藏 Spotify 中的内容",
|
||||||
|
"title": "专辑"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"artist-name": "艺人 › 名称",
|
||||||
|
"artist-date": "艺人 › 发行日期",
|
||||||
|
"name": "名称",
|
||||||
|
"rating": "评级",
|
||||||
|
"recently-added": "最近添加",
|
||||||
|
"recently-released": "最近发行",
|
||||||
|
"release-date": "发行日期",
|
||||||
|
"title": "分类"
|
||||||
|
}
|
||||||
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"about": {
|
"about": {
|
||||||
"built-with": "界面贡献者包括 {bulma},{mdi},{vuejs},{axios} 和 {others}",
|
"built-with": "界面贡献者包括 {bulma},{mdi},{vuejs},{axios} 和 {others}",
|
||||||
@ -141,49 +160,9 @@
|
|||||||
"version": "版本 {version}"
|
"version": "版本 {version}"
|
||||||
},
|
},
|
||||||
"albums": {
|
"albums": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "隐藏单曲",
|
|
||||||
"hide-singles-help": "如果激活,将隐藏仅在播放列表出现的单曲和专辑",
|
|
||||||
"hide-spotify": "隐藏来自Spotify的专辑",
|
|
||||||
"hide-spotify-help": "如果激活,将隐藏仅在Spotify资料库出现的专辑",
|
|
||||||
"title": "专辑"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"artist-name": "艺人 › 名称",
|
|
||||||
"artist-date": "艺人 › 发行日期",
|
|
||||||
"name": "名称",
|
|
||||||
"recently-added": "最近添加",
|
|
||||||
"recently-released": "最近发行",
|
|
||||||
"title": "分类"
|
|
||||||
},
|
|
||||||
"title": "张专辑"
|
"title": "张专辑"
|
||||||
},
|
},
|
||||||
"artist": {
|
|
||||||
"filter": {
|
|
||||||
"hide-spotify": "隐藏来自Spotify的内容",
|
|
||||||
"hide-spotify-help": "如果激活,将隐藏只出现在Spotify库中的内容",
|
|
||||||
"title": "专辑"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "名称",
|
|
||||||
"rating": "评级",
|
|
||||||
"release-date": "发行日期",
|
|
||||||
"title": "分类"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"artists": {
|
"artists": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "隐藏单曲",
|
|
||||||
"hide-singles-help": "如果激活,将隐藏仅在播放列表出现的单曲和专辑",
|
|
||||||
"hide-spotify": "隐藏来自Spotify的艺人",
|
|
||||||
"hide-spotify-help": "如果激活,将隐藏仅在Spotify资料库出现的专辑",
|
|
||||||
"title": "专辑"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "名称",
|
|
||||||
"recently-added": "最近添加",
|
|
||||||
"title": "分类"
|
|
||||||
},
|
|
||||||
"title": "艺人"
|
"title": "艺人"
|
||||||
},
|
},
|
||||||
"audiobooks": {
|
"audiobooks": {
|
||||||
@ -199,26 +178,12 @@
|
|||||||
"genres": "流派"
|
"genres": "流派"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"composer": {
|
|
||||||
"sort": {
|
|
||||||
"name": "名称",
|
|
||||||
"rating": "评级",
|
|
||||||
"title": "分类"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"composers": {
|
"composers": {
|
||||||
"title": "作曲家"
|
"title": "作曲家"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"title": "文件"
|
"title": "文件"
|
||||||
},
|
},
|
||||||
"genre": {
|
|
||||||
"sort": {
|
|
||||||
"name": "名称",
|
|
||||||
"rating": "评级",
|
|
||||||
"title": "分类"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"genres": {
|
"genres": {
|
||||||
"title": "流派"
|
"title": "流派"
|
||||||
},
|
},
|
||||||
|
@ -131,6 +131,25 @@
|
|||||||
"spotify": "Spotify",
|
"spotify": "Spotify",
|
||||||
"update-library": "更新資料庫"
|
"update-library": "更新資料庫"
|
||||||
},
|
},
|
||||||
|
"options": {
|
||||||
|
"filter": {
|
||||||
|
"hide-singles": "隱藏單曲",
|
||||||
|
"hide-singles-help": "如果處於活動狀態,則隱藏單曲和與其關聯的任何內容",
|
||||||
|
"hide-spotify": "隱藏來自Spotify的內容",
|
||||||
|
"hide-spotify-help": "如果處於活動狀態,則隱藏 Spotify 中的內容",
|
||||||
|
"title": "篩選"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"artist-name": "藝人 › 名稱",
|
||||||
|
"artist-date": "藝人 › 發行日期",
|
||||||
|
"name": "名稱",
|
||||||
|
"rating": "評級",
|
||||||
|
"recently-added": "最近新增",
|
||||||
|
"recently-released": "最近發行",
|
||||||
|
"release-date": "發行日期",
|
||||||
|
"title": "分類"
|
||||||
|
}
|
||||||
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"about": {
|
"about": {
|
||||||
"built-with": "界面貢獻者包括 {bulma},{mdi},{vuejs},{axios} 和 {others}",
|
"built-with": "界面貢獻者包括 {bulma},{mdi},{vuejs},{axios} 和 {others}",
|
||||||
@ -141,49 +160,9 @@
|
|||||||
"version": "版本 {version}"
|
"version": "版本 {version}"
|
||||||
},
|
},
|
||||||
"albums": {
|
"albums": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "隱藏單曲",
|
|
||||||
"hide-singles-help": "如果啓用,將隱藏僅在播放列表出現的單曲和專輯",
|
|
||||||
"hide-spotify": "隱藏來自Spotify的專輯",
|
|
||||||
"hide-spotify-help": "如果啓用,將隱藏僅在Spotify資料庫出現的專輯",
|
|
||||||
"title": "篩選"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"artist-name": "藝人 › 名稱",
|
|
||||||
"artist-date": "藝人 › 發行日期",
|
|
||||||
"name": "名稱",
|
|
||||||
"recently-added": "最近新增",
|
|
||||||
"recently-released": "最近發行",
|
|
||||||
"title": "分類"
|
|
||||||
},
|
|
||||||
"title": "專輯"
|
"title": "專輯"
|
||||||
},
|
},
|
||||||
"artist": {
|
|
||||||
"filter": {
|
|
||||||
"hide-spotify": "隱藏來自Spotify的內容",
|
|
||||||
"hide-spotify-help": "如果啓用,將隱藏只出現在Spotify庫中的內容",
|
|
||||||
"title": "篩選"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "名稱",
|
|
||||||
"rating": "評級",
|
|
||||||
"release-date": "發行日期",
|
|
||||||
"title": "分類"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"artists": {
|
"artists": {
|
||||||
"filter": {
|
|
||||||
"hide-singles": "隱藏單曲",
|
|
||||||
"hide-singles-help": "如果啓用,將隱藏僅在播放列表出現的單曲和專輯",
|
|
||||||
"hide-spotify": "隱藏來自Spotify的藝人",
|
|
||||||
"hide-spotify-help": "如果啓用,將隱藏僅在Spotify資料庫出現的專輯",
|
|
||||||
"title": "篩選"
|
|
||||||
},
|
|
||||||
"sort": {
|
|
||||||
"name": "名稱",
|
|
||||||
"recently-added": "最近新增",
|
|
||||||
"title": "分類"
|
|
||||||
},
|
|
||||||
"title": "藝人"
|
"title": "藝人"
|
||||||
},
|
},
|
||||||
"audiobooks": {
|
"audiobooks": {
|
||||||
@ -199,26 +178,12 @@
|
|||||||
"genres": "音樂類型"
|
"genres": "音樂類型"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"composer": {
|
|
||||||
"sort": {
|
|
||||||
"name": "名稱",
|
|
||||||
"rating": "評級",
|
|
||||||
"title": "分類"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"composers": {
|
"composers": {
|
||||||
"title": "作曲家"
|
"title": "作曲家"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"title": "文件"
|
"title": "文件"
|
||||||
},
|
},
|
||||||
"genre": {
|
|
||||||
"sort": {
|
|
||||||
"name": "名稱",
|
|
||||||
"rating": "評級",
|
|
||||||
"title": "分類"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"genres": {
|
"genres": {
|
||||||
"title": "音樂類型"
|
"title": "音樂類型"
|
||||||
},
|
},
|
||||||
|
@ -126,14 +126,14 @@ export default {
|
|||||||
value: this.$filters.toDuration(this.libraryStore.db_playtime)
|
value: this.$filters.toDuration(this.libraryStore.db_playtime)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
alternate: this.$filters.toDateTime(this.libraryStore.updated_at),
|
||||||
key: 'property.updated',
|
key: 'property.updated',
|
||||||
value: this.$filters.toRelativeDuration(this.libraryStore.updated_at),
|
value: this.$filters.toRelativeDuration(this.libraryStore.updated_at)
|
||||||
alternate: this.$filters.toDateTime(this.libraryStore.updated_at)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
alternate: this.$filters.toDateTime(this.libraryStore.started_at),
|
||||||
key: 'property.uptime',
|
key: 'property.uptime',
|
||||||
value: this.$filters.toDurationToNow(this.libraryStore.started_at),
|
value: this.$filters.toDurationToNow(this.libraryStore.started_at)
|
||||||
alternate: this.$filters.toDateTime(this.libraryStore.started_at)
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,14 @@
|
|||||||
<div class="column">
|
<div class="column">
|
||||||
<div
|
<div
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.albums.filter.title')"
|
v-text="$t('options.filter.title')"
|
||||||
/>
|
/>
|
||||||
<control-switch v-model="uiStore.hide_singles">
|
<control-switch v-model="uiStore.hide_singles">
|
||||||
<template #label>
|
<template #label>
|
||||||
<span v-text="$t('page.albums.filter.hide-singles')" />
|
<span v-text="$t('options.filter.hide-singles')" />
|
||||||
</template>
|
</template>
|
||||||
<template #help>
|
<template #help>
|
||||||
<span v-text="$t('page.albums.filter.hide-singles-help')" />
|
<span v-text="$t('options.filter.hide-singles-help')" />
|
||||||
</template>
|
</template>
|
||||||
</control-switch>
|
</control-switch>
|
||||||
<control-switch
|
<control-switch
|
||||||
@ -23,17 +23,17 @@
|
|||||||
v-model="uiStore.hide_spotify"
|
v-model="uiStore.hide_spotify"
|
||||||
>
|
>
|
||||||
<template #label>
|
<template #label>
|
||||||
<span v-text="$t('page.albums.filter.hide-spotify')" />
|
<span v-text="$t('options.filter.hide-spotify')" />
|
||||||
</template>
|
</template>
|
||||||
<template #help>
|
<template #help>
|
||||||
<span v-text="$t('page.albums.filter.hide-spotify-help')" />
|
<span v-text="$t('options.filter.hide-spotify-help')" />
|
||||||
</template>
|
</template>
|
||||||
</control-switch>
|
</control-switch>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div
|
<div
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.albums.sort.title')"
|
v-text="$t('options.sort.title')"
|
||||||
/>
|
/>
|
||||||
<control-dropdown
|
<control-dropdown
|
||||||
v-model:value="uiStore.albums_sort"
|
v-model:value="uiStore.albums_sort"
|
||||||
@ -91,7 +91,7 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
return { uiStore: useUIStore(), servicesStore: useServicesStore() }
|
return { servicesStore: useServicesStore(), uiStore: useUIStore() }
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -113,12 +113,12 @@ export default {
|
|||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
name: this.$t('page.albums.sort.name'),
|
name: this.$t('options.sort.name'),
|
||||||
options: { index: { field: 'name_sort', type: String } }
|
options: { index: { field: 'name_sort', type: String } }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
name: this.$t('page.albums.sort.recently-added'),
|
name: this.$t('options.sort.recently-added'),
|
||||||
options: {
|
options: {
|
||||||
criteria: [{ field: 'time_added', order: -1, type: Date }],
|
criteria: [{ field: 'time_added', order: -1, type: Date }],
|
||||||
index: { field: 'time_added', type: Date }
|
index: { field: 'time_added', type: Date }
|
||||||
@ -126,7 +126,7 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 3,
|
id: 3,
|
||||||
name: this.$t('page.albums.sort.recently-released'),
|
name: this.$t('options.sort.recently-released'),
|
||||||
options: {
|
options: {
|
||||||
criteria: [{ field: 'date_released', order: -1, type: Date }],
|
criteria: [{ field: 'date_released', order: -1, type: Date }],
|
||||||
index: { field: 'date_released', type: Date }
|
index: { field: 'date_released', type: Date }
|
||||||
@ -134,7 +134,7 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 4,
|
id: 4,
|
||||||
name: this.$t('page.albums.sort.artist-name'),
|
name: this.$t('options.sort.artist-name'),
|
||||||
options: {
|
options: {
|
||||||
criteria: [
|
criteria: [
|
||||||
{ field: 'artist', type: String },
|
{ field: 'artist', type: String },
|
||||||
@ -145,7 +145,7 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 5,
|
id: 5,
|
||||||
name: this.$t('page.albums.sort.artist-date'),
|
name: this.$t('options.sort.artist-date'),
|
||||||
options: {
|
options: {
|
||||||
criteria: [
|
criteria: [
|
||||||
{ field: 'artist', type: String },
|
{ field: 'artist', type: String },
|
||||||
@ -158,8 +158,8 @@ export default {
|
|||||||
},
|
},
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.albums.title'),
|
subtitle: [{ count: this.albums.count, key: 'count.albums' }],
|
||||||
subtitle: [{ key: 'count.albums', count: this.albums.count }]
|
title: this.$t('page.albums.title')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
spotify_enabled() {
|
spotify_enabled() {
|
||||||
|
@ -133,15 +133,15 @@ export default {
|
|||||||
},
|
},
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.artist.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{ key: 'count.albums', count: this.albums.count },
|
{ count: this.albums.count, key: 'count.albums' },
|
||||||
{
|
{
|
||||||
|
count: this.track_count,
|
||||||
handler: this.open_tracks,
|
handler: this.open_tracks,
|
||||||
key: 'count.tracks',
|
key: 'count.tracks'
|
||||||
count: this.track_count
|
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
title: this.artist.name
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
spotify_enabled() {
|
spotify_enabled() {
|
||||||
|
@ -105,8 +105,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('artist.name'),
|
subtitle: [{ count: this.total, key: 'count.albums' }],
|
||||||
subtitle: [{ key: 'count.albums', count: this.total }]
|
title: this.$t('artist.name')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -7,24 +7,24 @@
|
|||||||
<div class="column">
|
<div class="column">
|
||||||
<p
|
<p
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.artist.filter.title')"
|
v-text="$t('options.filter.title')"
|
||||||
/>
|
/>
|
||||||
<control-switch
|
<control-switch
|
||||||
v-if="spotify_enabled"
|
v-if="spotify_enabled"
|
||||||
v-model="uiStore.hide_spotify"
|
v-model="uiStore.hide_spotify"
|
||||||
>
|
>
|
||||||
<template #label>
|
<template #label>
|
||||||
<span v-text="$t('page.artist.filter.hide-spotify')" />
|
<span v-text="$t('options.filter.hide-spotify')" />
|
||||||
</template>
|
</template>
|
||||||
<template #help>
|
<template #help>
|
||||||
<span v-text="$t('page.artist.filter.hide-spotify-help')" />
|
<span v-text="$t('options.filter.hide-spotify-help')" />
|
||||||
</template>
|
</template>
|
||||||
</control-switch>
|
</control-switch>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<p
|
<p
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.artist.sort.title')"
|
v-text="$t('options.sort.title')"
|
||||||
/>
|
/>
|
||||||
<control-dropdown
|
<control-dropdown
|
||||||
v-model:value="uiStore.artist_tracks_sort"
|
v-model:value="uiStore.artist_tracks_sort"
|
||||||
@ -122,12 +122,12 @@ export default {
|
|||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
name: this.$t('page.artist.sort.name'),
|
name: this.$t('options.sort.name'),
|
||||||
options: { index: { field: 'title_sort', type: String } }
|
options: { index: { field: 'title_sort', type: String } }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
name: this.$t('page.artist.sort.rating'),
|
name: this.$t('options.sort.rating'),
|
||||||
options: {
|
options: {
|
||||||
criteria: [{ field: 'rating', order: -1, type: Number }],
|
criteria: [{ field: 'rating', order: -1, type: Number }],
|
||||||
index: { field: 'rating', type: 'Digits' }
|
index: { field: 'rating', type: 'Digits' }
|
||||||
@ -137,15 +137,15 @@ export default {
|
|||||||
},
|
},
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.artist.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{
|
{
|
||||||
|
count: this.album_count,
|
||||||
handler: this.openArtist,
|
handler: this.openArtist,
|
||||||
key: 'count.albums',
|
key: 'count.albums'
|
||||||
count: this.album_count
|
|
||||||
},
|
},
|
||||||
{ key: 'count.tracks', count: this.tracks.count }
|
{ count: this.tracks.count, key: 'count.tracks' }
|
||||||
]
|
],
|
||||||
|
title: this.artist.name
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
spotify_enabled() {
|
spotify_enabled() {
|
||||||
|
@ -8,23 +8,23 @@
|
|||||||
<div class="column">
|
<div class="column">
|
||||||
<div
|
<div
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.artists.filter.title')"
|
v-text="$t('options.filter.title')"
|
||||||
/>
|
/>
|
||||||
<control-switch v-model="uiStore.hide_singles">
|
<control-switch v-model="uiStore.hide_singles">
|
||||||
<template #label>
|
<template #label>
|
||||||
<span v-text="$t('page.artists.filter.hide-singles')" />
|
<span v-text="$t('options.filter.hide-singles')" />
|
||||||
</template>
|
</template>
|
||||||
<template #help>
|
<template #help>
|
||||||
<span v-text="$t('page.artists.filter.hide-singles-help')" />
|
<span v-text="$t('options.filter.hide-singles-help')" />
|
||||||
</template>
|
</template>
|
||||||
</control-switch>
|
</control-switch>
|
||||||
<div v-if="spotify_enabled" class="field">
|
<div v-if="spotify_enabled" class="field">
|
||||||
<control-switch v-model="uiStore.hide_spotify">
|
<control-switch v-model="uiStore.hide_spotify">
|
||||||
<template #label>
|
<template #label>
|
||||||
<span v-text="$t('page.artists.filter.hide-spotify')" />
|
<span v-text="$t('options.filter.hide-spotify')" />
|
||||||
</template>
|
</template>
|
||||||
<template #help>
|
<template #help>
|
||||||
<span v-text="$t('page.artists.filter.hide-spotify-help')" />
|
<span v-text="$t('options.filter.hide-spotify-help')" />
|
||||||
</template>
|
</template>
|
||||||
</control-switch>
|
</control-switch>
|
||||||
</div>
|
</div>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
<div class="column">
|
<div class="column">
|
||||||
<div
|
<div
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.artists.sort.title')"
|
v-text="$t('options.sort.title')"
|
||||||
/>
|
/>
|
||||||
<control-dropdown
|
<control-dropdown
|
||||||
v-model:value="uiStore.artists_sort"
|
v-model:value="uiStore.artists_sort"
|
||||||
@ -114,12 +114,12 @@ export default {
|
|||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
name: this.$t('page.artists.sort.name'),
|
name: this.$t('options.sort.name'),
|
||||||
options: { index: { field: 'name_sort', type: String } }
|
options: { index: { field: 'name_sort', type: String } }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
name: this.$t('page.artists.sort.recently-added'),
|
name: this.$t('options.sort.recently-added'),
|
||||||
options: {
|
options: {
|
||||||
criteria: [{ field: 'time_added', order: -1, type: Date }],
|
criteria: [{ field: 'time_added', order: -1, type: Date }],
|
||||||
index: { field: 'time_added', type: Date }
|
index: { field: 'time_added', type: Date }
|
||||||
@ -129,8 +129,8 @@ export default {
|
|||||||
},
|
},
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.artists.title'),
|
subtitle: [{ count: this.artists.count, key: 'count.artists' }],
|
||||||
subtitle: [{ key: 'count.artists', count: this.artists.count }]
|
title: this.$t('page.artists.title')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
spotify_enabled() {
|
spotify_enabled() {
|
||||||
|
@ -39,10 +39,10 @@ export default {
|
|||||||
name: 'PageAudiobooksAlbums',
|
name: 'PageAudiobooksAlbums',
|
||||||
components: {
|
components: {
|
||||||
ContentWithHeading,
|
ContentWithHeading,
|
||||||
|
HeadingTitle,
|
||||||
IndexButtonList,
|
IndexButtonList,
|
||||||
ListAlbums,
|
ListAlbums,
|
||||||
TabsAudiobooks,
|
TabsAudiobooks
|
||||||
HeadingTitle
|
|
||||||
},
|
},
|
||||||
beforeRouteEnter(to, from, next) {
|
beforeRouteEnter(to, from, next) {
|
||||||
dataObject.load(to).then((response) => {
|
dataObject.load(to).then((response) => {
|
||||||
@ -57,8 +57,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.audiobooks.albums.title'),
|
subtitle: [{ count: this.albums.count, key: 'count.audiobooks' }],
|
||||||
subtitle: [{ key: 'count.audiobooks', count: this.albums.count }]
|
title: this.$t('page.audiobooks.albums.title')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,10 +75,10 @@ export default {
|
|||||||
heading() {
|
heading() {
|
||||||
if (this.artist.name) {
|
if (this.artist.name) {
|
||||||
return {
|
return {
|
||||||
title: this.artist.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{ key: 'count.audiobooks', count: this.artist.album_count }
|
{ count: this.artist.album_count, key: 'count.audiobooks' }
|
||||||
]
|
],
|
||||||
|
title: this.artist.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
|
@ -57,8 +57,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.audiobooks.artists.title'),
|
subtitle: [{ count: this.artists.count, key: 'count.authors' }],
|
||||||
subtitle: [{ key: 'count.authors', count: this.artists.count }]
|
title: this.$t('page.audiobooks.artists.title')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,8 +57,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.genres.title'),
|
subtitle: [{ count: this.genres.total, key: 'count.genres' }],
|
||||||
subtitle: [{ key: 'count.genres', count: this.genres.total }]
|
title: this.$t('page.genres.title')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,15 +74,15 @@ export default {
|
|||||||
heading() {
|
heading() {
|
||||||
if (this.composer.name) {
|
if (this.composer.name) {
|
||||||
return {
|
return {
|
||||||
title: this.composer.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{ key: 'count.albums', count: this.composer.album_count },
|
{ count: this.composer.album_count, key: 'count.albums' },
|
||||||
{
|
{
|
||||||
|
count: this.composer.track_count,
|
||||||
handler: this.open_tracks,
|
handler: this.open_tracks,
|
||||||
key: 'count.tracks',
|
key: 'count.tracks'
|
||||||
count: this.composer.track_count
|
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
title: this.composer.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<div class="column">
|
<div class="column">
|
||||||
<div
|
<div
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.artist.sort.title')"
|
v-text="$t('options.sort.title')"
|
||||||
/>
|
/>
|
||||||
<control-dropdown
|
<control-dropdown
|
||||||
v-model:value="uiStore.composer_tracks_sort"
|
v-model:value="uiStore.composer_tracks_sort"
|
||||||
@ -94,18 +94,35 @@ export default {
|
|||||||
expression() {
|
expression() {
|
||||||
return `composer is "${this.composer.name}" and media_kind is music`
|
return `composer is "${this.composer.name}" and media_kind is music`
|
||||||
},
|
},
|
||||||
|
groupings() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: this.$t('options.sort.name'),
|
||||||
|
options: { index: { field: 'title_sort', type: String } }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name: this.$t('options.sort.rating'),
|
||||||
|
options: {
|
||||||
|
criteria: [{ field: 'rating', order: -1, type: Number }],
|
||||||
|
index: { field: 'rating', type: 'Digits' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
heading() {
|
heading() {
|
||||||
if (this.composer.name) {
|
if (this.composer.name) {
|
||||||
return {
|
return {
|
||||||
title: this.composer.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{
|
{
|
||||||
|
count: this.composer.album_count,
|
||||||
handler: this.open_albums,
|
handler: this.open_albums,
|
||||||
key: 'count.albums',
|
key: 'count.albums'
|
||||||
count: this.composer.album_count
|
|
||||||
},
|
},
|
||||||
{ key: 'count.tracks', count: this.composer.track_count }
|
{ count: this.composer.track_count, key: 'count.tracks' }
|
||||||
]
|
],
|
||||||
|
title: this.composer.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
@ -118,23 +135,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
groupings() {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
name: this.$t('page.composer.sort.name'),
|
|
||||||
options: { index: { field: 'title_sort', type: String } }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
name: this.$t('page.composer.sort.rating'),
|
|
||||||
options: {
|
|
||||||
criteria: [{ field: 'rating', order: -1, type: Number }],
|
|
||||||
index: { field: 'rating', type: 'Digits' }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
open_albums() {
|
open_albums() {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
name: 'music-composer-albums',
|
name: 'music-composer-albums',
|
||||||
|
@ -57,8 +57,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.composers.title'),
|
subtitle: [{ count: this.composers.total, key: 'count.composers' }],
|
||||||
subtitle: [{ key: 'count.composers', count: this.composers.total }]
|
title: this.$t('page.composers.title')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,15 +80,15 @@ export default {
|
|||||||
heading() {
|
heading() {
|
||||||
if (this.genre.name) {
|
if (this.genre.name) {
|
||||||
return {
|
return {
|
||||||
title: this.genre.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{ key: 'count.albums', count: this.genre.album_count },
|
{ count: this.genre.album_count, key: 'count.albums' },
|
||||||
{
|
{
|
||||||
|
count: this.genre.track_count,
|
||||||
handler: this.open_tracks,
|
handler: this.open_tracks,
|
||||||
key: 'count.tracks',
|
key: 'count.tracks'
|
||||||
count: this.genre.track_count
|
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
title: this.genre.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<div class="column">
|
<div class="column">
|
||||||
<div
|
<div
|
||||||
class="is-size-7 is-uppercase"
|
class="is-size-7 is-uppercase"
|
||||||
v-text="$t('page.genre.sort.title')"
|
v-text="$t('options.sort.title')"
|
||||||
/>
|
/>
|
||||||
<control-dropdown
|
<control-dropdown
|
||||||
v-model:value="uiStore.genre_tracks_sort"
|
v-model:value="uiStore.genre_tracks_sort"
|
||||||
@ -100,12 +100,12 @@ export default {
|
|||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
name: this.$t('page.genre.sort.name'),
|
name: this.$t('options.sort.name'),
|
||||||
options: { index: { field: 'title_sort', type: String } }
|
options: { index: { field: 'title_sort', type: String } }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
name: this.$t('page.genre.sort.rating'),
|
name: this.$t('options.sort.rating'),
|
||||||
options: {
|
options: {
|
||||||
criteria: [{ field: 'rating', order: -1, type: Number }],
|
criteria: [{ field: 'rating', order: -1, type: Number }],
|
||||||
index: { field: 'rating', type: 'Digits' }
|
index: { field: 'rating', type: 'Digits' }
|
||||||
@ -116,15 +116,15 @@ export default {
|
|||||||
heading() {
|
heading() {
|
||||||
if (this.genre.name) {
|
if (this.genre.name) {
|
||||||
return {
|
return {
|
||||||
title: this.genre.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{
|
{
|
||||||
|
count: this.genre.album_count,
|
||||||
handler: this.openGenre,
|
handler: this.openGenre,
|
||||||
key: 'count.albums',
|
key: 'count.albums'
|
||||||
count: this.genre.album_count
|
|
||||||
},
|
},
|
||||||
{ key: 'count.tracks', count: this.genre.track_count }
|
{ count: this.genre.track_count, key: 'count.tracks' }
|
||||||
]
|
],
|
||||||
|
title: this.genre.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
|
@ -57,8 +57,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.genres.title'),
|
subtitle: [{ count: this.genres.total, key: 'count.genres' }],
|
||||||
subtitle: [{ key: 'count.genres', count: this.genres.total }]
|
title: this.$t('page.genres.title')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,8 +89,8 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
albums: [],
|
albums: [],
|
||||||
tracks: { items: [] },
|
selected_track: {},
|
||||||
selected_track: {}
|
tracks: { items: [] }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,8 +88,8 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
playlists: [],
|
albums: [],
|
||||||
albums: []
|
playlists: []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,8 +67,8 @@ const INTERVAL = 1000
|
|||||||
export default {
|
export default {
|
||||||
name: 'PageNowPlaying',
|
name: 'PageNowPlaying',
|
||||||
components: {
|
components: {
|
||||||
ControlSlider,
|
|
||||||
ControlImage,
|
ControlImage,
|
||||||
|
ControlSlider,
|
||||||
LyricsPane,
|
LyricsPane,
|
||||||
ModalDialogQueueItem
|
ModalDialogQueueItem
|
||||||
},
|
},
|
||||||
|
@ -34,7 +34,7 @@ const dataObject = {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'PagePlaylistFolder',
|
name: 'PagePlaylistFolder',
|
||||||
components: { ContentWithHeading, ListPlaylists, HeadingTitle },
|
components: { ContentWithHeading, HeadingTitle, ListPlaylists },
|
||||||
beforeRouteEnter(to, from, next) {
|
beforeRouteEnter(to, from, next) {
|
||||||
dataObject.load(to).then((response) => {
|
dataObject.load(to).then((response) => {
|
||||||
next((vm) => dataObject.set(vm, response))
|
next((vm) => dataObject.set(vm, response))
|
||||||
@ -60,11 +60,11 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
|
subtitle: [{ count: this.playlists.count, key: 'count.playlists' }],
|
||||||
title:
|
title:
|
||||||
this.playlists.count === 0
|
this.playlists.count === 0
|
||||||
? this.$t('page.playlists.title')
|
? this.$t('page.playlists.title')
|
||||||
: this.playlist.name,
|
: this.playlist.name
|
||||||
subtitle: [{ key: 'count.playlists', count: this.playlists.count }]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
playlists() {
|
playlists() {
|
||||||
|
@ -76,8 +76,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.playlist.name,
|
subtitle: [{ count: this.tracks.count, key: 'count.tracks' }],
|
||||||
subtitle: [{ key: 'count.tracks', count: this.tracks.count }]
|
title: this.playlist.name
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
uris() {
|
uris() {
|
||||||
|
@ -81,9 +81,9 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
ContentWithHeading,
|
ContentWithHeading,
|
||||||
ControlButton,
|
ControlButton,
|
||||||
|
HeadingTitle,
|
||||||
ListTracksSpotify,
|
ListTracksSpotify,
|
||||||
ModalDialogPlaylistSpotify,
|
ModalDialogPlaylistSpotify,
|
||||||
HeadingTitle,
|
|
||||||
VueEternalLoading
|
VueEternalLoading
|
||||||
},
|
},
|
||||||
beforeRouteEnter(to, from, next) {
|
beforeRouteEnter(to, from, next) {
|
||||||
@ -106,10 +106,10 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.playlist.name,
|
|
||||||
subtitle: [
|
subtitle: [
|
||||||
{ key: 'count.playlists', count: this.playlist.tracks.total }
|
{ count: this.playlist.tracks.total, key: 'count.playlists' }
|
||||||
]
|
],
|
||||||
|
title: this.playlist.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -82,7 +82,6 @@ const dataObject = {
|
|||||||
webapi.library_podcast_episodes(to.params.id)
|
webapi.library_podcast_episodes(to.params.id)
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
|
|
||||||
set(vm, response) {
|
set(vm, response) {
|
||||||
vm.album = response[0].data
|
vm.album = response[0].data
|
||||||
vm.tracks = new GroupedList(response[1].data.tracks)
|
vm.tracks = new GroupedList(response[1].data.tracks)
|
||||||
@ -99,13 +98,11 @@ export default {
|
|||||||
ModalDialog,
|
ModalDialog,
|
||||||
ModalDialogAlbum
|
ModalDialogAlbum
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeRouteEnter(to, from, next) {
|
beforeRouteEnter(to, from, next) {
|
||||||
dataObject.load(to).then((response) => {
|
dataObject.load(to).then((response) => {
|
||||||
next((vm) => dataObject.set(vm, response))
|
next((vm) => dataObject.set(vm, response))
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
album: {},
|
album: {},
|
||||||
@ -119,14 +116,14 @@ export default {
|
|||||||
actions() {
|
actions() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
key: this.$t('page.podcast.cancel'),
|
|
||||||
handler: 'cancel',
|
handler: 'cancel',
|
||||||
icon: 'cancel'
|
icon: 'cancel',
|
||||||
|
key: this.$t('page.podcast.cancel')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: this.$t('page.podcast.remove'),
|
|
||||||
handler: 'remove',
|
handler: 'remove',
|
||||||
icon: 'delete'
|
icon: 'delete',
|
||||||
|
key: this.$t('page.podcast.remove')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -104,16 +104,16 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
albums: [],
|
albums: [],
|
||||||
tracks: { items: [] },
|
show_url_modal: false,
|
||||||
show_url_modal: false
|
tracks: { items: [] }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
if (this.albums.total) {
|
if (this.albums.total) {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.podcasts.title'),
|
subtitle: [{ count: this.albums.count, key: 'count.podcasts' }],
|
||||||
subtitle: [{ key: 'count.podcasts', count: this.albums.count }]
|
title: this.$t('page.podcasts.title')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
|
@ -114,11 +114,11 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
ContentWithHeading,
|
ContentWithHeading,
|
||||||
ControlButton,
|
ControlButton,
|
||||||
|
HeadingTitle,
|
||||||
ListItemQueueItem,
|
ListItemQueueItem,
|
||||||
ModalDialogAddStream,
|
ModalDialogAddStream,
|
||||||
ModalDialogPlaylistSave,
|
ModalDialogPlaylistSave,
|
||||||
ModalDialogQueueItem,
|
ModalDialogQueueItem,
|
||||||
HeadingTitle,
|
|
||||||
draggable
|
draggable
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
@ -144,8 +144,8 @@ export default {
|
|||||||
},
|
},
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.queue.title'),
|
subtitle: [{ count: this.queue.count, key: 'count.tracks' }],
|
||||||
subtitle: [{ key: 'count.tracks', count: this.queue.count }]
|
title: this.$t('page.queue.title')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
is_queue_save_allowed() {
|
is_queue_save_allowed() {
|
||||||
@ -154,6 +154,9 @@ export default {
|
|||||||
this.configurationStore.default_playlist_directory
|
this.configurationStore.default_playlist_directory
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
player() {
|
||||||
|
return this.playerStore
|
||||||
|
},
|
||||||
queue() {
|
queue() {
|
||||||
return this.queueStore
|
return this.queueStore
|
||||||
},
|
},
|
||||||
@ -164,9 +167,6 @@ export default {
|
|||||||
set() {
|
set() {
|
||||||
/* Do nothing? Send move request in @end event */
|
/* Do nothing? Send move request in @end event */
|
||||||
}
|
}
|
||||||
},
|
|
||||||
player() {
|
|
||||||
return this.playerStore
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -29,7 +29,7 @@ const dataObject = {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'PageRadioStreams',
|
name: 'PageRadioStreams',
|
||||||
components: { ContentWithHeading, ListTracks, HeadingTitle },
|
components: { ContentWithHeading, HeadingTitle, ListTracks },
|
||||||
beforeRouteEnter(to, from, next) {
|
beforeRouteEnter(to, from, next) {
|
||||||
dataObject.load(to).then((response) => {
|
dataObject.load(to).then((response) => {
|
||||||
next((vm) => dataObject.set(vm, response))
|
next((vm) => dataObject.set(vm, response))
|
||||||
@ -43,8 +43,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
heading() {
|
heading() {
|
||||||
return {
|
return {
|
||||||
title: this.$t('page.radio.title'),
|
subtitle: [{ count: this.tracks.total, key: 'count.stations' }],
|
||||||
subtitle: [{ key: 'count.stations', count: this.tracks.total }]
|
title: this.$t('page.radio.title')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,11 +175,9 @@ export default {
|
|||||||
HeadingTitle,
|
HeadingTitle,
|
||||||
TabsSettings
|
TabsSettings
|
||||||
},
|
},
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
return { settingsStore: useSettingsStore() }
|
return { settingsStore: useSettingsStore() }
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
locale: {
|
locale: {
|
||||||
get() {
|
get() {
|
||||||
|
@ -2,11 +2,11 @@ import { defineStore } from 'pinia'
|
|||||||
|
|
||||||
export const useConfigurationStore = defineStore('ConfigurationStore', {
|
export const useConfigurationStore = defineStore('ConfigurationStore', {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
|
allow_modifying_stored_playlists: false,
|
||||||
buildoptions: [],
|
buildoptions: [],
|
||||||
|
default_playlist_directory: '',
|
||||||
library_name: '',
|
library_name: '',
|
||||||
version: '',
|
version: '',
|
||||||
websocket_port: 0,
|
websocket_port: 0
|
||||||
allow_modifying_stored_playlists: false,
|
|
||||||
default_playlist_directory: ''
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -5,11 +5,11 @@ export const useLibraryStore = defineStore('LibraryStore', {
|
|||||||
albums: 0,
|
albums: 0,
|
||||||
artists: 0,
|
artists: 0,
|
||||||
db_playtime: 0,
|
db_playtime: 0,
|
||||||
songs: 0,
|
|
||||||
rss: {},
|
rss: {},
|
||||||
|
songs: 0,
|
||||||
started_at: '01',
|
started_at: '01',
|
||||||
updated_at: '01',
|
|
||||||
update_dialog_scan_kind: '',
|
update_dialog_scan_kind: '',
|
||||||
|
updated_at: '01',
|
||||||
updating: false
|
updating: false
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
export const useNotificationsStore = defineStore('NotificationsStore', {
|
export const useNotificationsStore = defineStore('NotificationsStore', {
|
||||||
state: () => ({
|
|
||||||
list: [],
|
|
||||||
next_id: 1
|
|
||||||
}),
|
|
||||||
actions: {
|
actions: {
|
||||||
add(notification) {
|
add(notification) {
|
||||||
const newNotification = {
|
const newNotification = {
|
||||||
@ -36,5 +32,9 @@ export const useNotificationsStore = defineStore('NotificationsStore', {
|
|||||||
this.list.splice(index, 1)
|
this.list.splice(index, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
state: () => ({
|
||||||
|
list: [],
|
||||||
|
next_id: 1
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -2,15 +2,15 @@ import { defineStore } from 'pinia'
|
|||||||
import { usePlayerStore } from '@/stores/player'
|
import { usePlayerStore } from '@/stores/player'
|
||||||
|
|
||||||
export const useQueueStore = defineStore('QueueStore', {
|
export const useQueueStore = defineStore('QueueStore', {
|
||||||
state: () => ({
|
|
||||||
count: 0,
|
|
||||||
items: [],
|
|
||||||
version: 0
|
|
||||||
}),
|
|
||||||
getters: {
|
getters: {
|
||||||
current(state) {
|
current(state) {
|
||||||
const player = usePlayerStore()
|
const player = usePlayerStore()
|
||||||
return state.items.find((item) => item.id === player.item_id) ?? {}
|
return state.items.find((item) => item.id === player.item_id) ?? {}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
state: () => ({
|
||||||
|
count: 0,
|
||||||
|
items: [],
|
||||||
|
version: 0
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -1,11 +1,6 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
export const useSearchStore = defineStore('SearchStore', {
|
export const useSearchStore = defineStore('SearchStore', {
|
||||||
state: () => ({
|
|
||||||
recent_searches: [],
|
|
||||||
search_query: '',
|
|
||||||
search_source: 'search-library'
|
|
||||||
}),
|
|
||||||
actions: {
|
actions: {
|
||||||
add(query) {
|
add(query) {
|
||||||
const index = this.recent_searches.indexOf(query)
|
const index = this.recent_searches.indexOf(query)
|
||||||
@ -23,5 +18,10 @@ export const useSearchStore = defineStore('SearchStore', {
|
|||||||
this.recent_searches.splice(index, 1)
|
this.recent_searches.splice(index, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
state: () => ({
|
||||||
|
recent_searches: [],
|
||||||
|
search_query: '',
|
||||||
|
search_source: 'search-library'
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -1,9 +1,29 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
export const useSettingsStore = defineStore('SettingsStore', {
|
export const useSettingsStore = defineStore('SettingsStore', {
|
||||||
state: () => ({
|
actions: {
|
||||||
categories: []
|
setting(categoryName, optionName) {
|
||||||
}),
|
return (
|
||||||
|
this.categories
|
||||||
|
.find((category) => category.name === categoryName)
|
||||||
|
?.options.find((option) => option.name === optionName) ?? {}
|
||||||
|
)
|
||||||
|
},
|
||||||
|
update(option) {
|
||||||
|
const settingCategory = this.categories.find(
|
||||||
|
(category) => category.name === option.category
|
||||||
|
)
|
||||||
|
if (!settingCategory) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const settingOption = settingCategory.options.find(
|
||||||
|
(setting) => setting.name === option.name
|
||||||
|
)
|
||||||
|
if (settingOption) {
|
||||||
|
settingOption.value = option.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
getters: {
|
getters: {
|
||||||
recently_added_limit: (state) =>
|
recently_added_limit: (state) =>
|
||||||
state.setting('webinterface', 'recently_added_limit')?.value ?? 100,
|
state.setting('webinterface', 'recently_added_limit')?.value ?? 100,
|
||||||
@ -34,27 +54,7 @@ export const useSettingsStore = defineStore('SettingsStore', {
|
|||||||
show_menu_item_search: (state) =>
|
show_menu_item_search: (state) =>
|
||||||
state.setting('webinterface', 'show_menu_item_search')?.value ?? false
|
state.setting('webinterface', 'show_menu_item_search')?.value ?? false
|
||||||
},
|
},
|
||||||
actions: {
|
state: () => ({
|
||||||
update(option) {
|
categories: []
|
||||||
const settingCategory = this.categories.find(
|
})
|
||||||
(category) => category.name === option.category
|
|
||||||
)
|
|
||||||
if (!settingCategory) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const settingOption = settingCategory.options.find(
|
|
||||||
(setting) => setting.name === option.name
|
|
||||||
)
|
|
||||||
if (settingOption) {
|
|
||||||
settingOption.value = option.value
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setting(categoryName, optionName) {
|
|
||||||
return (
|
|
||||||
this.categories
|
|
||||||
.find((category) => category.name === categoryName)
|
|
||||||
?.options.find((option) => option.name === optionName) ?? {}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
@ -39,9 +39,9 @@ export default defineConfig({
|
|||||||
server: {
|
server: {
|
||||||
proxy: {
|
proxy: {
|
||||||
'/api': { target },
|
'/api': { target },
|
||||||
'/ws': { target, ws: true },
|
|
||||||
'/artwork': { target },
|
'/artwork': { target },
|
||||||
'/stream.mp3': { target }
|
'/stream.mp3': { target },
|
||||||
|
'/ws': { target, ws: true }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user