[polari/wip/fmuellner/nickserv: 52/62] telepathyClient: Connect accounts explicitly before creating channels
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/fmuellner/nickserv: 52/62] telepathyClient: Connect accounts explicitly before creating channels
- Date: Mon, 29 Aug 2016 12:21:22 +0000 (UTC)
commit 62224bbd97ad21d18f2d4d0ad0ed4eafd0c17f08
Author: Florian Müllner <fmuellner gnome org>
Date: Sat Jul 30 21:49:39 2016 +0200
telepathyClient: Connect accounts explicitly before creating channels
We currently rely on mission-control automatically establishing server
connections when we request a channel. However we will soon support
NickServ identification, which means we may need to send an "identify"
message before joining any channels. This will be easier to achieve if
connecting to the server and joining channels are separate operations,
so stop relying on automatic presence changes and connect accounts
explicitly before creating any channels.
As a side effect, externally configured channels (a.k.a. autojoin) will
now work as expected, as we do not filter out enabled accounts without
rooms.
https://bugzilla.gnome.org/show_bug.cgi?id=751575
src/telepathyClient.js | 45 ++++++++++++++++++++++++++++++---------------
1 files changed, 30 insertions(+), 15 deletions(-)
---
diff --git a/src/telepathyClient.js b/src/telepathyClient.js
index ca63e94..1e3b180 100644
--- a/src/telepathyClient.js
+++ b/src/telepathyClient.js
@@ -130,7 +130,8 @@ const TelepathyClient = new Lang.Class({
this._networkMonitor = Gio.NetworkMonitor.get_default();
this._roomManager = RoomManager.getDefault();
this._roomManager.connect('room-added', (mgr, room) => {
- this._connectRoom(room);
+ if (room.account.connection)
+ this._connectRoom(room);
});
this._accountsMonitor = AccountsMonitor.getDefault();
this._accountsMonitor.prepare(Lang.bind(this, this._onPrepared));
@@ -176,24 +177,41 @@ const TelepathyClient = new Lang.Class({
});
this.register();
- this._accountsMonitor.connect('account-enabled',
- Lang.bind(this, this._onAccountEnabled));
this._accountsMonitor.connect('account-status-changed', Lang.bind(this, function(monitor, account) {
if (account.connection_status == Tp.ConnectionStatus.CONNECTED)
this._connectRooms(account);
}));
+ this._accountsMonitor.connect('account-added', (mon, account) => {
+ this._connectAccount(account);
+ });
+ this._accountsMonitor.connect('account-enabled', (mon, account) => {
+ this._connectAccount(account);
+ });
+ this._accountsMonitor.enabledAccounts.forEach(a => {
+ if (a.connection)
+ this._connectRooms(a);
+ else
+ this._connectAccount(a);
+ });
- this._connectRooms(null);
+ this._networkMonitor.connect('notify::network-available', () => {
+ if (!this._networkMonitor.network_available)
+ return;
- this._networkMonitor.connect('notify::network-available', Lang.bind(this,
- function() {
- if (this._networkMonitor.network_available)
- this._connectRooms(null);
- }));
+ this._accountsMonitor.enabledAccounts.forEach(this._connectAccount);
+ });
},
- _onAccountEnabled: function(mon, account) {
- this._connectRooms(account);
+ _connectAccount: function(account) {
+ let presence = Tp.ConnectionPresenceType.AVAILABLE;
+ let msg = account.requested_status_message;
+ account.request_presence_async(presence, 'available', msg, (o, res) => {
+ try {
+ account.request_presence_finish(res);
+ } catch(e) {
+ log('Connection failed: ' + e.message);
+ }
+ });
},
_connectRooms: function(account) {
@@ -259,10 +277,7 @@ const TelepathyClient = new Lang.Class({
_onConnectAccountActivated: function(action, parameter) {
let accountPath = parameter.deep_unpack();
let account = this._accountsMonitor.lookupAccount(accountPath);
- account.request_presence_async(Tp.ConnectionPresenceType.AVAILABLE,
- 'available',
- account.requested_status_message,
- null);
+ this._connectAccount(account);
},
_onReconnectAccountActivated: function(action, parameter) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]