diff --git a/src/main/cache.ts b/src/main/cache.ts index b719be8..9f29386 100644 --- a/src/main/cache.ts +++ b/src/main/cache.ts @@ -275,7 +275,12 @@ class Cache { fs.unlinkSync(path) return res.status(404).send({ error: 'Audio not found' }) } - res.send(audio) + res + .status(206) + .setHeader('Accept-Ranges', 'bytes') + .setHeader('Connection', 'keep-alive') + .setHeader('Content-Range', `bytes 0-${audio.byteLength - 1}/${audio.byteLength}`) + .send(audio) } catch (error) { res.status(500).send({ error }) } diff --git a/src/renderer/api/personalFM.ts b/src/renderer/api/personalFM.ts index f4614bf..a627db4 100644 --- a/src/renderer/api/personalFM.ts +++ b/src/renderer/api/personalFM.ts @@ -95,6 +95,9 @@ export function fetchPersonalFM(): Promise { return request({ url: '/personal/fm', method: 'get', + params: { + timestamp: Date.now(), + }, }) } @@ -110,6 +113,7 @@ export function fmTrash(id: number): Promise { method: 'post', params: { id, + timestamp: Date.now(), }, }) } diff --git a/src/renderer/api/playlist.ts b/src/renderer/api/playlist.ts index ad634d2..c079bea 100644 --- a/src/renderer/api/playlist.ts +++ b/src/renderer/api/playlist.ts @@ -44,6 +44,9 @@ export function fetchDailyRecommendPlaylists(): Promise diff --git a/src/renderer/pages/Login.tsx b/src/renderer/pages/Login.tsx index 8764762..60afb0e 100644 --- a/src/renderer/pages/Login.tsx +++ b/src/renderer/pages/Login.tsx @@ -17,6 +17,8 @@ enum Method { Phone = 'phone', } +const domParser = new DOMParser() + // Shared components and methods const EmailInput = ({ email, @@ -367,23 +369,34 @@ const LoginWithQRCode = () => { useEffect(() => { const updateImage = async () => { - const image = await QRCode.toDataURL(qrCodeUrl, { - width: 1024, + const svg = await QRCode.toString(qrCodeUrl, { margin: 0, color: { - dark: '#335eea', // TODO: change brand color light: '#ffffff00', }, + type: 'svg', }) - setQrCodeImage(image) + const path = domParser + .parseFromString(svg, 'text/xml') + .getElementsByTagName('path')[0] + + setQrCodeImage(path?.getAttribute('d') ?? '') } updateImage() }, [qrCodeUrl]) return (
-
- QR Code +
+ + +
{qrCodeMessage} diff --git a/src/renderer/pages/Search/Search.tsx b/src/renderer/pages/Search/Search.tsx index b21951b..7f04140 100644 --- a/src/renderer/pages/Search/Search.tsx +++ b/src/renderer/pages/Search/Search.tsx @@ -98,7 +98,7 @@ const Search = () => { const handlePlayTracks = useCallback( (trackID: number | null = null) => { - const tracks = searchResult?.result.song.songs + const tracks = searchResult?.result?.song?.songs if (!tracks?.length) { toast('无法播放歌单') return @@ -108,7 +108,7 @@ const Search = () => { trackID ) }, - [searchResult?.result.song.songs] + [searchResult?.result?.song?.songs] ) const navigate = useNavigate() @@ -163,21 +163,21 @@ const Search = () => { {/* Search result */}
- {searchResult?.result.artist.artists && ( + {searchResult?.result?.artist?.artists && (
艺人
)} - {searchResult?.result.album.albums && ( + {searchResult?.result?.album?.albums && (
专辑
)} - {searchResult?.result.song.songs && ( + {searchResult?.result?.song?.songs && (
歌曲
r.id) ?? [])) + const ids = (response?.data?.map(r => r.id) ?? []).filter( + r => !this.fmTrackList.includes(r) + ) + this.fmTrackList.push(...ids) } }