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
|
"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_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,
|
||||||
|
|
28
operetta.js
28
operetta.js
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in New Issue