CommonClient: abstract url handling so it's importable (#4068)
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Jouramie <16137441+Jouramie@users.noreply.github.com>
This commit is contained in:
parent
eb3c3d6bf2
commit
992841a951
|
@ -31,6 +31,7 @@ import ssl
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
if typing.TYPE_CHECKING:
|
||||||
import kvui
|
import kvui
|
||||||
|
import argparse
|
||||||
|
|
||||||
logger = logging.getLogger("Client")
|
logger = logging.getLogger("Client")
|
||||||
|
|
||||||
|
@ -1048,6 +1049,32 @@ def get_base_parser(description: typing.Optional[str] = None):
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
def handle_url_arg(args: "argparse.Namespace",
|
||||||
|
parser: "typing.Optional[argparse.ArgumentParser]" = None) -> "argparse.Namespace":
|
||||||
|
"""
|
||||||
|
Parse the url arg "archipelago://name:pass@host:port" from launcher into correct launch args for CommonClient
|
||||||
|
If alternate data is required the urlparse response is saved back to args.url if valid
|
||||||
|
"""
|
||||||
|
if not args.url:
|
||||||
|
return args
|
||||||
|
|
||||||
|
url = urllib.parse.urlparse(args.url)
|
||||||
|
if url.scheme != "archipelago":
|
||||||
|
if not parser:
|
||||||
|
parser = get_base_parser()
|
||||||
|
parser.error(f"bad url, found {args.url}, expected url in form of archipelago://archipelago.gg:38281")
|
||||||
|
return args
|
||||||
|
|
||||||
|
args.url = url
|
||||||
|
args.connect = url.netloc
|
||||||
|
if url.username:
|
||||||
|
args.name = urllib.parse.unquote(url.username)
|
||||||
|
if url.password:
|
||||||
|
args.password = urllib.parse.unquote(url.password)
|
||||||
|
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
def run_as_textclient(*args):
|
def run_as_textclient(*args):
|
||||||
class TextContext(CommonContext):
|
class TextContext(CommonContext):
|
||||||
# Text Mode to use !hint and such with games that have no text entry
|
# Text Mode to use !hint and such with games that have no text entry
|
||||||
|
@ -1089,17 +1116,7 @@ def run_as_textclient(*args):
|
||||||
parser.add_argument("url", nargs="?", help="Archipelago connection url")
|
parser.add_argument("url", nargs="?", help="Archipelago connection url")
|
||||||
args = parser.parse_args(args)
|
args = parser.parse_args(args)
|
||||||
|
|
||||||
# handle if text client is launched using the "archipelago://name:pass@host:port" url from webhost
|
args = handle_url_arg(args, parser=parser)
|
||||||
if args.url:
|
|
||||||
url = urllib.parse.urlparse(args.url)
|
|
||||||
if url.scheme == "archipelago":
|
|
||||||
args.connect = url.netloc
|
|
||||||
if url.username:
|
|
||||||
args.name = urllib.parse.unquote(url.username)
|
|
||||||
if url.password:
|
|
||||||
args.password = urllib.parse.unquote(url.password)
|
|
||||||
else:
|
|
||||||
parser.error(f"bad url, found {args.url}, expected url in form of archipelago://archipelago.gg:38281")
|
|
||||||
|
|
||||||
# use colorama to display colored text highlighting on windows
|
# use colorama to display colored text highlighting on windows
|
||||||
colorama.init()
|
colorama.init()
|
||||||
|
|
Loading…
Reference in New Issue