YesPlayMusic/packages/web/IpcRendererReact.tsx

61 lines
1.7 KiB
TypeScript
Raw Normal View History

import { IpcChannels } from '@/shared/IpcChannels'
import useUserLikedTracksIDs, {
useMutationLikeATrack,
2022-05-29 17:53:27 +08:00
} from '@/web/api/hooks/useUserLikedTracksIDs'
2022-05-12 02:45:43 +08:00
import { player } from '@/web/store'
import useIpcRenderer from '@/web/hooks/useIpcRenderer'
import { State as PlayerState } from '@/web/utils/player'
2022-06-11 00:19:07 +08:00
import { useEffect, useRef, useState } from 'react'
2022-05-12 02:45:43 +08:00
import { useEffectOnce } from 'react-use'
import { useSnapshot } from 'valtio'
const IpcRendererReact = () => {
const [isPlaying, setIsPlaying] = useState(false)
2022-06-11 00:19:07 +08:00
const { track, state } = useSnapshot(player)
const trackIDRef = useRef(0)
// Liked songs ids
const { data: userLikedSongs } = useUserLikedTracksIDs()
const mutationLikeATrack = useMutationLikeATrack()
useIpcRenderer(IpcChannels.Like, () => {
const id = trackIDRef.current
id && mutationLikeATrack.mutate(id)
})
useEffect(() => {
trackIDRef.current = track?.id ?? 0
const text = track?.name ? `${track.name} - YesPlayMusic` : 'YesPlayMusic'
window.ipcRenderer?.send(IpcChannels.SetTrayTooltip, {
text,
})
document.title = text
}, [track])
useEffect(() => {
window.ipcRenderer?.send(IpcChannels.Like, {
isLiked: userLikedSongs?.ids?.includes(track?.id ?? 0) ?? false,
})
}, [userLikedSongs, track])
useEffect(() => {
const playing = [PlayerState.Playing, PlayerState.Loading].includes(state)
if (isPlaying === playing) return
window.ipcRenderer?.send(playing ? IpcChannels.Play : IpcChannels.Pause)
setIsPlaying(playing)
2022-06-14 23:23:34 +08:00
}, [isPlaying, state])
useEffectOnce(() => {
// 用于显示 windows taskbar buttons
2022-06-11 00:19:07 +08:00
if (track?.id) {
window.ipcRenderer?.send(IpcChannels.Pause)
}
})
return <></>
}
export default IpcRendererReact