mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-01 05:29:20 +03:00
*.jsx -> *.js
This commit is contained in:
parent
0a2b826f71
commit
e88c193334
98 changed files with 341 additions and 340 deletions
138
dev/Common/Audio.js
Normal file
138
dev/Common/Audio.js
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
|
||||
import window from 'window';
|
||||
import $ from '$';
|
||||
import {bMobileDevice, bSafari} from 'Common/Globals';
|
||||
import * as Links from 'Common/Links';
|
||||
import * as Events from 'Common/Events';
|
||||
import {trim} from 'Common/Utils';
|
||||
|
||||
class Audio
|
||||
{
|
||||
constructor() {
|
||||
this.notificator = null;
|
||||
|
||||
this.supportedMp3 = false;
|
||||
this.supportedOgg = false;
|
||||
this.supportedWav = false;
|
||||
this.supportedNotification = false;
|
||||
|
||||
this.player = this.createNewObject();
|
||||
|
||||
this.supported = !bMobileDevice && !bSafari && !!this.player && !!this.player.play;
|
||||
if (this.supported && this.player.canPlayType)
|
||||
{
|
||||
this.supportedMp3 = '' !== this.player.canPlayType('audio/mpeg;').replace(/no/, '');
|
||||
this.supportedWav = '' !== this.player.canPlayType('audio/wav; codecs="1"').replace(/no/, '');
|
||||
this.supportedOgg = '' !== this.player.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, '');
|
||||
this.supportedNotification = this.supported && this.supportedMp3;
|
||||
}
|
||||
|
||||
if (!this.player || (!this.supportedMp3 && !this.supportedOgg && !this.supportedWav))
|
||||
{
|
||||
this.supported = false;
|
||||
this.supportedMp3 = false;
|
||||
this.supportedOgg = false;
|
||||
this.supportedWav = false;
|
||||
this.supportedNotification = false;
|
||||
}
|
||||
|
||||
if (this.supported)
|
||||
{
|
||||
$(this.player).on('ended error', () => this.stop());
|
||||
|
||||
Events.sub('audio.api.stop', () => this.stop());
|
||||
}
|
||||
}
|
||||
|
||||
createNewObject() {
|
||||
const player = window.Audio ? new window.Audio() : null;
|
||||
if (player && player.canPlayType && player.pause && player.play)
|
||||
{
|
||||
player.preload = 'none';
|
||||
player.loop = false;
|
||||
player.autoplay = false;
|
||||
player.muted = false;
|
||||
}
|
||||
|
||||
return player;
|
||||
}
|
||||
|
||||
paused() {
|
||||
return this.supported ? !!this.player.paused : true;
|
||||
}
|
||||
|
||||
stop() {
|
||||
if (this.supported && this.player.pause)
|
||||
{
|
||||
this.player.pause();
|
||||
}
|
||||
|
||||
Events.pub('audio.stop');
|
||||
}
|
||||
|
||||
pause() {
|
||||
this.stop();
|
||||
}
|
||||
|
||||
clearName(name = '', ext = '') {
|
||||
|
||||
name = trim(name);
|
||||
if (ext && '.' + ext === name.toLowerCase().substr((ext.length + 1) * -1))
|
||||
{
|
||||
name = trim(name.substr(0, name.length - 4));
|
||||
}
|
||||
|
||||
return '' === name ? 'audio' : name;
|
||||
}
|
||||
|
||||
playMp3(url, name) {
|
||||
if (this.supported && this.supportedMp3)
|
||||
{
|
||||
this.player.src = url;
|
||||
this.player.play();
|
||||
|
||||
Events.pub('audio.start', [this.clearName(name, 'mp3'), 'mp3']);
|
||||
}
|
||||
}
|
||||
|
||||
playOgg(url, name) {
|
||||
if (this.supported && this.supportedOgg)
|
||||
{
|
||||
this.player.src = url;
|
||||
this.player.play();
|
||||
|
||||
name = this.clearName(name, 'oga');
|
||||
name = this.clearName(name, 'ogg');
|
||||
|
||||
Events.pub('audio.start', [name, 'ogg']);
|
||||
}
|
||||
}
|
||||
|
||||
playWav(url, name) {
|
||||
if (this.supported && this.supportedWav)
|
||||
{
|
||||
this.player.src = url;
|
||||
this.player.play();
|
||||
|
||||
Events.pub('audio.start', [this.clearName(name, 'wav'), 'wav']);
|
||||
}
|
||||
}
|
||||
|
||||
playNotification() {
|
||||
if (this.supported && this.supportedMp3)
|
||||
{
|
||||
if (!this.notificator)
|
||||
{
|
||||
this.notificator = this.createNewObject();
|
||||
this.notificator.src = Links.sound('new-mail.mp3');
|
||||
}
|
||||
|
||||
if (this.notificator && this.notificator.play)
|
||||
{
|
||||
this.notificator.play();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new Audio();
|
||||
Loading…
Add table
Add a link
Reference in a new issue