Show network offline banner
This commit is contained in:
@@ -21,6 +21,9 @@
|
||||
public class Allesapp.Application : Adw.Application {
|
||||
public signal void toast (string message, int timeout = 5);
|
||||
|
||||
public bool network_online { get; private set; default=true; }
|
||||
public signal void network_online_changed ();
|
||||
|
||||
public Application () {
|
||||
Object (
|
||||
application_id: "de.clerie.allesapp",
|
||||
@@ -37,6 +40,10 @@ public class Allesapp.Application : Adw.Application {
|
||||
};
|
||||
this.add_action_entries (action_entries, this);
|
||||
this.set_accels_for_action ("app.quit", {"<primary>q"});
|
||||
|
||||
this.network_online_changed.connect(on_network_online_changed);
|
||||
|
||||
GLib.Idle.add_once (on_check_network_online_loop);
|
||||
}
|
||||
|
||||
public override void activate () {
|
||||
@@ -64,4 +71,40 @@ public class Allesapp.Application : Adw.Application {
|
||||
message ("app.preferences action activated");
|
||||
}
|
||||
|
||||
private void on_check_network_online_loop () {
|
||||
on_check_network_online ();
|
||||
|
||||
GLib.Timeout.add_seconds_once (5, on_check_network_online_loop_cooldown_elapsed);
|
||||
}
|
||||
|
||||
private void on_check_network_online_loop_cooldown_elapsed () {
|
||||
GLib.Idle.add_once (on_check_network_online_loop);
|
||||
}
|
||||
|
||||
private void on_check_network_online () {
|
||||
var session = new Soup.Session ();
|
||||
var msg = new Soup.Message ("GET", "http://ping.clerie.de/ping");
|
||||
|
||||
var old_network_online = app.network_online;
|
||||
|
||||
try {
|
||||
session.send (msg);
|
||||
app.network_online = msg.status_code == 201;
|
||||
} catch (Error e) {
|
||||
app.network_online = false;
|
||||
}
|
||||
|
||||
if (old_network_online != app.network_online) {
|
||||
app.network_online_changed ();
|
||||
}
|
||||
}
|
||||
|
||||
private void on_network_online_changed () {
|
||||
if (app.network_online) {
|
||||
message ("Network online");
|
||||
} else {
|
||||
message ("Network offline");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -27,9 +27,8 @@
|
||||
<object class="GtkBox">
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="AdwBanner">
|
||||
<property name="revealed">True</property>
|
||||
<property name="title">Meow meow meow</property>
|
||||
<object class="AdwBanner" id="network_offline">
|
||||
<property name="title">Network offline</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
@@ -26,12 +26,16 @@ public class Allesapp.Window : Adw.ApplicationWindow {
|
||||
[GtkChild]
|
||||
private unowned Adw.ToastOverlay toast_overlay;
|
||||
|
||||
[GtkChild]
|
||||
private unowned Adw.Banner network_offline;
|
||||
|
||||
public Window (Gtk.Application app) {
|
||||
Object (application: app);
|
||||
}
|
||||
|
||||
construct {
|
||||
app.toast.connect (add_toast);
|
||||
app.network_online_changed.connect (on_network_online_changed);
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
@@ -52,4 +56,8 @@ public class Allesapp.Window : Adw.ApplicationWindow {
|
||||
timeout = timeout
|
||||
});
|
||||
}
|
||||
|
||||
private void on_network_online_changed () {
|
||||
network_offline.set_revealed (!app.network_online);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user