From a4102ad3f031f51d27684d887191eba1489aa844 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 4 Sep 2016 16:22:39 +0300 Subject: [PATCH] add /sync api --- operetta.js | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/operetta.js b/operetta.js index 8bf9b21..25fb694 100644 --- a/operetta.js +++ b/operetta.js @@ -1,7 +1,6 @@ // TODO: Получать, парсить и хранить тела писем (и, вероятно, вложения) + индексировать тексты // TODO: Группировка писем // TODO: Висеть в виде демона и сразу получать новые письма (IDLE) -// TODO: Сделать веб-сервер // TODO: Сделать подписки на новые сообщения по вебсокетам // TODO: Чего я ещё хотел - интеграцию с maillog'ом и серверным спамфильтром @@ -48,7 +47,8 @@ var Syncer = { selected: {}, connections: {}, busy: {}, - queue: {} + queue: {}, + syncInProgress: false }; Syncer.app = express(); @@ -139,6 +139,17 @@ Syncer.app.get('/message', genRequest(function*(req, res) return res.send({ msg: msg }); })); +Syncer.app.get('/sync', genRequest(function*(req, res) +{ + var self = Syncer; + if (!req.session || !req.session.auth) + return res.sendStatus(401); + if (self.syncInProgress) + return res.send({ error: 'already-running' }); + Syncer.syncAll(); + return res.send({ status: 'started' }); +})); + Syncer.getBody = function*(messages, boxId) { var self = this; @@ -356,7 +367,6 @@ Syncer.sync = function*(account) Syncer.deleteMessages = function*(where) { - console.log(where+''); yield pg.update('threads', { first_msg: null }) .where(pg.sql('first_msg IN ('+pg.select('id').from('messages').where(where)+')')) .run(gen.ef()); @@ -636,13 +646,20 @@ Syncer.addMessage = function*(msgrow, attrs) } } +Syncer.syncAll = function() +{ + gen.run(function*() + { + Syncer.syncInProgress = true; + for (var i = 0; i < cfg.accounts.length; i++) + yield* Syncer.sync(cfg.accounts[i]); + Syncer.syncInProgress = false; + }); +} + Syncer.app.listen(8057); -gen.run(function*() -{ - for (var i = 0; i < cfg.accounts.length; i++) - yield* Syncer.sync(cfg.accounts[i]); -}); +Syncer.syncAll(); function genRequest(fn) {