Implemented sound reminders (#T1310)

Summary: Fixes T1310

Reviewers: #roundcube_kolab_plugins_developers

Maniphest Tasks: T1310

Differential Revision: https://git.kolab.org/D183
This commit is contained in:
Aleksander Machniak 2016-06-20 10:10:38 +02:00 committed by Jeroen van Meeuwen (Kolab Systems)
parent 27df671c91
commit 6790ac80d3
4 changed files with 51 additions and 4 deletions

Binary file not shown.

Binary file not shown.

View file

@ -570,13 +570,19 @@ function rcube_libcalendaring(settings)
if (this.alarm_dialog) if (this.alarm_dialog)
this.alarm_dialog.dialog('destroy').remove(); this.alarm_dialog.dialog('destroy').remove();
this.alarm_dialog = $('<div>').attr('id', 'alarm-display'); var i, actions, adismiss, asnooze, alarm, html,
audio_alarms = [], records = [], event_ids = [], buttons = {};
var i, actions, adismiss, asnooze, alarm, html, event_ids = [], buttons = {};
for (i=0; i < alarms.length; i++) { for (i=0; i < alarms.length; i++) {
alarm = alarms[i]; alarm = alarms[i];
alarm.start = this.parseISO8601(alarm.start); alarm.start = this.parseISO8601(alarm.start);
alarm.end = this.parseISO8601(alarm.end); alarm.end = this.parseISO8601(alarm.end);
if (alarm.action == 'AUDIO') {
audio_alarms.push(alarm);
continue;
}
event_ids.push(alarm.id); event_ids.push(alarm.id);
html = '<h3 class="event-title">' + Q(alarm.title) + '</h3>'; html = '<h3 class="event-title">' + Q(alarm.title) + '</h3>';
@ -594,9 +600,17 @@ function rcube_libcalendaring(settings)
}); });
actions = $('<div>').addClass('alarm-actions').append(adismiss.data('id', alarm.id)).append(asnooze.data('id', alarm.id)); actions = $('<div>').addClass('alarm-actions').append(adismiss.data('id', alarm.id)).append(asnooze.data('id', alarm.id));
$('<div>').addClass('alarm-item').html(html).append(actions).appendTo(this.alarm_dialog); records.push($('<div>').addClass('alarm-item').html(html).append(actions));
} }
if (audio_alarms.length)
this.audio_alarms(audio_alarms);
if (!records.length)
return;
this.alarm_dialog = $('<div>').attr('id', 'alarm-display').append(records);
buttons[rcmail.gettext('close')] = function() { buttons[rcmail.gettext('close')] = function() {
$(this).dialog('close'); $(this).dialog('close');
}; };
@ -635,6 +649,38 @@ function rcube_libcalendaring(settings)
this.alarm_ids = event_ids; this.alarm_ids = event_ids;
}; };
/**
* Display a notification and play a sound for a set of alarms
*/
this.audio_alarms = function(alarms)
{
var elem, txt = [],
src = rcmail.assets_path('plugins/libcalendaring/alarm'),
plugin = navigator.mimeTypes ? navigator.mimeTypes['audio/mp3'] : {};
// first generate and display notification text
$.each(alarms, function() { txt.push(this.title); });
rcmail.display_message(rcmail.gettext('alarmtitle','libcalendaring') + ': ' + Q(txt.join(', ')), 'notice', 10000);
// 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 {
elem = $('<audio>').attr('src', src);
elem.get(0).play();
}
// old method
catch (e) {
elem = $('<embed id="libcalsound" src="' + src + '" hidden=true autostart=true loop=false />');
elem.appendTo($('body'));
window.setTimeout("$('#libcalsound').remove()", 10000);
}
};
/** /**
* Show a drop-down menu with a selection of snooze times * Show a drop-down menu with a selection of snooze times
*/ */

View file

@ -727,7 +727,8 @@ class libcalendaring extends rcube_plugin
'id' => $alarm['id'], 'id' => $alarm['id'],
'start' => $alarm['start'] ? $this->adjust_timezone($alarm['start'])->format('c') : '', 'start' => $alarm['start'] ? $this->adjust_timezone($alarm['start'])->format('c') : '',
'end' => $alarm['end'] ? $this->adjust_timezone($alarm['end'])->format('c') : '', 'end' => $alarm['end'] ? $this->adjust_timezone($alarm['end'])->format('c') : '',
'allDay' => ($alarm['allday'] == 1)?true:false, 'allDay' => $alarm['allday'] == 1,
'action' => $alarm['action'],
'title' => $alarm['title'], 'title' => $alarm['title'],
'location' => $alarm['location'], 'location' => $alarm['location'],
'calendar' => $alarm['calendar'], 'calendar' => $alarm['calendar'],