diff --git a/Syncer.js b/Syncer.js
index 6569ee3..d8ff341 100644
--- a/Syncer.js
+++ b/Syncer.js
@@ -283,7 +283,7 @@ class Syncer
{
let updated = await SQL.update(
this.pg, { m: 'messages', t: SQL.values(updateFlags) },
- [ 'flags = t.flags::varchar(255)[]' ],
+ [ 'flags = t.flags::text[]' ],
{ 'm.folder_id': boxId, 'm.uid = t.uid::int': [] },
checkMissing ? { returning: 'm.uid' } : null
);
@@ -502,7 +502,7 @@ class Syncer
{
threadId = await SQL.select(
this.pg, 'messages', 'MAX(thread_id)',
- { 'refs @> array[?]::varchar(1000)[]': msgrow.messageid }, null, SQL.MS_VALUE
+ { 'refs @> array[?]': msgrow.messageid }, null, SQL.MS_VALUE
);
if (threadId)
{
diff --git a/SyncerWeb.js b/SyncerWeb.js
index dcdaf2c..689610c 100644
--- a/SyncerWeb.js
+++ b/SyncerWeb.js
@@ -75,13 +75,13 @@ class SyncerWeb
'select id, name, email, settings->\'folders\' folderMap,'+
' (select count(*) from messages m, folders f'+
' where m.folder_id=f.id and f.account_id=a.id'+
- ' and (flags @> array[\'pinned\',\'unread\']::varchar(255)[])) pinned_unread_count'+
+ ' and (flags @> array[\'pinned\',\'unread\'])) pinned_unread_count'+
' from accounts a'
)).rows;
const folders = (await this.pg.query(
'select id, account_id, name,'+
' (select count(*) from messages m where m.folder_id=f.id) total_count,'+
- ' (select count(*) from messages m where m.folder_id=f.id and (flags @> array[\'unread\']::varchar(255)[])) unread_count'+
+ ' (select count(*) from messages m where m.folder_id=f.id and (flags @> array[\'unread\'])) unread_count'+
' from folders f order by account_id, name'
)).rows;
let fh = {};
@@ -106,11 +106,11 @@ class SyncerWeb
}
else if (query.folderType == 'unread')
{
- p['(flags @> array[\'unread\']::varchar(255)[])'] = [];
+ p['(flags @> array[\'unread\'])'] = [];
}
else if (query.folderType == 'pinned')
{
- p['(flags @> array[\'flagged\']::varchar(255)[])'] = [];
+ p['(flags @> array[\'flagged\'])'] = [];
}
else if (query.folderType == 'inbox')
{
@@ -119,15 +119,16 @@ class SyncerWeb
.filter(f => f[1]);
p['(f.account_id, f.name) NOT IN ('+folders.map(f => '(?, ?)').join(', ')+')'] =
[].concat.apply([], folders);
- p['(flags @> array[\'in\']::varchar(255)[])'] = [];
+ p['(flags @> array[\'in\'])'] = [];
}
- else if (query.folderType == 'out')
+ else if (query.folderType == 'sent')
{
- p['(flags @> array[\'out\']::varchar(255)[])'] = [];
+ // Все отправленные
+ p['(flags @> array[\'out\'])'] = [];
}
else if (query.folderType == 'outbox')
{
- // TODO это какая-то хитрая метапапка, которая не живёт на IMAP'е?
+ // FIXME это "папка" для локально составленных сообщений, не сохранённых в IMAP
}
else if (query.folderType == 'drafts' || query.folderType == 'spam' || query.folderType == 'trash')
{
@@ -350,6 +351,7 @@ function sanitizeHtml(html)
styles = '';
}
html = htmlawed.sanitize(html||'', { safe: 1, elements: '* +style', keep_bad: 0, comment: 1 });
+ html = html.replace(/]+)>/i, (m, m1) => '');
html = html.replace(/