mirror of
https://github.com/owntone/owntone-server.git
synced 2025-04-14 00:10:10 -04:00
165 lines
4.7 KiB
Vue
165 lines
4.7 KiB
Vue
<template>
|
|
<modal-dialog :actions="actions" :show="show" @close="$emit('close')">
|
|
<template #content>
|
|
<list-properties :item="playable" />
|
|
</template>
|
|
</modal-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
import ListProperties from '@/components/ListProperties.vue'
|
|
import ModalDialog from '@/components/ModalDialog.vue'
|
|
import SpotifyWebApi from 'spotify-web-api-js'
|
|
import { useServicesStore } from '@/stores/services'
|
|
import webapi from '@/webapi'
|
|
|
|
export default {
|
|
name: 'ModalDialogQueueItem',
|
|
components: { ListProperties, ModalDialog },
|
|
props: { item: { required: true, type: Object }, show: Boolean },
|
|
emits: ['close'],
|
|
setup() {
|
|
return { servicesStore: useServicesStore() }
|
|
},
|
|
data() {
|
|
return {
|
|
spotify_track: {}
|
|
}
|
|
},
|
|
computed: {
|
|
actions() {
|
|
return [
|
|
{ handler: this.remove, icon: 'delete', key: 'actions.remove' },
|
|
{ handler: this.play, icon: 'play', key: 'actions.play' }
|
|
]
|
|
},
|
|
playable() {
|
|
return {
|
|
name: this.item.title,
|
|
properties: [
|
|
{
|
|
handler: this.open_album,
|
|
key: 'property.album',
|
|
value: this.item.album
|
|
},
|
|
{
|
|
handler: this.open_album_artist,
|
|
key: 'property.album-artist',
|
|
value: this.item.album_artist
|
|
},
|
|
{ key: 'property.composer', value: this.item.composer },
|
|
{ key: 'property.year', value: this.item.year },
|
|
{
|
|
handler: this.open_genre,
|
|
key: 'property.genre',
|
|
value: this.item.genre
|
|
},
|
|
{
|
|
key: 'property.position',
|
|
value: [this.item.disc_number, this.item.track_number].join(' / ')
|
|
},
|
|
{
|
|
key: 'property.duration',
|
|
value: this.$filters.toTimecode(this.item.length_ms)
|
|
},
|
|
{ key: 'property.path', value: this.item.path },
|
|
{
|
|
key: 'property.type',
|
|
value: `${this.$t(`media.kind.${this.item.media_kind}`)} - ${this.$t(`data.kind.${this.item.data_kind}`)}`
|
|
},
|
|
{
|
|
key: 'property.quality',
|
|
value: this.$t('dialog.track.quality-value', {
|
|
bitrate: this.item.bitrate,
|
|
channels: this.$t('count.channels', this.item.channels),
|
|
format: this.item.type,
|
|
samplerate: this.item.samplerate
|
|
})
|
|
}
|
|
],
|
|
uri: this.item.uri
|
|
}
|
|
}
|
|
},
|
|
watch: {
|
|
item() {
|
|
if (this.item?.data_kind === 'spotify') {
|
|
const spotifyApi = new SpotifyWebApi()
|
|
spotifyApi.setAccessToken(this.servicesStore.spotify.webapi_token)
|
|
spotifyApi
|
|
.getTrack(this.item.path.slice(this.item.path.lastIndexOf(':') + 1))
|
|
.then((response) => {
|
|
this.spotify_track = response
|
|
})
|
|
} else {
|
|
this.spotify_track = {}
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
open_album() {
|
|
this.$emit('close')
|
|
if (this.item.data_kind === 'spotify') {
|
|
this.$router.push({
|
|
name: 'music-spotify-album',
|
|
params: { id: this.spotify_track.album.id }
|
|
})
|
|
} else if (this.item.media_kind === 'podcast') {
|
|
this.$router.push({
|
|
name: 'podcast',
|
|
params: { id: this.item.album_id }
|
|
})
|
|
} else if (this.item.media_kind === 'audiobook') {
|
|
this.$router.push({
|
|
name: 'audiobooks-album',
|
|
params: { id: this.item.album_id }
|
|
})
|
|
} else if (this.item.media_kind === 'music') {
|
|
this.$router.push({
|
|
name: 'music-album',
|
|
params: { id: this.item.album_id }
|
|
})
|
|
}
|
|
},
|
|
open_album_artist() {
|
|
this.$emit('close')
|
|
if (this.item.data_kind === 'spotify') {
|
|
this.$router.push({
|
|
name: 'music-spotify-artist',
|
|
params: { id: this.spotify_track.artists[0].id }
|
|
})
|
|
} else if (
|
|
this.item.media_kind === 'music' ||
|
|
this.item.media_kind === 'podcast'
|
|
) {
|
|
this.$router.push({
|
|
name: 'music-artist',
|
|
params: { id: this.item.album_artist_id }
|
|
})
|
|
} else if (this.item.media_kind === 'audiobook') {
|
|
this.$router.push({
|
|
name: 'audiobooks-artist',
|
|
params: { id: this.item.album_artist_id }
|
|
})
|
|
}
|
|
},
|
|
open_genre() {
|
|
this.$emit('close')
|
|
this.$router.push({
|
|
name: 'genre-albums',
|
|
params: { name: this.item.genre },
|
|
query: { media_kind: this.item.media_kind }
|
|
})
|
|
},
|
|
play() {
|
|
this.$emit('close')
|
|
webapi.player_play({ item_id: this.item.id })
|
|
},
|
|
remove() {
|
|
this.$emit('close')
|
|
webapi.queue_remove(this.item.id)
|
|
}
|
|
}
|
|
}
|
|
</script>
|