Enhance track fetching and downloading logic:

- Added support for checking existence of unknown file types during download.
- Improved user feedback by logging downloaded track progress.
- Increased the limit of fetched favorite tracks from 50 to 10,000.
This commit is contained in:
Seth 2025-05-08 07:11:55 -04:00
parent 9275f2160c
commit 51e22f6d48
2 changed files with 10 additions and 3 deletions

View file

@ -53,21 +53,23 @@ Bun.serve({
const tracks = await utils.fetchTracks();
let i = 1;
for await (const track of tracks.items) {
const { id } = track.item
const createdAt = new Date(track.created)
const trackId = parseInt(id)
if (await Bun.file(`downloaded/${trackId}.flac`).exists() || await Bun.file(`downloaded/${trackId}.m4a`).exists()) {
if (await Bun.file(`downloaded/${trackId}.flac`).exists() || await Bun.file(`downloaded/${trackId}.m4a`).exists() || await Bun.file(`downloaded/${trackId}.unknown`).exists()) {
//console.log(`Already downloaded ${trackId}.flac`)
i++;
continue
}
const trackData = await utils.fetchTrack(trackId)
if (trackData?.status === 404 || trackData === null) {
console.error(`track ${trackId} not available`)
await Bun.sleep(1000) // wait 1 second before next track
i++;
continue
}
try {
@ -89,6 +91,11 @@ for await (const track of tracks.items) {
} catch (e) {
console.error(`Failed to download ${trackId}.flac`, e)
}
// Downloaded track 1 of 10, etc
console.log(`Downloaded track ${i} of ${tracks.items.length}`)
i++;
}
console.log("Done")

View file

@ -45,7 +45,7 @@ export default class {
}
async fetchTracks() {
const tracks = await fetch(`https://desktop.tidal.com/v1/users/${this._userId}/favorites/tracks?offset=0&limit=50&order=DATE&orderDirection=DESC&countryCode=US&locale=en_US&deviceType=DESKTOP`, {
const tracks = await fetch(`https://desktop.tidal.com/v1/users/${this._userId}/favorites/tracks?offset=0&limit=10000&order=DATE&orderDirection=DESC&countryCode=US&locale=en_US&deviceType=DESKTOP`, {
headers: this._authHeaders
})