diff --git a/js/connection.js b/js/connection.js index a876ee6..319219f 100644 --- a/js/connection.js +++ b/js/connection.js @@ -99,7 +99,7 @@ weechat.factory('connection', $log.info("Connected to relay"); $rootScope.connected = true; }, - function(e) { + function() { handleWrongPassword(); } ); @@ -306,6 +306,17 @@ weechat.factory('connection', }); }; + var fetchConfValue = function(name) { + ngWebsockets.send( + weeChat.Protocol.formatInfolist({ + name: "option", + pointer: 0, + args: name + }) + ).then(function(i) { + handlers.handleConfValue(i); + }); + }; var fetchMoreLines = function(numLines) { $log.debug('Fetching ', numLines, ' lines'); diff --git a/js/handlers.js b/js/handlers.js index 5103b9c..9342bfc 100644 --- a/js/handlers.js +++ b/js/handlers.js @@ -13,6 +13,27 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific models.version = version.split(".").map(function(c) { return parseInt(c); }); }; + var handleConfValue = function(message) { + var infolist = message.objects[0].content; + for (var i = 0; i < infolist.length ; i++) { + var key, val; + var item = infolist[i]; + for (var j = 0; j < item.length ; j++) { + var confitem = item[j]; + if (confitem.full_name) { + key = confitem.full_name; + } + if (confitem.value) { + val = confitem.value; + } + } + if (key && val) { + $log.debug('Setting wconfig "' + key + '" to value "' + val + '"'); + models.wconfig[key] = val; + } + } + }; + var handleBufferClosing = function(message) { var bufferMessage = message.objects[0].content[0]; var bufferId = bufferMessage.pointers[0]; @@ -393,6 +414,7 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific return { handleVersionInfo: handleVersionInfo, + handleConfValue: handleConfValue, handleEvent: handleEvent, handleLineInfo: handleLineInfo, handleHotlistInfo: handleHotlistInfo, diff --git a/js/models.js b/js/models.js index 4bb239e..f6d7f63 100644 --- a/js/models.js +++ b/js/models.js @@ -11,6 +11,9 @@ models.service('models', ['$rootScope', '$filter', function($rootScope, $filter) // WeeChat version this.version = null; + // WeeChat configuration values + this.wconfig = {}; + // Save outgoing queries this.outgoingQueries = []; diff --git a/js/weechat.js b/js/weechat.js index 4a6d4f0..640ccbd 100644 --- a/js/weechat.js +++ b/js/weechat.js @@ -23,9 +23,7 @@ 'buf': this._getString, 'arr': this._getArray, 'htb': this._getHashTable, - 'inl': function() { - this._warnUnimplemented('infolist'); - } + 'inl': this._getInfolist, }; // string value for some object types @@ -699,6 +697,37 @@ return WeeChatProtocol._formatCmd(params.id, 'info', parts); }; + /** + * Formats an infolist command. + * + * @param params Parameters: + * id: command ID (optional) + * name: infolist name (mandatory) + * pointer: optional + * arguments: optional + * @return Formatted infolist command string + */ + WeeChatProtocol.formatInfolist = function(params) { + var defaultParams = { + id: null, + pointer: null, + args: null + + }; + var parts = []; + + params = WeeChatProtocol._mergeParams(defaultParams, params); + parts.push(params.name); + if (params.pointer !== null) { + parts.push(params.pointer); + } + if (params.pointer !== null) { + parts.push(params.args); + } + + return WeeChatProtocol._formatCmd(params.id, 'infolist', parts); + }; + /** * Formats a nicklist command. * @@ -1143,6 +1172,35 @@ return values; }, + /** + * Reads an infolist object from the current set of data + * + * @return Array + */ + _getInfolist: function() { + var self = this; + var name; + var count; + var values; + + name = this._getString(); + count = this._getInt(); + values = []; + + for (var i = 0; i < count; i++) { + var itemcount = self._getInt(); + var litem = []; + for (var j = 0; j < itemcount; j++) { + var item = {}; + item[self._getString()] = self._runType(self._getType()); + litem.push(item); + } + values.push(litem); + } + + return values; + }, + /** * Reads a specified number of bytes from current set data. *