WIP: fix public playlists
This commit is contained in:
parent
91e2e7b3cb
commit
bd7f77a103
1 changed files with 29 additions and 11 deletions
|
|
@ -98,6 +98,24 @@ const syncManager = {
|
||||||
});
|
});
|
||||||
return JSON.parse(recovered);
|
return JSON.parse(recovered);
|
||||||
} catch {
|
} catch {
|
||||||
|
try {
|
||||||
|
// Python-style fallback (Single quotes, True/False, None)
|
||||||
|
// This handles data that was incorrectly serialized as Python repr string
|
||||||
|
if (str.includes("'") || str.includes('True') || str.includes('False')) {
|
||||||
|
const jsFriendly = str
|
||||||
|
.replace(/\bTrue\b/g, 'true')
|
||||||
|
.replace(/\bFalse\b/g, 'false')
|
||||||
|
.replace(/\bNone\b/g, 'null');
|
||||||
|
|
||||||
|
// Basic safety check: ensure it looks like a structure and doesn't contain obvious code vectors
|
||||||
|
if ((jsFriendly.trim().startsWith('[') || jsFriendly.trim().startsWith('{')) &&
|
||||||
|
!jsFriendly.match(/function|=>|window|document|alert|eval/)) {
|
||||||
|
return (new Function('return ' + jsFriendly))();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Ignore fallback error
|
||||||
|
}
|
||||||
return fallback;
|
return fallback;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -146,14 +164,14 @@ const syncManager = {
|
||||||
artists: item.artists?.map((a) => ({ id: a.id, name: a.name || null })) || [],
|
artists: item.artists?.map((a) => ({ id: a.id, name: a.name || null })) || [],
|
||||||
album: item.album
|
album: item.album
|
||||||
? {
|
? {
|
||||||
id: item.album.id,
|
id: item.album.id,
|
||||||
title: item.album.title || null,
|
title: item.album.title || null,
|
||||||
cover: item.album.cover || null,
|
cover: item.album.cover || null,
|
||||||
releaseDate: item.album.releaseDate || null,
|
releaseDate: item.album.releaseDate || null,
|
||||||
vibrantColor: item.album.vibrantColor || null,
|
vibrantColor: item.album.vibrantColor || null,
|
||||||
artist: item.album.artist || null,
|
artist: item.album.artist || null,
|
||||||
numberOfTracks: item.album.numberOfTracks || null,
|
numberOfTracks: item.album.numberOfTracks || null,
|
||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
copyright: item.copyright || null,
|
copyright: item.copyright || null,
|
||||||
isrc: item.isrc || null,
|
isrc: item.isrc || null,
|
||||||
|
|
@ -174,8 +192,8 @@ const syncManager = {
|
||||||
artist: item.artist
|
artist: item.artist
|
||||||
? { name: item.artist.name || null, id: item.artist.id }
|
? { name: item.artist.name || null, id: item.artist.id }
|
||||||
: item.artists?.[0]
|
: item.artists?.[0]
|
||||||
? { name: item.artists[0].name || null, id: item.artists[0].id }
|
? { name: item.artists[0].name || null, id: item.artists[0].id }
|
||||||
: null,
|
: null,
|
||||||
type: item.type || null,
|
type: item.type || null,
|
||||||
numberOfTracks: item.numberOfTracks || null,
|
numberOfTracks: item.numberOfTracks || null,
|
||||||
};
|
};
|
||||||
|
|
@ -361,7 +379,7 @@ const syncManager = {
|
||||||
image: playlist.cover,
|
image: playlist.cover,
|
||||||
cover: playlist.cover,
|
cover: playlist.cover,
|
||||||
playlist_cover: playlist.cover,
|
playlist_cover: playlist.cover,
|
||||||
tracks: playlist.tracks,
|
tracks: JSON.stringify(playlist.tracks || []),
|
||||||
isPublic: true,
|
isPublic: true,
|
||||||
data: {
|
data: {
|
||||||
title: playlist.name,
|
title: playlist.name,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue