diff --git a/package.json b/package.json index 601b10f..c173cc2 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "start": "node -r babel-core/register app.js", "test": "mocha --require co-mocha --compilers js:babel-core/register test/**/*.js --timeout=10000", "watch": "parallelshell \"npm run watch-js\" \"npm run watch-server\"", - "watch-js": "babel --modules system -wd public/views views", - "watch-server": "nodemon -x \"node -r babel-core/register\" -e js,jsx -i public/ app.js" + "watch-js": "babel -wd public/views views", + "watch-server": "nodemon -x \"node -r babel-core/register\" -e js,jsx -i public/ -i chrome/ app.js" }, "engines": { "node": "^5.0.0", diff --git a/routes/share.js b/routes/share.js index af4593f..33cab8f 100644 --- a/routes/share.js +++ b/routes/share.js @@ -2,6 +2,7 @@ import React from 'react'; import createHandler from '../lib/react-handler'; import { routes } from '../views/app'; import services from '../lib/services'; +import co from 'co'; function formatAndSort(matches, serviceId) { matches = Object.keys(matches).map(function (key) {return matches[key]; }); @@ -24,9 +25,42 @@ export default function* (serviceId, type, itemId, format, next) { return yield next; } - const doc = yield this.db.matches.findOne({_id: serviceId + '$$' + itemId}); + let doc = yield this.db.matches.findOne({_id: serviceId + '$$' + itemId}); + if (!doc) { + const item = yield matchedService.lookupId(itemId, type); + this.assert(item.id, 404); + item.matched_at = new Date(); // eslint-disable-line camelcase + const matches = {}; + matches[item.service] = item; - this.assert(doc, 404, 'Not Found'); + for (let service of services) { + if (service.id === item.service) { + continue; + } + matches[service.id] = {service: service.id}; + } + doc = {_id: item.service + '$$' + item.id, 'created_at': new Date(), services: matches}; + yield this.db.matches.save(doc); + process.nextTick(() => { + for (let service of services) { + console.log(service.id); + if (service.id === item.service) { + continue; + } + matches[service.id] = {service: service.id}; + co(function* (){ + const match = yield service.search(item); + console.log(match.id); + match.matched_at = new Date(); // eslint-disable-line camelcase + const update = {}; + update['services.' + match.service] = match; + yield this.db.matches.updateOne({_id: item.service + '$$' + item.id}, {'$set': update}); + }.bind(this)).catch((err) => { + debug(err); + }); + } + }); + } const shares = formatAndSort(doc.services, serviceId);