feat: hit expire endpoint for read messages

for now it will hit the expire endpoint twice
pull/2971/head
William Grant 2 years ago
parent c1dc2e5a6c
commit 93b450ce56

@ -2058,7 +2058,8 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
const readDetails = []; const readDetails = [];
// eslint-disable-next-line no-restricted-syntax // eslint-disable-next-line no-restricted-syntax
for (const nowRead of oldUnreadNowRead) { for (const nowRead of oldUnreadNowRead) {
nowRead.markMessageReadNoCommit(readAt); // eslint-disable-next-line no-await-in-loop
await nowRead.markMessageReadNoCommit(readAt);
const validTimestamp = nowRead.get('sent_at') || nowRead.get('serverTimestamp'); const validTimestamp = nowRead.get('sent_at') || nowRead.get('serverTimestamp');
if (nowRead.get('source') && validTimestamp && isFinite(validTimestamp)) { if (nowRead.get('source') && validTimestamp && isFinite(validTimestamp)) {

@ -93,6 +93,7 @@ import {
setExpirationStartTimestamp, setExpirationStartTimestamp,
changeToDisappearingMessageConversationType, changeToDisappearingMessageConversationType,
checkForExpireUpdateInContentMessage, checkForExpireUpdateInContentMessage,
updateMessageExpiryOnSwarm,
} from '../util/expiringMessages'; } from '../util/expiringMessages';
import { LinkPreviews } from '../util/linkPreviews'; import { LinkPreviews } from '../util/linkPreviews';
import { Notifications } from '../util/notifications'; import { Notifications } from '../util/notifications';
@ -1092,7 +1093,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
} }
public async markMessageAsRead(readAt: number) { public async markMessageAsRead(readAt: number) {
this.markMessageReadNoCommit(readAt); await this.markMessageReadNoCommit(readAt);
await this.commit(); await this.commit();
// the line below makes sure that getNextExpiringMessage will find this message as expiring. // the line below makes sure that getNextExpiringMessage will find this message as expiring.
// getNextExpiringMessage is used on app start to clean already expired messages which should have been removed already, but are not // getNextExpiringMessage is used on app start to clean already expired messages which should have been removed already, but are not
@ -1101,7 +1102,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
await this.getConversation()?.refreshInMemoryDetails(); await this.getConversation()?.refreshInMemoryDetails();
} }
public markMessageReadNoCommit(readAt: number) { public async markMessageReadNoCommit(readAt: number) {
this.set({ unread: READ_MESSAGE_STATE.read }); this.set({ unread: READ_MESSAGE_STATE.read });
const convo = this.getConversation(); const convo = this.getConversation();
@ -1117,6 +1118,10 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
); );
if (expirationMode === 'legacy' || expirationMode === 'deleteAfterRead') { if (expirationMode === 'legacy' || expirationMode === 'deleteAfterRead') {
if (this.isIncoming() && !this.isExpiring()) {
await updateMessageExpiryOnSwarm(this, 'markMessageReadNoCommit()', true);
}
this.set({ this.set({
expirationStartTimestamp: setExpirationStartTimestamp( expirationStartTimestamp: setExpirationStartTimestamp(
expirationMode, expirationMode,

@ -185,7 +185,7 @@ async function send(
canBeDeleteAfterRead && canBeDeleteAfterRead &&
(expirationMode === 'legacy' || expirationMode === 'deleteAfterRead') (expirationMode === 'legacy' || expirationMode === 'deleteAfterRead')
) { ) {
foundMessage = await updateMessageExpiryOnSwarm(foundMessage); foundMessage = await updateMessageExpiryOnSwarm(foundMessage, 'send()');
} }
} }

@ -637,8 +637,15 @@ export async function checkHasOutdatedDisappearingMessageClient(
} }
} }
export async function updateMessageExpiryOnSwarm(message: MessageModel, shouldCommit?: boolean) { export async function updateMessageExpiryOnSwarm(
window.log.debug(`WIP: [updateMessageExpiryOnSwarm]\nmessage: ${JSON.stringify(message)}`); message: MessageModel,
callLocation?: string, // this is for debugging purposes
shouldCommit?: boolean
) {
if (callLocation) {
window.log.debug(`WIP: [updateMessageExpiryOnSwarm] called from: ${callLocation} `);
}
// window.log.debug(`WIP: [updateMessageExpiryOnSwarm]\nmessage: ${JSON.stringify(message)}`);
const messageHash = message.get('messageHash'); const messageHash = message.get('messageHash');
const expiresAt = message.get('expires_at'); const expiresAt = message.get('expires_at');

Loading…
Cancel
Save