Add database functions for storing, retrieving and cleaning last hash for snodes
This commit is contained in:
parent
960bd3fff2
commit
796181e00c
51
app/sql.js
51
app/sql.js
|
@ -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
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue