fix small mistakes, track first_msg more correctly
parent
22c142247d
commit
7a25344a4a
2
.babelrc
2
.babelrc
|
@ -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
1
db.sql
|
@ -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,
|
||||
|
|
28
operetta.js
28
operetta.js
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue