[polari/wip/bastianilso/irc-url-handling: 5/5] app: extend irc url handling to predefined connections



commit dca7ea700066d5ce5b64050807942e2db23b6df0
Author: Bastian Ilsø <hougaard junior gmail com>
Date:   Sat Feb 13 00:57:07 2016 +0100

    app: extend irc url handling to predefined connections

 src/application.js     |   30 ++++++++++++++++++++++++------
 src/networksManager.js |    7 +++++++
 2 files changed, 31 insertions(+), 6 deletions(-)
---
diff --git a/src/application.js b/src/application.js
index 8397c3c..c618b7f 100644
--- a/src/application.js
+++ b/src/application.js
@@ -12,6 +12,7 @@ const Lang = imports.lang;
 const MainWindow = imports.mainWindow;
 const PasteManager = imports.pasteManager;
 const Utils = imports.utils;
+const NetworksManager = imports.networksManager;
 
 const MAX_RETRIES = 3;
 
@@ -39,6 +40,7 @@ const Application = new Lang.Class({
         this._chatroomManager = ChatroomManager.getDefault();
         this._accountsMonitor = AccountsMonitor.getDefault();
         this._networkMonitor = Gio.NetworkMonitor.get_default();
+        this._networksManager = NetworksManager.getDefault();
 
         this._accountsMonitor.connect('account-removed', Lang.bind(this,
             function(am, account) {
@@ -155,13 +157,24 @@ const Application = new Lang.Class({
     _openURIs: function(uris, time) {
         let map = {};
 
-        this._accountsMonitor.dupAccounts().forEach(function(a) {
+        this._accountsMonitor.dupAccounts().forEach(Lang.bind(this, function(a) {
             if (!a.enabled)
                 return;
 
-            let params = a.dup_parameters_vardict().deep_unpack();
-            map[a.get_object_path()] = params.server.deep_unpack();
-        });
+            let servers = [];
+
+            let predefined = this._networksManager.getAccountIsPredefined(a);
+            if (predefined) {
+                this._networksManager.getServers(a).forEach(function(s) {
+                    servers.push(s.address);
+                });
+            } else {
+                let params = a.dup_parameters_vardict().deep_unpack();
+                servers = [params.server.deep_unpack()];
+            }
+
+            map[a.get_object_path()] = servers;
+        }));
 
         let action = this.lookup_action('join-room');
         uris.forEach(Lang.bind(this, function(uri) {
@@ -180,7 +193,13 @@ const Application = new Lang.Class({
             }
 
             let matches = Object.keys(map).filter(function(a) {
-                return map[a] == server;
+                let result = false;
+                map[a].forEach(function(s) {
+                    if (s == server)
+                        result = true;
+                        return;
+                });
+                return result;
             });
 
             if (!matches.length) {
@@ -193,7 +212,6 @@ const Application = new Lang.Class({
                 Lang.bind(this, function(widget) {
                     widget.destroy();
                 }));
-
                 log("No matching account");
                 return;
             }
diff --git a/src/networksManager.js b/src/networksManager.js
index 65f472e..2859d69 100644
--- a/src/networksManager.js
+++ b/src/networksManager.js
@@ -91,6 +91,13 @@ const NetworksManager = new Lang.Class({
         });
         return [network.name.toLowerCase(),
                 network.id.toLowerCase()].concat(servers);
+    },
+
+    getServers: function(account) {
+        if (!account)
+            throw new Error('Missing account argument');
+        return this._lookupNetwork(account.service).servers;
     }
+
 });
 Signals.addSignalMethods(NetworksManager.prototype);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]