Refactor searching

This commit is contained in:
Jonathan Cremin 2015-01-06 12:58:57 +00:00
parent 87649b5a3a
commit bbcbe8d871
9 changed files with 155 additions and 122 deletions

View file

@ -1,60 +1,36 @@
"use strict";
var parse = require('url').parse;
var path = require('path');
var services = {};
require("fs").readdirSync(path.join(__dirname, "..", "lib", "services")).forEach(function(file) {
var service = require("../lib/services/" + file);
if (service.search) {
services[service.id] = service;
}
});
var lookup = require('../lib/lookup');
var services = require('../lib/services');
module.exports = function(req, res, next) {
var url = parse(req.body.url);
var searching = false;
if (!url.host) {
res.json({error:{message:"You need to submit a url."}});
} else {
var items = {};
for (var id in services) {
items[id] = {service: id};
}
for (var id in services) {
var matched = services[id].match(req.body.url);
if (matched) {
searching = true;
services[id].parseUrl(req.body.url).timeout(10000).then(function(result) {
if (!result.id) {
res.json({error:{message:"No match found for url"}});
} else {
services[id].lookupId(result.id, result.type).then(function(item) {
items[id] = item;
req.db.matches.save({_id:id + "$$" + result.id, created_at: new Date(), services:items}).then(function() {
res.json(item);
});
});
}
}, function(error) {
if (error.code == "ETIMEDOUT") {
error = new Error("Error talking to music service");
error.status = 502;
next(error);
} else if (!error || !error.status) {
error = new Error("An unexpected error happenend");
error.status = 500;
next(error);
}
res.json({error:{message:"No match found for url"}});
});
break;
return res.json({error:{message:"You need to submit a url."}});
}
lookup(req.body.url).then(function(item) {
item.matched_at = new Date();
var matches = {};
matches[item.service] = item;
services.forEach(function(service) {
if (service.id == item.service) {
return;
}
}
}
if (url.host && !searching) {
res.json({error:{message:"No match found for url"}});
}
matches[service.id] = {service: service.id};
service.search(item).then(function(match) {
match.matched_at = new Date();
var update = {};
update["services." + match.service] = match;
req.db.matches.update({_id: item.service + "$$" + item.id}, {"$set": update});
});
});
return req.db.matches.save({_id: item.service + "$$" + item.id, created_at: new Date(), services:matches}).then(function() {
res.json(item);
});
}, function(error) {
console.log(error.stack)
res.json({error: "No matches found for url"});
});
};