From 882bbcb02e448377b73fb50fcd92e94314a23307 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 20 Aug 2014 21:00:28 +0200 Subject: [PATCH] Add support for sound notifications. updates #62 (on incoming messages) --- Makefile | 2 +- converse.js | 49 +++++++++++++++++++++++++++++++++++++++++++---- docs/CHANGES.rst | 3 ++- index.html | 9 ++------- sounds/ping.mp3 | Bin 0 -> 13716 bytes sounds/ping.ogg | Bin 0 -> 15405 bytes 6 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 sounds/ping.mp3 create mode 100644 sounds/ping.ogg diff --git a/Makefile b/Makefile index 041b6f43e..1d7a81261 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ BOWER ?= node_modules/.bin/bower BUILDDIR = ./docs PAPER = -PHANTOMJS ?= node_modules/.bin/phantomjs +PHANTOMJS ?= phantomjs SPHINXBUILD = sphinx-build SPHINXOPTS = diff --git a/converse.js b/converse.js index 20b49f1cf..462dda6cd 100644 --- a/converse.js +++ b/converse.js @@ -132,6 +132,12 @@ 'dnd': 2, 'online': 1 }; + + var INACTIVE = 'inactive'; + var ACTIVE = 'active'; + var COMPOSING = 'composing'; + var PAUSED = 'paused'; + var HAS_CSPRNG = ((typeof crypto !== 'undefined') && ((typeof crypto.randomBytes === 'function') || (typeof crypto.getRandomValues === 'function') @@ -165,6 +171,7 @@ this.i18n = locales.en; this.message_carbons = false; this.no_trimming = false; // Set to true for phantomjs tests (where browser apparently has no width) + this.play_sounds = false; this.prebind = false; this.roster_groups = false; this.show_controlbox_by_default = false; @@ -206,6 +213,7 @@ 'i18n', 'jid', 'no_trimming', + 'play_sounds', 'prebind', 'rid', 'roster_groups', @@ -814,19 +822,21 @@ var body = $message.children('body').text(), from = Strophe.getBareJidFromJid($message.attr('from')), composing = $message.find('composing'), + paused = $message.find('paused'), delayed = $message.find('delay').length > 0, fullname = this.get('fullname'), stamp, time, sender; fullname = (_.isEmpty(fullname)? from: fullname).split(' ')[0]; if (!body) { - if (composing.length) { + if (composing.length || paused.length) { this.messages.add({ fullname: fullname, sender: 'them', delayed: delayed, time: moment().format(), - composing: composing.length + composing: composing.length, + paused: paused.length }); } } else { @@ -1031,8 +1041,11 @@ })); } } - if (message.get('composing')) { - this.showStatusNotification(message.get('fullname')+' '+'is typing'); + if (message.get(COMPOSING)) { + this.showStatusNotification(message.get('fullname')+' '+__('is typing')); + return; + } else if (message.get(PAUSED)) { + this.showStatusNotification(message.get('fullname')+' '+__('has stopped typing')); return; } else { this.showMessage(_.clone(message.attributes)); @@ -2442,6 +2455,31 @@ }); }, + playNotification: function () { + var ping; + if (converse.play_sounds && typeof Audio !== "undefined"){ + ping = new Audio("sounds/ping.ogg"); + if (ping.canPlayType('audio/ogg')) { + ping.play(); + } else { + ping = new Audio("sounds/ping.mp3"); + ping.play(); + } + } + }, + + isOnlyChatStateNotification: function ($msg) { + // See XEP-0085 Chat State Notification + return ( + $msg.find('body').length === 0 && ( + $msg.find(ACTIVE).length !== 0 || + $msg.find(COMPOSING).length !== 0 || + $msg.find(INACTIVE).length !== 0 || + $msg.find(PAUSED).length !== 0 + ) + ); + }, + onMessage: function (message) { var buddy_jid, $message = $(message), message_from = $message.attr('from'); @@ -2490,6 +2528,9 @@ 'url': roster_item.get('url') }); } + if (!this.isOnlyChatStateNotification($message) && from !== converse.bare_jid) { + this.playNotification(); + } chatbox.receiveMessage($message); converse.roster.addResource(buddy_jid, resource); converse.emit('message', message); diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index 5e1526c34..608121ec2 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -4,9 +4,10 @@ Changelog 0.8.1 (Unreleased) ------------------ +* Bugfix: Contacts weren't properly sorted according to chat status. [jcbrand] +* #63 Support for sound notification on message received. [jcbrand] * #212 Provide a live filter of the roster contacts. [jcbrand] - 0.8.0 (2014-08-04) ------------------ diff --git a/index.html b/index.html index a7eb08caa..dabfe8939 100644 --- a/index.html +++ b/index.html @@ -12,13 +12,7 @@ - - - - - + @@ -239,6 +233,7 @@ hide_muc_server: false, i18n: locales['en'], // Refer to ./locale/locales.js to see which locales are supported prebind: false, + play_sounds: true, show_controlbox_by_default: true, xhr_user_search: false, roster_groups: true diff --git a/sounds/ping.mp3 b/sounds/ping.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b68cc1cb337edabe7c2bf2d278e426fd6002289c GIT binary patch literal 13716 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 literal 0 HcmV?d00001 diff --git a/sounds/ping.ogg b/sounds/ping.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0ea653e7c04183269ec6a8e453c8616ddd331ee3 GIT binary patch literal 15405 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 literal 0 HcmV?d00001