From 84d0617f2993e03560f8a1ecf8c699e76dd288d8 Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Fri, 30 Oct 2020 18:48:04 -0700 Subject: [PATCH] Fix legacy images (#1023) * Fix legacy images * 1.0.11 * Fix lint --- libs/package-lock.json | 2 +- libs/package.json | 2 +- libs/src/api/file.js | 24 ++++++++++++++++++++++-- libs/src/utils/network.js | 4 +++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/libs/package-lock.json b/libs/package-lock.json index c1ead08ba64..fa464a87499 100644 --- a/libs/package-lock.json +++ b/libs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@audius/libs", - "version": "1.0.10", + "version": "1.0.11", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/libs/package.json b/libs/package.json index 6663bf542dd..04f1f00f9a5 100644 --- a/libs/package.json +++ b/libs/package.json @@ -1,6 +1,6 @@ { "name": "@audius/libs", - "version": "1.0.10", + "version": "1.0.11", "description": "", "main": "src/index.js", "browser": { diff --git a/libs/src/api/file.js b/libs/src/api/file.js index 3d08af4705a..8194b77f4c8 100644 --- a/libs/src/api/file.js +++ b/libs/src/api/file.js @@ -3,7 +3,6 @@ if (urlJoin && urlJoin.default) urlJoin = urlJoin.default const { Base, Services } = require('./base') const { raceRequests } = require('../utils/network') const retry = require('async-retry') -const FETCH_CID_TIMEOUT_MS = 20 /* sec */ * 1000 /* millis */ // Public gateways to send requests to, ordered by precidence. const publicGateways = [ @@ -48,9 +47,30 @@ class File extends Base { const { response } = await raceRequests(urls, callback, { method: 'get', responseType: 'blob' - }, FETCH_CID_TIMEOUT_MS) + }, /* timeout */ null) + if (!response) throw new Error(`Could not fetch ${cid}`) return response } catch (e) { + // TODO: Remove this fallback logic when no more users/tracks/playlists + // contain "legacy" image formats (no dir cid) + if (cid.includes('/')) { // dirCID -- an image + console.debug(`Attempted to fetch image ${cid} via legacy method`) + // Try legacy image format + // Lop off anything like /480x480.jpg in the CID + const legacyUrls = gateways.map(gateway => urlJoin(gateway, cid.split('/')[0])) + try { + const { response } = await raceRequests(legacyUrls, callback, { + method: 'get', + responseType: 'blob' + }, /* timeout */ null) + if (!response) throw new Error(`Could not fetch ${cid} via legacy method`) + return response + } catch (e) { + throw new Error(`Failed to retrieve ${cid} by legacy method`) + } + } + + // Throw so we can retry throw new Error(`Failed to retrieve ${cid}`) } }, { diff --git a/libs/src/utils/network.js b/libs/src/utils/network.js index 7424d970ff2..92fc16e5ae0 100644 --- a/libs/src/utils/network.js +++ b/libs/src/utils/network.js @@ -116,7 +116,9 @@ async function raceRequests ( }) }) }) - requests.push(Utils.wait(timeout)) + if (timeout !== null) { + requests.push(Utils.wait(timeout)) + } let response let errored try {