forked from signalapp/Signal-Desktop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexpiring_tap_to_view_messages.js
98 lines (82 loc) · 2.39 KB
/
expiring_tap_to_view_messages.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Copyright 2019-2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
/* global
_,
MessageController,
Whisper
*/
// eslint-disable-next-line func-names
(function () {
window.Whisper = window.Whisper || {};
async function eraseTapToViewMessages() {
try {
window.SignalContext.log.info(
'eraseTapToViewMessages: Loading messages...'
);
const messages =
await window.Signal.Data.getTapToViewMessagesNeedingErase({
MessageCollection: Whisper.MessageCollection,
});
await Promise.all(
messages.map(async fromDB => {
const message = MessageController.register(fromDB.id, fromDB);
window.SignalContext.log.info(
'eraseTapToViewMessages: message data erased',
message.idForLogging()
);
await message.eraseContents();
})
);
} catch (error) {
window.SignalContext.log.error(
'eraseTapToViewMessages: Error erasing messages',
error && error.stack ? error.stack : error
);
}
window.SignalContext.log.info('eraseTapToViewMessages: complete');
}
let timeout;
async function checkTapToViewMessages() {
const SECOND = 1000;
const MINUTE = 60 * SECOND;
const HOUR = 60 * MINUTE;
const THIRTY_DAYS = 30 * 24 * HOUR;
const receivedAt =
await window.Signal.Data.getNextTapToViewMessageTimestampToAgeOut();
if (!receivedAt) {
return;
}
const nextCheck = receivedAt + THIRTY_DAYS;
Whisper.TapToViewMessagesListener.nextCheck = nextCheck;
window.SignalContext.log.info(
'checkTapToViewMessages: next check at',
new Date(nextCheck).toISOString()
);
let wait = nextCheck - Date.now();
// In the past
if (wait < 0) {
wait = 0;
}
// Too far in the future, since it's limited to a 32-bit value
if (wait > 2147483647) {
wait = 2147483647;
}
clearTimeout(timeout);
timeout = setTimeout(async () => {
await eraseTapToViewMessages();
checkTapToViewMessages();
}, wait);
}
const debouncedCheckTapToViewMessages = _.debounce(
checkTapToViewMessages,
1000
);
Whisper.TapToViewMessagesListener = {
nextCheck: null,
init(events) {
checkTapToViewMessages();
events.on('timetravel', debouncedCheckTapToViewMessages);
},
update: debouncedCheckTapToViewMessages,
};
})();