Skip to content
Open
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
31 changes: 20 additions & 11 deletions tools/ttsdk_downloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,25 +42,34 @@ def get_url_suffix_from_platform() -> str:


def get_latest_version(page: bs4.BeautifulSoup) -> str:
# Version links on the page are bare numeric directories, e.g. "5.18/"
version_pattern = re.compile(r"^\d+(?:\.\d+)*$")
versions = {}
# Version directories are labelled e.g. "v5.18/", "v5.21.2/", "v5.22a/"
version_pattern = re.compile(r"^v\d+(?:\.\d+)*[a-z]*$")

def version_key(v: str) -> tuple:
# Strip leading 'v', split on '.', parse each part as (int, alpha_suffix)
return tuple(
(int(m.group(1)), m.group(2))
for part in v[1:].split(".")
for m in [re.match(r"^(\d+)([a-z]*)$", part)]
if m
)

# Check every path segment of every link so this works for both Apache
# directory listings ("v5.22a/") and download pages that link directly
# to files ("/teamtalksdk/v5.22a/tt5sdk_v5.22a_win64.7z").
versions = set()
for link in page.find_all("a", href=True):
href = link.get("href", "").strip("/")
if not href:
continue
candidate = href.split("/")[-1]
if version_pattern.fullmatch(candidate):
versions[candidate] = tuple(int(part) for part in candidate.split("."))
for segment in link.get("href", "").split("/"):
if version_pattern.fullmatch(segment):
versions.add(segment)
if not versions:
sys.exit("Unable to find TeamTalk SDK versions on the download page")
return max(versions, key=lambda version: versions[version])
return max(versions, key=version_key)


def download() -> None:
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
r = requests.get(url, headers=headers)
r.raise_for_status()
page = bs4.BeautifulSoup(r.text, features="html.parser")
version = get_latest_version(page)
download_url = (
Expand Down