rename starred to favourites

This commit is contained in:
Thomas Amland 2021-05-09 11:56:34 +02:00
parent b1ee4b18dc
commit cdb4540d82
7 changed files with 38 additions and 46 deletions

View File

@ -31,8 +31,8 @@
<Icon icon="collection" /> Genres <Icon icon="collection" /> Genres
</router-link> </router-link>
<router-link class="nav-link" :to="{name: 'starred'}"> <router-link class="nav-link" :to="{name: 'favourites'}">
<Icon icon="star" /> Starred <Icon icon="heart" /> Favourites
</router-link> </router-link>
<router-link class="nav-link" :to="{name: 'podcasts'}"> <router-link class="nav-link" :to="{name: 'podcasts'}">

View File

@ -23,8 +23,8 @@
<b-button variant="secondary" class="mr-2" @click="play"> <b-button variant="secondary" class="mr-2" @click="play">
<Icon icon="play-fill" /> Play <Icon icon="play-fill" /> Play
</b-button> </b-button>
<b-button variant="secondary" class="mr-2" @click="toggleStar"> <b-button variant="secondary" class="mr-2" @click="toggleFavourite">
<Icon :icon="album.starred ? 'star-fill' : 'star'" /> <Icon :icon="album.favourite ? 'heart-fill' : 'heart'" />
</b-button> </b-button>
<b-dropdown variant="secondary" boundary="window" no-caret toggle-class="px-1"> <b-dropdown variant="secondary" boundary="window" no-caret toggle-class="px-1">
<template #button-content> <template #button-content>
@ -91,13 +91,13 @@
return this.$store.dispatch('player/addToQueue', this.album.tracks) return this.$store.dispatch('player/addToQueue', this.album.tracks)
} }
}, },
toggleStar() { toggleFavourite() {
if (this.album) { if (this.album) {
const value = !this.album.starred const value = !this.album.favourite
this.album.starred = value this.album.favourite = value
return value return value
? this.$api.starAlbum(this.album.id) ? this.$api.addFavourite('album', this.album.id)
: this.$api.unstarAlbum(this.album.id) : this.$api.removeFavourite('album', this.album.id)
} }
}, },
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<h1>Starred</h1> <h1>Favourites</h1>
<ul class="nav-underlined"> <ul class="nav-underlined">
<li> <li>
<router-link :to="{... $route, params: { }}"> <router-link :to="{... $route, params: { }}">
@ -46,7 +46,7 @@
} }
}, },
async created() { async created() {
this.result = await this.$api.getStarred() this.result = await this.$api.getFavourites()
} }
}) })
</script> </script>

View File

