You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
1.7 KiB
JavaScript

'use strict';
define('sounds', ['storage'], function (storage) {
var Sounds = {};
var fileMap;
var soundMap;
var cache = {};
Sounds.loadMap = function loadMap(callback) {
socket.emit('modules.sounds.getUserSoundMap', function (err, map) {
if (err) {
return app.alertError(err.message);
}
soundMap = map;
if (callback) {
callback();
}
});
};
function loadData(callback) {
var outstanding = 2;
function after() {
outstanding -= 1;
if (outstanding === 0 && callback) {
callback();
}
}
if (fileMap) {
outstanding -= 1;
} else {
$.getJSON(config.relative_path + '/assets/sounds/fileMap.json', function (map) {
fileMap = map;
after();
});
}
Sounds.loadMap(after);
}
Sounds.playSound = function playSound(soundName) {
if (!soundMap || !fileMap) {
return loadData(after);
}
function after() {
if (!fileMap[soundName]) {
return;
}
var audio = cache[soundName] || new Audio(config.relative_path + '/assets/sounds/' + fileMap[soundName]);
cache[soundName] = audio;
audio.pause();
audio.currentTime = 0;
audio.play();
}
after();
};
Sounds.play = function play(type, id) {
function after() {
if (!soundMap[type]) {
return;
}
if (id) {
var item = 'sounds.handled:' + id;
if (storage.getItem(item)) {
return;
}
storage.setItem(item, true);
setTimeout(function () {
storage.removeItem(item);
}, 5000);
}
Sounds.playSound(soundMap[type]);
}
if (!soundMap || !fileMap) {
return loadData(after);
}
after();
};
socket.on('event:sounds.reloadMapping', function () {
Sounds.loadMap();
});
return Sounds;
});