aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/service/connection_manager.vala
diff options
context:
space:
mode:
Diffstat (limited to 'libdino/src/service/connection_manager.vala')
-rw-r--r--libdino/src/service/connection_manager.vala40
1 files changed, 20 insertions, 20 deletions
diff --git a/libdino/src/service/connection_manager.vala b/libdino/src/service/connection_manager.vala
index bd22191f..70877233 100644
--- a/libdino/src/service/connection_manager.vala
+++ b/libdino/src/service/connection_manager.vala
@@ -21,9 +21,8 @@ public class ConnectionManager {
private HashMap<Account, Connection> connections = new HashMap<Account, Connection>(Account.hash_func, Account.equals_func);
private HashMap<Account, ConnectionError> connection_errors = new HashMap<Account, ConnectionError>(Account.hash_func, Account.equals_func);
- private NetworkManager? network_manager;
+ private NetworkMonitor? network_monitor;
private Login1Manager? login1;
- private NetworkManagerDBusProperties? dbus_properties;
private ModuleManager module_manager;
public string? log_options;
@@ -66,25 +65,15 @@ public class ConnectionManager {
public ConnectionManager(ModuleManager module_manager) {
this.module_manager = module_manager;
- network_manager = get_network_manager();
- if (network_manager != null) {
- network_manager.StateChanged.connect(on_nm_state_changed);
+ network_monitor = GLib.NetworkMonitor.get_default();
+ if (network_monitor != null) {
+ network_monitor.network_changed.connect(on_network_changed);
+ network_monitor.notify["connectivity"].connect(on_network_changed);
}
login1 = get_login1();
if (login1 != null) {
login1.PrepareForSleep.connect(on_prepare_for_sleep);
}
- dbus_properties = get_dbus_properties();
- if (dbus_properties != null) {
- dbus_properties.properties_changed.connect((s, sv, sa) => {
- foreach (string key in sv.get_keys()) {
- if (key == "PrimaryConnection") {
- print("primary connection changed\n");
- check_reconnects();
- }
- }
- });
- }
Timeout.add_seconds(60, () => {
foreach (Account account in connection_todo) {
if (connections[account].last_activity != null &&
@@ -228,7 +217,7 @@ public class ConnectionManager {
} else if (error.source == ConnectionError.Source.SASL) {
return;
}
- if (network_manager != null && network_manager.State != NetworkManager.CONNECTED_GLOBAL) {
+ if (network_is_online()) {
wait_sec = 30;
}
print(@"recovering in $wait_sec\n");
@@ -266,11 +255,22 @@ public class ConnectionManager {
});
}
- private void on_nm_state_changed(uint32 state) {
- print("nm " + state.to_string() + "\n");
- if (state == NetworkManager.CONNECTED_GLOBAL) {
+ private bool network_is_online() {
+ /* FIXME: We should also check for connectivity eventually. For more
+ * details on why we don't do it for now, see:
+ *
+ * - https://github.com/dino/dino/pull/236#pullrequestreview-86851793
+ * - https://bugzilla.gnome.org/show_bug.cgi?id=792240
+ */
+ return network_monitor != null && network_monitor.network_available;
+ }
+
+ private void on_network_changed() {
+ if (network_is_online()) {
+ print("network online\n");
check_reconnects();
} else {
+ print("network offline\n");
foreach (Account account in connection_todo) {
change_connection_state(account, ConnectionState.DISCONNECTED);
}