@ -7,8 +7,8 @@
<b-dropdown-item-button @click="addToQueue()"> <b-dropdown-item-button @click="addToQueue()">
Add to queue Add to queue
</b-dropdown-item-button> </b-dropdown-item-button>
<b-dropdown-item-button @click="toggleStarred()"> <b-dropdown-item-button @click="toggleFavourite()">
{{ starred ? 'Unstar' : 'Star' }} {{ favourite ? 'Remove from favourites' : 'Add to favourites' }}
</b-dropdown-item-button> </b-dropdown-item-button>
<b-dropdown-item-button @click="download()"> <b-dropdown-item-button @click="download()">
Download Download
@ -26,16 +26,16 @@
}, },
data() { data() {
return { return {
starred: this.track.starred, favourite: this.track.favourite,
} }
}, },
methods: { methods: {
toggleStarred() { toggleFavourite() {
this.starred = !this.starred this.favourite = !this.favourite
if (this.starred) { if (this.favourite) {
return this.$api.unstar('track', this.track.id) return this.$api.removeFavourite('track', this.track.id)
} }
return this.$api.star('track', this.track.id) return this.$api.addFavourite('track', this.track.id)
}, },
download() { download() {
window.location.href = this.$api.getDownloadUrl(this.track.id) window.location.href = this.$api.getDownloadUrl(this.track.id)

View File

@ -12,7 +12,7 @@ export interface Track {
id: string id: string
title: string title: string
duration: number duration: number
starred: boolean favourite: boolean
image?: string image?: string
url?: string url?: string
track?: number track?: number
@ -28,7 +28,7 @@ export interface Album {
artist: string artist: string
artistId: string artistId: string
year: number year: number
starred: boolean favourite: boolean
genreId?: string genreId?: string
image?: string image?: string
tracks?: Track[] tracks?: Track[]
@ -39,7 +39,7 @@ export interface Artist {
name: string name: string
albumCount: number albumCount: number
description?: string description?: string
starred: boolean favourite: boolean
lastFmUrl?: string lastFmUrl?: string
musicBrainzUrl?: string musicBrainzUrl?: string
similarArtist?: Artist[] similarArtist?: Artist[]
@ -240,7 +240,7 @@ export class API {
return (response.randomSongs?.song || []).map(this.normalizeTrack, this) return (response.randomSongs?.song || []).map(this.normalizeTrack, this)
} }
async getStarred() { async getFavourites() {
const response = await this.get('rest/getStarred2') const response = await this.get('rest/getStarred2')
return { return {
albums: (response.starred2?.album || []).map(this.normalizeAlbum, this), albums: (response.starred2?.album || []).map(this.normalizeAlbum, this),
@ -249,15 +249,7 @@ export class API {
} }
} }
starAlbum(id: string) { async addFavourite(type: 'track' | 'album' | 'artist', id: string) {
return this.star('album', id)
}
unstarAlbum(id: string) {
return this.unstar('album', id)
}
async star(type: 'track' | 'album' | 'artist', id: string) {
const params = { const params = {
id: type === 'track' ? id : undefined, id: type === 'track' ? id : undefined,
albumId: type === 'album' ? id : undefined, albumId: type === 'album' ? id : undefined,
@ -266,7 +258,7 @@ export class API {
await this.get('rest/star', params) await this.get('rest/star', params)
} }
async unstar(type: 'track' | 'album' | 'artist', id: string) { async removeFavourite(type: 'track' | 'album' | 'artist', id: string) {
const params = { const params = {
id: type === 'track' ? id : undefined, id: type === 'track' ? id : undefined,
albumId: type === 'album' ? id : undefined, albumId: type === 'album' ? id : undefined,
@ -349,7 +341,7 @@ export class API {
track: item.track, track: item.track,
url: item.streamUrl, url: item.streamUrl,
duration: 0, duration: 0,
starred: false, favourite: false,
} }
} }
@ -358,7 +350,7 @@ export class API {
id: item.id, id: item.id,
title: item.title, title: item.title,
duration: item.duration, duration: item.duration,
starred: !!item.starred, favourite: !!item.starred,
track: item.track, track: item.track,
album: item.album, album: item.album,
albumId: item.albumId, albumId: item.albumId,
@ -377,7 +369,7 @@ export class API {
artistId: item.artistId, artistId: item.artistId,
image: this.getCoverArtUrl(item), image: this.getCoverArtUrl(item),
year: item.year || 0, year: item.year || 0,
starred: !!item.starred, favourite: !!item.starred,
genreId: item.genre, genreId: item.genre,
tracks: (item.song || []).map(this.normalizeTrack, this) tracks: (item.song || []).map(this.normalizeTrack, this)
} }
@ -392,7 +384,7 @@ export class API {
id: item.id, id: item.id,
name: item.name, name: item.name,
description: (item.biography || '').replace(/<a[^>]*>.*?<\/a>/gm, ''), description: (item.biography || '').replace(/<a[^>]*>.*?<\/a>/gm, ''),
starred: !!item.starred, favourite: !!item.starred,
albumCount: item.albumCount, albumCount: item.albumCount,
lastFmUrl: item.lastFmUrl, lastFmUrl: item.lastFmUrl,
musicBrainzUrl: item.musicBrainzId musicBrainzUrl: item.musicBrainzId
@ -416,7 +408,7 @@ export class API {
id: episode.id, id: episode.id,
title: episode.title, title: episode.title,
duration: episode.duration, duration: episode.duration,
starred: false, favourite: false,
track: podcast.episode.length - index, track: podcast.episode.length - index,
album: podcast.title, album: podcast.title,
albumId: null, albumId: null,

View File

@ -11,8 +11,6 @@
BIconCardText, BIconCardText,
BIconChevronCompactRight, BIconChevronCompactRight,
BIconMusicNoteList, BIconMusicNoteList,
BIconStar,
BIconStarFill,
BIconCollection, BIconCollection,
BIconCollectionFill, BIconCollectionFill,
BIconList, BIconList,
@ -29,6 +27,8 @@
BIconX, BIconX,
BIconVolumeMuteFill, BIconVolumeMuteFill,
BIconVolumeUpFill, BIconVolumeUpFill,
BIconHeart,
BIconHeartFill,
} from 'bootstrap-vue' } from 'bootstrap-vue'
export default Vue.extend({ export default Vue.extend({
@ -40,8 +40,6 @@
BIconCardText, BIconCardText,
BIconChevronCompactRight, BIconChevronCompactRight,
BIconMusicNoteList, BIconMusicNoteList,
BIconStar,
BIconStarFill,
BIconCollection, BIconCollection,
BIconCollectionFill, BIconCollectionFill,
BIconList, BIconList,
@ -58,6 +56,8 @@
BIconX, BIconX,
BIconVolumeMuteFill, BIconVolumeMuteFill,
BIconVolumeUpFill, BIconVolumeUpFill,
BIconHeart,
BIconHeartFill,
}, },
props: { props: {
icon: { type: String, required: true } icon: { type: String, required: true }

View File

@ -8,7 +8,7 @@ import AlbumDetails from '@/library/album/AlbumDetails.vue'
import AlbumLibrary from '@/library/album/AlbumLibrary.vue' import AlbumLibrary from '@/library/album/AlbumLibrary.vue'
import GenreDetails from '@/library/genre/GenreDetails.vue' import GenreDetails from '@/library/genre/GenreDetails.vue'
import GenreLibrary from '@/library/genre/GenreLibrary.vue' import GenreLibrary from '@/library/genre/GenreLibrary.vue'
import Starred from '@/library/starred/Starred.vue' import Favourites from '@/library/favourite/Favourites.vue'
import RadioStations from '@/library/radio/RadioStations.vue' import RadioStations from '@/library/radio/RadioStations.vue'
import PodcastDetails from '@/library/podcast/PodcastDetails.vue' import PodcastDetails from '@/library/podcast/PodcastDetails.vue'
import PodcastLibrary from '@/library/podcast/PodcastLibrary.vue' import PodcastLibrary from '@/library/podcast/PodcastLibrary.vue'
@ -87,9 +87,9 @@ export function setupRouter(auth: AuthService) {
props: true, props: true,
}, },
{ {
name: 'starred', name: 'favourites',
path: '/starred/:section?', path: '/favourites/:section?',
component: Starred, component: Favourites,
props: true, props: true,
}, },
{ {