|
@@ -170,20 +170,40 @@ class _SongsModule extends CoreClass {
|
|
|
},
|
|
|
|
|
|
(song, next) => {
|
|
|
- if (song) next(true, song);
|
|
|
+ if (song && song.duration > 0) next(true, song);
|
|
|
else {
|
|
|
YouTubeModule.runJob("GET_SONG", { songId: payload.songId }, this)
|
|
|
- .then(response => next(null, { ...response.song }))
|
|
|
+ .then(response => {
|
|
|
+ next(null, song, response.song);
|
|
|
+ })
|
|
|
.catch(next);
|
|
|
}
|
|
|
+
|
|
|
+ // else if (song && song.duration <= 0) {
|
|
|
+ // YouTubeModule.runJob("GET_SONG", { songId: payload.songId }, this)
|
|
|
+ // .then(response => next(null, { ...response.song }, false))
|
|
|
+ // .catch(next);
|
|
|
+ // } else {
|
|
|
+ // YouTubeModule.runJob("GET_SONG", { songId: payload.songId }, this)
|
|
|
+ // .then(response => next(null, { ...response.song }, false))
|
|
|
+ // .catch(next);
|
|
|
+ // }
|
|
|
},
|
|
|
|
|
|
- (_song, next) => {
|
|
|
- const song = new SongsModule.SongModel({ ..._song });
|
|
|
- song.save({ validateBeforeSave: true }, err => {
|
|
|
- if (err) return next(err, song);
|
|
|
- return next(null, song);
|
|
|
- });
|
|
|
+ (song, youtubeSong, next) => {
|
|
|
+ if (song && song.duration <= 0) {
|
|
|
+ song.duration = youtubeSong.duration;
|
|
|
+ song.save({ validateBeforeSave: true }, err => {
|
|
|
+ if (err) return next(err, song);
|
|
|
+ return next(null, song);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ const song = new SongsModule.SongModel({ ...youtubeSong });
|
|
|
+ song.save({ validateBeforeSave: true }, err => {
|
|
|
+ if (err) return next(err, song);
|
|
|
+ return next(null, song);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
],
|
|
|
(err, song) => {
|
|
@@ -485,10 +505,10 @@ class _SongsModule extends CoreClass {
|
|
|
playlistModel.find({}, (err, playlists) => {
|
|
|
if (err) reject(new Error(err));
|
|
|
else {
|
|
|
- SongsModule.SongModel.find({}, { songId: true }, (err, songs) => {
|
|
|
+ SongsModule.SongModel.find({}, { _id: true, songId: true }, (err, songs) => {
|
|
|
if (err) reject(new Error(err));
|
|
|
else {
|
|
|
- const songIds = songs.map(song => song.songId);
|
|
|
+ const musareSongIds = songs.map(song => song._id.toString());
|
|
|
const orphanedSongIds = new Set();
|
|
|
async.eachLimit(
|
|
|
playlists,
|
|
@@ -496,7 +516,7 @@ class _SongsModule extends CoreClass {
|
|
|
(playlist, next) => {
|
|
|
playlist.songs.forEach(song => {
|
|
|
if (
|
|
|
- songIds.indexOf(song.songId) === -1 &&
|
|
|
+ (!song._id || musareSongIds.indexOf(song._id.toString() === -1)) &&
|
|
|
!orphanedSongIds.has(song.songId)
|
|
|
) {
|
|
|
orphanedSongIds.add(song.songId);
|
|
@@ -605,12 +625,22 @@ class _SongsModule extends CoreClass {
|
|
|
.then(playlistModel => {
|
|
|
SongsModule.runJob("GET_ORPHANED_PLAYLIST_SONGS", {}, this).then(response => {
|
|
|
const { songIds } = response;
|
|
|
+ const playlistsToUpdate = new Set();
|
|
|
+
|
|
|
async.eachLimit(
|
|
|
songIds,
|
|
|
1,
|
|
|
(songId, next) => {
|
|
|
async.waterfall(
|
|
|
[
|
|
|
+ next => {
|
|
|
+ console.log(
|
|
|
+ songId,
|
|
|
+ `this is song ${songIds.indexOf(songId) + 1}/${songIds.length}`
|
|
|
+ );
|
|
|
+ setTimeout(next, 150);
|
|
|
+ },
|
|
|
+
|
|
|
next => {
|
|
|
SongsModule.runJob("ENSURE_SONG_EXISTS_BY_SONG_ID", { songId }, this)
|
|
|
.then(() => next())
|
|
@@ -623,6 +653,8 @@ class _SongsModule extends CoreClass {
|
|
|
},
|
|
|
|
|
|
next => {
|
|
|
+ console.log(444, songId);
|
|
|
+
|
|
|
SongsModule.SongModel.findOne({ songId }, next);
|
|
|
},
|
|
|
|
|
@@ -640,7 +672,7 @@ class _SongsModule extends CoreClass {
|
|
|
playlistModel.updateMany(
|
|
|
{ "songs.songId": song.songId },
|
|
|
{ $set: { "songs.$": trimmedSong } },
|
|
|
- err => {
|
|
|
+ (err, res) => {
|
|
|
next(err, song);
|
|
|
}
|
|
|
);
|
|
@@ -652,10 +684,9 @@ class _SongsModule extends CoreClass {
|
|
|
|
|
|
(playlists, next) => {
|
|
|
playlists.forEach(playlist => {
|
|
|
- PlaylistsModule.runJob("UPDATE_PLAYLIST", {
|
|
|
- playlistId: playlist._id
|
|
|
- });
|
|
|
+ playlistsToUpdate.add(playlist._id.toString());
|
|
|
});
|
|
|
+
|
|
|
next();
|
|
|
}
|
|
|
],
|
|
@@ -664,7 +695,29 @@ class _SongsModule extends CoreClass {
|
|
|
},
|
|
|
err => {
|
|
|
if (err) reject(err);
|
|
|
- else resolve();
|
|
|
+ else {
|
|
|
+ async.eachLimit(
|
|
|
+ Array.from(playlistsToUpdate),
|
|
|
+ 1,
|
|
|
+ (playlistId, next) => {
|
|
|
+ PlaylistsModule.runJob(
|
|
|
+ "UPDATE_PLAYLIST",
|
|
|
+ {
|
|
|
+ playlistId
|
|
|
+ },
|
|
|
+ this
|
|
|
+ )
|
|
|
+ .then(() => {
|
|
|
+ next();
|
|
|
+ })
|
|
|
+ .catch(next);
|
|
|
+ },
|
|
|
+ err => {
|
|
|
+ if (err) reject(err);
|
|
|
+ else resolve();
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
);
|
|
|
});
|