diff --git a/src/knownnetworks.c b/src/knownnetworks.c index 407c77f5..88862ad8 100644 --- a/src/knownnetworks.c +++ b/src/knownnetworks.c @@ -247,12 +247,7 @@ static void known_network_update(struct network_info *orig_network, if (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); + known_networks_add(network); } bool known_networks_foreach(known_networks_foreach_func_t function, @@ -504,7 +499,7 @@ static void setup_known_network_interface(struct l_dbus_interface *interface) NULL); } -static void known_network_removed(struct network_info *network) +void known_networks_remove(struct network_info *network) { if (network->is_hidden) num_known_hidden_networks--; @@ -517,9 +512,21 @@ static void known_network_removed(struct network_info *network) known_networks_watch_func_t, KNOWN_NETWORKS_EVENT_REMOVED, network); + network->ops->remove(network); + network_info_free(network); } +void known_networks_add(struct network_info *network) +{ + 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); +} + static void known_networks_watch_cb(const char *filename, enum l_dir_watch_event event, void *user_data) @@ -566,7 +573,7 @@ static void known_networks_watch_cb(const char *filename, settings, &connected_time); else { if (network_before) - known_network_removed(network_before); + known_networks_remove(network_before); } l_settings_free(settings); diff --git a/src/knownnetworks.h b/src/knownnetworks.h index 33bd3eb1..de42b803 100644 --- a/src/knownnetworks.h +++ b/src/knownnetworks.h @@ -81,3 +81,6 @@ void known_networks_watch_remove(uint32_t id); struct l_settings *network_info_open_settings(struct network_info *info); int network_info_touch(struct network_info *info); const char *network_info_get_path(const struct network_info *info); + +void known_networks_add(struct network_info *info); +void known_networks_remove(struct network_info *info);