Make sure that statusInitialized
is always called
regardless of wether it's a connection or reconnection event. We can then only listen for `statusInitialized` to handle both cases.
This commit is contained in:
parent
5968eec783
commit
1ce46a84ae
|
@ -41,12 +41,6 @@
|
|||
const { _converse } = this.__super__;
|
||||
_converse.chatboxviews.closeAllChatBoxes();
|
||||
return this.__super__.initStatus.apply(this, arguments);
|
||||
},
|
||||
|
||||
onStatusInitialized: function () {
|
||||
const { _converse } = this.__super__;
|
||||
_converse.chatboxes.onConnected();
|
||||
return this.__super__.onStatusInitialized.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -482,6 +476,8 @@
|
|||
_converse.chatboxes.remove(); // Don't call off(), events won't get re-registered upon reconnect.
|
||||
delete _converse.chatboxes.browserStorage;
|
||||
});
|
||||
|
||||
_converse.api.listen.on('statusInitialized', () => _converse.chatboxes.onConnected());
|
||||
/************************ END Event Handlers ************************/
|
||||
|
||||
|
||||
|
|
|
@ -221,14 +221,13 @@
|
|||
|
||||
const LABEL_CONTACTS = __('Contacts');
|
||||
|
||||
_converse.addControlBox = () => {
|
||||
_converse.addControlBox = () =>
|
||||
_converse.chatboxes.add({
|
||||
id: 'controlbox',
|
||||
box_id: 'controlbox',
|
||||
type: 'controlbox',
|
||||
closed: !_converse.show_controlbox_by_default
|
||||
})
|
||||
};
|
||||
|
||||
_converse.ControlBoxView = _converse.ChatBoxView.extend({
|
||||
tagName: 'div',
|
||||
|
@ -291,7 +290,6 @@
|
|||
_converse.api.waitUntil('rosterViewInitialized')
|
||||
.then(this.insertRoster.bind(this))
|
||||
.catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
||||
this.model.save();
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -350,11 +348,13 @@
|
|||
this.el.classList.add("col-xl-2");
|
||||
this.el.classList.add("col-md-3");
|
||||
|
||||
this.controlbox_pane = new _converse.ControlBoxPane();
|
||||
this.el.querySelector('.controlbox-panes').insertAdjacentElement(
|
||||
'afterBegin',
|
||||
this.controlbox_pane.el
|
||||
)
|
||||
if (!this.controlbox_pane) {
|
||||
this.controlbox_pane = new _converse.ControlBoxPane();
|
||||
this.el.querySelector('.controlbox-panes').insertAdjacentElement(
|
||||
'afterBegin',
|
||||
this.controlbox_pane.el
|
||||
)
|
||||
}
|
||||
},
|
||||
|
||||
close (ev) {
|
||||
|
@ -706,34 +706,23 @@
|
|||
Promise.all([
|
||||
_converse.api.waitUntil('connectionInitialized'),
|
||||
_converse.api.waitUntil('chatBoxesInitialized')
|
||||
]).then(() => {
|
||||
_converse.addControlBox();
|
||||
_converse.chatboxes.get('controlbox').save({connected:true});
|
||||
}).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
||||
]).then(_converse.addControlBox).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
||||
|
||||
_converse.on('chatBoxesFetched', () => {
|
||||
const controlbox = _converse.chatboxes.get('controlbox') || _converse.addControlBox();
|
||||
controlbox.save({connected:true});
|
||||
});
|
||||
|
||||
const disconnect = function () {
|
||||
/* Upon disconnection, set connected to `false`, so that if
|
||||
* we reconnect,
|
||||
* "onConnected" will be called, to fetch the roster again and
|
||||
* to send out a presence stanza.
|
||||
* we reconnect, "onConnected" will be called,
|
||||
* to fetch the roster again and to send out a presence stanza.
|
||||
*/
|
||||
const view = _converse.chatboxviews.get('controlbox');
|
||||
view.model.set({connected:false});
|
||||
view.renderLoginPanel();
|
||||
};
|
||||
_converse.on('disconnected', disconnect);
|
||||
|
||||
const afterReconnected = function () {
|
||||
/* After reconnection makes sure the controlbox is aware.
|
||||
*/
|
||||
const view = _converse.chatboxviews.get('controlbox');
|
||||
if (view.model.get('connected')) {
|
||||
_converse.chatboxviews.get("controlbox").onConnected();
|
||||
} else {
|
||||
view.model.set({connected:true});
|
||||
}
|
||||
};
|
||||
_converse.on('reconnected', afterReconnected);
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
|
|
@ -614,19 +614,24 @@
|
|||
}
|
||||
};
|
||||
|
||||
this.initStatus = () =>
|
||||
new Promise((resolve, reject) => {
|
||||
const promise = new u.getResolveablePromise();
|
||||
this.initStatus = (reconnecting) => {
|
||||
|
||||
// If there's no xmppstatus obj, then we were never connected to
|
||||
// begin with, so we set reconnecting to false.
|
||||
reconnecting = _.isUndefined(_converse.xmppstatus) ? false : reconnecting;
|
||||
if (reconnecting) {
|
||||
_converse.onStatusInitialized(reconnecting);
|
||||
} else {
|
||||
this.xmppstatus = new this.XMPPStatus();
|
||||
const id = b64_sha1(`converse.xmppstatus-${_converse.bare_jid}`);
|
||||
this.xmppstatus.id = id; // Appears to be necessary for backbone.browserStorage
|
||||
this.xmppstatus.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
|
||||
this.xmppstatus.fetch({
|
||||
success: resolve,
|
||||
error: resolve
|
||||
success: _.partial(_converse.onStatusInitialized, reconnecting),
|
||||
error: _.partial(_converse.onStatusInitialized, reconnecting)
|
||||
});
|
||||
_converse.emit('statusInitialized');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
this.initSession = function () {
|
||||
_converse.session = new Backbone.Model();
|
||||
|
@ -808,6 +813,7 @@
|
|||
* populating the roster etc.) necessary once the connection has
|
||||
* been established.
|
||||
*/
|
||||
_converse.emit('statusInitialized');
|
||||
if (reconnecting) {
|
||||
// No need to recreate the roster, otherwise we lose our
|
||||
// cached data. However we still emit an event, to give
|
||||
|
@ -821,9 +827,12 @@
|
|||
_converse.roster.onConnected();
|
||||
_converse.populateRoster(reconnecting);
|
||||
_converse.registerPresenceHandler();
|
||||
if (!reconnecting) {
|
||||
if (reconnecting) {
|
||||
_converse.emit('reconnected');
|
||||
} else {
|
||||
init_promise.resolve();
|
||||
_converse.emit('initialized');
|
||||
_converse.emit('connected');
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -838,28 +847,11 @@
|
|||
/* Called as soon as a new connection has been established, either
|
||||
* by logging in or by attaching to an existing BOSH session.
|
||||
*/
|
||||
// Solves problem of returned PubSub BOSH response not received
|
||||
// by browser.
|
||||
_converse.connection.flush();
|
||||
|
||||
_converse.connection.flush(); // Solves problem of returned PubSub BOSH response not received by browser
|
||||
_converse.setUserJid();
|
||||
_converse.initSession();
|
||||
_converse.enableCarbons();
|
||||
|
||||
// If there's no xmppstatus obj, then we were never connected to
|
||||
// begin with, so we set reconnecting to false.
|
||||
reconnecting = _.isUndefined(_converse.xmppstatus) ? false : reconnecting;
|
||||
if (reconnecting) {
|
||||
_converse.onStatusInitialized(true);
|
||||
_converse.emit('reconnected');
|
||||
} else {
|
||||
_converse.initStatus()
|
||||
.then(
|
||||
_.partial(_converse.onStatusInitialized, false),
|
||||
_.partial(_converse.onStatusInitialized, false))
|
||||
.catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
||||
_converse.emit('connected');
|
||||
}
|
||||
_converse.initStatus(reconnecting)
|
||||
};
|
||||
|
||||
this.RosterContact = Backbone.Model.extend({
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
<form class="pure-form set-xmpp-status" id="set-xmpp-status" action="" method="post">
|
||||
<select id="select-xmpp-status">
|
||||
<option value="online">{{{o.label_online}}}</option>
|
||||
<option value="dnd">{{{o.label_busy}}}</option>
|
||||
<option value="away">{{{o.label_away}}}</option>
|
||||
{[ if (o.include_offline_state) { ]}
|
||||
<option value="offline">{{{o.label_offline}}}</option>
|
||||
{[ } ]}
|
||||
{[ if (o.allow_logout) { ]}
|
||||
<option value="logout">{{{o.label_logout}}}</option>
|
||||
{[ } ]}
|
||||
</select>
|
||||
</form>
|
Loading…
Reference in New Issue
Block a user