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

pull/267/head
Beaudan 6 years ago
parent 960bd3fff2
commit 796181e00c

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

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

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

Loading…
Cancel
Save