diff --git a/dataTypes.ts b/dataTypes.ts index fd7cac7..45722a7 100644 --- a/dataTypes.ts +++ b/dataTypes.ts @@ -21,3 +21,8 @@ export class PlayingSong extends QueuedSong { super(type, title, songId, image, listener); } } + +export class Playlist { + constructor(public title: string, public listener: string, public songs: Song[]) { + } +} diff --git a/dist/dataTypes.d.ts b/dist/dataTypes.d.ts index 64ec72b..2edd0c9 100644 --- a/dist/dataTypes.d.ts +++ b/dist/dataTypes.d.ts @@ -18,3 +18,9 @@ export declare class PlayingSong extends QueuedSong { position: number; constructor(type: SongType, title: string, songId: string, image: string, listener: string, length: number, position: number); } +export declare class Playlist { + title: string; + listener: string; + songs: Song[]; + constructor(title: string, listener: string, songs: Song[]); +} diff --git a/dist/dataTypes.js b/dist/dataTypes.js index 4cc9b47..1aa5843 100644 --- a/dist/dataTypes.js +++ b/dist/dataTypes.js @@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); exports.__esModule = true; -exports.PlayingSong = exports.QueuedSong = exports.Song = exports.SongType = void 0; +exports.Playlist = exports.PlayingSong = exports.QueuedSong = exports.Song = exports.SongType = void 0; var SongType; (function (SongType) { SongType[SongType["YouTube"] = 0] = "YouTube"; @@ -52,3 +52,12 @@ var PlayingSong = /** @class */ (function (_super) { return PlayingSong; }(QueuedSong)); exports.PlayingSong = PlayingSong; +var Playlist = /** @class */ (function () { + function Playlist(title, listener, songs) { + this.title = title; + this.listener = listener; + this.songs = songs; + } + return Playlist; +}()); +exports.Playlist = Playlist; diff --git a/dist/messageTypes.d.ts b/dist/messageTypes.d.ts index 32d5abb..0b88030 100644 --- a/dist/messageTypes.d.ts +++ b/dist/messageTypes.d.ts @@ -1,5 +1,5 @@ -import { Song, PlayingSong, QueuedSong } from "./dataTypes"; -export declare type StuenMessages = ListenerLeft | ListenerList | ListenerJoined | SendChatMessage | SearchSong | SearchSongResult | Join | QueueSong | CurrentQueue | CurrentSong | UnqueueSong | ReorderSong | SkipSong | SongLikes | ToggleSongLike; +import { Song, PlayingSong, QueuedSong, Playlist } from "./dataTypes"; +export declare type StuenMessages = ListenerLeft | ListenerList | ListenerJoined | SendChatMessage | SearchSong | SearchSongResult | Join | QueueSong | CurrentQueue | CurrentSong | UnqueueSong | ReorderSong | SkipSong | SongLikes | CreatePlaylist | ToggleSongLike | AddSongToPlaylist | RemoveSongFromPlaylist | Playlists; export declare abstract class StuenMessage { type: string; constructor(type: string); @@ -69,3 +69,21 @@ export declare class SongLikes extends StuenMessage { listeners: string[]; constructor(listeners: string[]); } +export declare class CreatePlaylist extends StuenMessage { + title: string; + constructor(title: string); +} +export declare class Playlists extends StuenMessage { + playlists: Playlist[]; + constructor(playlists: Playlist[]); +} +export declare class AddSongToPlaylist extends StuenMessage { + song: Song; + playlist: string; + constructor(song: Song, playlist: string); +} +export declare class RemoveSongFromPlaylist extends StuenMessage { + song: Song; + playlist: string; + constructor(song: Song, playlist: string); +} diff --git a/dist/messageTypes.js b/dist/messageTypes.js index e9925ff..3343d0c 100644 --- a/dist/messageTypes.js +++ b/dist/messageTypes.js @@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); exports.__esModule = true; -exports.SongLikes = exports.ToggleSongLike = exports.SkipSong = exports.ReorderSong = exports.UnqueueSong = exports.CurrentSong = exports.CurrentQueue = exports.QueueSong = exports.SearchSongResult = exports.SearchSong = exports.ChatMessage = exports.SendChatMessage = exports.ListenerList = exports.ListenerLeft = exports.ListenerJoined = exports.Join = exports.StuenMessage = void 0; +exports.RemoveSongFromPlaylist = exports.AddSongToPlaylist = exports.Playlists = exports.CreatePlaylist = exports.SongLikes = exports.ToggleSongLike = exports.SkipSong = exports.ReorderSong = exports.UnqueueSong = exports.CurrentSong = exports.CurrentQueue = exports.QueueSong = exports.SearchSongResult = exports.SearchSong = exports.ChatMessage = exports.SendChatMessage = exports.ListenerList = exports.ListenerLeft = exports.ListenerJoined = exports.Join = exports.StuenMessage = void 0; var StuenMessage = /** @class */ (function () { function StuenMessage(type) { this.type = type; @@ -183,3 +183,45 @@ var SongLikes = /** @class */ (function (_super) { return SongLikes; }(StuenMessage)); exports.SongLikes = SongLikes; +var CreatePlaylist = /** @class */ (function (_super) { + __extends(CreatePlaylist, _super); + function CreatePlaylist(title) { + var _this = _super.call(this, 'CreatePlaylist') || this; + _this.title = title; + return _this; + } + return CreatePlaylist; +}(StuenMessage)); +exports.CreatePlaylist = CreatePlaylist; +var Playlists = /** @class */ (function (_super) { + __extends(Playlists, _super); + function Playlists(playlists) { + var _this = _super.call(this, 'Playlists') || this; + _this.playlists = playlists; + return _this; + } + return Playlists; +}(StuenMessage)); +exports.Playlists = Playlists; +var AddSongToPlaylist = /** @class */ (function (_super) { + __extends(AddSongToPlaylist, _super); + function AddSongToPlaylist(song, playlist) { + var _this = _super.call(this, 'AddSongToPlaylist') || this; + _this.song = song; + _this.playlist = playlist; + return _this; + } + return AddSongToPlaylist; +}(StuenMessage)); +exports.AddSongToPlaylist = AddSongToPlaylist; +var RemoveSongFromPlaylist = /** @class */ (function (_super) { + __extends(RemoveSongFromPlaylist, _super); + function RemoveSongFromPlaylist(song, playlist) { + var _this = _super.call(this, 'RemoveSongToPlaylist') || this; + _this.song = song; + _this.playlist = playlist; + return _this; + } + return RemoveSongFromPlaylist; +}(StuenMessage)); +exports.RemoveSongFromPlaylist = RemoveSongFromPlaylist; diff --git a/dist/parseMessage.js b/dist/parseMessage.js index 539ee15..a8353af 100644 --- a/dist/parseMessage.js +++ b/dist/parseMessage.js @@ -37,6 +37,14 @@ function parseMessage(message) { return new messageTypes_1.ToggleSongLike(); case 'SongLikes': return new messageTypes_1.SongLikes(data.listeners); + case 'Playlists': + return new messageTypes_1.Playlists(data.playlists); + case 'CreatePlaylist': + return new messageTypes_1.CreatePlaylist(data.title); + case 'AddSongToPlaylist': + return new messageTypes_1.AddSongToPlaylist(data.song, data.playlist); + case 'RemoveSongFromPlaylist': + return new messageTypes_1.RemoveSongFromPlaylist(data.song, data.playlist); default: console.error('Unknown message type:', data.type); return null; diff --git a/messageTypes.ts b/messageTypes.ts index 852ccea..fe686d4 100644 --- a/messageTypes.ts +++ b/messageTypes.ts @@ -1,4 +1,4 @@ -import {Song, PlayingSong, QueuedSong} from "./dataTypes"; +import {Song, PlayingSong, QueuedSong, Playlist} from "./dataTypes"; export type StuenMessages = ListenerLeft @@ -15,7 +15,11 @@ export type StuenMessages = | ReorderSong | SkipSong | SongLikes - | ToggleSongLike; + | CreatePlaylist + | ToggleSongLike + | AddSongToPlaylist + | RemoveSongFromPlaylist + | Playlists; export abstract class StuenMessage { constructor(public type: string) { @@ -120,3 +124,27 @@ export class SongLikes extends StuenMessage { super('SongLikes'); } } + +export class CreatePlaylist extends StuenMessage { + constructor(public title: string) { + super('CreatePlaylist'); + } +} + +export class Playlists extends StuenMessage { + constructor(public playlists: Playlist[]) { + super('Playlists'); + } +} + +export class AddSongToPlaylist extends StuenMessage { + constructor(public song: Song, public playlist: string) { + super('AddSongToPlaylist'); + } +} + +export class RemoveSongFromPlaylist extends StuenMessage { + constructor(public song: Song, public playlist: string) { + super('RemoveSongToPlaylist'); + } +} diff --git a/parseMessage.ts b/parseMessage.ts index bd2a12a..81cfb5e 100644 --- a/parseMessage.ts +++ b/parseMessage.ts @@ -1,9 +1,10 @@ import { - ChatMessage, CurrentQueue, CurrentSong, + AddSongToPlaylist, + ChatMessage, CreatePlaylist, CurrentQueue, CurrentSong, Join, ListenerJoined, ListenerLeft, - ListenerList, QueueSong, ReorderSong, SearchSong, SearchSongResult, + ListenerList, Playlists, QueueSong, RemoveSongFromPlaylist, ReorderSong, SearchSong, SearchSongResult, SendChatMessage, SkipSong, SongLikes, StuenMessage, ToggleSongLike, UnqueueSong } from "./messageTypes"; @@ -45,6 +46,14 @@ export default function parseMessage(message: string): StuenMessage | null { return new ToggleSongLike(); case 'SongLikes': return new SongLikes(data.listeners); + case 'Playlists': + return new Playlists(data.playlists); + case 'CreatePlaylist': + return new CreatePlaylist(data.title); + case 'AddSongToPlaylist': + return new AddSongToPlaylist(data.song, data.playlist); + case 'RemoveSongFromPlaylist': + return new RemoveSongFromPlaylist(data.song, data.playlist); default: console.error('Unknown message type:', data.type); return null;