Commit 09457d84 authored by JC Brand's avatar JC Brand

Properly handle notifications for groupchat messages

parent 902cf072
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
describe("And the desktop is not focused", function () { describe("And the desktop is not focused", function () {
describe("an HTML5 Notification", function () { describe("an HTML5 Notification", function () {
it("is shown when a new message is received", function () { it("is shown when a new private message is received", function () {
// TODO: not yet testing show_desktop_notifications setting // TODO: not yet testing show_desktop_notifications setting
spyOn(converse, 'showMessageNotification'); spyOn(converse, 'showMessageNotification');
spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true); spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true);
...@@ -45,6 +45,38 @@ ...@@ -45,6 +45,38 @@
expect(converse.showMessageNotification).toHaveBeenCalled(); expect(converse.showMessageNotification).toHaveBeenCalled();
}); });
it("is shown when you are mentioned in a chat room", function () {
test_utils.openChatRoom('lounge', 'localhost', 'dummy');
var view = converse.chatboxviews.get('lounge@localhost');
if (!view.$el.find('.chat-area').length) { view.renderChatArea(); }
var no_notification = false;
if (typeof window.Notification === 'undefined') {
no_notification = true;
window.Notification = function () {
return {
'close': function () {}
};
};
}
spyOn(converse, 'showMessageNotification').andCallThrough();
spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true);
var message = 'dummy: This message will show a desktop notification';
var nick = mock.chatroom_names[0],
msg = $msg({
from: 'lounge@localhost/'+nick,
id: (new Date()).getTime(),
to: 'dummy@localhost',
type: 'groupchat'
}).c('body').t(message).tree();
converse.chatboxes.onMessage(msg); // This will emit 'message'
expect(converse.areDesktopNotificationsEnabled).toHaveBeenCalled();
expect(converse.showMessageNotification).toHaveBeenCalled();
if (no_notification) {
delete window.Notification;
}
});
it("is shown when a user changes their chat state", function () { it("is shown when a user changes their chat state", function () {
// TODO: not yet testing show_desktop_notifications setting // TODO: not yet testing show_desktop_notifications setting
spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true); spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true);
......
...@@ -124,6 +124,9 @@ ...@@ -124,6 +124,9 @@
// XXX: 2nd check is workaround for Prosody which doesn't // XXX: 2nd check is workaround for Prosody which doesn't
// give type "headline" // give type "headline"
title = __(___("Notification from %1$s"), from_jid); title = __(___("Notification from %1$s"), from_jid);
} else {
if ($message.attr('type') === 'groupchat') {
title = __(___("%1$s says"), Strophe.getResourceFromJid(from_jid));
} else { } else {
if (typeof converse.roster === 'undefined') { if (typeof converse.roster === 'undefined') {
converse.log("Could not send notification, because roster is undefined", "error"); converse.log("Could not send notification, because roster is undefined", "error");
...@@ -133,6 +136,7 @@ ...@@ -133,6 +136,7 @@
roster_item = converse.roster.get(contact_jid); roster_item = converse.roster.get(contact_jid);
title = __(___("%1$s says"), roster_item.get('fullname')); title = __(___("%1$s says"), roster_item.get('fullname'));
} }
}
n = new Notification(title, { n = new Notification(title, {
body: $message.children('body').text(), body: $message.children('body').text(),
lang: converse.i18n.locale_data.converse[""].lang, lang: converse.i18n.locale_data.converse[""].lang,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment