Reconnection messages moved to locales
[KiwiIRC.git] / client / assets / src / models / application.js
index 28c09172b0bcea44e55ead87951468ffe19356d0..aea2fa6dfb4e0ab2d234c208e98d0b20e50ba137 100644 (file)
@@ -25,12 +25,18 @@ _kiwi.model.Application = function () {
 \r
             // Any options sent down from the server\r
             this.server_settings = options[0].server_settings || {};\r
+            this.translations = options[0].translations || {};\r
 \r
             // Best guess at where the kiwi server is\r
             this.detectKiwiServer();\r
 \r
             // Takes instances of model_network\r
             this.connections = new _kiwi.model.NetworkPanelList();\r
+\r
+            // Set any default settings before anything else is applied\r
+            if (this.server_settings && this.server_settings.client && this.server_settings.client.settings) {\r
+                this.applyDefaultClientSettings(this.server_settings.client.settings);\r
+            }\r
         };\r
 \r
 \r
@@ -138,6 +144,15 @@ _kiwi.model.Application = function () {
         };\r
 \r
 \r
+        this.applyDefaultClientSettings = function (settings) {\r
+            _.each(settings, function (value, setting) {\r
+                if (typeof _kiwi.global.settings.get(setting) === 'undefined') {\r
+                    _kiwi.global.settings.set(setting, value);\r
+                }\r
+            });\r
+        };\r
+\r
+\r
         this.populateDefaultServerSettings = function (new_connection_dialog) {\r
             var parts;\r
             var defaults = {\r
@@ -170,6 +185,9 @@ _kiwi.model.Application = function () {
 \r
                 if (this.server_settings.client.channel)\r
                     defaults.channel = this.server_settings.client.channel;\r
+\r
+                if (this.server_settings.client.channel_key)\r
+                    defaults.channel_key = this.server_settings.client.channel_key;\r
             }\r
 \r
 \r
@@ -274,6 +292,10 @@ _kiwi.model.Application = function () {
                     defaults.channel = this.server_settings.connection.channel;\r
                 }\r
 \r
+                if (this.server_settings.connection.channel_key) {\r
+                    defaults.channel_key = this.server_settings.connection.channel_key;\r
+                }\r
+\r
                 if (this.server_settings.connection.nick) {\r
                     defaults.nick = this.server_settings.connection.nick;\r
                 }\r
@@ -319,6 +341,8 @@ _kiwi.model.Application = function () {
 \r
 \r
         this.bindGatewayCommands = function (gw) {\r
+            var that = this;\r
+\r
             gw.on('onconnect', function (event) {\r
                 that.view.barsShow();\r
             });\r
@@ -329,10 +353,15 @@ _kiwi.model.Application = function () {
              */\r
             (function () {\r
                 var gw_stat = 0;\r
+                var unplanned_disconnect = false;\r
 \r
                 gw.on('disconnect', function (event) {\r
-                    var msg = 'You have been disconnected. Attempting to reconnect for you..';\r
-                    that.message.text(msg, {timeout: 10000});\r
+                    unplanned_disconnect = !gw.disconnect_requested;\r
+\r
+                    if (unplanned_disconnect) {\r
+                        var msg = _kiwi.global.i18n.translate('client_models_application_reconnecting').fetch() + '...';\r
+                        that.message.text(msg, {timeout: 10000});\r
+                    }\r
 \r
                     that.view.$el.removeClass('connected');\r
 \r
@@ -353,7 +382,7 @@ _kiwi.model.Application = function () {
 \r
 \r
                 gw.on('reconnecting', function (event) {\r
-                    var msg = 'You have been disconnected. Attempting to reconnect again in ' + (event.delay/1000) + ' seconds..';\r
+                    var msg = _kiwi.global.i18n.translate('client_models_application_reconnect_in_x_seconds').fetch(event.delay/1000) + '...';\r
 \r
                     // Only need to mention the repeating re-connection messages on server panels\r
                     _kiwi.app.connections.forEach(function(connection) {\r
@@ -366,8 +395,10 @@ _kiwi.model.Application = function () {
                     that.view.$el.addClass('connected');\r
                     if (gw_stat !== 1) return;\r
 \r
-                    var msg = 'It\'s OK, you\'re connected again :)';\r
-                    that.message.text(msg, {timeout: 5000});\r
+                    if (unplanned_disconnect) {\r
+                        var msg = _kiwi.global.i18n.translate('client_models_application_reconnect_successfully').fetch() + ':)';\r
+                        that.message.text(msg, {timeout: 5000});\r
+                    }\r
 \r
                     // Mention the disconnection on every channel\r
                     _kiwi.app.connections.forEach(function(connection) {\r
@@ -385,6 +416,43 @@ _kiwi.model.Application = function () {
                 });\r
             })();\r
 \r
+\r
+            gw.on('kiwi:reconfig', function () {\r
+                $.getJSON(that.get('base_path') + '/assets/settings.json', function (data) {\r
+                    that.server_settings = data.server_settings || {};\r
+                    that.translations = data.translations || {};\r
+                });\r
+            });\r
+\r
+\r
+            gw.on('kiwi:jumpserver', function (data) {\r
+                // Switching kiwi server?\r
+                if (typeof data.kiwi_server !== 'undefined') {\r
+                    _kiwi.app.kiwi_server = data.kiwi_server;\r
+                    _kiwi.gateway.set('kiwi_server', data.kiwi_server);\r
+                }\r
+\r
+                // Force the jumpserver now?\r
+                if (data.force) {\r
+                    // Get an interval around 1 minute so everyone doesn't reconnect it all at once\r
+                    var jump_server_interval = Math.random() * (90 - 60) + 60;\r
+\r
+                    var msg = 'In 1 minutes time you will be reconnected to a more stable server. Get ready!';\r
+                    var msg = _kiwi.global.i18n.translate('client_models_application_jumpserver_prepare').fetch();\r
+                    that.message.text(msg, {timeout: 10000});\r
+\r
+                    setTimeout(function forcedReconnect() {\r
+                        var msg = 'Safely reconnecting you now..';\r
+                        var msg = _kiwi.global.i18n.translate('client_models_application_jumpserver_reconnect').fetch();\r
+                        that.message.text(msg, {timeout: 8000});\r
+\r
+                        setTimeout(function forcedReconnectPartTwo() {\r
+                            _kiwi.gateway.reconnect();\r
+                        }, 5000);\r
+\r
+                    }, jump_server_interval * 1000);\r
+                }\r
+            });\r
         };\r
 \r
 \r
@@ -400,6 +468,8 @@ _kiwi.model.Application = function () {
                 '/me': '/action $1+',\r
                 '/j': '/join $1+',\r
                 '/q': '/query $1+',\r
+                '/w': '/whois $1+',\r
+                '/raw': '/quote $1+',\r
 \r
                 // Op related aliases\r
                 '/op': '/quote mode $channel +o $1+',\r
@@ -431,6 +501,8 @@ _kiwi.model.Application = function () {
 \r
             controlbox.on('command:query', queryCommand);\r
 \r
+            controlbox.on('command:invite', inviteCommand);\r
+\r
             controlbox.on('command:topic', topicCommand);\r
 \r
             controlbox.on('command:notice', noticeCommand);\r
@@ -445,6 +517,11 @@ _kiwi.model.Application = function () {
 \r
             controlbox.on('command:server', serverCommand);\r
 \r
+            controlbox.on('command:whois', whoisCommand);\r
+\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
@@ -458,7 +535,7 @@ _kiwi.model.Application = function () {
                 $script(ev.params[0] + '?' + (new Date().getTime()));\r
             });\r
 \r
-            \r
+\r
             controlbox.on('command:set', function (ev) {\r
                 if (!ev.params[0]) return;\r
 \r
@@ -493,7 +570,7 @@ _kiwi.model.Application = function () {
 \r
             controlbox.on('command:save', function (ev) {\r
                 _kiwi.global.settings.save();\r
-                _kiwi.app.panels().active.addMsg('', 'Settings have been saved');\r
+                _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_settings_saved').fetch());\r
             });\r
 \r
 \r
@@ -528,19 +605,19 @@ _kiwi.model.Application = function () {
                 controlbox.preprocessor.aliases[name] = rule;\r
             });\r
 \r
-            \r
+\r
             controlbox.on('command:ignore', function (ev) {\r
                 var list = _kiwi.gateway.get('ignore_list');\r
 \r
                 // No parameters passed so list them\r
                 if (!ev.params[0]) {\r
                     if (list.length > 0) {\r
-                        _kiwi.app.panels().active.addMsg(' ', 'Ignored nicks:');\r
+                        _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_title').fetch() + ':');\r
                         $.each(list, function (idx, ignored_pattern) {\r
                             _kiwi.app.panels().active.addMsg(' ', ignored_pattern);\r
                         });\r
                     } else {\r
-                        _kiwi.app.panels().active.addMsg(' ', 'Not ignoring anybody');\r
+                        _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_none').fetch());\r
                     }\r
                     return;\r
                 }\r
@@ -548,7 +625,7 @@ _kiwi.model.Application = function () {
                 // We have a parameter, so add it\r
                 list.push(ev.params[0]);\r
                 _kiwi.gateway.set('ignore_list', list);\r
-                _kiwi.app.panels().active.addMsg(' ', 'Ignoring ' + ev.params[0]);\r
+                _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_nick').fetch(ev.params[0]));\r
             });\r
 \r
 \r
@@ -556,7 +633,7 @@ _kiwi.model.Application = function () {
                 var list = _kiwi.gateway.get('ignore_list');\r
 \r
                 if (!ev.params[0]) {\r
-                    _kiwi.app.panels().active.addMsg(' ', 'Specifiy which nick you wish to stop ignoring');\r
+                    _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_stop_notice').fetch());\r
                     return;\r
                 }\r
 \r
@@ -566,7 +643,7 @@ _kiwi.model.Application = function () {
 \r
                 _kiwi.gateway.set('ignore_list', list);\r
 \r
-                _kiwi.app.panels().active.addMsg(' ', 'Stopped ignoring ' + ev.params[0]);\r
+                _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_stopped').fetch(ev.params[0]));\r
             });\r
 \r
 \r
@@ -591,7 +668,7 @@ _kiwi.model.Application = function () {
             panels = that.connections.active_connection.createAndJoinChannels(channel_names);\r
 \r
             // Show the last channel if we have one\r
-            if (panels)\r
+            if (panels.length)\r
                 panels[panels.length - 1].view.show();\r
         }\r
 \r
@@ -608,7 +685,7 @@ _kiwi.model.Application = function () {
             }\r
 \r
             if (panel) panel.view.show();\r
-            \r
+\r
         }\r
 \r
         function msgCommand (ev) {\r
@@ -736,23 +813,86 @@ _kiwi.model.Application = function () {
                 if (_kiwi.applets[ev.params[0]]) {\r
                     panel.load(new _kiwi.applets[ev.params[0]]());\r
                 } else {\r
-                    _kiwi.app.panels().server.addMsg('', 'Applet "' + ev.params[0] + '" does not exist');\r
+                    _kiwi.app.panels().server.addMsg('', _kiwi.global.i18n.translate('client_models_application_applet_notfound').fetch(ev.params[0]));\r
                     return;\r
                 }\r
             }\r
-            \r
+\r
             _kiwi.app.connections.active_connection.panels.add(panel);\r
             panel.view.show();\r
         }\r
 \r
 \r
+\r
+        function inviteCommand (ev) {\r
+            var nick, channel;\r
+\r
+            // A nick must be specified\r
+            if (!ev.params[0])\r
+                return;\r
+\r
+            // Can only invite into channels\r
+            if (!_kiwi.app.panels().active.isChannel())\r
+                return;\r
+\r
+            nick = ev.params[0];\r
+            channel = _kiwi.app.panels().active.get('name');\r
+\r
+            _kiwi.app.connections.active_connection.gateway.raw('INVITE ' + nick + ' ' + channel);\r
+\r
+            _kiwi.app.panels().active.addMsg('', '== ' + nick + ' has been invited to ' + channel, 'action');\r
+        }\r
+\r
+\r
+        function whoisCommand (ev) {\r
+            var nick;\r
+\r
+            if (ev.params[0]) {\r
+                nick = ev.params[0];\r
+            } else if (_kiwi.app.panels().active.isQuery()) {\r
+                nick = _kiwi.app.panels().active.get('name');\r
+            }\r
+\r
+            if (nick)\r
+                _kiwi.app.connections.active_connection.gateway.raw('WHOIS ' + nick + ' ' + nick);\r
+        }\r
+\r
+\r
+        function whowasCommand (ev) {\r
+            var nick;\r
+\r
+            if (ev.params[0]) {\r
+                nick = ev.params[0];\r
+            } else if (_kiwi.app.panels().active.isQuery()) {\r
+                nick = _kiwi.app.panels().active.get('name');\r
+            }\r
+\r
+            if (nick)\r
+                _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 (success) {\r
+                    if (success) {\r
+                        _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_changed').fetch(ev.params[0]));\r
+                    } else {\r
+                        _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_invalid').fetch(ev.params[0]));\r
+                    }\r
+                });\r
+            } else {\r
+                _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_notspecified').fetch());\r
+                _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_usage').fetch());\r
+            }\r
+        }\r
+\r
         function serverCommand (ev) {\r
             var server, port, ssl, password, nick,\r
                 tmp;\r
 \r
             // If no server address given, show the new connection dialog\r
             if (!ev.params[0]) {\r
-                tmp = new _kiwi.view.MenuBox('New Connection');\r
+                tmp = new _kiwi.view.MenuBox(_kiwi.global.i18n.translate('client_models_application_connection_create').fetch());\r
                 tmp.addItem('new_connection', new _kiwi.model.NewConnection().view.$el);\r
                 tmp.show();\r
 \r
@@ -795,7 +935,7 @@ _kiwi.model.Application = function () {
             // Use the same nick as we currently have\r
             nick = _kiwi.app.connections.active_connection.get('nick');\r
 \r
-            _kiwi.app.panels().active.addMsg('', 'Connecting to ' + server + ':' + port.toString() + '..');\r
+            _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_connection_connecting').fetch(server, port.toString()));\r
 \r
             _kiwi.gateway.newConnection({\r
                 nick: nick,\r
@@ -805,7 +945,7 @@ _kiwi.model.Application = function () {
                 password: password\r
             }, function(err, new_connection) {\r
                 if (err)\r
-                    _kiwi.app.panels().active.addMsg('', 'Error connecting to ' + server + ':' + port.toString() + ' (' + err.toString() + ')');\r
+                    _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_connection_error').fetch(server, port.toString(), err.toString()));\r
             });\r
         }\r
 \r