Fix account repeated disconnect/connect issues

This commit is contained in:
Marvin W 2017-03-13 15:52:54 +01:00
parent 2804799f61
commit 0087a7135e
No known key found for this signature in database
GPG key ID: 072E9235DB996F2A

View file

@ -74,12 +74,12 @@ public class ConnectionManager {
public void disconnect(Account account) { public void disconnect(Account account) {
change_connection_state(account, ConnectionState.DISCONNECTED); change_connection_state(account, ConnectionState.DISCONNECTED);
connection_todo.remove(account);
if (stream_states.has_key(account)) { if (stream_states.has_key(account)) {
try { try {
stream_states[account].stream.disconnect(); stream_states[account].stream.disconnect();
} catch (Error e) { } } catch (Error e) { }
} }
connection_todo.remove(account);
} }
private Core.XmppStream? connect_(Account account, string? resource = null) { private Core.XmppStream? connect_(Account account, string? resource = null) {
@ -106,8 +106,12 @@ public class ConnectionManager {
} catch (Error e) { } catch (Error e) {
stderr.printf("Stream Error: %s\n", e.message); stderr.printf("Stream Error: %s\n", e.message);
change_connection_state(account, ConnectionState.DISCONNECTED); change_connection_state(account, ConnectionState.DISCONNECTED);
interpret_reconnect_flags(account, StreamError.Flag.get_flag(stream) ?? if (!connection_todo.contains(account)) {
new StreamError.Flag() { reconnection_recomendation = StreamError.Flag.Reconnect.NOW }); stream_states.unset(account);
} else {
interpret_reconnect_flags(account, StreamError.Flag.get_flag(stream) ??
new StreamError.Flag() { reconnection_recomendation = StreamError.Flag.Reconnect.NOW });
}
} }
return null; return null;
}); });
@ -117,7 +121,6 @@ public class ConnectionManager {
} }
private void interpret_reconnect_flags(Account account, StreamError.Flag stream_error_flag) { private void interpret_reconnect_flags(Account account, StreamError.Flag stream_error_flag) {
if (!connection_todo.contains(account)) return;
int wait_sec = 10; int wait_sec = 10;
if (network_manager != null && network_manager.State != NetworkManager.CONNECTED_GLOBAL) { if (network_manager != null && network_manager.State != NetworkManager.CONNECTED_GLOBAL) {
wait_sec = 60; wait_sec = 60;