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 "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_messageid on messages (messageid);
create index messages_refs on messages using gin (refs); create index messages_refs on messages using gin (refs);
create index messages_vertag on messages (folder_id, vertag); create index messages_vertag on messages (folder_id, vertag);
create index messages_time on messages (folder_id, time);
create table threads ( create table threads (
id serial not null primary key, 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') [ self.versionTag ] = yield pg.select('MAX(vertag)').from('messages')
.where({ folder_id: row.id }).val(gen.ef()); .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 }) yield pg.update('folders', { uidvalidity: box.uidvalidity, unread_count: box.messages.new })
.where({ id: row.id }).run(gen.ef()); .where({ id: row.id }).run(gen.ef());
@ -313,6 +314,8 @@ Syncer.addMessage = function*(msgrow, attrs)
var t = Date.parse(header.date[0]); var t = Date.parse(header.date[0]);
if (!isNaN(t)) if (!isNaN(t))
header.date = new Date(t); header.date = new Date(t);
else
header.date = null;
} }
if (!header.date) if (!header.date)
header.date = new Date(attrs.date); header.date = new Date(attrs.date);
@ -332,26 +335,18 @@ Syncer.addMessage = function*(msgrow, attrs)
msgrow.flags = toPgArray(msgrow.flags); msgrow.flags = toPgArray(msgrow.flags);
msgrow.refs = toPgArray(header.references); msgrow.refs = toPgArray(header.references);
msgrow.vertag = self.versionTag; msgrow.vertag = self.versionTag;
var thisIsFirst = false;
if (header.references.length) 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()); .where(pg.sql.in('messageid', header.references)).val(gen.ef());
if (!threadId) if (!threadId)
{ {
[ threadId ] = yield pgtx.select('MAX(thread_id)').from('messages') [ threadId ] = yield pgtx.select('MAX(thread_id)').from('messages')
.where(new pg.sql.Binary('@>', 'refs', toPgArray([msgrow.messageid]))).val(gen.ef()); .where(new pg.sql.Binary('@>', 'refs', toPgArray([msgrow.messageid]))).val(gen.ef());
} if (threadId)
if (threadId) thisIsFirst = true;
{
try
{
yield pgtx.update('threads', { msg_count: pg.sql('msg_count+1') })
.where({ id: threadId }).run(gen.ef());
}
catch (e)
{
throw new Error(''+e);
}
} }
msgrow.thread_id = threadId; msgrow.thread_id = threadId;
} }
@ -365,6 +360,13 @@ Syncer.addMessage = function*(msgrow, attrs)
}).returning('id').val(gen.ef()); }).returning('id').val(gen.ef());
yield pgtx.update('messages', { thread_id: msgrow.thread_id }).where({ id: msgrow.id }).run(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(); end_transaction();
} }

View File

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