mirror of
https://github.com/skidoodle/albert.lol.git
synced 2025-02-15 06:09:15 +01:00
spotify: *refactoring
This commit is contained in:
parent
b4710fe358
commit
680bc7d841
5 changed files with 41 additions and 41 deletions
|
@ -4,17 +4,7 @@ import { useEffect, useState } from 'react'
|
||||||
import io from 'socket.io-client'
|
import io from 'socket.io-client'
|
||||||
import Image from 'next/image'
|
import Image from 'next/image'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
|
import type { SpotifyData } from '@/utils/interface'
|
||||||
interface SpotifyData {
|
|
||||||
song?: {
|
|
||||||
artist: string[]
|
|
||||||
title: string
|
|
||||||
url: string
|
|
||||||
image: string
|
|
||||||
progress: number
|
|
||||||
length: number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const NowPlayingCard = () => {
|
export const NowPlayingCard = () => {
|
||||||
const [spotify, setSpotify] = useState<SpotifyData>({})
|
const [spotify, setSpotify] = useState<SpotifyData>({})
|
||||||
|
@ -31,15 +21,6 @@ export const NowPlayingCard = () => {
|
||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
const Progress = () => {
|
|
||||||
if (spotify.song && spotify.song.length > 0) {
|
|
||||||
const progressPercentage =
|
|
||||||
(spotify.song.progress / spotify.song.length) * 100
|
|
||||||
return `${progressPercentage}%`
|
|
||||||
}
|
|
||||||
return '0%'
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='mt-5 flex max-w-sm transform flex-row rounded-md border border-gray-800 p-3 shadow transition duration-300 ease-in-out hover:scale-105 focus:outline-none'>
|
<div className='mt-5 flex max-w-sm transform flex-row rounded-md border border-gray-800 p-3 shadow transition duration-300 ease-in-out hover:scale-105 focus:outline-none'>
|
||||||
{spotify.song ? (
|
{spotify.song ? (
|
||||||
|
@ -70,7 +51,10 @@ export const NowPlayingCard = () => {
|
||||||
<div className='mt-2 bg-gray-200 rounded-full h-1 dark:bg-gray-700 bg-fixed flex w-44'>
|
<div className='mt-2 bg-gray-200 rounded-full h-1 dark:bg-gray-700 bg-fixed flex w-44'>
|
||||||
<div
|
<div
|
||||||
className='bg-[#1DB954] h-1 rounded-full transition-width duration-300 ease-in-out'
|
className='bg-[#1DB954] h-1 rounded-full transition-width duration-300 ease-in-out'
|
||||||
style={{ width: Progress() }}
|
style={{
|
||||||
|
width:
|
||||||
|
(spotify.song.progress / spotify.song.duration) * 100 + '%',
|
||||||
|
}}
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -21,21 +21,26 @@ export default async function handler(
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const song = await spotify.getCurrentSong()
|
const song = await spotify.getCurrentSong()
|
||||||
if (!song || !song.isPlaying) {
|
if (!song.is_playing) {
|
||||||
return res.status(200).json({
|
return res.status(200).json({
|
||||||
nowplaying: false,
|
is_playing: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
nowplaying: true,
|
is_playing: true,
|
||||||
song: {
|
name: song.name,
|
||||||
artist: song.artists.name,
|
album: {
|
||||||
title: song.title,
|
name: song.album.name,
|
||||||
url: song.url,
|
|
||||||
image: song.album.image,
|
image: song.album.image,
|
||||||
progress: song.progress,
|
release: song.album.release_date,
|
||||||
length: song.length,
|
|
||||||
},
|
},
|
||||||
|
artists: {
|
||||||
|
name: song.artists.name,
|
||||||
|
url: song.artists.url,
|
||||||
|
},
|
||||||
|
url: song.url,
|
||||||
|
progress: song.progress,
|
||||||
|
duration: song.duration,
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res
|
res
|
||||||
|
|
|
@ -3,7 +3,7 @@ interface Album {
|
||||||
images: {
|
images: {
|
||||||
url: string
|
url: string
|
||||||
}[]
|
}[]
|
||||||
release: string[]
|
release_date: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Artist {
|
export interface Artist {
|
||||||
|
@ -18,3 +18,14 @@ export interface Item {
|
||||||
external_urls: { spotify: string }
|
external_urls: { spotify: string }
|
||||||
duration_ms: number
|
duration_ms: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface SpotifyData {
|
||||||
|
song?: {
|
||||||
|
title: string
|
||||||
|
artist: string[]
|
||||||
|
url: string
|
||||||
|
image: string
|
||||||
|
progress: number
|
||||||
|
duration: number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -10,20 +10,20 @@ export class SongResultMap {
|
||||||
const { item } = result
|
const { item } = result
|
||||||
|
|
||||||
return {
|
return {
|
||||||
progress: result.progress_ms,
|
name: item.name,
|
||||||
title: item.name,
|
|
||||||
album: {
|
album: {
|
||||||
name: item.album.name,
|
name: item.album.name,
|
||||||
image: item.album.images[0]?.url,
|
image: item.album.images[0]?.url,
|
||||||
release: item.album.release,
|
release_date: item.album.release_date,
|
||||||
},
|
},
|
||||||
artists: {
|
artists: {
|
||||||
name: item.artists.map((x: Artist) => x.name),
|
name: item.artists.map((x: Artist) => x.name),
|
||||||
url: item.artists.map((x: Artist) => x.external_urls.spotify),
|
url: item.artists.map((x: Artist) => x.external_urls.spotify),
|
||||||
},
|
},
|
||||||
url: item.external_urls.spotify,
|
url: item.external_urls.spotify,
|
||||||
length: item.duration_ms,
|
progress: result.progress_ms,
|
||||||
isPlaying: result.is_playing,
|
duration: item.duration_ms,
|
||||||
|
is_playing: result.is_playing,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
export type SongResult = {
|
export type SongResult = {
|
||||||
progress: number
|
is_playing: boolean
|
||||||
|
name: string
|
||||||
album: {
|
album: {
|
||||||
name: string
|
name: string
|
||||||
image?: string
|
image?: string
|
||||||
release: string[]
|
release_date: string
|
||||||
}
|
}
|
||||||
artists: {
|
artists: {
|
||||||
name: string[]
|
name: string[]
|
||||||
url: string[]
|
url: string[]
|
||||||
}
|
}
|
||||||
url: string
|
url: string
|
||||||
title: string
|
progress: number
|
||||||
length: number
|
duration: number
|
||||||
isPlaying: boolean
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue