add /sync api

master
Vitaliy Filippov 2016-09-04 16:22:39 +03:00
parent 6c31561b9b
commit a4102ad3f0
1 changed files with 25 additions and 8 deletions

View File

@ -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)
{