From 35d9f12e0a32ef45e4a7e7af4aa9de27bca854ee Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sat, 4 Jun 2022 22:15:05 -0700 Subject: [PATCH] refactor proxy destinations menu generation --- src/ServerState.cc | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/ServerState.cc b/src/ServerState.cc index a6b6a263..954f0ac4 100644 --- a/src/ServerState.cc +++ b/src/ServerState.cc @@ -266,30 +266,36 @@ void ServerState::create_menus(shared_ptr config_json) { this->information_menu_gc = information_menu_gc; this->information_contents = information_contents; - this->proxy_destinations_menu_pc.emplace_back(ProxyDestinationsMenuItemID::GO_BACK, - u"Go back", u"Return to the\nmain menu", 0); - this->proxy_destinations_menu_gc.emplace_back(ProxyDestinationsMenuItemID::GO_BACK, - u"Go back", u"Return to the\nmain menu", 0); - { + auto generate_proxy_destinations_menu = +[]( + vector& ret_menu, + vector>& ret_pds, + const unordered_map>& d) { + ret_menu.clear(); + ret_pds.clear(); + + ret_menu.emplace_back(ProxyDestinationsMenuItemID::GO_BACK, u"Go back", + u"Return to the\nmain menu", 0); + uint32_t item_id = 0; - for (const auto& item : d.at("ProxyDestinations-GC")->as_dict()) { + for (const auto& item : d) { const string& netloc_str = item.second->as_string(); - this->proxy_destinations_menu_gc.emplace_back(item_id, decode_sjis(item.first), - decode_sjis(netloc_str), 0); - this->proxy_destinations_gc.emplace_back(parse_netloc(netloc_str)); + const string& description = "$C7Remote server:\n$C6" + netloc_str; + ret_menu.emplace_back(item_id, decode_sjis(item.first), + decode_sjis(description), 0); + ret_pds.emplace_back(parse_netloc(netloc_str)); item_id++; } - } - { - uint32_t item_id = 0; - for (const auto& item : d.at("ProxyDestinations-PC")->as_dict()) { - const string& netloc_str = item.second->as_string(); - this->proxy_destinations_menu_pc.emplace_back(item_id, decode_sjis(item.first), - decode_sjis(netloc_str), 0); - this->proxy_destinations_pc.emplace_back(parse_netloc(netloc_str)); - item_id++; - } - } + }; + + generate_proxy_destinations_menu( + this->proxy_destinations_menu_pc, + this->proxy_destinations_pc, + d.at("ProxyDestinations-PC")->as_dict()); + generate_proxy_destinations_menu( + this->proxy_destinations_menu_gc, + this->proxy_destinations_gc, + d.at("ProxyDestinations-GC")->as_dict()); + try { const string& netloc_str = d.at("ProxyDestination-Patch")->as_string(); this->proxy_destination_patch = parse_netloc(netloc_str);