mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-26 04:02:09 +01:00
portal network monitor: use GetStatus when available
Version 3 of the portal interface adds a GetStatus method that gets all data in a single roundtrip. Use it when available.
This commit is contained in:
parent
a090d8605b
commit
5c5881b2ed
@ -183,13 +183,80 @@ got_connectivity (GObject *source,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
got_status (GObject *source,
|
||||
GAsyncResult *res,
|
||||
gpointer data)
|
||||
{
|
||||
GDBusProxy *proxy = G_DBUS_PROXY (source);
|
||||
GNetworkMonitorPortal *nm = G_NETWORK_MONITOR_PORTAL (data);
|
||||
GError *error = NULL;
|
||||
GVariant *ret;
|
||||
gboolean should_emit_changed = FALSE;
|
||||
GVariant *status;
|
||||
gboolean available;
|
||||
gboolean metered;
|
||||
GNetworkConnectivity connectivity;
|
||||
|
||||
ret = g_dbus_proxy_call_finish (proxy, res, &error);
|
||||
if (ret == NULL)
|
||||
{
|
||||
g_warning ("%s", error->message);
|
||||
g_clear_error (&error);
|
||||
return;
|
||||
}
|
||||
|
||||
g_variant_get (ret, "(@a{sv})", &status);
|
||||
g_variant_unref (ret);
|
||||
|
||||
g_variant_lookup (status, "available", "b", &available);
|
||||
g_variant_lookup (status, "metered", "b", &metered);
|
||||
g_variant_lookup (status, "connectivity", "u", &connectivity);
|
||||
g_variant_unref (status);
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (nm));
|
||||
|
||||
if (nm->priv->available != available)
|
||||
{
|
||||
nm->priv->available = available;
|
||||
g_object_notify (G_OBJECT (nm), "network-available");
|
||||
should_emit_changed = TRUE;
|
||||
}
|
||||
|
||||
if (nm->priv->metered != metered)
|
||||
{
|
||||
nm->priv->metered = metered;
|
||||
g_object_notify (G_OBJECT (nm), "network-metered");
|
||||
should_emit_changed = TRUE;
|
||||
}
|
||||
|
||||
if (nm->priv->connectivity != connectivity)
|
||||
{
|
||||
nm->priv->connectivity = connectivity;
|
||||
g_object_notify (G_OBJECT (nm), "connectivity");
|
||||
should_emit_changed = TRUE;
|
||||
}
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (nm));
|
||||
|
||||
if (should_emit_changed)
|
||||
g_signal_emit_by_name (nm, "network-changed", available);
|
||||
}
|
||||
|
||||
static void
|
||||
update_properties (GDBusProxy *proxy,
|
||||
GNetworkMonitorPortal *nm)
|
||||
{
|
||||
g_dbus_proxy_call (proxy, "GetConnectivity", NULL, 0, -1, NULL, got_connectivity, nm);
|
||||
g_dbus_proxy_call (proxy, "GetMetered", NULL, 0, -1, NULL, got_metered, nm);
|
||||
g_dbus_proxy_call (proxy, "GetAvailable", NULL, 0, -1, NULL, got_available, nm);
|
||||
if (nm->priv->version == 3)
|
||||
{
|
||||
g_dbus_proxy_call (proxy, "GetStatus", NULL, 0, -1, NULL, got_status, nm);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_dbus_proxy_call (proxy, "GetConnectivity", NULL, 0, -1, NULL, got_connectivity, nm);
|
||||
g_dbus_proxy_call (proxy, "GetMetered", NULL, 0, -1, NULL, got_metered, nm);
|
||||
g_dbus_proxy_call (proxy, "GetAvailable", NULL, 0, -1, NULL, got_available, nm);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -209,7 +276,7 @@ proxy_signal (GDBusProxy *proxy,
|
||||
g_variant_get (parameters, "(b)", &available);
|
||||
g_signal_emit_by_name (nm, "network-changed", available);
|
||||
}
|
||||
else if (nm->priv->version == 2)
|
||||
else if (nm->priv->version == 2 || nm->priv->version == 3)
|
||||
{
|
||||
update_properties (proxy, nm);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user