duplicate item prompt on adding songs to playlist
This commit is contained in:
parent
09030df8b8
commit
31e76d540e
3 changed files with 53 additions and 16 deletions
|
@ -261,6 +261,7 @@
|
||||||
"action.removeFromQueue.success": "Removed from Queue",
|
"action.removeFromQueue.success": "Removed from Queue",
|
||||||
"action.removeFromQueue.error": "Error Removing from Queue",
|
"action.removeFromQueue.error": "Error Removing from Queue",
|
||||||
"action.createPlaylist": "Create a New Playlist",
|
"action.createPlaylist": "Create a New Playlist",
|
||||||
|
"action.addToPlaylist.duplicate": "Item already exists in playlist. Do you want to continue?",
|
||||||
"action.addToPlaylist": "Add to Playlist",
|
"action.addToPlaylist": "Add to Playlist",
|
||||||
"action.removeFromPlaylist": "Remove from Playlist",
|
"action.removeFromPlaylist": "Remove from Playlist",
|
||||||
"action.addToFavorites": "Add to Favorites",
|
"action.addToFavorites": "Add to Favorites",
|
||||||
|
|
|
@ -261,6 +261,7 @@
|
||||||
"action.removeFromQueue.success": "Removed from Queue",
|
"action.removeFromQueue.success": "Removed from Queue",
|
||||||
"action.removeFromQueue.error": "Error Removing from Queue",
|
"action.removeFromQueue.error": "Error Removing from Queue",
|
||||||
"action.createPlaylist": "Create a New Playlist",
|
"action.createPlaylist": "Create a New Playlist",
|
||||||
|
"action.addToPlaylist.duplicate": "Item already exists in playlist. Do you want to continue?",
|
||||||
"action.addToPlaylist": "Add to Playlist",
|
"action.addToPlaylist": "Add to Playlist",
|
||||||
"action.removeFromPlaylist": "Remove from Playlist",
|
"action.removeFromPlaylist": "Remove from Playlist",
|
||||||
"action.addToFavorites": "Add to Favorites",
|
"action.addToFavorites": "Add to Favorites",
|
||||||
|
|
|
@ -663,9 +663,26 @@ const app = new Vue({
|
||||||
this.modals.addToPlaylist = false;
|
this.modals.addToPlaylist = false;
|
||||||
app.newPlaylist(app.getLz("term.newPlaylist"), pl_items);
|
app.newPlaylist(app.getLz("term.newPlaylist"), pl_items);
|
||||||
},
|
},
|
||||||
|
async isSongInPlaylist(song_ids, playlist_id) {
|
||||||
|
let isInPlaylist = false;
|
||||||
|
const playlistTracks = (
|
||||||
|
await app.mk.api.v3.music(`/v1/me/library/playlists/${playlist_id}/tracks`, {
|
||||||
|
platform: "web",
|
||||||
|
l: app.mklang,
|
||||||
|
})
|
||||||
|
).data?.data;
|
||||||
|
|
||||||
|
playlistTracks.forEach((track) => {
|
||||||
|
if (song_ids.includes(track.id)) {
|
||||||
|
isInPlaylist = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return isInPlaylist;
|
||||||
|
},
|
||||||
async addSelectedToPlaylist(playlist_id) {
|
async addSelectedToPlaylist(playlist_id) {
|
||||||
let self = this;
|
let self = this;
|
||||||
let pl_items = [];
|
let pl_items = [];
|
||||||
|
const song_ids = [];
|
||||||
for (let i = 0; i < self.selectedMediaItems.length; i++) {
|
for (let i = 0; i < self.selectedMediaItems.length; i++) {
|
||||||
if (self.selectedMediaItems[i].kind == "song" || self.selectedMediaItems[i].kind == "songs") {
|
if (self.selectedMediaItems[i].kind == "song" || self.selectedMediaItems[i].kind == "songs") {
|
||||||
self.selectedMediaItems[i].kind = "songs";
|
self.selectedMediaItems[i].kind = "songs";
|
||||||
|
@ -673,6 +690,7 @@ const app = new Vue({
|
||||||
id: self.selectedMediaItems[i].id,
|
id: self.selectedMediaItems[i].id,
|
||||||
type: self.selectedMediaItems[i].kind,
|
type: self.selectedMediaItems[i].kind,
|
||||||
});
|
});
|
||||||
|
song_ids.push(self.selectedMediaItems[i].id);
|
||||||
} else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) {
|
} else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) {
|
||||||
self.selectedMediaItems[i].kind = "albums";
|
self.selectedMediaItems[i].kind = "albums";
|
||||||
let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`);
|
let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`);
|
||||||
|
@ -680,12 +698,14 @@ const app = new Vue({
|
||||||
return { id: i.id, type: i.type };
|
return { id: i.id, type: i.type };
|
||||||
});
|
});
|
||||||
pl_items = pl_items.concat(ids);
|
pl_items = pl_items.concat(ids);
|
||||||
|
song_ids.push(...ids.map((id) => id.id));
|
||||||
} else if (self.selectedMediaItems[i].kind == "library-song" || self.selectedMediaItems[i].kind == "library-songs") {
|
} else if (self.selectedMediaItems[i].kind == "library-song" || self.selectedMediaItems[i].kind == "library-songs") {
|
||||||
self.selectedMediaItems[i].kind = "library-songs";
|
self.selectedMediaItems[i].kind = "library-songs";
|
||||||
pl_items.push({
|
pl_items.push({
|
||||||
id: self.selectedMediaItems[i].id,
|
id: self.selectedMediaItems[i].id,
|
||||||
type: self.selectedMediaItems[i].kind,
|
type: self.selectedMediaItems[i].kind,
|
||||||
});
|
});
|
||||||
|
song_ids.push(self.selectedMediaItems[i].id);
|
||||||
} else if (self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums" || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) {
|
} else if (self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums" || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) {
|
||||||
self.selectedMediaItems[i].kind = "library-albums";
|
self.selectedMediaItems[i].kind = "library-albums";
|
||||||
let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`);
|
let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`);
|
||||||
|
@ -693,32 +713,47 @@ const app = new Vue({
|
||||||
return { id: i.id, type: i.type };
|
return { id: i.id, type: i.type };
|
||||||
});
|
});
|
||||||
pl_items = pl_items.concat(ids);
|
pl_items = pl_items.concat(ids);
|
||||||
|
song_ids.push(...ids.map((id) => id.id));
|
||||||
} else {
|
} else {
|
||||||
pl_items.push({
|
pl_items.push({
|
||||||
id: self.selectedMediaItems[i].id,
|
id: self.selectedMediaItems[i].id,
|
||||||
type: self.selectedMediaItems[i].kind,
|
type: self.selectedMediaItems[i].kind,
|
||||||
});
|
});
|
||||||
|
song_ids.push(self.selectedMediaItems[i].id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.modals.addToPlaylist = false;
|
this.modals.addToPlaylist = false;
|
||||||
await app.mk.api.v3
|
|
||||||
.music(
|
function addToPlaylist(pid, pitems) {
|
||||||
`/v1/me/library/playlists/${playlist_id}/tracks`,
|
app.mk.api.v3
|
||||||
{},
|
.music(
|
||||||
{
|
`/v1/me/library/playlists/${pid}/tracks`,
|
||||||
fetchOptions: {
|
{},
|
||||||
method: "POST",
|
{
|
||||||
body: JSON.stringify({
|
fetchOptions: {
|
||||||
data: pl_items,
|
method: "POST",
|
||||||
}),
|
body: JSON.stringify({
|
||||||
},
|
data: pitems,
|
||||||
}
|
}),
|
||||||
)
|
},
|
||||||
.then(() => {
|
}
|
||||||
if (this.page == "playlist_" + this.showingPlaylist.id) {
|
)
|
||||||
this.getPlaylistFromID(this.showingPlaylist.id, true);
|
.then(() => {
|
||||||
|
if (app.page === "playlist_" + pid) {
|
||||||
|
app.getPlaylistFromID(app.showingPlaylist.id, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (await this.isSongInPlaylist(song_ids, playlist_id)) {
|
||||||
|
app.confirm(app.getLz("action.addToPlaylist.duplicate"), (result) => {
|
||||||
|
if (result === true) {
|
||||||
|
addToPlaylist(playlist_id, pl_items);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
addToPlaylist(playlist_id, pl_items);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async init() {
|
async init() {
|
||||||
let self = this;
|
let self = this;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue