common/parseMessage.ts
2024-05-04 16:09:35 +02:00

90 lines
3.1 KiB
TypeScript

import {
AddSongToPlaylist,
ChatMessage,
CreatePlaylist,
CurrentQueue,
CurrentSong,
GetPlaylist,
Join,
ListenerList,
Playlists,
PlaylistSongs,
GetOtherPlaylists,
QueueSong, RemoveFromAutoPlay, RemovePlaylist,
RemoveSongFromPlaylist,
ReorderSong,
SearchSong,
SearchSongResult,
SendChatMessage, Shuffle,
SkipSong,
SongLikes,
StuenMessage,
ToggleSongLike, ToggleTag,
UnqueueSong,
} from "./messageTypes";
export default function parseMessage(message: string): StuenMessage | null {
try {
const data = JSON.parse(message);
switch (data.type) {
case 'Join':
return new Join(data.name);
case 'ListenerList':
return new ListenerList(data.names);
case 'SendChatMessage':
return new SendChatMessage(data.message);
case 'ChatMessage':
return new ChatMessage(data.name, data.message);
case 'SearchSong':
return new SearchSong(data.query);
case 'SearchSongResult':
return new SearchSongResult(data.result);
case 'QueueSong':
return new QueueSong(data.song);
case 'CurrentQueue':
return new CurrentQueue(data.songs)
case 'CurrentSong':
return new CurrentSong(data.song);
case 'UnqueueSong':
return new UnqueueSong(data.position, data.all);
case 'ReorderSong':
return new ReorderSong(data.positionToMove, data.placePosition);
case 'SkipSong':
return new SkipSong();
case 'ToggleSongLike':
return new ToggleSongLike();
case 'SongLikes':
return new SongLikes(data.listeners);
case 'Playlists':
return new Playlists(data.playlists);
case 'GetPlaylist':
return new GetPlaylist(data.playlist);
case 'PlaylistSongs':
return new PlaylistSongs(data.playlist);
case 'CreatePlaylist':
return new CreatePlaylist(data.title);
case 'RemovePlaylist':
return new RemovePlaylist(data.title);
case 'AddSongToPlaylist':
return new AddSongToPlaylist(data.song, data.playlist);
case 'RemoveSongFromPlaylist':
return new RemoveSongFromPlaylist(data.song, data.playlist);
case 'GetOtherPlaylists':
return new GetOtherPlaylists();
case 'ToggleTag':
return new ToggleTag(data.song, data.tag);
case 'Shuffle':
return new Shuffle();
case 'RemoveFromAutoPlay':
return new RemoveFromAutoPlay();
default:
console.error('Unknown message type:', data.type);
return null;
}
} catch (error) {
console.error('Error parsing WebSocket message:', error);
return null; // Handle parsing errors
}
}