aboutsummaryrefslogtreecommitdiff
path: root/libdino/src
diff options
context:
space:
mode:
Diffstat (limited to 'libdino/src')
-rw-r--r--libdino/src/dbus/network_manager.vala22
-rw-r--r--libdino/src/dbus/network_manager_dbus_properties.vala14
-rw-r--r--libdino/src/service/connection_manager.vala40
3 files changed, 20 insertions, 56 deletions
diff --git a/libdino/src/dbus/network_manager.vala b/libdino/src/dbus/network_manager.vala
deleted file mode 100644
index be9fb42b..00000000
--- a/libdino/src/dbus/network_manager.vala
+++ /dev/null
@@ -1,22 +0,0 @@
-namespace Dino {
-
-[DBus (name = "org.freedesktop.NetworkManager")]
-public interface NetworkManager : Object {
-
- public const int CONNECTED_GLOBAL = 70;
-
- public abstract uint32 State {owned get;}
- public signal void StateChanged(uint32 state);
-}
-
-public static NetworkManager? get_network_manager() {
- NetworkManager? nm = null;
- try {
- nm = Bus.get_proxy_sync(BusType.SYSTEM, "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager");
- } catch (IOError e) {
- stderr.printf ("%s\n", e.message);
- }
- return nm;
-}
-
-}
diff --git a/libdino/src/dbus/network_manager_dbus_properties.vala b/libdino/src/dbus/network_manager_dbus_properties.vala
deleted file mode 100644
index 37cf76cb..00000000
--- a/libdino/src/dbus/network_manager_dbus_properties.vala
+++ /dev/null
@@ -1,14 +0,0 @@
-[DBus (name = "org.freedesktop.DBus.Properties")]
-public interface NetworkManagerDBusProperties : GLib.Object {
- public signal void properties_changed(string iface, HashTable<string, Variant> changed, string[] invalidated);
-}
-
-public static NetworkManagerDBusProperties? get_dbus_properties() {
- NetworkManagerDBusProperties? dbus_properties = null;
- try {
- dbus_properties = Bus.get_proxy_sync(BusType.SYSTEM, "org.freedesktop.DBus.Properties", "/org/freedesktop/NetworkManager");
- } catch (IOError e) {
- stderr.printf("%s\n", e.message);
- }
- return dbus_properties;
-}
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);
}