FreeTube/src/renderer/components/ft-list-playlist/ft-list-playlist.js

107 lines
2.8 KiB
JavaScript

import Vue from 'vue'
import FtIconButton from '../ft-icon-button/ft-icon-button.vue'
import { mapActions } from 'vuex'
export default Vue.extend({
name: 'FtListPlaylist',
components: {
'ft-icon-button': FtIconButton
},
props: {
data: {
type: Object,
required: true
},
appearance: {
type: String,
required: true
}
},
data: function () {
return {
playlistLink: '',
channelLink: '',
title: 'Pop Music Playlist - Timeless Pop Songs (Updated Weekly 2020)',
thumbnail: 'https://i.ytimg.com/vi/JGwWNGJdvx8/mqdefault.jpg',
channelName: '#RedMusic: Just Hits',
videoCount: 200,
description: ''
}
},
computed: {
currentInvidiousInstance: function () {
return this.$store.getters.getCurrentInvidiousInstance
},
listType: function () {
return this.$store.getters.getListType
},
playlistId: function () {
return this.playlistLink.replace('https://www.youtube.com/playlist?list=', '')
},
channelId: function () {
let id = this.channelLink.replace('https://www.youtube.com/user/', '')
id = id.replace('https://www.youtube.com/channel/', '')
return id
},
externalPlayer: function () {
return this.$store.getters.getExternalPlayer
},
defaultPlayback: function () {
return this.$store.getters.getDefaultPlayback
}
},
mounted: function () {
if (typeof (this.data.owner) === 'object') {
this.parseLocalData()
} else {
this.parseInvidiousData()
}
},
methods: {
handleExternalPlayer: function () {
this.openInExternalPlayer({
strings: this.$t('Video.External Player'),
watchProgress: 0,
playbackRate: this.defaultPlayback,
videoId: null,
playlistId: this.playlistId,
playlistIndex: null,
playlistReverse: null,
playlistShuffle: null,
playlistLoop: null
})
},
parseInvidiousData: function () {
this.title = this.data.title
this.thumbnail = this.data.playlistThumbnail.replace('https://i.ytimg.com', this.currentInvidiousInstance).replace('hqdefault', 'mqdefault')
this.channelName = this.data.author
this.channelLink = this.data.authorUrl
this.playlistLink = this.data.playlistId
this.videoCount = this.data.videoCount
if (this.data.proxyThumbnail === false) {
this.thumbnail = this.data.playlistThumbnail
}
},
parseLocalData: function () {
this.title = this.data.title
this.thumbnail = this.data.firstVideo.bestThumbnail.url
this.channelName = this.data.owner.name
this.channelLink = this.data.owner.url
this.playlistLink = this.data.url
this.videoCount = this.data.length
},
...mapActions([
'openInExternalPlayer'
])
}
})