network: Tidy up use of modem object in NetDeviceMobile

This commit is contained in:
Robert Ancell 2019-10-23 14:56:18 +13:00
parent 6207f84ba2
commit 06e38dac90
3 changed files with 44 additions and 105 deletions

View file

@ -438,6 +438,7 @@ panel_add_device (CcNetworkPanel *self, NMDevice *device)
{
NMDeviceType type;
NetDevice *net_device;
g_autoptr(GDBusObject) modem_object = NULL;
guint i;
if (!nm_device_get_managed (device))
@ -464,7 +465,23 @@ panel_add_device (CcNetworkPanel *self, NMDevice *device)
add_object (self, NET_OBJECT (net_device), GTK_CONTAINER (self->box_wired));
break;
case NM_DEVICE_TYPE_MODEM:
net_device = NET_DEVICE (net_device_mobile_new (self->client, device));
if (g_str_has_prefix (nm_device_get_udi (device), "/org/freedesktop/ModemManager1/Modem/")) {
if (self->modem_manager == NULL) {
g_warning ("Cannot grab information for modem at %s: No ModemManager support",
nm_device_get_udi (device));
return;
}
modem_object = g_dbus_object_manager_get_object (G_DBUS_OBJECT_MANAGER (self->modem_manager),
nm_device_get_udi (device));
if (modem_object == NULL) {
g_warning ("Cannot grab information for modem at %s: Not found",
nm_device_get_udi (device));
return;
}
}
net_device = NET_DEVICE (net_device_mobile_new (self->client, device, modem_object));
add_object (self, NET_OBJECT (net_device), GTK_CONTAINER (self->box_wired));
break;
case NM_DEVICE_TYPE_BT:
@ -482,30 +499,6 @@ panel_add_device (CcNetworkPanel *self, NMDevice *device)
return;
}
if (type == NM_DEVICE_TYPE_MODEM &&
g_str_has_prefix (nm_device_get_udi (device), "/org/freedesktop/ModemManager1/Modem/")) {
g_autoptr(GDBusObject) modem_object = NULL;
if (self->modem_manager == NULL) {
g_warning ("Cannot grab information for modem at %s: No ModemManager support",
nm_device_get_udi (device));
return;
}
modem_object = g_dbus_object_manager_get_object (G_DBUS_OBJECT_MANAGER (self->modem_manager),
nm_device_get_udi (device));
if (modem_object == NULL) {
g_warning ("Cannot grab information for modem at %s: Not found",
nm_device_get_udi (device));
return;
}
/* Set the modem object in the NetDeviceMobile */
g_object_set (net_device,
"mm-object", modem_object,
NULL);
}
/* Add to the devices array */
g_ptr_array_add (self->devices, net_device);

View file

@ -62,6 +62,7 @@ struct _NetDeviceMobile
GtkLabel *status_label;
NMClient *client;
GDBusObject *modem;
GCancellable *cancellable;
gboolean updating_device;
@ -83,12 +84,6 @@ enum {
COLUMN_LAST
};
enum {
PROP_0,
PROP_MODEM_OBJECT,
PROP_LAST
};
G_DEFINE_TYPE (NetDeviceMobile, net_device_mobile, NET_TYPE_DEVICE)
static GtkWidget *
@ -751,67 +746,6 @@ operator_name_updated (NetDeviceMobile *self)
device_mobile_refresh_operator_name (self);
}
static void
net_device_mobile_setup_modem_object (NetDeviceMobile *self)
{
MMModem3gpp *modem_3gpp;
if (self->mm_object == NULL)
return;
/* Load equipment ID initially */
device_mobile_refresh_equipment_id (self);
/* Follow changes in operator name and load initial values */
modem_3gpp = mm_object_peek_modem_3gpp (self->mm_object);
if (modem_3gpp != NULL) {
g_assert (self->operator_name_updated == 0);
self->operator_name_updated = g_signal_connect_swapped (modem_3gpp,
"notify::operator-name",
G_CALLBACK (operator_name_updated),
self);
device_mobile_refresh_operator_name (self);
}
}
static void
net_device_mobile_get_property (GObject *device_,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
NetDeviceMobile *self = NET_DEVICE_MOBILE (device_);
switch (prop_id) {
case PROP_MODEM_OBJECT:
g_value_set_object (value, self->mm_object);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
break;
}
}
static void
net_device_mobile_set_property (GObject *device_,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
NetDeviceMobile *self = NET_DEVICE_MOBILE (device_);
switch (prop_id) {
case PROP_MODEM_OBJECT:
self->mm_object = g_value_dup_object (value);
net_device_mobile_setup_modem_object (self);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
break;
}
}
static void
net_device_mobile_dispose (GObject *object)
{
@ -821,6 +755,7 @@ net_device_mobile_dispose (GObject *object)
g_clear_object (&self->builder);
g_clear_object (&self->client);
g_clear_object (&self->modem);
g_clear_object (&self->cancellable);
g_clear_object (&self->gsm_proxy);
g_clear_object (&self->cdma_proxy);
@ -843,18 +778,8 @@ net_device_mobile_class_init (NetDeviceMobileClass *klass)
NetObjectClass *parent_class = NET_OBJECT_CLASS (klass);
object_class->dispose = net_device_mobile_dispose;
object_class->get_property = net_device_mobile_get_property;
object_class->set_property = net_device_mobile_set_property;
parent_class->get_widget = device_mobile_get_widget;
parent_class->refresh = device_mobile_refresh;
g_object_class_install_property (object_class,
PROP_MODEM_OBJECT,
g_param_spec_object ("mm-object",
NULL,
NULL,
MM_TYPE_OBJECT,
G_PARAM_READWRITE));
}
static void
@ -916,7 +841,7 @@ net_device_mobile_init (NetDeviceMobile *self)
}
NetDeviceMobile *
net_device_mobile_new (NMClient *client, NMDevice *device)
net_device_mobile_new (NMClient *client, NMDevice *device, GDBusObject *modem)
{
NetDeviceMobile *self;
NMDeviceModemCapabilities caps;
@ -926,6 +851,26 @@ net_device_mobile_new (NMClient *client, NMDevice *device)
NULL);
self->client = g_object_ref (client);
if (modem != NULL) {
MMModem3gpp *modem_3gpp;
self->modem = g_object_ref (modem);
/* Load equipment ID initially */
device_mobile_refresh_equipment_id (self);
/* Follow changes in operator name and load initial values */
modem_3gpp = mm_object_peek_modem_3gpp (self->mm_object);
if (modem_3gpp != NULL) {
g_assert (self->operator_name_updated == 0);
self->operator_name_updated = g_signal_connect_swapped (modem_3gpp,
"notify::operator-name",
G_CALLBACK (operator_name_updated),
self);
device_mobile_refresh_operator_name (self);
}
}
caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
/* Only load proxies if we have broadband modems of the OLD ModemManager interface */

View file

@ -31,7 +31,8 @@ G_BEGIN_DECLS
#define NET_TYPE_DEVICE_MOBILE (net_device_mobile_get_type ())
G_DECLARE_FINAL_TYPE (NetDeviceMobile, net_device_mobile, NET, DEVICE_MOBILE, NetDevice)
NetDeviceMobile *net_device_mobile_new (NMClient *client,
NMDevice *device);
NetDeviceMobile *net_device_mobile_new (NMClient *client,
NMDevice *device,
GDBusObject *modem);
G_END_DECLS