getTrackDownloadUrl: return null instead of throwing an error

e.g. Deezer can't find the song in the requested format: return null
This commit is contained in:
Namkhai B 2021-08-03 16:31:51 -05:00
parent 0940987809
commit e2d488bf21
No known key found for this signature in database
GPG Key ID: 9DC021F538318528
2 changed files with 6 additions and 2 deletions

View File

@ -147,6 +147,7 @@ if (process.env.CI) {
test('DOWNLOAD TRACK128 & ADD METADATA', async (t) => { test('DOWNLOAD TRACK128 & ADD METADATA', async (t) => {
const track = await api.getTrackInfo(SNG_ID); const track = await api.getTrackInfo(SNG_ID);
const trackData = await getTrackDownloadUrl(track, 1); const trackData = await getTrackDownloadUrl(track, 1);
if (!trackData) throw new Error("Selected track+quality are unavailable");
const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'});
t.truthy(data); t.truthy(data);
@ -165,6 +166,7 @@ if (process.env.CI) {
// test('TRACK128 WITHOUT ALBUM INFO', async (t) => { // test('TRACK128 WITHOUT ALBUM INFO', async (t) => {
// const track = await api.getTrackInfo('912254892'); // const track = await api.getTrackInfo('912254892');
// const trackData = await getTrackDownloadUrl(track, 1); // const trackData = await getTrackDownloadUrl(track, 1);
// if (!trackData) throw new Error("Selected track+quality are unavailable");
// const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); // const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'});
// t.truthy(data); // t.truthy(data);
@ -185,6 +187,7 @@ if (process.env.CI) {
test('DOWNLOAD TRACK320 & ADD METADATA', async (t) => { test('DOWNLOAD TRACK320 & ADD METADATA', async (t) => {
const track = await api.getTrackInfo(SNG_ID); const track = await api.getTrackInfo(SNG_ID);
const trackData = await getTrackDownloadUrl(track, 3); const trackData = await getTrackDownloadUrl(track, 3);
if (!trackData) throw new Error("Selected track+quality are unavailable");
const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'});
t.truthy(data); t.truthy(data);
@ -203,6 +206,7 @@ if (process.env.CI) {
test('DOWNLOAD TRACK1411 & ADD METADATA', async (t) => { test('DOWNLOAD TRACK1411 & ADD METADATA', async (t) => {
const track = await api.getTrackInfo(SNG_ID); const track = await api.getTrackInfo(SNG_ID);
const trackData = await getTrackDownloadUrl(track, 9); const trackData = await getTrackDownloadUrl(track, 9);
if (!trackData) throw new Error("Selected track+quality are unavailable");
const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'}); const {data} = await axios.get(trackData.trackUrl, {responseType: 'arraybuffer'});
t.truthy(data); t.truthy(data);

View File

@ -65,7 +65,7 @@ const getTrackUrlFromServer = async (track_token: string, format: string): Promi
* @param track Track info json returned from `getTrackInfo` * @param track Track info json returned from `getTrackInfo`
* @param quality 1 = 128kbps, 3 = 320kbps and 9 = flac (around 1411kbps) * @param quality 1 = 128kbps, 3 = 320kbps and 9 = flac (around 1411kbps)
*/ */
export const getTrackDownloadUrl = async (track: trackType, quality: number): Promise<{trackUrl: string, isEncrypted: boolean, fileSize: number}> => { export const getTrackDownloadUrl = async (track: trackType, quality: number): Promise<{trackUrl: string, isEncrypted: boolean, fileSize: number} | null> => {
let formatName: string; let formatName: string;
switch (quality) { switch (quality) {
case 9: case 9:
@ -113,7 +113,7 @@ export const getTrackDownloadUrl = async (track: trackType, quality: number): Pr
fileSize: fileSize, fileSize: fileSize,
}; };
} }
throw new Error(`Forbidden to access ${url}`); return null;
}; };
const testUrl = async (url: string): Promise<number> => { const testUrl = async (url: string): Promise<number> => {