From efd22c24e87a55d3193d13afd019889e6b39c376 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 12 Jul 2016 10:14:53 +0200 Subject: [PATCH] cli/device: add completion to wifi rescan subcommand --- clients/cli/devices.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/clients/cli/devices.c b/clients/cli/devices.c index 84f84e365..6f9992fad 100644 --- a/clients/cli/devices.c +++ b/clients/cli/devices.c @@ -3513,42 +3513,46 @@ do_device_wifi_rescan (NmCli *nmc, int argc, char **argv) const char *ssid; int i; - /* Not (yet?) supported */ - if (nmc->complete) - return nmc->return_value; - ssids = g_ptr_array_new (); + devices = nmc_get_devices_sorted (nmc->client); /* Get the parameters */ while (argc > 0) { + if (argc == 1 && nmc->complete) + nmc_complete_strings (*argv, "ifname", "ssid", NULL); + if (strcmp (*argv, "ifname") == 0) { if (ifname) { g_string_printf (nmc->return_text, _("Error: '%s' cannot repeat."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; - goto error; + goto finish; } if (next_arg (&argc, &argv) != 0) { g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; - goto error; + goto finish; } ifname = *argv; + if (argc == 1 && nmc->complete) + complete_device (devices, ifname, TRUE); } else if (strcmp (*argv, "ssid") == 0) { if (next_arg (&argc, &argv) != 0) { g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1)); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; - goto error; + goto finish; } g_ptr_array_add (ssids, *argv); - } else + } else if (!nmc->complete) g_printerr (_("Unknown parameter: %s\n"), *argv); argc--; argv++; } + if (nmc->complete) + goto finish; + /* Find Wi-Fi device to scan on. When no ifname is provided, the first Wi-Fi is used. */ - devices = nmc_get_devices_sorted (nmc->client); device = find_wifi_device_by_iface (devices, ifname, NULL); if (!device) { @@ -3557,7 +3561,7 @@ do_device_wifi_rescan (NmCli *nmc, int argc, char **argv) else g_string_printf (nmc->return_text, _("Error: No Wi-Fi device found.")); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; - goto error; + goto finish; } @@ -3580,10 +3584,8 @@ do_device_wifi_rescan (NmCli *nmc, int argc, char **argv) nm_device_wifi_request_scan_async (NM_DEVICE_WIFI (device), NULL, request_rescan_cb, nmc); - g_ptr_array_free (ssids, FALSE); - return nmc->return_value; -error: nmc->should_wait++; +finish: g_ptr_array_free (ssids, FALSE); return nmc->return_value; }