mirror of
https://github.com/Such-Software/adaptive-multi-protocol-browser.git
synced 2026-10-17 22:41:25 +02:00
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from .routing import Route, route_url
|
|
from .transports import TransportStatus, inspect_transport
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class BrowsePlan:
|
|
route: Route
|
|
status: TransportStatus | None
|
|
action: str
|
|
requires_consent: bool = False
|
|
prompt: str = ""
|
|
|
|
|
|
def plan_url(raw_url: str) -> BrowsePlan:
|
|
route = route_url(raw_url)
|
|
status = inspect_transport(route.transport)
|
|
if route.transport in {"clearnet", "unknown"}:
|
|
return BrowsePlan(route=route, status=status, action="open with clearnet profile")
|
|
if status and status.adoptable:
|
|
return BrowsePlan(route=route, status=status, action="adopt existing transport")
|
|
if status and status.manage_supported:
|
|
action = "prompt to start managed transport"
|
|
prompt = (
|
|
f"{route.transport} is not running. AMPB can start a managed {route.transport} "
|
|
f"transport for {route.normalized}."
|
|
)
|
|
if not status.installed:
|
|
action = "prompt to install and start managed transport"
|
|
prompt = (
|
|
f"{route.transport} is not installed or running. AMPB can install and start "
|
|
f"a managed {route.transport} transport for {route.normalized}."
|
|
)
|
|
return BrowsePlan(
|
|
route=route,
|
|
status=status,
|
|
action=action,
|
|
requires_consent=True,
|
|
prompt=prompt,
|
|
)
|
|
return BrowsePlan(route=route, status=status, action="blocked until adapter is configured")
|