feat: download all button in Favorites page, this solves #37
This commit is contained in:
parent
1646f6b0e5
commit
d3e1b71faf
File diff suppressed because one or more lines are too long
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div id="favorites_tab" class="main_tabcontent">
|
||||
<div class="main_tabcontent">
|
||||
<h2 class="page_heading">
|
||||
{{ $t('favorites.title') }}
|
||||
<div
|
||||
@ -12,6 +12,7 @@
|
||||
<i class="material-icons">sync</i>
|
||||
</div>
|
||||
</h2>
|
||||
|
||||
<div class="section-tabs">
|
||||
<div
|
||||
class="section-tabs__tab favorites_tablinks"
|
||||
@ -24,6 +25,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button v-if="!activeTabEmpty" style="margin-bottom: 2rem" @click="downloadAllOfType">
|
||||
{{ $t('globals.downloadAll', { thing: $tc(`globals.listTabs.${activeTab}`, 2) }) }}
|
||||
</button>
|
||||
|
||||
<div class="favorites_tabcontent" :class="{ 'favorites_tabcontent--active': activeTab === 'playlist' }">
|
||||
<div v-if="playlists.length == 0">
|
||||
<h1>{{ $t('favorites.noPlaylists') }}</h1>
|
||||
@ -222,7 +227,7 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
<style lang="scss" scoped>
|
||||
.favorites_tabcontent {
|
||||
display: none;
|
||||
|
||||
@ -234,7 +239,7 @@
|
||||
|
||||
<script>
|
||||
import { socket } from '@/utils/socket'
|
||||
import { sendAddToQueue } from '@/utils/downloads'
|
||||
import { sendAddToQueue, aggregateDownloadLinks } from '@/utils/downloads'
|
||||
import { convertDuration } from '@/utils/utils'
|
||||
import { toast } from '@/utils/toasts'
|
||||
|
||||
@ -252,6 +257,13 @@ export default {
|
||||
tabs: ['playlist', 'album', 'artist', 'track']
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
activeTabEmpty() {
|
||||
let toCheck = this.getActiveRelease()
|
||||
|
||||
return toCheck.length === 0
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
const favoritesData = await getFavoritesData()
|
||||
|
||||
@ -288,6 +300,21 @@ export default {
|
||||
EventBus.$emit('trackPreview:previewMouseLeave', e)
|
||||
},
|
||||
convertDuration,
|
||||
downloadAllOfType() {
|
||||
try {
|
||||
let toDownload = this.getActiveRelease()
|
||||
|
||||
if (this.activeTab === 'track') {
|
||||
let lovedTracks = this.getLovedTracksPlaylist()
|
||||
|
||||
sendAddToQueue(lovedTracks.link)
|
||||
} else {
|
||||
sendAddToQueue(aggregateDownloadLinks(toDownload))
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error.message)
|
||||
}
|
||||
},
|
||||
addToQueue(e) {
|
||||
sendAddToQueue(e.currentTarget.dataset.link)
|
||||
},
|
||||
@ -336,6 +363,40 @@ export default {
|
||||
this.albums = albums
|
||||
this.artists = artists
|
||||
this.playlists = playlists
|
||||
},
|
||||
getActiveRelease(tab = this.activeTab) {
|
||||
let toDownload
|
||||
|
||||
switch (tab) {
|
||||
case 'playlist':
|
||||
toDownload = this.playlists
|
||||
break
|
||||
case 'album':
|
||||
toDownload = this.albums
|
||||
break
|
||||
case 'artist':
|
||||
toDownload = this.artists
|
||||
break
|
||||
case 'track':
|
||||
toDownload = this.tracks
|
||||
break
|
||||
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
return toDownload
|
||||
},
|
||||
getLovedTracksPlaylist() {
|
||||
let lovedTracks = this.playlists.filter(playlist => {
|
||||
return playlist.is_loved_track
|
||||
})
|
||||
|
||||
if (lovedTracks.length !== 0) {
|
||||
return lovedTracks[0]
|
||||
} else {
|
||||
throw new Error('No loved tracks playlist!')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ const en = {
|
||||
back: 'back',
|
||||
loading: 'loading',
|
||||
download: 'Download {thing}',
|
||||
downloadAll: 'Download all {thing}',
|
||||
by: 'by {artist}',
|
||||
in: 'in {album}',
|
||||
download_hint: 'Download',
|
||||
@ -105,7 +106,7 @@ const en = {
|
||||
no360RA: 'Track is not available in Reality Audio 360.',
|
||||
notAvailable: "Track not available on Deezer's servers!",
|
||||
notAvailableNoAlternative: "Track not available on Deezer's servers and no alternative found!",
|
||||
noSpaceLeft: "No space left on the device!",
|
||||
noSpaceLeft: 'No space left on the device!',
|
||||
albumDoesntExists: "Track's album doesn't exist, failed to gather info"
|
||||
}
|
||||
},
|
||||
@ -126,7 +127,8 @@ const en = {
|
||||
},
|
||||
linkAnalyzer: {
|
||||
info: 'You can use this section to find more information about the link you are trying to download.',
|
||||
useful: "This is useful if you're trying to download some tracks that are not available in your country and want to know where they are available, for instance.",
|
||||
useful:
|
||||
"This is useful if you're trying to download some tracks that are not available in your country and want to know where they are available, for instance.",
|
||||
linkNotSupported: 'This link is not yet supported',
|
||||
linkNotSupportedYet: 'Seems like this link is not yet supported, try analyzing another one.',
|
||||
table: {
|
||||
@ -146,7 +148,8 @@ const en = {
|
||||
},
|
||||
search: {
|
||||
startSearching: 'Start searching!',
|
||||
description: 'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link',
|
||||
description:
|
||||
'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link',
|
||||
fans: '{n} fans',
|
||||
noResults: 'No results',
|
||||
noResultsTrack: 'No Tracks found',
|
||||
|
@ -4,6 +4,7 @@ const it = {
|
||||
back: 'indietro',
|
||||
loading: 'caricamento',
|
||||
download: 'Scarica {thing}',
|
||||
downloadAll: 'Scarica ogni {thing}',
|
||||
by: 'di {artist}',
|
||||
in: 'in {album}',
|
||||
download_hint: 'Scarica',
|
||||
@ -108,8 +109,8 @@ const it = {
|
||||
no360RA: 'Brano non disponibile in Reality Audio 360.',
|
||||
notAvailable: 'Brano non presente sui server di Deezer!',
|
||||
notAvailableNoAlternative: 'Brano non presente sui server di Deezer e nessuna alternativa trovata!',
|
||||
noSpaceLeft: "Spazio su disco esaurito!",
|
||||
albumDoesntExists: "Il brano non ha nessun album, impossibile ottenere informazioni"
|
||||
noSpaceLeft: 'Spazio su disco esaurito!',
|
||||
albumDoesntExists: 'Il brano non ha nessun album, impossibile ottenere informazioni'
|
||||
}
|
||||
},
|
||||
favorites: {
|
||||
@ -244,7 +245,7 @@ const it = {
|
||||
n: 'No, non sovrascrivere i file',
|
||||
t: 'Sovrascrivi solo i tag',
|
||||
b: 'No, mantieni entrambi i file e aggiungi un numero al duplicato',
|
||||
e: "No, e non tener conto della estensione del file"
|
||||
e: 'No, e non tener conto della estensione del file'
|
||||
},
|
||||
fallbackBitrate: 'Utilizza bitrate più bassi se il bitrate preferito non è disponibile',
|
||||
fallbackSearch: 'Cerca il brano se il link originale non è disponibile',
|
||||
@ -272,7 +273,8 @@ const it = {
|
||||
jpegImageQuality: 'Qualità immagine JPEG',
|
||||
embeddedArtworkPNG: 'Salva copertina incorporata come PNG',
|
||||
embeddedPNGWarning: 'Le immagini PNG non sono usate ufficialmente da Deezer e potrebbero dare problemi',
|
||||
imageSizeWarning: 'Dimensioni maggiori di x1200 non sono usate ufficialmente da Deezer, potresti incontrare problemi',
|
||||
imageSizeWarning:
|
||||
'Dimensioni maggiori di x1200 non sono usate ufficialmente da Deezer, potresti incontrare problemi',
|
||||
coverDescriptionUTF8: 'Salva la descrizione della copertina in UTF8 (iTunes Cover Fix)'
|
||||
},
|
||||
tags: {
|
||||
|
@ -1,10 +1,3 @@
|
||||
// .search_tabcontent
|
||||
// .main_tabcontent,
|
||||
// .favorites_tabcontent
|
||||
// {
|
||||
// display: none;
|
||||
// }
|
||||
|
||||
.main_tabcontent {
|
||||
h1 {
|
||||
margin-bottom: 12px;
|
||||
|
@ -1,11 +1,21 @@
|
||||
import { socket } from '@/utils/socket'
|
||||
|
||||
export function sendAddToQueue(url, bitrate = null) {
|
||||
if (!url) return
|
||||
if (!url) throw new Error('No URL given to sendAddToQueue function!')
|
||||
|
||||
socket.emit('addToQueue', { url, bitrate }, () => {})
|
||||
}
|
||||
|
||||
export function aggregateDownloadLinks(releases) {
|
||||
let links = []
|
||||
|
||||
releases.forEach(release => {
|
||||
links.push(release.link)
|
||||
})
|
||||
|
||||
return links.join(';')
|
||||
}
|
||||
|
||||
export default {
|
||||
sendAddToQueue
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user