diff --git a/src/knownnetworks.c b/src/knownnetworks.c index 1c3ffce2..33d375de 100644 --- a/src/knownnetworks.c +++ b/src/knownnetworks.c @@ -149,8 +149,11 @@ static void known_network_update(struct network_info *orig_network, if (orig_network) network = orig_network; - else - network = network_info_add_known(ssid, security); + else { + network = l_new(struct network_info, 1); + strcpy(network->ssid, ssid); + network->type = security; + } if (util_timespec_compare(&network->connected_time, connected_time) && orig_network) { @@ -194,8 +197,11 @@ static void known_network_update(struct network_info *orig_network, return; l_queue_insert(known_networks, network, connected_time_compare, NULL); - known_network_register_dbus(network); + + WATCHLIST_NOTIFY(&known_network_watches, + known_networks_watch_func_t, + KNOWN_NETWORKS_EVENT_ADDED, network); } bool known_networks_foreach(known_networks_foreach_func_t function, diff --git a/src/network.c b/src/network.c index 43c8334a..279cda73 100644 --- a/src/network.c +++ b/src/network.c @@ -1344,18 +1344,18 @@ static void emit_known_network_changed(struct station *station, void *user_data) IWD_NETWORK_INTERFACE, "KnownNetwork"); } -struct network_info *network_info_add_known(const char *ssid, - enum security security) +static void match_known_network(struct station *station, void *user_data) { - struct network_info *network; + struct network_info *info = user_data; + struct network *network = station_network_find(station, + info->ssid, info->type); - network = l_new(struct network_info, 1); - strcpy(network->ssid, ssid); - network->type = security; + if (!network) + return; - station_foreach(emit_known_network_changed, network); - - return network; + network->info = info; + l_dbus_property_changed(dbus_get_bus(), network_get_path(network), + IWD_NETWORK_INTERFACE, "KnownNetwork"); } static void disconnect_no_longer_known(struct station *station, void *user_data) @@ -1375,10 +1375,11 @@ static void known_networks_changed(enum known_networks_event event, { switch (event) { case KNOWN_NETWORKS_EVENT_ADDED: + station_foreach(match_known_network, (void *) info); break; case KNOWN_NETWORKS_EVENT_REMOVED: - station_foreach(emit_known_network_changed, (void *) info); station_foreach(disconnect_no_longer_known, (void *) info); + station_foreach(emit_known_network_changed, (void *) info); break; } } diff --git a/src/network.h b/src/network.h index 9a8d2582..64f523b2 100644 --- a/src/network.h +++ b/src/network.h @@ -85,6 +85,3 @@ struct network_info { bool is_hidden:1; bool is_autoconnectable:1; }; - -struct network_info *network_info_add_known(const char *ssid, - enum security security);