feat: unabhaengig von GitHub - Updater und Releases ueber eigenes Gitea

Update-Quelle ist jetzt der eigene Gitea-Server, Release-Pipeline unter
.gitea/workflows, Veroeffentlichen per packaging/publish_release.ps1.
This commit is contained in:
2026-09-26 21:28:21 +02:00
parent 6a682fc49c
commit fff1ecb5ec
9 changed files with 232 additions and 177 deletions
+1 -1
View File
@@ -392,7 +392,7 @@ class MainWindow(QMainWindow):
def _on_update_check_failed(self) -> None:
self._settings_tab.set_check_done()
self._settings_tab.set_update_status(
"Update-Prüfung fehlgeschlagen (keine Internetverbindung oder GitHub nicht erreichbar)."
"Update-Prüfung fehlgeschlagen (keine Internetverbindung oder Update-Server nicht erreichbar)."
)
def _on_update_available(self, version: str, notes: str, download_url: str) -> None:
+2 -2
View File
@@ -26,7 +26,7 @@ from PySide6.QtWidgets import (
from . import __version__ as APP_VERSION
from .audio_routing import SYSTEM_DEFAULT_LABEL, list_output_devices
from .config import APP_NAME, save_config
from .updater import GITHUB_REPO
from .updater import REPO_URL
# Helle Schrift fuer Versionsnummer, Update-Status und GitHub-Link. palette(text) ist die
# Standard-Textfarbe (im dunklen Design weiss, im hellen dunkel) - das fruehere
@@ -180,7 +180,7 @@ class SettingsTab(QWidget):
button_row.addStretch(1)
outer.addLayout(button_row)
info = QLabel(f"github.com/{GITHUB_REPO}")
info = QLabel(REPO_URL.removeprefix("https://"))
info.setStyleSheet(_LIGHT_TEXT_STYLE)
outer.addWidget(info)
+21 -8
View File
@@ -1,7 +1,7 @@
"""Auto-Update ueber GitHub Releases (https://github.com/fojadrachi/Playtube).
"""Auto-Update ueber die Releases des eigenen Gitea-Servers (siehe UPDATE_SERVER).
Ablauf:
1. UpdateChecker prueft im Hintergrund die GitHub-Releases-API auf eine neuere
1. UpdateChecker prueft im Hintergrund die Gitea-Releases-API auf eine neuere
Version als die aktuell laufende (playtube.__version__).
2. Bei Fund fragt die UI (siehe mainwindow.py) nach Bestaetigung.
3. UpdateInstaller installiert das Update:
@@ -53,9 +53,15 @@ from PySide6.QtCore import QThread, Signal
from . import __version__ as CURRENT_VERSION
GITHUB_REPO = "fojadrachi/Playtube"
_API_URL = f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
# Eigener Gitea-Server (kein GitHub). Die Releases dort (Setup, Patch, ZIP) werden von der
# Pipeline .gitea/workflows/release.yml bzw. packaging/publish_release.ps1 veroeffentlicht.
UPDATE_SERVER = "https://git.fojadrachi.de"
REPO_SLUG = "Fojadrachi/Playtube"
REPO_URL = f"{UPDATE_SERVER}/{REPO_SLUG}"
_API_URL = f"{UPDATE_SERVER}/api/v1/repos/{REPO_SLUG}/releases?limit=30"
_USER_AGENT = "Playtube-Updater"
# Releases der Edge-Variante (Tag "...-edge") gehoeren nicht zur normalen Playtube.
_EDGE_TAG_SUFFIX = "-edge"
_LINUX_BINARY_NAME = "Playtube"
_WINDOWS_BINARY_NAME = "Playtube.exe"
@@ -100,14 +106,21 @@ def cleanup_old_staging() -> None:
def fetch_latest_release() -> dict[str, Any] | None:
req = urllib.request.Request(
_API_URL, headers={"User-Agent": _USER_AGENT, "Accept": "application/vnd.github+json"}
)
req = urllib.request.Request(_API_URL, headers={"User-Agent": _USER_AGENT, "Accept": "application/json"})
try:
with urllib.request.urlopen(req, timeout=10) as resp:
return json.loads(resp.read().decode("utf-8"))
releases = json.loads(resp.read().decode("utf-8"))
except (urllib.error.URLError, TimeoutError, json.JSONDecodeError, OSError, ValueError):
return None
if not isinstance(releases, list):
return None
# Neueste stabile Version: keine Entwuerfe/Vorabversionen und nie ein Edge-Release.
stable = [
release for release in releases
if isinstance(release, dict) and not release.get("draft") and not release.get("prerelease")
and not str(release.get("tag_name", "")).endswith(_EDGE_TAG_SUFFIX)
]
return max(stable, key=lambda r: _parse_version(str(r.get("tag_name", ""))), default=None)
def is_installed_via_setup() -> bool: