commit
e427f1663e
@ -1,90 +1,94 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
/* global app, define, socket, config */
|
/* global app, define, socket, config */
|
||||||
|
|
||||||
define('sounds', ['buzz'], function (buzz) {
|
define('sounds', function () {
|
||||||
var Sounds = {};
|
var Sounds = {};
|
||||||
|
|
||||||
var loadedSounds = {};
|
var fileMap;
|
||||||
var eventSoundMapping;
|
var soundMap;
|
||||||
var files;
|
var cache = {};
|
||||||
|
|
||||||
socket.on('event:sounds.reloadMapping', function () {
|
Sounds.loadMap = function loadMap(callback) {
|
||||||
Sounds.reloadMapping();
|
socket.emit('modules.sounds.getUserSoundMap', function (err, map) {
|
||||||
});
|
|
||||||
|
|
||||||
Sounds.reloadMapping = function () {
|
|
||||||
socket.emit('modules.sounds.getMapping', function (err, mapping) {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return app.alertError(err.message);
|
return app.alertError(err.message);
|
||||||
}
|
}
|
||||||
eventSoundMapping = mapping;
|
soundMap = map;
|
||||||
|
if (callback) {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function loadData(callback) {
|
function loadData(callback) {
|
||||||
socket.emit('modules.sounds.getData', function (err, data) {
|
var outstanding = 2;
|
||||||
if (err) {
|
function after() {
|
||||||
return app.alertError('[sounds] Could not load sound mapping!');
|
outstanding -= 1;
|
||||||
}
|
if (outstanding === 0 && callback) {
|
||||||
eventSoundMapping = data.mapping;
|
callback();
|
||||||
files = data.files;
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function isSoundLoaded(fileName) {
|
|
||||||
return loadedSounds[fileName];
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadFile(fileName, callback) {
|
|
||||||
function createSound() {
|
|
||||||
if (files && files[fileName]) {
|
|
||||||
loadedSounds[fileName] = new buzz.sound(files[fileName]);
|
|
||||||
}
|
}
|
||||||
callback();
|
|
||||||
}
|
}
|
||||||
|
if (fileMap) {
|
||||||
if (isSoundLoaded(fileName)) {
|
outstanding -= 1;
|
||||||
return callback();
|
} else {
|
||||||
|
$.getJSON(config.relative_path + '/assets/sounds/fileMap.json', function (map) {
|
||||||
|
fileMap = map;
|
||||||
|
after();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!files || !files[fileName]) {
|
Sounds.loadMap(after);
|
||||||
return loadData(createSound);
|
|
||||||
}
|
|
||||||
createSound();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Sounds.play = function (name) {
|
Sounds.playSound = function playSound(soundName) {
|
||||||
function play() {
|
if (!soundMap || !fileMap) {
|
||||||
Sounds.playFile(eventSoundMapping[name]);
|
return loadData(after);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!eventSoundMapping) {
|
function after() {
|
||||||
return loadData(play);
|
if (!fileMap[soundName]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var audio = cache[soundName] = cache[soundName] || new Audio(config.relative_path + '/assets/sounds/' + fileMap[soundName]);
|
||||||
|
audio.pause();
|
||||||
|
audio.currentTime = 0;
|
||||||
|
audio.play();
|
||||||
}
|
}
|
||||||
|
|
||||||
play();
|
after();
|
||||||
};
|
};
|
||||||
|
|
||||||
Sounds.playFile = function (fileName) {
|
Sounds.play = function play(type, id) {
|
||||||
if (!fileName) {
|
function after() {
|
||||||
return;
|
if (!soundMap[type]) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
function play() {
|
|
||||||
if (loadedSounds[fileName]) {
|
if (id) {
|
||||||
loadedSounds[fileName].play();
|
var item = 'sounds.handled:' + id;
|
||||||
} else {
|
if (sessionStorage.getItem(item)) {
|
||||||
app.alertError('[sounds] Not found: ' + fileName);
|
return;
|
||||||
|
}
|
||||||
|
sessionStorage.setItem(item, true);
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
sessionStorage.removeItem(item);
|
||||||
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sounds.playSound(soundMap[type]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSoundLoaded(fileName)) {
|
if (!soundMap || !fileMap) {
|
||||||
play();
|
return loadData(after);
|
||||||
} else {
|
|
||||||
loadFile(fileName, play);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
after();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
socket.on('event:sounds.reloadMapping', function () {
|
||||||
|
Sounds.loadMap();
|
||||||
|
});
|
||||||
|
|
||||||
return Sounds;
|
return Sounds;
|
||||||
});
|
});
|
||||||
|
@ -1,24 +1,46 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var meta = require('../../meta');
|
var plugins = require('../../plugins');
|
||||||
|
var db = require('../../database');
|
||||||
|
|
||||||
var soundsController = {};
|
var soundsController = {};
|
||||||
|
|
||||||
soundsController.get = function (req, res, next) {
|
soundsController.get = function (req, res, next) {
|
||||||
meta.sounds.getFiles(function (err, sounds) {
|
db.getObject('settings:sounds', function (err, settings) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
settings = settings || {};
|
||||||
|
|
||||||
sounds = Object.keys(sounds).map(function (name) {
|
var types = [
|
||||||
return {
|
'notification',
|
||||||
name: name
|
'chat-incoming',
|
||||||
};
|
'chat-outgoing',
|
||||||
});
|
];
|
||||||
|
var output = {};
|
||||||
|
|
||||||
|
types.forEach(function (type) {
|
||||||
|
var soundpacks = plugins.soundpacks.map(function (pack) {
|
||||||
|
var sounds = Object.keys(pack.sounds).map(function (soundName) {
|
||||||
|
var value = pack.name + ' | ' + soundName;
|
||||||
|
return {
|
||||||
|
name: soundName,
|
||||||
|
value: value,
|
||||||
|
selected: value === settings[type],
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
res.render('admin/general/sounds', {
|
return {
|
||||||
sounds: sounds
|
name: pack.name,
|
||||||
|
sounds: sounds,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
output[type + '-sound'] = soundpacks;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
res.render('admin/general/sounds', output);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue