diff --git a/js/websockets.js b/js/websockets.js index ec175e0..3372152 100644 --- a/js/websockets.js +++ b/js/websockets.js @@ -252,19 +252,6 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi */ var handleBufferInfo = function(message) { // buffer info from message - var bufferInfos = message['objects'][0]['content']; - // buffers objects - for (var i = 0; i < bufferInfos.length ; i++) { - var buffer = new models.Buffer(bufferInfos[i]); - models.addBuffer(buffer); - // Switch to first buffer on startup - if (i == 0) { - models.setActiveBuffer(buffer.id); - } - } - - // Request latest buffer lines for each buffer - $rootScope.getLines(); } @@ -281,6 +268,7 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi } var handleEvent = function(event) { + if (_.has(eventHandlers, event['id'])) { eventHandlers[event['id']](event); } @@ -304,10 +292,25 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi }]); -weechat.factory('connection', ['$rootScope', '$log', 'handlers', 'colors', 'models', function($rootScope, $log, handlers, colors, models) { +weechat.factory('connection', ['$q', '$rootScope', '$log', 'handlers', 'colors', 'models', function($q, $rootScope, $log, handlers, colors, models) { protocol = new WeeChatProtocol(); var websocket = null; + var callbacks = {} + var currentCallBackId = 0; + + + + var doSendWithCallback = function(message) { + var defer = $q.defer(); + callbacks[++currentCallBackId] = { + time: new Date, + cb: defer + } + callBackIdString = "(" + currentCallBackId + ")"; + doSend(callBackIdString + " " + message); + return defer.promise; + } // Sanitizes messages to be sent to the weechat relay var doSend = function(message) { @@ -330,11 +333,25 @@ weechat.factory('connection', ['$rootScope', '$log', 'handlers', 'colors', 'mode password: passwd, compression: 'off' })); - doSend(WeeChatProtocol.formatHdata({ - id: 'bufinfo', + doSendWithCallback(WeeChatProtocol.formatHdata({ path: 'buffer:gui_buffers(*)', keys: ['number,full_name,short_name,title'] - })); + })).then(function(hdata) { + var bufferInfos = message['objects'][0]['content']; + // buffers objects + for (var i = 0; i < bufferInfos.length ; i++) { + var buffer = new models.Buffer(bufferInfos[i]); + models.addBuffer(buffer); + // Switch to first buffer on startup + if (i == 0) { + models.setActiveBuffer(buffer.id); + } + } + + // Request latest buffer lines for each buffer + $rootScope.getLines(); + + }); doSend(WeeChatProtocol.formatSync({})); $log.info("Connected to relay"); @@ -350,7 +367,13 @@ weechat.factory('connection', ['$rootScope', '$log', 'handlers', 'colors', 'mode websocket.onmessage = function (evt) { message = protocol.parse(evt.data) - handlers.handleEvent(message); + if (_.has(callbacks, message['id'])) { + var promise = callbacks[message['id']]; + promise.cb.resolve(message.data); + delete(callbacks[message['id']]); + } else { + handlers.handleEvent(message); + } $rootScope.commands.push("RECV: " + evt.data + " TYPE:" + evt.type) ; $rootScope.$apply(); }