Skip to content
This repository has been archived by the owner on Aug 20, 2024. It is now read-only.

Commit

Permalink
Display rated playlists last for easy reading
Browse files Browse the repository at this point in the history
  • Loading branch information
duffey committed Apr 16, 2024
1 parent ba270d9 commit 5402670
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 25 deletions.
2 changes: 1 addition & 1 deletion dist/spicetify-playlist-labels.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 36 additions & 24 deletions src/playlist.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,55 @@ import { getContents, getLikedTracks, getPlaylistItems } from "./api";

export function getAllPlaylists(contents) {
let playlists = [];
let ratedPlaylists = [];

function traverse(item) {
function traverse(item, isRated) {
if (item.type === 'playlist') {
playlists.push(item);
if (isRated)
ratedPlaylists.push(item);
else
playlists.push(item);
} else if (item.type === 'folder' && item.items) {
item.items.forEach(i => traverse(i));
item.items.forEach(i => traverse(i, item.name == 'Rated'));
}
}

traverse(contents);
traverse(contents, false);

return playlists;
return [playlists, ratedPlaylists];
}

export async function getTrackUriToPlaylistData() {
const contents = await getContents();
const playlists = getAllPlaylists(contents);
const playlistItems = await Promise.all(playlists.map((playlist) => getPlaylistItems(playlist.uri)));
const [playlists, ratedPlaylists] = getAllPlaylists(contents);
const allPlaylistItems = await Promise.all([...playlists, ...ratedPlaylists].map((playlist) => getPlaylistItems(playlist.uri)));
const playlistItems = allPlaylistItems.slice(0, playlists.length);
const ratedPlaylistItems = allPlaylistItems.slice(playlists.length)
const trackUriToPlaylistData = {};
const likedTracks = await getLikedTracks();

playlistItems.forEach((playlistItems, index) => {
playlistItems.forEach((playlistItem) => {
const trackUri = playlistItem.uri;
if (!trackUriToPlaylistData[trackUri]) {
trackUriToPlaylistData[trackUri] = [];
}
if (!trackUriToPlaylistData[trackUri].some(obj => obj.uri === playlists[index].uri)) {
trackUriToPlaylistData[trackUri].push({
uri: playlists[index].uri,
name: playlists[index].name,
trackUid: playlistItem.uid,
image: playlists[index].images[0]?.url || '',
isOwnPlaylist: playlists[index].isOwnedBySelf,
isLikedTracks: false
});
}
function addPlaylists(playlists, playlistItems) {
playlistItems.forEach((playlistItems, index) => {
playlistItems.forEach((playlistItem) => {
const trackUri = playlistItem.uri;
if (!trackUriToPlaylistData[trackUri]) {
trackUriToPlaylistData[trackUri] = [];
}
if (!trackUriToPlaylistData[trackUri].some(obj => obj.uri === playlists[index].uri)) {
trackUriToPlaylistData[trackUri].push({
uri: playlists[index].uri,
name: playlists[index].name,
trackUid: playlistItem.uid,
image: playlists[index].images[0]?.url || '',
isOwnPlaylist: playlists[index].isOwnedBySelf,
isLikedTracks: false
});
}
});
});
});
}

addPlaylists(playlists, playlistItems);

likedTracks.items.forEach((item) => {
const trackUri = item.uri;
Expand All @@ -59,5 +69,7 @@ export async function getTrackUriToPlaylistData() {
}
});

addPlaylists(ratedPlaylists, ratedPlaylistItems);

return trackUriToPlaylistData;
}

0 comments on commit 5402670

Please sign in to comment.