47 lines
2.0 KiB
Python
47 lines
2.0 KiB
Python
# ──────────────────────────────────────────────────────────────────────────────
|
||
# update_checker.py (fold this into main.py or import it)
|
||
# ──────────────────────────────────────────────────────────────────────────────
|
||
|
||
import requests
|
||
import webbrowser
|
||
from tkinter import messagebox
|
||
|
||
# Fill in your GitHub “owner/repo” here:
|
||
GITHUB_REPO = "YourUsername/YourRepo"
|
||
|
||
|
||
def check_for_updates(local_version: str, repo: str) -> None:
|
||
"""
|
||
1. Hits GitHub’s API: /repos/{repo}/releases/latest
|
||
2. Reads the "tag_name" of the latest release (e.g. "v1.2.60" or "1.2.60").
|
||
3. Strips any leading "v" and compares semver (major, minor, patch) tuples.
|
||
4. If GitHub’s version > local_version, prompts user to open the Releases page.
|
||
"""
|
||
api_url = f"https://api.github.com/repos/{repo}/releases/latest"
|
||
try:
|
||
resp = requests.get(api_url, timeout=5)
|
||
resp.raise_for_status()
|
||
data = resp.json()
|
||
tag = data.get("tag_name", "").lstrip("v")
|
||
except Exception:
|
||
return # silently do nothing on network or JSON errors
|
||
|
||
def to_tuple(v: str):
|
||
parts = [int(x) for x in v.split(".") if x.isdigit()]
|
||
return tuple(parts)
|
||
|
||
try:
|
||
if to_tuple(tag) > to_tuple(local_version):
|
||
answer = messagebox.askyesno(
|
||
"Update Available",
|
||
f"A newer release ({tag}) is available on GitHub.\n"
|
||
f"You’re currently on {local_version}.\n\n"
|
||
"Would you like to open the Releases page?"
|
||
)
|
||
if answer:
|
||
webbrowser.open(
|
||
data.get("html_url", f"https://github.com/{repo}/releases/latest")
|
||
)
|
||
except Exception:
|
||
pass
|