Skip to content
This repository was archived by the owner on Nov 5, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion protonvpn_cli/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"""
Expand Down
88 changes: 51 additions & 37 deletions protonvpn_cli/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down Expand Up @@ -70,58 +70,72 @@ 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 = []
for server in countries[country]:
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):
Expand Down