199 lines
5.1 KiB
JavaScript
199 lines
5.1 KiB
JavaScript
var artistTab = new Vue({
|
|
el: '#artist_tab',
|
|
data: {
|
|
currentTab: '',
|
|
sortKey: 'release_date',
|
|
sortOrder: 'desc',
|
|
title: "",
|
|
image: "",
|
|
type: "",
|
|
link: "",
|
|
head: null,
|
|
body: null
|
|
},
|
|
methods: {
|
|
addToQueue: function(e){e.stopPropagation(); sendAddToQueue(e.currentTarget.dataset.link)},
|
|
openQualityModal: function(e){e.preventDefault(); openQualityModal(e.currentTarget.dataset.link)},
|
|
moreInfo: function(url, e){
|
|
if (e) e.preventDefault();
|
|
showTrackListSelective(url, true)
|
|
},
|
|
sortBy: function(key) {
|
|
if (key == this.sortKey) {
|
|
this.sortOrder = (this.sortOrder == 'asc') ? 'desc' : 'asc';
|
|
} else {
|
|
this.sortKey = key;
|
|
this.sortOrder = 'asc';
|
|
}
|
|
},
|
|
changeTab: function(tab){
|
|
this.currentTab = tab
|
|
},
|
|
checkNewRelease: function(date){
|
|
var g1 = new Date();
|
|
var g2 = new Date(date);
|
|
g2.setDate(g2.getDate()+3)
|
|
g1.setHours(0,0,0,0)
|
|
if (g1.getTime() <= g2.getTime()){
|
|
return true;
|
|
}else {
|
|
return false;
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
showTable() {
|
|
if (this.body)
|
|
return _.orderBy(this.body[this.currentTab], this.sortKey, this.sortOrder)
|
|
else
|
|
return []
|
|
}
|
|
}
|
|
})
|
|
|
|
var tracklistTab = new Vue({
|
|
el: '#tracklist_tab',
|
|
data: {
|
|
title: "",
|
|
metadata : "",
|
|
release_date: "",
|
|
label: "",
|
|
explicit: false,
|
|
image: "",
|
|
type: "",
|
|
link: "",
|
|
head: null,
|
|
body: []
|
|
},
|
|
methods: {
|
|
addToQueue: function(e){e.stopPropagation(); sendAddToQueue(e.currentTarget.dataset.link)},
|
|
openQualityModal: function(e){e.preventDefault(); openQualityModal(e.currentTarget.dataset.link)},
|
|
toggleAll: function(e){
|
|
this.body.forEach((item) => {
|
|
if (item.type == 'track'){
|
|
item.selected = e.currentTarget.checked
|
|
}
|
|
});
|
|
},
|
|
selectedLinks: function(){
|
|
selected = []
|
|
if (this.body){
|
|
this.body.forEach((item) => {
|
|
if (item.type == 'track' && item.selected) selected.push(item.link)
|
|
})
|
|
}
|
|
return selected.join(";")
|
|
}
|
|
}
|
|
})
|
|
|
|
function resetArtistTab(){
|
|
artistTab.title = "Loading..."
|
|
artistTab.image = ""
|
|
artistTab.type = ""
|
|
artistTab.currentTab = ''
|
|
artistTab.sortKey = 'release_date'
|
|
artistTab.sortOrder = 'desc'
|
|
artistTab.link = ''
|
|
artistTab.head = []
|
|
artistTab.body = null
|
|
}
|
|
|
|
function resetTracklistTab(){
|
|
tracklistTab.title = "Loading..."
|
|
tracklistTab.image = ""
|
|
tracklistTab.metadata = ""
|
|
tracklistTab.label = ""
|
|
tracklistTab.release_date = ""
|
|
tracklistTab.explicit = false
|
|
tracklistTab.type = ""
|
|
tracklistTab.head = []
|
|
tracklistTab.body = []
|
|
}
|
|
|
|
function artistView(ev){
|
|
let id = ev.currentTarget.dataset.id
|
|
resetArtistTab()
|
|
socket.emit('getTracklist', {type: 'artist', id: id})
|
|
showTab('artist', id)
|
|
}
|
|
function albumView(ev){
|
|
let id = ev.currentTarget.dataset.id
|
|
resetTracklistTab()
|
|
socket.emit('getTracklist', {type: 'album', id: id})
|
|
showTab('album', id)
|
|
}
|
|
function playlistView(ev){
|
|
let id = ev.currentTarget.dataset.id
|
|
resetTracklistTab()
|
|
socket.emit('getTracklist', {type: 'playlist', id: id})
|
|
showTab('playlist', id)
|
|
}
|
|
|
|
socket.on('show_artist', function(data){
|
|
artistTab.title = data.name
|
|
artistTab.image = data.picture_xl
|
|
artistTab.type = "Artist"
|
|
artistTab.link = `https://www.deezer.com/artist/${data.id}`
|
|
artistTab.currentTab = Object.keys(data.releases)[0]
|
|
artistTab.sortKey = 'release_date'
|
|
artistTab.sortOrder = 'desc'
|
|
artistTab.head = [
|
|
{title: 'Title', sortKey: "title"},
|
|
{title: 'Release Date', sortKey: "release_date"},
|
|
{title: '', width: "56px"}
|
|
]
|
|
if (_.isEmpty(data.releases)){
|
|
artistTab.body = null
|
|
}else{
|
|
artistTab.body = data.releases
|
|
}
|
|
})
|
|
|
|
socket.on('show_album', function(data){
|
|
tracklistTab.type = 'Album'
|
|
tracklistTab.link = `https://www.deezer.com/album/${data.id}`
|
|
tracklistTab.title = data.title
|
|
tracklistTab.explicit = data.explicit_lyrics
|
|
tracklistTab.label = data.label
|
|
tracklistTab.metadata = `${data.artist.name} • ${data.tracks.length} songs`
|
|
tracklistTab.release_date = data.release_date.substring(0,10)
|
|
tracklistTab.image = data.cover_xl
|
|
tracklistTab.head = [
|
|
{title: '<i class="material-icons">music_note</i>', width: "24px"},
|
|
{title: '#'},
|
|
{title: 'Song'},
|
|
{title: 'Artist'},
|
|
{title: '<i class="material-icons">timer</i>', width: "40px"},
|
|
{title: '<input onclick="tracklistTab.toggleAll(event)" class="selectAll" type="checkbox"><span></span>', width: "24px"}
|
|
]
|
|
if (_.isEmpty(data.tracks)){
|
|
tracklistTab.body = null
|
|
}else{
|
|
tracklistTab.body = data.tracks
|
|
}
|
|
})
|
|
|
|
socket.on('show_playlist', function(data){
|
|
tracklistTab.type = "Playlist"
|
|
tracklistTab.link = `https://www.deezer.com/playlist/${data.id}`
|
|
tracklistTab.title = data.title
|
|
tracklistTab.image = data.picture_xl
|
|
tracklistTab.release_date = data.creation_date.substring(0,10)
|
|
tracklistTab.metadata = `by ${data.creator.name} • ${data.tracks.length} songs`
|
|
tracklistTab.head = [
|
|
{title: '<i class="material-icons">music_note</i>', width: "24px"},
|
|
{title: '#'},
|
|
{title: 'Song'},
|
|
{title: 'Artist'},
|
|
{title: 'Album'},
|
|
{title: '<i class="material-icons">timer</i>', width: "40px"},
|
|
{title: '<input onclick="tracklistTab.toggleAll(event)" class="selectAll" type="checkbox"><span></span>', width: "24px"}
|
|
]
|
|
if (_.isEmpty(data.tracks)){
|
|
tracklistTab.body = null
|
|
}else{
|
|
tracklistTab.body = data.tracks
|
|
}
|
|
})
|