Aleksander Machniak
2013-10-04 bba13c33a097ac35ef8a29ef255be3ac47858f78
plugins/newmail_notifier/newmail_notifier.js
@@ -30,10 +30,17 @@
function newmail_notifier_stop(prop)
{
    // revert original favicon
    if (rcmail.env.favicon_href && (!prop || prop.action != 'check-recent')) {
    if (rcmail.env.favicon_href && rcmail.env.favicon_changed && (!prop || prop.action != 'check-recent')) {
        $('<link rel="shortcut icon" href="'+rcmail.env.favicon_href+'"/>').replaceAll('link[rel="shortcut icon"]');
        rcmail.env.favicon_href = null;
        rcmail.env.favicon_changed = 0;
    }
    // Remove IE icon overlay if we're pinned to Taskbar
    try {
        if(window.external.msIsSiteMode()) {
            window.external.msSiteModeClearIconOverlay();
        }
    } catch(e) {}
}
// Basic notification: window.focus and favicon change
@@ -47,14 +54,30 @@
    var link = $('<link rel="shortcut icon" href="plugins/newmail_notifier/favicon.ico"/>'),
        oldlink = $('link[rel="shortcut icon"]', w.document);
    rcmail.env.favicon_href = oldlink.attr('href');
    if (!rcmail.env.favicon_href)
        rcmail.env.favicon_href = oldlink.attr('href');
    rcmail.env.favicon_changed = 1;
    link.replaceAll(oldlink);
    // Add IE icon overlay if we're pinned to Taskbar
    try {
        if (window.external.msIsSiteMode()) {
            window.external.msSiteModeSetIconOverlay('plugins/newmail_notifier/overlay.ico', rcmail.gettext('title', 'newmail_notifier'));
        }
    } catch(e) {}
}
// Sound notification
function newmail_notifier_sound()
{
    var elem, src = 'plugins/newmail_notifier/sound.wav';
    var elem, src = 'plugins/newmail_notifier/sound',
        plugin = navigator.mimeTypes ? navigator.mimeTypes['audio/mp3'] : {};
    // Internet Explorer does not support wav files,
    // support in other browsers depends on enabled plugins,
    // so we use wav as a fallback
    src += bw.ie || (plugin && plugin.enabledPlugin) ? '.mp3' : '.wav';
    // HTML5
    try {
@@ -73,13 +96,11 @@
// - Require Chrome or Firefox latest version (22+) / 21.0 or older with a plugin
function newmail_notifier_desktop(body)
{
    var timeout = rcmail.env.newmail_notifier_timeout || 10;
/**
 * Fix: As of 17 June 2013, Chrome/Chromium does not implement Notification.permission correctly that
 *      it gives 'undefined' until an object has been created:
 *      https://code.google.com/p/chromium/issues/detail?id=163226
 *
 */
    // As of 17 June 2013, Chrome/Chromium does not implement Notification.permission correctly that
    // it gives 'undefined' until an object has been created:
    // https://code.google.com/p/chromium/issues/detail?id=163226
    try {
        if (Notification.permission == 'granted' || Notification.permission == undefined) {
            var popup = new Notification(rcmail.gettext('title', 'newmail_notifier'), {
@@ -92,7 +113,7 @@
            popup.onclick = function() {
                this.close();
            }
            setTimeout(function() { popup.close(); }, 10000); // close after 10 seconds
            setTimeout(function() { popup.close(); }, timeout * 1000);
            if (popup.permission == 'granted') return true;
        }
    }
@@ -108,7 +129,7 @@
                this.cancel();
            }
            popup.show();
            setTimeout(function() { popup.cancel(); }, 10000); // close after 10 seconds
            setTimeout(function() { popup.cancel(); }, timeout * 1000);
            rcmail.newmail_popup = popup;
            return true;
        }