fix small mistakes, track first_msg more correctly

master
Vitaliy Filippov 2016-07-25 16:33:13 +03:00
parent 22c142247d
commit 7a25344a4a
4 changed files with 18 additions and 14 deletions

View File

@ -1,4 +1,4 @@
{
"plugins": [ "transform-es2015-destructuring", "transform-object-rest-spread" ],
"plugins": [ "transform-es2015-destructuring", "transform-object-rest-spread", "transform-es2015-block-scoping" ],
"retainLines": true
}

1
db.sql
View File

@ -51,6 +51,7 @@ create index messages_flags on messages using gin (folder_id, flags);
create index messages_messageid on messages (messageid);
create index messages_refs on messages using gin (refs);
create index messages_vertag on messages (folder_id, vertag);
create index messages_time on messages (folder_id, time);
create table threads (
id serial not null primary key,

View File

@ -73,6 +73,7 @@ Syncer.sync = function*(account)
{
[ self.versionTag ] = yield pg.select('MAX(vertag)').from('messages')
.where({ folder_id: row.id }).val(gen.ef());
self.versionTag = self.versionTag || 0;
}
yield pg.update('folders', { uidvalidity: box.uidvalidity, unread_count: box.messages.new })
.where({ id: row.id }).run(gen.ef());
@ -313,6 +314,8 @@ Syncer.addMessage = function*(msgrow, attrs)
var t = Date.parse(header.date[0]);
if (!isNaN(t))
header.date = new Date(t);
else
header.date = null;
}
if (!header.date)
header.date = new Date(attrs.date);
@ -332,26 +335,18 @@ Syncer.addMessage = function*(msgrow, attrs)
msgrow.flags = toPgArray(msgrow.flags);
msgrow.refs = toPgArray(header.references);
msgrow.vertag = self.versionTag;
var thisIsFirst = false;
if (header.references.length)
{
var [ threadId ] = yield pgtx.select('MAX(thread_id)').from('messages')
let [ threadId ] = yield pgtx.select('MAX(thread_id)').from('messages')
.where(pg.sql.in('messageid', header.references)).val(gen.ef());
if (!threadId)
{
[ threadId ] = yield pgtx.select('MAX(thread_id)').from('messages')
.where(new pg.sql.Binary('@>', 'refs', toPgArray([msgrow.messageid]))).val(gen.ef());
}
if (threadId)
{
try
{
yield pgtx.update('threads', { msg_count: pg.sql('msg_count+1') })
.where({ id: threadId }).run(gen.ef());
}
catch (e)
{
throw new Error(''+e);
}
if (threadId)
thisIsFirst = true;
}
msgrow.thread_id = threadId;
}
@ -365,6 +360,13 @@ Syncer.addMessage = function*(msgrow, attrs)
}).returning('id').val(gen.ef());
yield pgtx.update('messages', { thread_id: msgrow.thread_id }).where({ id: msgrow.id }).run(gen.ef());
}
else
{
let upd = pgtx.update('threads', { msg_count: pg.sql('msg_count+1') });
if (thisIsFirst)
upd.first_msg = msgrow.id;
yield upd.where({ id: msgrow.threadId }).run(gen.ef());
}
end_transaction();
}

View File

@ -16,6 +16,7 @@
},
"devDependencies": {
"babel-cli": "latest",
"babel-plugin-transform-es2015-block-scoping": "latest",
"babel-plugin-transform-es2015-destructuring": "latest",
"babel-plugin-transform-object-rest-spread": "latest",
"eslint": "latest",