123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 'use strict';
- const global = require('./global');
- const io = global.io;
- let stations = [];
- module.exports = {
- Station: class Station {
- constructor(id, data) {
- this.nsp = io.of(id);
- this.nsp.on('connection', socket => {
- console.log('someone connected');
- });
- this.id = id;
- this.playlist = data.playlist;
- this.currentSongIndex = data.currentSongIndex;
- this.currentSong = this.playlist[this.currentSongIndex];
- this.paused = data.paused;
- this.locked = data.locked;
- this.skipVotes = 0;
- this.users = [];
- this.displayName = data.displayName;
- this.description = data.description;
- this.timer = undefined;
- this.skipSong();
- }
- skipSong() {
- if (this.playlist.length > 0) {
- if (this.timer !== undefined) this.timer.pause();
- if (this.currentSongIndex + 1 < this.playlist.length) this.currentSongIndex++;
- else this.currentSongIndex = 0;
- this.skipVotes = 0;
- this.currentSong = this.playlist[this.currentSongIndex];
- var self = this;
- this.timer = new global.Timer(() => {
- self.skipSong();
- }, this.currentSong.duration, this.paused);
- this.currentSong.startedAt = Date.now();
- this.nsp.emit("skippedSong", this.currentSong);
- }
- }
- toggleVoteSkip(userId) {
- if (this.skipVotes.indexOf(userId) === -1) this.skipVotes.push(userId);
- else this.skipVotes = this.skipVotes.splice(this.skipVotes.indexOf(userId), 1);
- // TODO: Calculate if enough people voted to skip
- this.nsp.emit("voteSkip", this.skipVotes);
- }
- retrievePlaylist() {
- // TODO: get the Playlist for this station using db
- }
- pause() {
- if (!this.paused) {
- this.paused = true;
- this.timer.pause();
- this.snp.emit("pause");
- }
- }
- unPause() {
- if (this.paused) {
- this.paused = false;
- this.timer.resume();
- this.snp.emit("unpause");
- }
- }
- isPaused() {
- return this.paused;
- }
- getCurrentSong() {
- return this.currentSong;
- }
- lock() {
- if (!this.locked) {
- this.locked = true;
- this.snp.emit("lock");
- }
- }
- unlock() {
- if (this.locked) {
- this.locked = false;
- this.snp.emit("unlocked");
- }
- }
- isLocked() {
- return this.locked;
- }
- updateDisplayName(newDisplayName) {
- // TODO: Update db
- this.displayName = newDisplayName;
- this.snp.emit("updateDisplayName", newDisplayName);
- }
- updateDescription(newDescription) {
- // TODO: Update db
- this.description = newDescription;
- this.snp.emit("updateDescription", newDescription);
- }
- getId() {
- return this.id;
- }
- getDisplayName() {
- return this.displayName;
- }
- getDescription() {
- return this.description;
- }
- addUser(user) {
- this.users.add(user);
- this.snp.emit("updateUsers", this.users);
- }
- removeUser(user) {
- this.users.splice(this.users.indexOf(user), 1);
- this.snp.emit("updateUsers", this.users);
- }
- getUsers() {
- return this.users;
- }
- },
- addStation: station => {
- stations.push(station);
- },
- getStation: id => {
- let result;
- stations.forEach(function(station) {
- if (station.getId() === id) {
- result = station;
- }
- });
- return result;
- },
- getStations: () => {
- return stations;
- }
- };
|