Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core: have webhost slot name links go through the launcher #2779

Merged
merged 19 commits into from
Sep 7, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
96f7fb5
Core: have webhost slot name links go through the launcher so that co…
alwaysintreble Jan 29, 2024
60c6ccd
fix query handling, remove debug prints, and change mousover text for…
alwaysintreble Jan 30, 2024
274dcb0
remove a missed debug and unused function
alwaysintreble Jan 30, 2024
b52369b
filter room id to suuid since that's what everything else uses
alwaysintreble Jan 30, 2024
5dee40a
Merge remote-tracking branch 'Main/main' into webhost_launch_clients
alwaysintreble Feb 11, 2024
4ed4983
pass args to common client correctly
alwaysintreble Feb 11, 2024
b98403d
Merge branch 'main' into webhost_launch_clients
alwaysintreble May 4, 2024
fd17933
Merge remote-tracking branch 'refs/remotes/Main/main' into webhost_la…
alwaysintreble Jun 5, 2024
37bf94c
add GUI to select which client to open
alwaysintreble Jun 5, 2024
5470818
Merge branch 'refs/heads/main' into webhost_launch_clients
alwaysintreble Jul 25, 2024
047febe
remove args parsing and "require" components to parse it themselves
alwaysintreble Jul 25, 2024
aea33ae
support for messenger since it was basically already done
alwaysintreble Jul 25, 2024
910964d
use "proper" args argparsing and clean up uri handling
alwaysintreble Jul 29, 2024
1a83b19
Merge branch 'main' into webhost_launch_clients
NewSoupVi Sep 6, 2024
7d70f8f
Merge branch 'refs/heads/main' into webhost_launch_clients
alwaysintreble Sep 6, 2024
c41cf3d
use a timer and auto launch text client if no component is found
alwaysintreble Sep 6, 2024
32fd9db
Merge remote-tracking branch 'TrebleAP/webhost_launch_clients' into w…
alwaysintreble Sep 6, 2024
9408aca
change the timer to be a bit more appealing. also found a bug lmao
alwaysintreble Sep 7, 2024
e0a4a54
don't hold 5 hostage and capitalize URI ig
alwaysintreble Sep 7, 2024
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 CommonClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -885,7 +885,7 @@ def get_base_parser(description: typing.Optional[str] = None):
return parser


def run_as_textclient():
def run_as_textclient(*args):
class TextContext(CommonContext):
# Text Mode to use !hint and such with games that have no text entry
tags = CommonContext.tags | {"TextOnly"}
Expand Down
23 changes: 19 additions & 4 deletions Launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@
import shlex
import subprocess
import sys
import urllib.parse
import webbrowser
from os.path import isfile
from shutil import which
from typing import Sequence, Union, Optional
from typing import Sequence, Tuple, Union, Optional

import Utils
import settings
Expand Down Expand Up @@ -107,9 +108,23 @@ def update_settings():
])


def identify(path: Union[None, str]):
def identify(path: Union[None, str]) -> Tuple[Union[None, str], Union[None, Component]]:
if path is None:
return None, None
if path.startswith("archipelago://"):
url = urllib.parse.urlparse(path)
queries = urllib.parse.parse_qs(url.query)
if "game" in queries:
game = queries["game"][0]
else: # TODO around 0.5.0 - this is for pre this change webhost uri's
game = "Archipelago"
for component in components:
if component.supports_uri and component.game_name == game:
return path, component
elif component.display_name == "Text Client":
# fallback
text_client_component = component
return path, text_client_component
for component in components:
if component.handles_file(path):
return path, component
Expand Down Expand Up @@ -270,9 +285,9 @@ def main(args: Optional[Union[argparse.Namespace, dict]] = None):

if args["update_settings"]:
update_settings()
if 'file' in args:
if "file" in args:
run_component(args["component"], args["file"], *args["args"])
elif 'component' in args:
elif "component" in args:
run_component(args["component"], *args["args"])
elif not args["update_settings"]:
run_gui()
Expand Down
2 changes: 1 addition & 1 deletion WebHostLib/templates/macros.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
{% for patch in room.seed.slots|list|sort(attribute="player_id") %}
<tr>
<td>{{ patch.player_id }}</td>
<td data-tooltip="Connect via TextClient"><a href="archipelago://{{ patch.player_name | e}}:@{{ config['HOST_ADDRESS'] }}:{{ room.last_port }}">{{ patch.player_name }}</a></td>
<td data-tooltip="Connect via Game Client"><a href="archipelago://{{ patch.player_name | e}}:@{{ config['HOST_ADDRESS'] }}:{{ room.last_port }}?game={{ patch.game }}&room={{ room.id | suuid }}">{{ patch.player_name }}</a></td>
<td>{{ patch.game }}</td>
<td>
{% if patch.data %}
Expand Down
4 changes: 2 additions & 2 deletions inno_setup.iss
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ Root: HKCR; Subkey: "{#MyAppName}multidata\shell\open\command"; ValueData: """{

Root: HKCR; Subkey: "archipelago"; ValueType: "string"; ValueData: "Archipegalo Protocol"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "archipelago"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: "";
Root: HKCR; Subkey: "archipelago\DefaultIcon"; ValueType: "string"; ValueData: "{app}\ArchipelagoTextClient.exe,0";
Root: HKCR; Subkey: "archipelago\shell\open\command"; ValueType: "string"; ValueData: """{app}\ArchipelagoTextClient.exe"" ""%1""";
Root: HKCR; Subkey: "archipelago\DefaultIcon"; ValueType: "string"; ValueData: "{app}\ArchipelagoLauncher.exe,0";
Root: HKCR; Subkey: "archipelago\shell\open\command"; ValueType: "string"; ValueData: """{app}\ArchipelagoLauncher.exe"" ""%1""";

[Code]
// See: https://stackoverflow.com/a/51614652/2287576
Expand Down
11 changes: 8 additions & 3 deletions worlds/LauncherComponents.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,13 @@ class Component:
cli: bool
func: Optional[Callable]
file_identifier: Optional[Callable[[str], bool]]
game_name: Optional[str]
supports_uri: Optional[bool]

def __init__(self, display_name: str, script_name: Optional[str] = None, frozen_name: Optional[str] = None,
cli: bool = False, icon: str = 'icon', component_type: Optional[Type] = None,
func: Optional[Callable] = None, file_identifier: Optional[Callable[[str], bool]] = None):
func: Optional[Callable] = None, file_identifier: Optional[Callable[[str], bool]] = None,
game_name: Optional[str] = None, supports_uri: Optional[bool] = False):
self.display_name = display_name
self.script_name = script_name
self.frozen_name = frozen_name or f'Archipelago{script_name}' if script_name else None
Expand All @@ -42,6 +45,8 @@ def __init__(self, display_name: str, script_name: Optional[str] = None, frozen_
Type.ADJUSTER if "Adjuster" in display_name else Type.MISC)
self.func = func
self.file_identifier = file_identifier
self.game_name = game_name
self.supports_uri = supports_uri

def handles_file(self, path: str):
return self.file_identifier(path) if self.file_identifier else False
Expand Down Expand Up @@ -72,9 +77,9 @@ def __call__(self, path: str):
return False


def launch_textclient():
def launch_textclient(*args):
import CommonClient
launch_subprocess(CommonClient.run_as_textclient, name="TextClient")
launch_subprocess(CommonClient.run_as_textclient(*args), name="TextClient")
alwaysintreble marked this conversation as resolved.
Show resolved Hide resolved


components: List[Component] = [
Expand Down
Loading