Show network offline banner

This commit is contained in:
2025-09-27 22:10:11 +02:00
parent cd8b293005
commit 68ec2b2c06
3 changed files with 53 additions and 3 deletions

View File

@@ -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");
}
}
}

View File

@@ -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>

View File

@@ -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);
}
}