Skip to content

Commit e40fb8e

Browse files
authored
fix(frontend): web push notifications were not triggered anymore (#1531)
1 parent b9dda1c commit e40fb8e

File tree

4 files changed

+58
-25
lines changed

4 files changed

+58
-25
lines changed

modules/core/js_modules/Hm_MessagesStore.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Hm_MessagesStore {
2525
this.pages = 0;
2626
this.page = page;
2727
this.offsets = '';
28+
this.newMessages = [];
2829
}
2930

3031
/**
@@ -58,6 +59,7 @@ class Hm_MessagesStore {
5859

5960
const { formatted_message_list: updatedMessages, pages, folder_status, do_not_flag_as_read_on_open, offsets } = await this.#fetch(hideLoadingState);
6061

62+
this.newMessages = this.#getNewMessages(updatedMessages);
6163
this.count = folder_status && Object.values(folder_status)[0]?.messages;
6264
this.pages = parseInt(pages);
6365
this.rows = updatedMessages;
@@ -152,6 +154,27 @@ class Hm_MessagesStore {
152154
}
153155
}
154156

157+
#getNewMessages(fetchedRows) {
158+
const actualRows = this.hasLocalData() ? Object.values(this.rows): [];
159+
const fetchedRowsValues = Object.values(fetchedRows);
160+
161+
const newMessages = [];
162+
163+
fetchedRowsValues.forEach(fetchedRow => {
164+
const isNew = !actualRows.some(actualRow => {
165+
return $(actualRow['0']).data('uid') === $(fetchedRow['0']).data('uid');
166+
});
167+
if (isNew) {
168+
const row = $(fetchedRow['0']);
169+
if (row.hasClass('unseen')) {
170+
newMessages.push(fetchedRow['0']);
171+
}
172+
}
173+
});
174+
175+
return newMessages;
176+
}
177+
155178
#fetch(hideLoadingState = false) {
156179
return new Promise((resolve, reject) => {
157180
Hm_Ajax.request(
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function triggerNewMessageEvent(uid, row) {
2+
const newRowEvent = new CustomEvent('new-message', {
3+
detail: {
4+
uid: uid,
5+
row: row,
6+
}
7+
});
8+
window.dispatchEvent(newRowEvent);
9+
}
Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,31 @@
11
'use strict';
22

3-
43
$(function() {
5-
$('body').on('new_message', function() {
6-
var unread_page = false;
7-
if (getPageNameParam() == 'message_list' && getListPathParam() == 'unread') {
8-
unread_page = true;
9-
}
10-
if (!document.hidden && unread_page) {
11-
return;
12-
}
13-
var current = $('.total_unread_count').text()*1;
14-
var past = Hm_Message_List.past_total;
15-
if (current == past || current < past) {
16-
return;
17-
}
18-
var content;
19-
if (unread_page) {
20-
content = Hm_Message_List.just_inserted.reverse().join("\n\n");
21-
}
22-
else if (globals.Hm_Background_Unread) {
23-
content = globals.Hm_Background_Unread.just_inserted.reverse().join("\n\n");
24-
}
25-
if (!content) {
26-
return;
27-
}
28-
Push.create(hm_trans("New Message"), {
4+
window.addEventListener('new-message', (event) => {
5+
const row = event.detail.row;
6+
const content = $(row).find('.from').text() + ' - ' + $(row).find('.subject').text();
7+
8+
const pushNotification = () => Push.create(hm_trans("New Message"), {
299
body: content,
3010
timeout: 10000,
3111
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAIBJREFUWIXtlkEOgCAMBEdfpj/Hl+FB8GBiWoqEg7sJt7YzTXoAlL9nAfJMgXUmXAJVYAeOCeyjsO9sQOI6ypEvFdZrRomY4FEiJtgqiIp45zY3fAWu9d0Devu6N4mCTYHw9TrBboFWES+4WcASaQWHBZ4iUXAGsv4DEpCABBTlBOkR5VdJRFCfAAAAAElFTkSuQmCC',
3212
onClick: function () { window.focus(); this.close(); }
3313
});
14+
15+
if (Push.Permission.has()) {
16+
pushNotification();
17+
} else {
18+
Push.Permission.request(pushNotification);
19+
}
3420
});
21+
22+
// refresh the unread messages state
23+
setInterval(() => {
24+
// undefined_undefined: load with no filter and no keyword
25+
new Hm_MessagesStore('unread', 1, 'undefined_undefined').load(true, true).then((store) => {
26+
store.newMessages.forEach((messageRow) => {
27+
triggerNewMessageEvent($(messageRow).data('uid'), $(messageRow)[0]);
28+
});
29+
});
30+
}, 60000);
3531
});

modules/imap/site.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,11 @@ async function select_imap_folder(path, page = 1,reload, processInTheBackground
416416
if (messages.pages) {
417417
showPagination(messages.pages);
418418
}
419+
420+
messages.newMessages.forEach((newMessage) => {
421+
const row = $(newMessage);
422+
triggerNewMessageEvent(row.data('uid'), row[0]);
423+
});
419424
});
420425

421426
if (path === 'unread') {

0 commit comments

Comments
 (0)