|
@@ -3212,6 +3212,274 @@ export default {
|
|
|
);
|
|
|
}),
|
|
|
|
|
|
+ /**
|
|
|
+ * Includes a playlist in a station
|
|
|
+ *
|
|
|
+ * @param session
|
|
|
+ * @param stationId - the station id
|
|
|
+ * @param playlistId - the playlist id
|
|
|
+ * @param cb
|
|
|
+ */
|
|
|
+ includePlaylist: isOwnerRequired(async function includePlaylist(session, stationId, playlistId, cb) {
|
|
|
+ async.waterfall(
|
|
|
+ [
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("GET_STATION", { stationId }, this)
|
|
|
+ .then(station => next(null, station))
|
|
|
+ .catch(next);
|
|
|
+ },
|
|
|
+
|
|
|
+ (station, next) => {
|
|
|
+ if (!station) return next("Station not found.");
|
|
|
+ if (station.includedPlaylists.indexOf(playlistId) !== -1)
|
|
|
+ return next("That playlist is already included.");
|
|
|
+ return next();
|
|
|
+ },
|
|
|
+
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("INCLUDE_PLAYLIST", { stationId, playlistId }, this)
|
|
|
+ .then(() => {
|
|
|
+ next();
|
|
|
+ })
|
|
|
+ .catch(next);
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ async err => {
|
|
|
+ if (err) {
|
|
|
+ err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
|
|
|
+ this.log(
|
|
|
+ "ERROR",
|
|
|
+ "STATIONS_INCLUDE_PLAYLIST",
|
|
|
+ `Including playlist "${playlistId}" for station "${stationId}" failed. "${err}"`
|
|
|
+ );
|
|
|
+ return cb({ status: "error", message: err });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.log(
|
|
|
+ "SUCCESS",
|
|
|
+ "STATIONS_INCLUDE_PLAYLIST",
|
|
|
+ `Including playlist "${playlistId}" for station "${stationId}" successfully.`
|
|
|
+ );
|
|
|
+
|
|
|
+ PlaylistsModule.runJob("AUTOFILL_STATION_PLAYLIST", { stationId }).then().catch();
|
|
|
+
|
|
|
+ // CacheModule.runJob("PUB", {
|
|
|
+ // channel: "privatePlaylist.selected",
|
|
|
+ // value: {
|
|
|
+ // playlistId,
|
|
|
+ // stationId
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+
|
|
|
+ return cb({
|
|
|
+ status: "success",
|
|
|
+ message: "Successfully included playlist."
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }),
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Remove included a playlist from a station
|
|
|
+ *
|
|
|
+ * @param session
|
|
|
+ * @param stationId - the station id
|
|
|
+ * @param playlistId - the playlist id
|
|
|
+ * @param cb
|
|
|
+ */
|
|
|
+ removeIncludedPlaylist: isOwnerRequired(async function removeIncludedPlaylist(session, stationId, playlistId, cb) {
|
|
|
+ async.waterfall(
|
|
|
+ [
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("GET_STATION", { stationId }, this)
|
|
|
+ .then(station => next(null, station))
|
|
|
+ .catch(next);
|
|
|
+ },
|
|
|
+
|
|
|
+ (station, next) => {
|
|
|
+ if (!station) return next("Station not found.");
|
|
|
+ if (station.includedPlaylists.indexOf(playlistId) === -1)
|
|
|
+ return next("That playlist is not included.");
|
|
|
+ return next();
|
|
|
+ },
|
|
|
+
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("REMOVE_INCLUDED_PLAYLIST", { stationId, playlistId }, this)
|
|
|
+ .then(() => {
|
|
|
+ next();
|
|
|
+ })
|
|
|
+ .catch(next);
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ async err => {
|
|
|
+ if (err) {
|
|
|
+ err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
|
|
|
+ this.log(
|
|
|
+ "ERROR",
|
|
|
+ "STATIONS_REMOVE_INCLUDED_PLAYLIST",
|
|
|
+ `Removing included playlist "${playlistId}" for station "${stationId}" failed. "${err}"`
|
|
|
+ );
|
|
|
+ return cb({ status: "error", message: err });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.log(
|
|
|
+ "SUCCESS",
|
|
|
+ "STATIONS_REMOVE_INCLUDED_PLAYLIST",
|
|
|
+ `Removing included playlist "${playlistId}" for station "${stationId}" successfully.`
|
|
|
+ );
|
|
|
+
|
|
|
+ PlaylistsModule.runJob("AUTOFILL_STATION_PLAYLIST", { stationId }).then().catch();
|
|
|
+
|
|
|
+ // CacheModule.runJob("PUB", {
|
|
|
+ // channel: "privatePlaylist.selected",
|
|
|
+ // value: {
|
|
|
+ // playlistId,
|
|
|
+ // stationId
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+
|
|
|
+ return cb({
|
|
|
+ status: "success",
|
|
|
+ message: "Successfully removed included playlist."
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }),
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Excludes a playlist in a station
|
|
|
+ *
|
|
|
+ * @param session
|
|
|
+ * @param stationId - the station id
|
|
|
+ * @param playlistId - the playlist id
|
|
|
+ * @param cb
|
|
|
+ */
|
|
|
+ excludePlaylist: isOwnerRequired(async function excludePlaylist(session, stationId, playlistId, cb) {
|
|
|
+ async.waterfall(
|
|
|
+ [
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("GET_STATION", { stationId }, this)
|
|
|
+ .then(station => next(null, station))
|
|
|
+ .catch(next);
|
|
|
+ },
|
|
|
+
|
|
|
+ (station, next) => {
|
|
|
+ if (!station) return next("Station not found.");
|
|
|
+ if (station.excludedPlaylists.indexOf(playlistId) !== -1)
|
|
|
+ return next("That playlist is already excluded.");
|
|
|
+ return next();
|
|
|
+ },
|
|
|
+
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("EXCLUDE_PLAYLIST", { stationId, playlistId }, this)
|
|
|
+ .then(() => {
|
|
|
+ next();
|
|
|
+ })
|
|
|
+ .catch(next);
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ async err => {
|
|
|
+ if (err) {
|
|
|
+ err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
|
|
|
+ this.log(
|
|
|
+ "ERROR",
|
|
|
+ "STATIONS_EXCLUDE_PLAYLIST",
|
|
|
+ `Excluding playlist "${playlistId}" for station "${stationId}" failed. "${err}"`
|
|
|
+ );
|
|
|
+ return cb({ status: "error", message: err });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.log(
|
|
|
+ "SUCCESS",
|
|
|
+ "STATIONS_EXCLUDE_PLAYLIST",
|
|
|
+ `Excluding playlist "${playlistId}" for station "${stationId}" successfully.`
|
|
|
+ );
|
|
|
+
|
|
|
+ PlaylistsModule.runJob("AUTOFILL_STATION_PLAYLIST", { stationId }).then().catch();
|
|
|
+
|
|
|
+ // CacheModule.runJob("PUB", {
|
|
|
+ // channel: "privatePlaylist.selected",
|
|
|
+ // value: {
|
|
|
+ // playlistId,
|
|
|
+ // stationId
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+
|
|
|
+ return cb({
|
|
|
+ status: "success",
|
|
|
+ message: "Successfully excluded playlist."
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }),
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Remove excluded a playlist from a station
|
|
|
+ *
|
|
|
+ * @param session
|
|
|
+ * @param stationId - the station id
|
|
|
+ * @param playlistId - the playlist id
|
|
|
+ * @param cb
|
|
|
+ */
|
|
|
+ removeExcludedPlaylist: isOwnerRequired(async function removeExcludedPlaylist(session, stationId, playlistId, cb) {
|
|
|
+ async.waterfall(
|
|
|
+ [
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("GET_STATION", { stationId }, this)
|
|
|
+ .then(station => next(null, station))
|
|
|
+ .catch(next);
|
|
|
+ },
|
|
|
+
|
|
|
+ (station, next) => {
|
|
|
+ if (!station) return next("Station not found.");
|
|
|
+ if (station.excludedPlaylists.indexOf(playlistId) === -1)
|
|
|
+ return next("That playlist is not excluded.");
|
|
|
+ return next();
|
|
|
+ },
|
|
|
+
|
|
|
+ next => {
|
|
|
+ StationsModule.runJob("REMOVE_EXCLUDED_PLAYLIST", { stationId, playlistId }, this)
|
|
|
+ .then(() => {
|
|
|
+ next();
|
|
|
+ })
|
|
|
+ .catch(next);
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ async err => {
|
|
|
+ if (err) {
|
|
|
+ err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
|
|
|
+ this.log(
|
|
|
+ "ERROR",
|
|
|
+ "STATIONS_REMOVE_EXCLUDED_PLAYLIST",
|
|
|
+ `Removing excluded playlist "${playlistId}" for station "${stationId}" failed. "${err}"`
|
|
|
+ );
|
|
|
+ return cb({ status: "error", message: err });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.log(
|
|
|
+ "SUCCESS",
|
|
|
+ "STATIONS_REMOVE_EXCLUDED_PLAYLIST",
|
|
|
+ `Removing excluded playlist "${playlistId}" for station "${stationId}" successfully.`
|
|
|
+ );
|
|
|
+
|
|
|
+ PlaylistsModule.runJob("AUTOFILL_STATION_PLAYLIST", { stationId }).then().catch();
|
|
|
+
|
|
|
+ // CacheModule.runJob("PUB", {
|
|
|
+ // channel: "privatePlaylist.selected",
|
|
|
+ // value: {
|
|
|
+ // playlistId,
|
|
|
+ // stationId
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+
|
|
|
+ return cb({
|
|
|
+ status: "success",
|
|
|
+ message: "Successfully removed excluded playlist."
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }),
|
|
|
+
|
|
|
/**
|
|
|
* Selects a private playlist for a station
|
|
|
*
|