From f7b1fcd53fc259e914c40886a0b5f854a5997da3 Mon Sep 17 00:00:00 2001 From: Jonathan Cremin Date: Fri, 5 Dec 2014 13:44:42 +0000 Subject: [PATCH] Improve resiliency against slow api calls, rdio and brackets --- lib/services/deezer.js | 3 ++- lib/services/rdio.js | 8 +++++--- routes/share.js | 6 +++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/services/deezer.js b/lib/services/deezer.js index 04e2443..5a8a038 100644 --- a/lib/services/deezer.js +++ b/lib/services/deezer.js @@ -40,7 +40,8 @@ module.exports.lookupId = function(id, type) { type: type, id: result.id, name: result.title, - url: result.link, + streamUrl: result.album.link, + purchaseUrl: null, artwork: artwork, artist: { name: result.artist.name diff --git a/lib/services/rdio.js b/lib/services/rdio.js index e53598f..3a4a1e4 100644 --- a/lib/services/rdio.js +++ b/lib/services/rdio.js @@ -88,13 +88,15 @@ module.exports.parseUrl = function(url) { module.exports.search = function(data) { var deferred = Q.defer(); - var query; + var query, albumClean; var type = data.type; if (type == "album") { query = data.artist.name + " " + data.name; + albumClean = data.name.match(/([^\(\[]+)/)[0]; } else if (type == "track") { query = data.artist.name + " " + data.album.name + " " + data.name; + albumClean = data.album.name.match(/([^\(\[]+)/)[0]; } rdio.api("", "", { @@ -105,9 +107,9 @@ module.exports.search = function(data) { var results = JSON.parse(results).result.results; var result = results.filter(function(result) { - if (type == "album" && result.name == data.name) { + if (type == "album" && result.name.match(/([^\(\[]+)/)[0] == albumClean) { return result; - } else if (type == "track" && result.album == data.album.name) { + } else if (type == "track" && result.album.match(/([^\(\[]+)/)[0] == albumClean) { return result; } }).shift(); diff --git a/routes/share.js b/routes/share.js index 136a928..3b84542 100644 --- a/routes/share.js +++ b/routes/share.js @@ -14,6 +14,7 @@ require("fs").readdirSync(path.join(__dirname, "..", "lib", "services")).forEach } }); + module.exports = function(req, res) { var serviceId = req.params.service; var type = req.params.type; @@ -26,9 +27,10 @@ module.exports = function(req, res) { } services[serviceId].lookupId(itemId, type).then(function(item) { + for (var id in services) { if (id != serviceId) { - promises.push(services[id].search(item)); + promises.push(Q.timeout(services[id].search(item), 5000)); } } @@ -37,6 +39,8 @@ module.exports = function(req, res) { if (result.state == "fulfilled") { return result.value; } + }).filter(function(result) { + return result || false; }); items.sort(function(a, b) {