|
@@ -1461,9 +1461,13 @@ export default {
|
|
|
},
|
|
|
|
|
|
(res, next) => {
|
|
|
- PlaylistsModule.runJob("UPDATE_PLAYLIST", { playlistId }, this)
|
|
|
- .then(playlist => next(null, playlist))
|
|
|
- .catch(next);
|
|
|
+ if (res.n === 0) next("No user playlist found with that id and owned by you.");
|
|
|
+ else if (res.nModified === 0) next(`Nothing changed, the playlist was already ${privacy}.`);
|
|
|
+ else {
|
|
|
+ PlaylistsModule.runJob("UPDATE_PLAYLIST", { playlistId }, this)
|
|
|
+ .then(playlist => next(null, playlist))
|
|
|
+ .catch(next);
|
|
|
+ }
|
|
|
}
|
|
|
],
|
|
|
async (err, playlist) => {
|
|
@@ -1510,6 +1514,70 @@ export default {
|
|
|
);
|
|
|
}),
|
|
|
|
|
|
+ /**
|
|
|
+ * Updates the privacy of a playlist
|
|
|
+ *
|
|
|
+ * @param {object} session - the session object automatically added by the websocket
|
|
|
+ * @param {string} playlistId - the id of the playlist we are updating the privacy for
|
|
|
+ * @param {string} privacy - what the new privacy of the playlist should be e.g. public
|
|
|
+ * @param {Function} cb - gets called with the result
|
|
|
+ */
|
|
|
+ updatePrivacyAdmin: isAdminRequired(async function updatePrivacyAdmin(session, playlistId, privacy, cb) {
|
|
|
+ const playlistModel = await DBModule.runJob("GET_MODEL", { modelName: "playlist" }, this);
|
|
|
+
|
|
|
+ async.waterfall(
|
|
|
+ [
|
|
|
+ next => {
|
|
|
+ playlistModel.updateOne({ _id: playlistId }, { $set: { privacy } }, { runValidators: true }, next);
|
|
|
+ },
|
|
|
+
|
|
|
+ (res, next) => {
|
|
|
+ if (res.n === 0) next("No playlist found with that id.");
|
|
|
+ else if (res.nModified === 0) next(`Nothing changed, the playlist was already ${privacy}.`);
|
|
|
+ else {
|
|
|
+ PlaylistsModule.runJob("UPDATE_PLAYLIST", { playlistId }, this)
|
|
|
+ .then(playlist => next(null, playlist))
|
|
|
+ .catch(next);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ async (err, playlist) => {
|
|
|
+ if (err) {
|
|
|
+ err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
|
|
|
+
|
|
|
+ this.log(
|
|
|
+ "ERROR",
|
|
|
+ "PLAYLIST_UPDATE_PRIVACY_ADMIN",
|
|
|
+ `Updating privacy to "${privacy}" for playlist "${playlistId}" failed for user "${session.userId}". "${err}"`
|
|
|
+ );
|
|
|
+
|
|
|
+ return cb({ status: "error", message: err });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.log(
|
|
|
+ "SUCCESS",
|
|
|
+ "PLAYLIST_UPDATE_PRIVACY_ADMIn",
|
|
|
+ `Successfully updated privacy to "${privacy}" for playlist "${playlistId}" for user "${session.userId}".`
|
|
|
+ );
|
|
|
+
|
|
|
+ if (playlist.type === "user") {
|
|
|
+ CacheModule.runJob("PUB", {
|
|
|
+ channel: "playlist.updatePrivacy",
|
|
|
+ value: {
|
|
|
+ userId: playlist.createdBy,
|
|
|
+ playlist
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return cb({
|
|
|
+ status: "success",
|
|
|
+ message: "Playlist has been successfully updated"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }),
|
|
|
+
|
|
|
/**
|
|
|
* Deletes all orphaned station playlists
|
|
|
*
|