chore: update public repo

This commit is contained in:
desu-bot 2025-01-24 09:56:11 +00:00
parent 67a6238632
commit fd6cfba726
No known key found for this signature in database
3 changed files with 55 additions and 30 deletions

View file

@ -14,7 +14,6 @@ import { generateOpusImageBlob } from '../../utils/opus.ts'
const ffetchApi = ffetchBase.extend({
baseUrl: 'https://api-v2.soundcloud.com',
// @ts-expect-error lol fixme
query: {
client_id: '4BowhSywvkJtklODQDzjNMq9sK9wyDJ4',
app_version: '1736857534',
@ -115,6 +114,14 @@ async function fetchPlaylistByUrl(url: string) {
return ScPlaylist.parse(playlist.data)
}
async function fetchPlaylistById(id: number) {
return ffetchApi(`/playlists/${id}`, {
query: {
linked_partitioning: '1',
},
}).parsedJson(ScPlaylist)
}
async function fetchTracksById(trackIds: number[]) {
return ffetchApi('/tracks', {
query: {
@ -273,7 +280,7 @@ async function downloadPlaylist(playlist: ScPlaylist, params: {
remaining -= ids.length
spinnies.update('fetching', { text: `fetching ${remaining} tracks` })
})
spinnies.succeed('fetching')
spinnies.succeed('fetching', { text: `fetched ${tracks.length} tracks` })
}
const destDir = params.destination ?? join('assets/soundcloud-dl', sanitizeFilename(`${playlist.user.username} - ${playlist.title}`))
@ -287,7 +294,7 @@ async function downloadPlaylist(playlist: ScPlaylist, params: {
spinnies.add(`${track.id}`, { text: filename })
await downloadTrack(track, {
destination: join(destDir, filename),
destination: join(destDir, sanitizeFilename(filename)),
onRateLimit: (wait) => {
spinnies.update(`${track.id}`, { text: `[rate limit ${Math.floor(wait / 1000)}s] ${filename}` })
},
@ -297,7 +304,7 @@ async function downloadPlaylist(playlist: ScPlaylist, params: {
})
spinnies.remove(`${track.id}`)
}, { limit: 8 })
})
console.log('done')
spinnies.stopAll()
@ -358,27 +365,40 @@ async function downloadLikes(username: string) {
spinnies.succeed('collect', { text: `collected ${tracks.length} tracks and ${playlists.length} playlists` })
spinnies.add('tracks', { text: 'downloading tracks...' })
const downloaded = 0
const updateTracksSpinner = () => {
spinnies.update('tracks', { text: `[${downloaded}/${tracks.length}] downloading tracks...` })
}
updateTracksSpinner()
const baseDir = join('assets/soundcloud-dl', `${sanitizeFilename(username)}-likes`)
await mkdir(baseDir, { recursive: true })
await asyncPool(tracks, async (track) => {
const filename = `${track.user.username} - ${track.title}`
spinnies.add(`${track.id}`, { text: filename })
await downloadTrack(track, {
destination: join(baseDir, sanitizeFilename(filename)),
onRateLimit: (wait) => {
spinnies.update(`${track.id}`, { text: `[rate limit ${Math.floor(wait / 1000)}s] ${filename}` })
},
onCdnRateLimit: () => {
spinnies.update(`${track.id}`, { text: `[cdn rate limit] ${filename}` })
},
})
spinnies.remove(`${track.id}`)
})
// await asyncPool(tracks, async (track) => {
// const filename = `${track.user.username} - ${track.title}`
// spinnies.add(`${track.id}`, { text: filename })
// await downloadTrack(track, {
// destination: join(baseDir, sanitizeFilename(filename)),
// onRateLimit: (wait) => {
// spinnies.update(`${track.id}`, { text: `[rate limit ${Math.floor(wait / 1000)}s] ${filename}` })
// },
// onCdnRateLimit: () => {
// spinnies.update(`${track.id}`, { text: `[cdn rate limit] ${filename}` })
// },
// })
// spinnies.remove(`${track.id}`)
// updateTracksSpinner()
// })
spinnies.succeed('tracks', { text: `downloaded ${downloaded} tracks` })
spinnies.stopAll()
for (const playlist of playlists) {
console.log('\uDB83\uDCB8 %s', playlist.title)
await downloadPlaylist(playlist, {
console.log(`\uDB83\uDCB8 ${playlist.title}`)
const fullPlaylist = await fetchPlaylistById(playlist.id)
await downloadPlaylist(fullPlaylist, {
destination: join(baseDir, sanitizeFilename(`${playlist.user.username} - ${playlist.title}`)),
})
}