From fc8e97448c9050e1b9540899386177672e7eb865 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sat, 12 Apr 2014 19:19:57 -0400 Subject: [PATCH] load sounds on demand, refactored sounds --- public/src/modules/sounds.js | 115 +++++++++++++---------------------- 1 file changed, 42 insertions(+), 73 deletions(-) diff --git a/public/src/modules/sounds.js b/public/src/modules/sounds.js index e80e7edd6c..ad79458f05 100644 --- a/public/src/modules/sounds.js +++ b/public/src/modules/sounds.js @@ -1,103 +1,72 @@ "use strict"; -/* global define, socket */ +/* global define, socket, config */ define(['buzz'], function(buzz) { var Sounds = {}; - Sounds.initialised = false; - Sounds.loaded = {}; - Sounds.mapping = {}; - - Sounds.init = function(callback) { - var ready = false, - onComplete = function() { - Sounds.initialised = true; - if (typeof callback === 'function') { - callback(); - } - }; - - loadFiles(function() { - if (ready) { - onComplete(); - } else { - ready = true; - } - }); + var loadedSounds = {}; + var eventSoundMapping = {}; + var files = {}; - loadMapping(function() { - if (ready) { - onComplete(); - } else { - ready = true; - } - }); + loadFiles(); - // Listen for reload message - socket.on('event:sounds.reloadMapping', function() { - loadMapping(); - }); - }; + loadMapping(); + + socket.on('event:sounds.reloadMapping', loadMapping); - var loadFiles = function(callback) { + function loadFiles() { socket.emit('modules.sounds.getSounds', function(err, sounds) { if (err) { return console.log('[sounds] Could not initialise!'); } - for(var name in sounds) { - if (sounds.hasOwnProperty(name)) { - var path = sounds[name]; - - Sounds.loaded[name] = new buzz.sound(path); - } - } - - callback(); + files = sounds; }); - }; + } - var loadMapping = function(callback) { + function loadMapping() { socket.emit('modules.sounds.getMapping', function(err, mapping) { - Sounds.mapping = mapping; - if (typeof callback === 'function') { - callback(); + if (err) { + return console.log('[sounds] Could not load sound mapping!'); } + eventSoundMapping = mapping; }); - }; + } + + function isSoundLoaded(fileName) { + return loadedSounds[fileName]; + } + + function loadFile(fileName, callback) { + if (isSoundLoaded(fileName)) { + return callback(); + } + + loadedSounds[fileName] = new buzz.sound(files[fileName]); + callback(); + } Sounds.play = function(name) { if (!config.notificationSounds) { return; } - var ready = function() { - if (Sounds.mapping[name] && Sounds.loaded[Sounds.mapping[name]]) { - Sounds.loaded[Sounds.mapping[name]].play(); - } else { - console.log('[sounds] Not found:', name); - } - }; - - if (!this.initialised) { - this.init(ready); - } else { - ready(); - } + + Sounds.playFile(eventSoundMapping[name]); }; Sounds.playFile = function(fileName) { - var ready = function() { - if (Sounds.loaded[fileName]) { - Sounds.loaded[fileName].play(); - } else { - console.log('[sounds] Not found:', name); - } - }; - - if (!this.initialised) { - this.init(ready); + function play() { + if (loadedSounds[fileName]) { + loadedSounds[fileName].play(); + } else { + console.log('[sounds] Not found:', fileName); + } + } + + if (isSoundLoaded(fileName)) { + play(); } else { - ready(); + loadFile(fileName, play); } };