diff --git a/protonvpn_cli/cli.py b/protonvpn_cli/cli.py index c2e37cd..eb71f11 100644 --- a/protonvpn_cli/cli.py +++ b/protonvpn_cli/cli.py @@ -145,7 +145,7 @@ def connect(self): elif args.tor: connection.feature_f(self.server_features_dict.get("tor", None), protocol) else: - connection.dialog() + connection.connection_dialog() def r(self): """Short CLI command to reconnect to the last connected VPN Server""" diff --git a/protonvpn_cli/connection.py b/protonvpn_cli/connection.py index 4f593d9..2413ea1 100644 --- a/protonvpn_cli/connection.py +++ b/protonvpn_cli/connection.py @@ -27,7 +27,7 @@ ) -def dialog(): +def connection_dialog(): """Connect to a server with a dialog menu.""" def show_dialog(headline, choices, stop=False): """Show the dialog and process response.""" @@ -70,7 +70,7 @@ def show_dialog(headline, choices, stop=False): countries[country].append(server["Name"]) # Fist dialog - choices = [] + country_choices = [] for country in sorted(countries.keys()): country_features = [] @@ -78,50 +78,64 @@ def show_dialog(headline, choices, stop=False): feat = int(get_server_value(server, "Features", servers)) if not features[feat] in country_features: country_features.append(features[feat]) - choices.append((country, " | ".join(sorted(country_features)))) - - country = show_dialog("Choose a country:", choices) - logger.debug("Country Choice: {0}".format(country)) - - # Second dialog - # lambda sorts servers by Load instead of name - choices = [] - country_servers = sorted(countries[country], - key=lambda s: get_server_value( - s, "Load", servers)) - - for servername in country_servers: + country_choices.append(( + country, + " | ".join(sorted(country_features)) + )) + + def countries_dialog(): + country = show_dialog("Choose a country:", country_choices) + logger.debug("Country Choice: {0}".format(country)) + return country + + def servers_dialog(country): + # lambda sorts servers by Load instead of name + choices = [] + country_servers = sorted(countries[country], + key=lambda s: get_server_value( + s, "Load", servers)) + + for servername in country_servers: + + load = str( + get_server_value(servername, "Load", servers) + ).rjust(3, " ") + + feature = features[ + get_server_value(servername, 'Features', servers) + ] - load = str( - get_server_value(servername, "Load", servers) - ).rjust(3, " ") + tier = server_tiers[ + get_server_value(servername, "Tier", servers) + ] - feature = features[ - get_server_value(servername, 'Features', servers) - ] + choices.append((servername, "Load: {0}% | {1} | {2}".format( + load, tier, feature + ))) - tier = server_tiers[ - get_server_value(servername, "Tier", servers) - ] + choices.append(("Back", "Back")) - choices.append((servername, "Load: {0}% | {1} | {2}".format( - load, tier, feature - ))) + server_result = show_dialog("Choose the server to connect:", choices) - server_result = show_dialog("Choose the server to connect:", choices) + if server_result == "Back": + country = countries_dialog() + servers_dialog(country) + else: + logger.debug("Server Choice: {0}".format(server_result)) - logger.debug("Server Choice: {0}".format(server_result)) + protocol_result = show_dialog( + "Choose a protocol:", [ + ("UDP", "Better Speed"), ("TCP", "Better Reliability") + ] + ) - protocol_result = show_dialog( - "Choose a protocol:", [ - ("UDP", "Better Speed"), ("TCP", "Better Reliability") - ] - ) + logger.debug("Protocol Choice: {0}".format(protocol_result)) - logger.debug("Protocol Choice: {0}".format(protocol_result)) + os.system("clear") + openvpn_connect(server_result, protocol_result) - os.system("clear") - openvpn_connect(server_result, protocol_result) + country = countries_dialog() + servers_dialog(country) def random_c(protocol=None):