Finished /encoding command to change encoding on the fly
authorVinicius Daly Felizardo <felizardow@gmail.com>
Thu, 20 Jun 2013 07:20:48 +0000 (03:20 -0400)
committerVinicius Daly Felizardo <felizardow@gmail.com>
Thu, 20 Jun 2013 07:20:48 +0000 (03:20 -0400)
client/assets/src/models/application.js
client/assets/src/models/gateway.js
config.example.js
server/clientcommands.js
server/irc/connection.js

index 79f23101af5149efff6aae156396619d0c718545..a3b1392ab4e79f7bdab9cbe37cc578edc615b04b 100644 (file)
@@ -461,6 +461,7 @@ _kiwi.model.Application = function () {
 \r
             controlbox.on('command:whowas', whowasCommand);\r
 \r
+            controlbox.on('command:encoding', encodingCommand);\r
 \r
             controlbox.on('command:css', function (ev) {\r
                 var queryString = '?reload=' + new Date().getTime();\r
@@ -789,6 +790,13 @@ _kiwi.model.Application = function () {
                 _kiwi.app.connections.active_connection.gateway.raw('WHOWAS ' + nick);\r
         }\r
 \r
+        function encodingCommand (ev) {\r
+            if (ev.params[0]) {\r
+                _kiwi.gateway.setEncoding(null, ev.params[0], function (msg) {\r
+                    _kiwi.app.panels().active.addMsg('', msg);\r
+                });\r
+            }\r
+        }\r
 \r
         function serverCommand (ev) {\r
             var server, port, ssl, password, nick,\r
index 7074108987c5600c95d73388960b14aecc0a7ec9..a13771c05b1da31d5425ccafd281c20a21bcaeb5 100644 (file)
@@ -247,8 +247,6 @@ _kiwi.model.Gateway = function () {
         });\r
     };\r
 \r
-\r
-\r
     this.isConnected = function () {\r
         return this.socket.socket.connected;\r
     };\r
@@ -535,6 +533,22 @@ _kiwi.model.Gateway = function () {
         this.sendData(connection_id, data, callback);\r
     };\r
 \r
+    /**\r
+     *  Sends ENCODING change request to server.\r
+     *  @param  {String}     new_encoding  The new proposed encode\r
+     *  @param  {Fucntion}   callback      A callback function\r
+     */\r
+    this.setEncoding = function (connection_id, new_encoding, callback) {\r
+      var data = {\r
+          method: 'encoding',\r
+          args: {\r
+              encoding: new_encoding\r
+          }\r
+      };\r
+\r
+      this.sendData(connection_id, data, callback);\r
+    };\r
+\r
     /**\r
     *   Sends data to a fellow Kiwi IRC user\r
     *   @param  {String}    target      The nick of the Kiwi IRC user to send to\r
@@ -553,7 +567,6 @@ _kiwi.model.Gateway = function () {
         this.sendData(data, callback);\r
     };\r
 \r
-\r
     // Check a nick alongside our ignore list\r
     this.isNickIgnored = function (nick) {\r
         var idx, list = this.get('ignore_list');\r
@@ -573,4 +586,4 @@ _kiwi.model.Gateway = function () {
 \r
 \r
     return new (Backbone.Model.extend(this))(arguments);\r
-};
\ No newline at end of file
+};\r
index 9732497638973b4b6108ed5a35681ce75ce3b884..626b80435980b6ba58cda419da683e8126596e56 100644 (file)
@@ -60,6 +60,12 @@ conf.max_client_conns = 5;
 //   - Kiwi is running in restricted server mode.
 conf.max_server_conns = 0;
 
+/*
+* Available encodings supported by the server
+* As specified and limited to iconv-lite library support.
+* All upper-case. Default is the first element on the list.
+*/
+conf.available_encodings = ['UTF-8', 'WINDOWS-1252'];
 
 /*
  * Client side plugins
index 0aed72dddb6539e5c1a7678fe949470f9e7734bb..9448611d5ef3bf809bdaa66675fc52372df27fcf 100644 (file)
@@ -154,5 +154,15 @@ var listeners = {
         if ((args.target) && (args.data)) {\r
             irc_connection.write('PRIVMSG ' + args.target + ': ' + String.fromCharCode(1) + 'KIWI ' + args.data + String.fromCharCode(1), callback);\r
         }\r
+    },\r
+\r
+    ENCODING: function (args, irc_connection, callback) {\r
+        if (args.encoding) {\r
+            if (irc_connection.setEncoding(args.encoding)) {\r
+              return callback('Encoding modified to '+args.encoding);\r
+            } else {\r
+              return callback(args.encoding+' is not a valid encoding');\r
+            }\r
+        }\r
     }\r
 };\r
index a7202bd64f93d83ed215636c13306e64fbf5a3b2..3e0f75a7f2836ba764283dad2ee0329c8e001c48 100644 (file)
@@ -30,6 +30,9 @@ var IrcConnection = function (hostname, port, ssl, nick, user, pass, state) {
     });
     this.setMaxListeners(0);
 
+    // Set the first configured encoding as the default encoding
+    this.encoding = global.config.available_encodings[0];
+    
     // Socket state
     this.connected = false;
 
@@ -198,7 +201,7 @@ IrcConnection.prototype.clientEvent = function (event_name, data, callback) {
  */
 IrcConnection.prototype.write = function (data, callback) {
     //ENCODE string to encoding of the server
-    encoded_buffer = iconv.encode(data + '\r\n', "windows-1252");
+    encoded_buffer = iconv.encode(data + '\r\n', this.encoding);
     this.socket.write(encoded_buffer);
 };
 
@@ -251,6 +254,18 @@ IrcConnection.prototype.disposeSocket = function () {
     }
 };
 
+/**
+ * Set a new encoding for this connection
+ * Return true in case of success
+ */
+
+IrcConnection.prototype.setEncoding = function (encoding) {
+  if (global.config.available_encodings.indexOf(encoding.toUpperCase()) >= 0) {
+    this.encoding = encoding.toUpperCase();
+    return true;
+  }
+  return false;
+};
 
 
 function onChannelJoin(event) {
@@ -426,8 +441,9 @@ var parse = function (data) {
         tag;
 
     //DECODE server encoding 
-    data = iconv.decode(data, 'windows-1252');
+    data = iconv.decode(data, this.encoding);
     console.log(data);
+
     if (this.hold_last && this.held_data !== '') {
         data = this.held_data + data;
         this.hold_last = false;