Add database functions for storing, retrieving and cleaning last hash for snodes

This commit is contained in:
Beaudan 2019-04-15 13:19:06 +10:00
parent 960bd3fff2
commit 796181e00c
3 changed files with 71 additions and 3 deletions

View File

@ -102,8 +102,10 @@ module.exports = {
getMessageCount,
saveMessage,
cleanSeenMessages,
cleanLastHashes,
saveSeenMessageHashes,
saveSeenMessageHash,
updateLastHash,
saveMessages,
removeMessage,
getUnreadByConversation,
@ -114,6 +116,7 @@ module.exports = {
getAllUnsentMessages,
getMessagesBySentAt,
getSeenMessagesByHashList,
getLastHashBySnode,
getExpiredMessages,
getOutgoingWithoutExpiresAt,
getNextExpiringMessage,
@ -421,6 +424,14 @@ async function updateToSchemaVersion6(currentVersion, instance) {
ADD COLUMN friendRequestStatus INTEGER;`
);
await instance.run(
`CREATE TABLE lastHashes(
snode STRING PRIMARY KEY,
hash STRING,
expiresAt INTEGER
);`
);
await instance.run(
`CREATE TABLE seenMessages(
hash STRING PRIMARY KEY,
@ -1556,6 +1567,27 @@ async function saveSeenMessageHashes(arrayOfHashes) {
await promise;
}
async function updateLastHash(data) {
const { snode, hash, expiresAt } = data;
await db.run(
`INSERT OR REPLACE INTO lastHashes (
snode,
hash,
expiresAt
) values (
$snode,
$hash,
$expiresAt
)`,
{
$snode: snode,
$hash: hash,
$expiresAt: expiresAt,
}
);
}
async function saveSeenMessageHash(data) {
const { expiresAt, hash } = data;
await db.run(
@ -1573,6 +1605,12 @@ async function saveSeenMessageHash(data) {
);
}
async function cleanLastHashes() {
await db.run('DELETE FROM lastHashes WHERE expiresAt <= $now;', {
$now: Date.now(),
});
}
async function cleanSeenMessages() {
await db.run('DELETE FROM seenMessages WHERE expiresAt <= $now;', {
$now: Date.now(),
@ -1710,6 +1748,19 @@ async function getMessagesBySentAt(sentAt) {
return map(rows, row => jsonToObject(row.json));
}
async function getLastHashBySnode(snode) {
const row = await db.get('SELECT * FROM lastHashes WHERE snode = $snode;', {
$snode: snode,
});
if (!row) {
return null;
}
return row.lastHash;
}
async function getSeenMessagesByHashList(hashes) {
const rows = await db.all(
`SELECT * FROM seenMessages WHERE hash IN ( ${hashes

View File

@ -501,13 +501,14 @@
}
});
function manageSeenMessages() {
function manageExpiringData() {
window.Signal.Data.cleanSeenMessages();
setTimeout(manageSeenMessages, 1000 * 60 * 60);
window.Signal.Data.cleanLastHashes();
setTimeout(manageExpiringData, 1000 * 60 * 60);
}
async function start() {
manageSeenMessages();
manageExpiringData();
window.dispatchEvent(new Event('storage_ready'));
window.log.info('listening for registration events');

View File

@ -130,7 +130,9 @@ module.exports = {
getMessageCount,
saveMessage,
cleanSeenMessages,
cleanLastHashes,
saveSeenMessageHash,
updateLastHash,
saveSeenMessageHashes,
saveLegacyMessage,
saveMessages,
@ -151,6 +153,7 @@ module.exports = {
getNextExpiringMessage,
getMessagesByConversation,
getSeenMessagesByHashList,
getLastHashBySnode,
getUnprocessedCount,
getAllUnprocessed,
@ -778,10 +781,18 @@ async function cleanSeenMessages() {
await channels.cleanSeenMessages();
}
async function cleanLastHashes() {
await channels.cleanLastHashes();
}
async function saveSeenMessageHashes(data) {
await channels.saveSeenMessageHashes(_cleanData(data));
}
async function updateLastHash(data) {
await channels.updateLastHash(_cleanData(data));
}
async function saveSeenMessageHash(data) {
await channels.saveSeenMessageHash(_cleanData(data));
}
@ -909,6 +920,11 @@ async function getMessagesByConversation(
return new MessageCollection(messages);
}
async function getLastHashBySnode(snode) {
const lastHash = await channels.getLastHashBySnode(snode);
return lastHash;
}
async function getSeenMessagesByHashList(hashes) {
const seenMessages = await channels.getSeenMessagesByHashList(hashes);
return seenMessages;