Two more fixes for promise-based code
parent
fcbf95ae6a
commit
6c8edc1667
|
@ -132,17 +132,12 @@ class ImapManager
|
|||
|
||||
await new Promise((resolve, reject) =>
|
||||
{
|
||||
let error;
|
||||
|
||||
let checkFinish = () =>
|
||||
{
|
||||
if (fetchState.parsed <= 0 && wait)
|
||||
{
|
||||
// Если сообщение окончания придёт до окончания обработки
|
||||
// последней порции, тогда ждём окончания обработки
|
||||
if (error)
|
||||
reject(error);
|
||||
else
|
||||
// последней порции, тогда не резолвим, а ждём окончания обработки
|
||||
resolve();
|
||||
}
|
||||
};
|
||||
|
@ -162,7 +157,7 @@ class ImapManager
|
|||
{
|
||||
this.onMessage(fetchState, msg, seqnum, processor)
|
||||
.then(checkFinish)
|
||||
.catch(e => { error = e; checkFinish(); });
|
||||
.catch(e => reject(e));
|
||||
});
|
||||
|
||||
f.once('end', () =>
|
||||
|
@ -176,7 +171,7 @@ class ImapManager
|
|||
{
|
||||
processor(fetchState.pending, fetchState)
|
||||
.then(saveLast)
|
||||
.catch(e => { error = e; saveLast(); });
|
||||
.catch(e => reject(e));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -207,7 +202,6 @@ class ImapManager
|
|||
{
|
||||
let m = fetchState.pending;
|
||||
fetchState.pending = [];
|
||||
let err;
|
||||
let result = await processor(m, fetchState);
|
||||
if (result)
|
||||
{
|
||||
|
@ -220,10 +214,6 @@ class ImapManager
|
|||
fetchState.srv._parser._ignoreReadable = false;
|
||||
process.nextTick(fetchState.srv._parser._cbReadable);
|
||||
}
|
||||
if (err)
|
||||
{
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
15
Syncer.js
15
Syncer.js
|
@ -163,7 +163,7 @@ class Syncer
|
|||
accountId = row.id;
|
||||
}
|
||||
let srv = await this.getSyncConnection(accountId);
|
||||
let boxes = await new Promise((r, e) => srv.getBoxes(r));
|
||||
let boxes = await new Promise((res, err) => srv.getBoxes((e, r) => e ? err(e) : res(r)));
|
||||
for (let k in boxes)
|
||||
{
|
||||
let boxKind = (boxes[k].special_use_attrib || '').replace('\\', '').toLowerCase();
|
||||
|
@ -230,7 +230,7 @@ class Syncer
|
|||
|
||||
async fullResync(srv, boxId, maxUid, missing, total)
|
||||
{
|
||||
let flags = await SQL.select('messages', 'uid, flags', { folder_id: boxId });
|
||||
let flags = await SQL.select(this.pg, 'messages', 'uid, flags', { folder_id: boxId });
|
||||
flags = flags.reduce((o, row) => { o[row.uid] = row.flags; return o; }, {});
|
||||
|
||||
let updateFlags = [];
|
||||
|
@ -312,7 +312,8 @@ class Syncer
|
|||
srv.on('vanish', onVanish);
|
||||
await this.imap.runFetch(
|
||||
srv, '1:'+maxUid, { modifiers: { changedsince: changedSince+' VANISHED' } },
|
||||
async (messages, state) => this.queueQuickFlags(messages, boxId, state), { updateFlags: updateFlags }
|
||||
async (messages, state) => this.queueQuickFlags(messages, boxId, state),
|
||||
{ updateFlags: updateFlags }
|
||||
);
|
||||
srv.removeListener('vanish', onVanish);
|
||||
let checkedMissing = await this.updateFlags(boxId, updateFlags, missing && true);
|
||||
|
@ -397,8 +398,9 @@ class Syncer
|
|||
let parser = new MailParser({ streamAttachments: false, defaultCharset: 'windows-1251' });
|
||||
return await new Promise((r, j) =>
|
||||
{
|
||||
parse.once('end', r);
|
||||
parser.once('end', r);
|
||||
parser.write(msg);
|
||||
parser.end();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -408,7 +410,9 @@ class Syncer
|
|||
for (let i = 0; i < struct.length; i++)
|
||||
{
|
||||
if (struct[i] instanceof Array)
|
||||
{
|
||||
this.extractAttachments(struct[i], attachments);
|
||||
}
|
||||
else if (struct[i].disposition && struct[i].disposition.type == 'attachment')
|
||||
{
|
||||
attachments.push([
|
||||
|
@ -432,6 +436,7 @@ class Syncer
|
|||
catch (e)
|
||||
{
|
||||
await this.pg.query('ROLLBACK');
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -492,7 +497,7 @@ class Syncer
|
|||
{
|
||||
threadId = await SQL.select(
|
||||
this.pg, 'messages', 'MAX(thread_id)',
|
||||
{ 'refs @> array[?]': msgrow.messageid }, null, SQL.MS_VALUE
|
||||
{ 'refs @> array[?]::varchar(1000)[]': msgrow.messageid }, null, SQL.MS_VALUE
|
||||
);
|
||||
if (threadId)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue