Browse Source

Fixed new song in party mode status and requestedBy issue, and Travis issue

Owen Diffey 4 years ago
parent
commit
0a22666ff1

+ 0 - 2
backend/logic/actions/index.js

@@ -1,6 +1,5 @@
 import apis from "./apis";
 import songs from "./songs";
-import queueSongs from "./queueSongs";
 import stations from "./stations";
 import playlists from "./playlists";
 import users from "./users";
@@ -13,7 +12,6 @@ import utils from "./utils";
 export default {
 	apis,
 	songs,
-	queueSongs,
 	stations,
 	playlists,
 	users,

+ 1 - 1
backend/logic/actions/playlists.js

@@ -875,7 +875,7 @@ export default {
 						.catch(next);
 				},
 				(position, next) => {
-					SongsModule.runJob("ENSURE_SONG_EXISTS_BY_SONG_ID", { songId }, this)
+					SongsModule.runJob("ENSURE_SONG_EXISTS_BY_SONG_ID", { songId, userId: session.userId }, this)
 						.then(response => {
 							const { song } = response;
 							const { _id, title, thumbnail, duration, status } = song;

+ 0 - 425
backend/logic/actions/queueSongs.js

@@ -1,425 +0,0 @@
-import config from "config";
-
-import async from "async";
-
-import { isAdminRequired, isLoginRequired } from "./hooks";
-
-import moduleManager from "../../index";
-
-const DBModule = moduleManager.modules.db;
-const UtilsModule = moduleManager.modules.utils;
-const WSModule = moduleManager.modules.ws;
-const YouTubeModule = moduleManager.modules.youtube;
-const CacheModule = moduleManager.modules.cache;
-
-// CacheModule.runJob("SUB", {
-// 	channel: "queue.newSong",
-// 	cb: async songId => {
-// 		const queueSongModel = await DBModule.runJob("GET_MODEL", {
-// 			modelName: "queueSong"
-// 		});
-// 		queueSongModel.findOne({ _id: songId }, (err, song) => {
-// 			WSModule.runJob("EMIT_TO_ROOM", {
-// 				room: "admin.queue",
-// 				args: ["event:admin.queueSong.added", song]
-// 			});
-// 		});
-// 	}
-// });
-
-// CacheModule.runJob("SUB", {
-// 	channel: "queue.removedSong",
-// 	cb: songId => {
-// 		WSModule.runJob("EMIT_TO_ROOM", {
-// 			room: "admin.queue",
-// 			args: ["event:admin.queueSong.removed", songId]
-// 		});
-// 	}
-// });
-
-// CacheModule.runJob("SUB", {
-// 	channel: "queue.update",
-// 	cb: async songId => {
-// 		const queueSongModel = await DBModule.runJob("GET_MODEL", {
-// 			modelName: "queueSong"
-// 		});
-
-// 		queueSongModel.findOne({ _id: songId }, (err, song) => {
-// 			WSModule.runJob("EMIT_TO_ROOM", {
-// 				room: "admin.queue",
-// 				args: ["event:admin.queueSong.updated", song]
-// 			});
-// 		});
-// 	}
-// });
-
-export default {
-	// /**
-	//  * Returns the length of the queue songs list
-	//  *
-	//  * @param session
-	//  * @param cb
-	//  */
-	// length: isAdminRequired(async function length(session, cb) {
-	// 	const queueSongModel = await DBModule.runJob("GET_MODEL", { modelName: "queueSong" }, this);
-	// 	async.waterfall(
-	// 		[
-	// 			next => {
-	// 				queueSongModel.countDocuments({}, next);
-	// 			}
-	// 		],
-	// 		async (err, count) => {
-	// 			if (err) {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log("ERROR", "QUEUE_SONGS_LENGTH", `Failed to get length from queue songs. "${err}"`);
-	// 				return cb({ status: "failure", message: err });
-	// 			}
-	// 			this.log("SUCCESS", "QUEUE_SONGS_LENGTH", `Got length from queue songs successfully.`);
-	// 			return cb(count);
-	// 		}
-	// 	);
-	// }),
-	// /**
-	//  * Gets a set of queue songs
-	//  *
-	//  * @param session
-	//  * @param set - the set number to return
-	//  * @param cb
-	//  */
-	// getSet: isAdminRequired(async function getSet(session, set, cb) {
-	// 	const queueSongModel = await DBModule.runJob(
-	// 		"GET_MODEL",
-	// 		{
-	// 			modelName: "queueSong"
-	// 		},
-	// 		this
-	// 	);
-	// 	async.waterfall(
-	// 		[
-	// 			next => {
-	// 				queueSongModel
-	// 					.find({})
-	// 					.skip(15 * (set - 1))
-	// 					.limit(15)
-	// 					.exec(next);
-	// 			}
-	// 		],
-	// 		async (err, songs) => {
-	// 			if (err) {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log("ERROR", "QUEUE_SONGS_GET_SET", `Failed to get set from queue songs. "${err}"`);
-	// 				return cb({ status: "failure", message: err });
-	// 			}
-	// 			this.log("SUCCESS", "QUEUE_SONGS_GET_SET", `Got set from queue songs successfully.`);
-	// 			return cb(songs);
-	// 		}
-	// 	);
-	// }),
-	// /**
-	//  * Gets a song from the Musare song id
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param {string} songId - the Musare song id
-	//  * @param {Function} cb
-	//  */
-	// getSongFromMusareId: isAdminRequired(async function getSong(session, songId, cb) {
-	// 	const queueSongModel = await DBModule.runJob(
-	// 		"GET_MODEL",
-	// 		{
-	// 			modelName: "queueSong"
-	// 		},
-	// 		this
-	// 	);
-	// 	async.waterfall(
-	// 		[
-	// 			next => {
-	// 				queueSongModel.findOne({ _id: songId }, next);
-	// 			}
-	// 		],
-	// 		async (err, song) => {
-	// 			if (err) {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log("ERROR", "QUEUE_SONGS_GET_SONG_FROM_MUSARE_ID", `Failed to get song ${songId}. "${err}"`);
-	// 				return cb({ status: "failure", message: err });
-	// 			}
-	// 			this.log("SUCCESS", "QUEUE_SONGS_GET_SONG_FROM_MUSARE_ID", `Got song ${songId} successfully.`);
-	// 			return cb({ status: "success", data: { song } });
-	// 		}
-	// 	);
-	// }),
-	// /**
-	//  * Updates a queuesong
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param {string} songId - the id of the queuesong that gets updated
-	//  * @param {object} updatedSong - the object of the updated queueSong
-	//  * @param {Function} cb - gets called with the result
-	//  */
-	// update: isAdminRequired(async function update(session, songId, updatedSong, cb) {
-	// 	const queueSongModel = await DBModule.runJob(
-	// 		"GET_MODEL",
-	// 		{
-	// 			modelName: "queueSong"
-	// 		},
-	// 		this
-	// 	);
-	// 	async.waterfall(
-	// 		[
-	// 			next => {
-	// 				queueSongModel.findOne({ _id: songId }, next);
-	// 			},
-	// 			(song, next) => {
-	// 				if (!song) return next("Song not found");
-	// 				let updated = false;
-	// 				const $set = {};
-	// 				Object.keys(updatedSong).forEach(prop => {
-	// 					if (updatedSong[prop] !== song[prop]) $set[prop] = updatedSong[prop];
-	// 				});
-	// 				updated = true;
-	// 				if (!updated) return next("No properties changed");
-	// 				return queueSongModel.updateOne({ _id: songId }, { $set }, { runValidators: true }, next);
-	// 			}
-	// 		],
-	// 		async err => {
-	// 			if (err) {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log(
-	// 					"ERROR",
-	// 					"QUEUE_UPDATE",
-	// 					`Updating queuesong "${songId}" failed for user ${session.userId}. "${err}"`
-	// 				);
-	// 				return cb({ status: "failure", message: err });
-	// 			}
-	// 			CacheModule.runJob("PUB", { channel: "queue.update", value: songId });
-	// 			this.log(
-	// 				"SUCCESS",
-	// 				"QUEUE_UPDATE",
-	// 				`User "${session.userId}" successfully update queuesong "${songId}".`
-	// 			);
-	// 			return cb({
-	// 				status: "success",
-	// 				message: "Successfully updated song."
-	// 			});
-	// 		}
-	// 	);
-	// }),
-	// /**
-	//  * Removes a queuesong
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param {string} songId - the id of the queuesong that gets removed
-	//  * @param {Function} cb - gets called with the result
-	//  */
-	// remove: isAdminRequired(async function remove(session, songId, cb) {
-	// 	const queueSongModel = await DBModule.runJob(
-	// 		"GET_MODEL",
-	// 		{
-	// 			modelName: "queueSong"
-	// 		},
-	// 		this
-	// 	);
-	// 	async.waterfall(
-	// 		[
-	// 			next => {
-	// 				queueSongModel.deleteOne({ _id: songId }, next);
-	// 			}
-	// 		],
-	// 		async err => {
-	// 			if (err) {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log(
-	// 					"ERROR",
-	// 					"QUEUE_REMOVE",
-	// 					`Removing queuesong "${songId}" failed for user ${session.userId}. "${err}"`
-	// 				);
-	// 				return cb({ status: "failure", message: err });
-	// 			}
-	// 			CacheModule.runJob("PUB", {
-	// 				channel: "queue.removedSong",
-	// 				value: songId
-	// 			});
-	// 			this.log(
-	// 				"SUCCESS",
-	// 				"QUEUE_REMOVE",
-	// 				`User "${session.userId}" successfully removed queuesong "${songId}".`
-	// 			);
-	// 			return cb({
-	// 				status: "success",
-	// 				message: "Successfully updated song."
-	// 			});
-	// 		}
-	// 	);
-	// }),
-	// /**
-	//  * Creates a queuesong
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param {string} songId - the id of the song that gets added
-	//  * @param {Function} cb - gets called with the result
-	//  */
-	// add: isLoginRequired(async function add(session, songId, cb) {
-	// 	const requestedAt = Date.now();
-	// 	const songModel = await DBModule.runJob("GET_MODEL", { modelName: "song" }, this);
-	// 	const userModel = await DBModule.runJob("GET_MODEL", { modelName: "user" }, this);
-	// 	const QueueSongModel = await DBModule.runJob(
-	// 		"GET_MODEL",
-	// 		{
-	// 			modelName: "queueSong"
-	// 		},
-	// 		this
-	// 	);
-	// 	async.waterfall(
-	// 		[
-	// 			next => {
-	// 				QueueSongModel.findOne({ songId }, next);
-	// 			},
-	// 			(song, next) => {
-	// 				if (song) return next("This song is already in the queue.");
-	// 				return songModel.findOne({ songId }, next);
-	// 			},
-	// 			// Get YouTube data from id
-	// 			(song, next) => {
-	// 				if (song) return next("This song has already been added.");
-	// 				// TODO Add err object as first param of callback
-	// 				return YouTubeModule.runJob("GET_SONG", { songId }, this)
-	// 					.then(response => {
-	// 						const { song } = response;
-	// 						song.duration = -1;
-	// 						song.artists = [];
-	// 						song.genres = [];
-	// 						song.skipDuration = 0;
-	// 						song.thumbnail = `${config.get("domain")}/assets/notes.png`;
-	// 						song.explicit = false;
-	// 						song.requestedBy = session.userId;
-	// 						song.requestedAt = requestedAt;
-	// 						next(null, song);
-	// 					})
-	// 					.catch(next);
-	// 			},
-	// 			(newSong, next) => {
-	// 				const song = new QueueSongModel(newSong);
-	// 				song.save({ validateBeforeSave: false }, (err, song) => {
-	// 					if (err) return next(err);
-	// 					return next(null, song);
-	// 				});
-	// 			},
-	// 			(newSong, next) => {
-	// 				userModel.findOne({ _id: session.userId }, (err, user) => {
-	// 					if (err) return next(err, newSong);
-	// 					user.statistics.songsRequested += 1;
-	// 					return user.save(err => {
-	// 						if (err) return next(err, newSong);
-	// 						return next(null, newSong);
-	// 					});
-	// 				});
-	// 			}
-	// 		],
-	// 		async (err, newSong) => {
-	// 			if (err) {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log(
-	// 					"ERROR",
-	// 					"QUEUE_ADD",
-	// 					`Adding queuesong "${songId}" failed for user ${session.userId}. "${err}"`
-	// 				);
-	// 				return cb({ status: "failure", message: err });
-	// 			}
-	// 			CacheModule.runJob("PUB", {
-	// 				channel: "queue.newSong",
-	// 				value: newSong._id
-	// 			});
-	// 			this.log("SUCCESS", "QUEUE_ADD", `User "${session.userId}" successfully added queuesong "${songId}".`);
-	// 			return cb({
-	// 				status: "success",
-	// 				message: "Successfully added that song to the queue"
-	// 			});
-	// 		}
-	// 	);
-	// }),
-	// /**
-	//  * Adds a set of songs to the queue
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param {string} url - the url of the the YouTube playlist
-	//  * @param {boolean} musicOnly - whether to only get music from the playlist
-	//  * @param {Function} cb - gets called with the result
-	//  */
-	// addSetToQueue: isLoginRequired(function addSetToQueue(session, url, musicOnly, cb) {
-	// 	async.waterfall(
-	// 		[
-	// 			next => {
-	// 				YouTubeModule.runJob(
-	// 					"GET_PLAYLIST",
-	// 					{
-	// 						url,
-	// 						musicOnly
-	// 					},
-	// 					this
-	// 				)
-	// 					.then(res => {
-	// 						next(null, res.songs);
-	// 					})
-	// 					.catch(next);
-	// 			},
-	// 			(songIds, next) => {
-	// 				let successful = 0;
-	// 				let failed = 0;
-	// 				let alreadyInQueue = 0;
-	// 				let alreadyAdded = 0;
-	// 				if (songIds.length === 0) next();
-	// 				async.eachLimit(
-	// 					songIds,
-	// 					1,
-	// 					(songId, next) => {
-	// 						WSModule.runJob(
-	// 							"RUN_ACTION2",
-	// 							{
-	// 								session,
-	// 								namespace: "queueSongs",
-	// 								action: "add",
-	// 								args: [songId]
-	// 							},
-	// 							this
-	// 						)
-	// 							.then(res => {
-	// 								if (res.status === "success") successful += 1;
-	// 								else failed += 1;
-	// 								if (res.message === "This song is already in the queue.") alreadyInQueue += 1;
-	// 								if (res.message === "This song has already been added.") alreadyAdded += 1;
-	// 							})
-	// 							.catch(() => {
-	// 								failed += 1;
-	// 							})
-	// 							.finally(() => {
-	// 								next();
-	// 							});
-	// 					},
-	// 					() => {
-	// 						next(null, { successful, failed, alreadyInQueue, alreadyAdded });
-	// 					}
-	// 				);
-	// 			}
-	// 		],
-	// 		async (err, response) => {
-	// 			if (err) {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log(
-	// 					"ERROR",
-	// 					"QUEUE_IMPORT",
-	// 					`Importing a YouTube playlist to the queue failed for user "${session.userId}". "${err}"`
-	// 				);
-	// 				return cb({ status: "failure", message: err });
-	// 			}
-	// 			this.log(
-	// 				"SUCCESS",
-	// 				"QUEUE_IMPORT",
-	// 				`Successfully imported a YouTube playlist to the queue for user "${session.userId}".`
-	// 			);
-	// 			return cb({
-	// 				status: "success",
-	// 				message: `Playlist is done importing. ${response.successful} were added succesfully, ${response.failed} failed (${response.alreadyInQueue} were already in queue, ${response.alreadyAdded} were already added)`
-	// 			});
-	// 		}
-	// 	);
-	// })
-};

+ 0 - 1
backend/logic/actions/songs.js

@@ -1,5 +1,4 @@
 import async from "async";
-import config from "config";
 
 import { isAdminRequired, isLoginRequired } from "./hooks";
 

+ 1 - 1
backend/logic/actions/stations.js

@@ -2816,7 +2816,7 @@ export default {
 				},
 
 				(station, next) => {
-					SongsModule.runJob("ENSURE_SONG_EXISTS_BY_SONG_ID", { songId }, this)
+					SongsModule.runJob("ENSURE_SONG_EXISTS_BY_SONG_ID", { songId, userId: session.userId }, this)
 						.then(response => {
 							const { song } = response;
 							const { _id, title, thumbnail, duration, status } = song;

+ 2 - 3
backend/logic/songs.js

@@ -1,5 +1,4 @@
 import async from "async";
-import config from "config";
 import mongoose from "mongoose";
 import CoreClass from "../core";
 
@@ -172,7 +171,7 @@ class _SongsModule extends CoreClass {
 					(song, next) => {
 						if (song && song.duration > 0) next(true, song);
 						else {
-							YouTubeModule.runJob("GET_SONG", { songId: payload.songId }, this)
+							YouTubeModule.runJob("GET_SONG", { songId: payload.songId, userId: payload.userId }, this)
 								.then(response => {
 									next(null, song, response.song);
 								})
@@ -801,7 +800,7 @@ class _SongsModule extends CoreClass {
 											playlistModel.updateMany(
 												{ "songs.songId": song.songId },
 												{ $set: { "songs.$": trimmedSong } },
-												(err, res) => {
+												err => {
 													next(err, song);
 												}
 											);

+ 4 - 1
backend/logic/youtube.js

@@ -170,7 +170,10 @@ class _YouTubeModule extends CoreClass {
 							songId: res.data.items[0].id,
 							title: res.data.items[0].snippet.title,
 							thumbnail: res.data.items[0].snippet.thumbnails.default.url,
-							duration
+							duration,
+							status: "unverified",
+							requestedBy: payload.userId,
+							requestedAt: Date.now()
 						};
 
 						return resolve({ song });