|
@@ -203,7 +203,7 @@ class _SongsModule extends CoreClass {
|
|
|
} else {
|
|
|
const status =
|
|
|
(!payload.userId && config.get("hideAnonymousSongs")) ||
|
|
|
- (payload.automaticallyRequested && config.get("hideAutomaticallyRequestedSongs"))
|
|
|
+ (payload.automaticallyRequested && config.get("hideAutomaticallyRequestedSongs"))
|
|
|
? "hidden"
|
|
|
: "unverified";
|
|
|
|
|
@@ -291,7 +291,6 @@ class _SongsModule extends CoreClass {
|
|
|
},
|
|
|
|
|
|
(song, next) => {
|
|
|
- next(null, song);
|
|
|
const { _id, youtubeId, title, artists, thumbnail, duration, status } = song;
|
|
|
const trimmedSong = {
|
|
|
_id,
|
|
@@ -302,25 +301,75 @@ class _SongsModule extends CoreClass {
|
|
|
duration,
|
|
|
status
|
|
|
};
|
|
|
- this.log("INFO", `Going to update playlists and stations now for song ${_id}`);
|
|
|
- DBModule.runJob("GET_MODEL", { modelName: "playlist" }).then(playlistModel => {
|
|
|
+ this.log("INFO", `Going to update playlists now for song ${_id}`);
|
|
|
+ DBModule.runJob("GET_MODEL", { modelName: "playlist" }, this).then(playlistModel => {
|
|
|
playlistModel.updateMany(
|
|
|
{ "songs._id": song._id },
|
|
|
{ $set: { "songs.$": trimmedSong } },
|
|
|
err => {
|
|
|
- if (err) this.log("ERROR", err);
|
|
|
+ if (err) next(err);
|
|
|
else
|
|
|
playlistModel.find({ "songs._id": song._id }, (err, playlists) => {
|
|
|
- playlists.forEach(playlist => {
|
|
|
- PlaylistsModule.runJob("UPDATE_PLAYLIST", {
|
|
|
- playlistId: playlist._id
|
|
|
+ if (err) next(err);
|
|
|
+ else {
|
|
|
+ async.eachLimit(playlists, 1, (playlist, next) => {
|
|
|
+ PlaylistsModule.runJob("UPDATE_PLAYLIST", {
|
|
|
+ playlistId: playlist._id
|
|
|
+ }, this).then(() => {
|
|
|
+ next();
|
|
|
+ }).catch(err => {
|
|
|
+ next(err);
|
|
|
+ });
|
|
|
+ }, err => {
|
|
|
+ if (err) next(err);
|
|
|
+ else next(null, song)
|
|
|
});
|
|
|
- });
|
|
|
+ }
|
|
|
+ // playlists.forEach(playlist => {
|
|
|
+ // PlaylistsModule.runJob("UPDATE_PLAYLIST", {
|
|
|
+ // playlistId: playlist._id
|
|
|
+ // });
|
|
|
+ // });
|
|
|
});
|
|
|
}
|
|
|
);
|
|
|
+ }).catch(err => {
|
|
|
+ next(err);
|
|
|
});
|
|
|
- DBModule.runJob("GET_MODEL", { modelName: "station" }).then(stationModel => {
|
|
|
+ },
|
|
|
+
|
|
|
+ (song, next) => {
|
|
|
+ // next(null, song);
|
|
|
+ const { _id, youtubeId, title, artists, thumbnail, duration, status } = song;
|
|
|
+ // const trimmedSong = {
|
|
|
+ // _id,
|
|
|
+ // youtubeId,
|
|
|
+ // title,
|
|
|
+ // artists,
|
|
|
+ // thumbnail,
|
|
|
+ // duration,
|
|
|
+ // status
|
|
|
+ // };
|
|
|
+ // this.log("INFO", `Going to update playlists and stations now for song ${_id}`);
|
|
|
+ // DBModule.runJob("GET_MODEL", { modelName: "playlist" }).then(playlistModel => {
|
|
|
+ // playlistModel.updateMany(
|
|
|
+ // { "songs._id": song._id },
|
|
|
+ // { $set: { "songs.$": trimmedSong } },
|
|
|
+ // err => {
|
|
|
+ // if (err) this.log("ERROR", err);
|
|
|
+ // else
|
|
|
+ // playlistModel.find({ "songs._id": song._id }, (err, playlists) => {
|
|
|
+ // playlists.forEach(playlist => {
|
|
|
+ // PlaylistsModule.runJob("UPDATE_PLAYLIST", {
|
|
|
+ // playlistId: playlist._id
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // );
|
|
|
+ // });
|
|
|
+ this.log("INFO", `Going to update stations now for song ${_id}`);
|
|
|
+ DBModule.runJob("GET_MODEL", { modelName: "station" }, this).then(stationModel => {
|
|
|
stationModel.updateMany(
|
|
|
{ "queue._id": song._id },
|
|
|
{
|
|
@@ -337,12 +386,24 @@ class _SongsModule extends CoreClass {
|
|
|
if (err) this.log("ERROR", err);
|
|
|
else
|
|
|
stationModel.find({ "queue._id": song._id }, (err, stations) => {
|
|
|
- stations.forEach(station => {
|
|
|
- StationsModule.runJob("UPDATE_STATION", { stationId: station._id });
|
|
|
- });
|
|
|
+ if (err) next(err);
|
|
|
+ else {
|
|
|
+ async.eachLimit(stations, 1, (station, next) => {
|
|
|
+ StationsModule.runJob("UPDATE_STATION", { stationId: station._id }, this).then(() => {
|
|
|
+ next();
|
|
|
+ }).catch(err => {
|
|
|
+ next(err);
|
|
|
+ });
|
|
|
+ }, err => {
|
|
|
+ if (err) next(err);
|
|
|
+ else next(null, song);
|
|
|
+ });
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
);
|
|
|
+ }).catch(err => {
|
|
|
+ next(err);
|
|
|
});
|
|
|
},
|
|
|
|
|
@@ -381,7 +442,6 @@ class _SongsModule extends CoreClass {
|
|
|
async.waterfall(
|
|
|
[
|
|
|
next => {
|
|
|
- return next("Currently disabled since it's broken due to the backend memory leak issue.");
|
|
|
SongsModule.SongModel.find({}, next);
|
|
|
},
|
|
|
|
|
@@ -390,11 +450,11 @@ class _SongsModule extends CoreClass {
|
|
|
const { length } = songs;
|
|
|
async.eachLimit(
|
|
|
songs,
|
|
|
- 10,
|
|
|
+ 2,
|
|
|
(song, next) => {
|
|
|
index += 1;
|
|
|
console.log(`Updating song #${index} out of ${length}: ${song._id}`);
|
|
|
- SongsModule.runJob("UPDATE_SONG", { songId: song._id }, this, 9)
|
|
|
+ SongsModule.runJob("UPDATE_SONG", { songId: song._id }, this)
|
|
|
.then(() => {
|
|
|
next();
|
|
|
})
|
|
@@ -416,41 +476,85 @@ class _SongsModule extends CoreClass {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Deletes song from id from Mongo and cache
|
|
|
- *
|
|
|
- * @param {object} payload - returns an object containing the payload
|
|
|
- * @param {string} payload.youtubeId - the youtube id of the song we are trying to delete
|
|
|
- * @returns {Promise} - returns a promise (resolve, reject)
|
|
|
- */
|
|
|
- DELETE_SONG(payload) {
|
|
|
- return new Promise((resolve, reject) =>
|
|
|
- async.waterfall(
|
|
|
- [
|
|
|
- next => {
|
|
|
- SongsModule.SongModel.deleteOne({ youtubeId: payload.youtubeId }, next);
|
|
|
- },
|
|
|
-
|
|
|
- next => {
|
|
|
- CacheModule.runJob(
|
|
|
- "HDEL",
|
|
|
- {
|
|
|
- table: "songs",
|
|
|
- key: payload.youtubeId
|
|
|
- },
|
|
|
- this
|
|
|
- )
|
|
|
- .then(() => next())
|
|
|
- .catch(next);
|
|
|
- }
|
|
|
- ],
|
|
|
- err => {
|
|
|
- if (err && err !== true) return reject(new Error(err));
|
|
|
- return resolve();
|
|
|
- }
|
|
|
- )
|
|
|
- );
|
|
|
- }
|
|
|
+ // /**
|
|
|
+ // * Deletes song from id from Mongo and cache
|
|
|
+ // *
|
|
|
+ // * @param {object} payload - returns an object containing the payload
|
|
|
+ // * @param {string} payload.songId - the song id of the song we are trying to delete
|
|
|
+ // * @returns {Promise} - returns a promise (resolve, reject)
|
|
|
+ // */
|
|
|
+ // DELETE_SONG(payload) {
|
|
|
+ // return new Promise((resolve, reject) =>
|
|
|
+ // async.waterfall(
|
|
|
+ // [
|
|
|
+ // next => {
|
|
|
+ // SongsModule.SongModel.deleteOne({ _id: payload.songId }, next);
|
|
|
+ // },
|
|
|
+
|
|
|
+ // next => {
|
|
|
+ // CacheModule.runJob(
|
|
|
+ // "HDEL",
|
|
|
+ // {
|
|
|
+ // table: "songs",
|
|
|
+ // key: payload.songId
|
|
|
+ // },
|
|
|
+ // this
|
|
|
+ // )
|
|
|
+ // .then(() => next())
|
|
|
+ // .catch(next);
|
|
|
+ // },
|
|
|
+
|
|
|
+ // next => {
|
|
|
+ // this.log("INFO", `Going to update playlists and stations now for deleted song ${payload.songId}`);
|
|
|
+ // DBModule.runJob("GET_MODEL", { modelName: "playlist" }).then(playlistModel => {
|
|
|
+ // playlistModel.find({ "songs._id": song._id }, (err, playlists) => {
|
|
|
+ // if (err) this.log("ERROR", err);
|
|
|
+ // else {
|
|
|
+ // playlistModel.updateMany(
|
|
|
+ // { "songs._id": payload.songId },
|
|
|
+ // { $pull: { "songs.$._id": payload.songId} },
|
|
|
+ // err => {
|
|
|
+ // if (err) this.log("ERROR", err);
|
|
|
+ // else {
|
|
|
+ // playlists.forEach(playlist => {
|
|
|
+ // PlaylistsModule.runJob("UPDATE_PLAYLIST", {
|
|
|
+ // playlistId: playlist._id
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // );
|
|
|
+
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ // DBModule.runJob("GET_MODEL", { modelName: "station" }).then(stationModel => {
|
|
|
+ // stationModel.find({ "queue._id": payload.songId }, (err, stations) => {
|
|
|
+ // stationModel.updateMany(
|
|
|
+ // { "queue._id": payload.songId },
|
|
|
+ // {
|
|
|
+ // $pull: { "queue._id": }
|
|
|
+ // },
|
|
|
+ // err => {
|
|
|
+ // if (err) this.log("ERROR", err);
|
|
|
+ // else {
|
|
|
+ // stations.forEach(station => {
|
|
|
+ // StationsModule.runJob("UPDATE_STATION", { stationId: station._id });
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // );
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // ],
|
|
|
+ // err => {
|
|
|
+ // if (err && err !== true) return reject(new Error(err));
|
|
|
+ // return resolve();
|
|
|
+ // }
|
|
|
+ // )
|
|
|
+ // );
|
|
|
+ // }
|
|
|
|
|
|
/**
|
|
|
* Searches through songs
|