likeopera-backend/operetta.js

70 lines
3.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* TODO:
* + скачивание вложений
* - сохранять заголовки в БД и возможно сохранять сообщения целиком ещё где-то
* - пометка прочитанным, просмотренным (seen)
* - фоновая индексация всех текстов сообщений в ящике
* - написание сообщений
* - ответ, пересылка
* - подсказка адресов
* - отправка вложений
* - пометить прочтённым/непрочтённым
* - переместить
* - удалить
* - пометить как спам
* - живое обновление (подписка view на новые сообщения)
* - настройки группировки (дата/прочитано/отмечено)
* - настройки сортировки (дата/тема/размер/возможно отправитель)
* - thread'ы (дискуссии)
* - метки (если вообще нужно)
* - совсем фантазии: интеграция с maillog'ом и серверным спамфильтром
*/
/**
* Нужные методы API:
* - список аккаунтов и папок
* - список сообщений в папке
* - содержимое сообщения
* - поиск по тексту
* - список тредов в папке, с сообщениями
* - проверить почту
* - пометить прочтённым
* - переместить
* - удалить
* - подсказка адресов To
* - отправить сообщение
*
* В определённом плане получается тупость - получается, что дублируешь
* функционал самого почтового сервера. Но шо ж с ним поделаешь, если он "ни ф силах"...
* Ведь по сути-то, MTA от такой штуки нужен только 1 метод: "добавить сообщение в папку".
*
* Но для сохранения совместимости с IMAP тут два пути - либо тащить всё к себе и потом
* делать свой IMAP сервер, либо всё-таки мучаться и дублировать функционал.
*/
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
if (process.env.DEBUG)
{
global.Promise = require('bluebird');
global.Promise.config({ longStackTraces: true });
}
const pg = require('pg');
const Syncer = require('./Syncer.js');
const SyncerWeb = require('./SyncerWeb.js');
async function startSync(cfg)
{
let dbh = new pg.Client(cfg.pg);
await dbh.connect();
let syncer = new Syncer(dbh);
let syncerweb = new SyncerWeb(syncer, dbh, cfg);
await syncer.init(cfg);
syncerweb.listen(8057);
//await syncer.syncAll();
}
let cfg = require('./cfg.json');
startSync(cfg).catch(e => { console.error(e.stack); });