import { ipcRenderer, IpcRendererEvent } from 'electron'; import { subscribe } from './subscribe'; import { QueueSong } from '/@/shared/types/domain-types'; import { PlayerStatus } from '/@/shared/types/types'; const requestFavorite = ( cb: ( event: IpcRendererEvent, data: { favorite: boolean; id: string; serverId: string }, ) => void, ) => subscribe('request-favorite', cb); const requestPosition = (cb: (event: IpcRendererEvent, data: { position: number }) => void) => subscribe('request-position', cb); const requestSeek = (cb: (event: IpcRendererEvent, data: { offset: number }) => void) => subscribe('request-seek', cb); const requestVolume = (cb: (event: IpcRendererEvent, data: { volume: number }) => void) => subscribe('request-volume', cb); const setRemoteEnabled = (enabled: boolean): Promise => { const result = ipcRenderer.invoke('remote-enable', enabled); return result; }; const setRemotePort = (port: number): Promise => { const result = ipcRenderer.invoke('remote-port', port); return result; }; const updateFavorite = (favorite: boolean, serverId: string, ids: string[]) => { ipcRenderer.send('update-favorite', favorite, serverId, ids); }; const updatePassword = (password: string) => { ipcRenderer.send('remote-password', password); }; const updatePlayback = (playback: PlayerStatus) => { ipcRenderer.send('update-playback', playback); }; const updateSetting = ( enabled: boolean, port: number, username: string, password: string, ): Promise => { return ipcRenderer.invoke('remote-settings', enabled, port, username, password); }; const updateRepeat = (repeat: string) => { ipcRenderer.send('update-repeat', repeat); }; const updateShuffle = (shuffle: boolean) => { ipcRenderer.send('update-shuffle', shuffle); }; const updateSong = (song: QueueSong | undefined, imageUrl?: null | string) => { ipcRenderer.send('update-song', song, imageUrl); }; const updateUsername = (username: string) => { ipcRenderer.send('remote-username', username); }; const updateVolume = (volume: number) => { ipcRenderer.send('update-volume', volume); }; const updatePosition = (timeSec: number) => { ipcRenderer.send('update-position', timeSec); }; export const remote = { requestFavorite, requestPosition, requestSeek, requestVolume, setRemoteEnabled, setRemotePort, updateFavorite, updatePassword, updatePlayback, updatePosition, updateRepeat, updateSetting, updateShuffle, updateSong, updateUsername, updateVolume, }; export type Remote = typeof remote;