/* * vim: ts=4:sw=4:expandtab */ ;(function() { 'use strict'; window.Whisper = window.Whisper || {}; var SETTINGS = { OFF : 'off', COUNT : 'count', NAME : 'name', MESSAGE : 'message' }; var sound = new Audio('/audio/NewMessage.mp3'); Whisper.Notifications = new (Backbone.Collection.extend({ initialize: function() { this.on('add', _.debounce(this.update.bind(this), 1000)); this.on('remove', this.onRemove); }, onclick: function() { var last = this.last(); if (!last) { openInbox(); return; } var conversation = ConversationController.create({ id: last.get('conversationId') }); openConversation(conversation); this.clear(); }, update: function() { console.log('updating notifications', this.length); extension.notification.clear(); if (this.length === 0) { return; } var audioNotification = storage.get('audio-notification') || false; if (audioNotification) { sound.play(); } var setting = storage.get('notification-setting') || 'message'; if (setting === SETTINGS.OFF) { return; } var iconUrl = 'images/icon_128.png'; var title = [ this.length, this.length === 1 ? i18n('newMessage') : i18n('newMessages') ].join(' '); if (setting === SETTINGS.COUNT) { extension.notification.update({ type : 'basic', title : title, iconUrl : iconUrl }); return; } if (this.length > 1) { var conversationIds = _.uniq(this.map(function(m) { return m.get('conversationId'); })); if (conversationIds.length === 1 && this.showSender()) { iconUrl = this.at(0).get('iconUrl'); } extension.notification.update({ type : 'list', iconUrl : iconUrl, title : title, message : 'Most recent from ' + this.last().get('title'), items : this.map(function(m) { var message, title; if (this.showMessage()) { return { title : m.get('title'), message : m.get('message') }; } else if (this.showSender()) { return { title : m.get('title'), message : i18n('newMessage') }; } }.bind(this)), buttons : [{ title : 'Mark all as read', iconUrl : 'images/check.svg' }] }); } else { var m = this.at(0); var type = 'basic'; var message = i18n('newMessage'); var imageUrl; if (this.showMessage()) { message = m.get('message'); if (m.get('imageUrl')) { type = 'image'; imageUrl = m.get('imageUrl'); } } if (this.showSender()) { title = m.get('title'); iconUrl = m.get('iconUrl'); } extension.notification.update({ type : type, title : title, message : message, iconUrl : iconUrl, imageUrl : imageUrl }); } }, getSetting: function() { return storage.get('notification-setting') || 'message'; }, showMessage: function() { return this.getSetting() === SETTINGS.MESSAGE; }, showSender: function() { var setting = this.getSetting(); return (setting === SETTINGS.MESSAGE || setting === SETTINGS.NAME); }, onRemove: function() { console.log('remove notification'); if (this.length === 0) { extension.notification.clear(); return; } }, clear: function() { this.reset([]); } }))(); })();