Files
FojadrachiandClaude Sonnet 5 0e6b580018 Einstellungen-Tab, plattformuebergreifendes Update/Branding, CI-Release-Pipeline
- Settings-Tab in der App (Discord/Update/Start-Tab live editierbar, kein config.json-Handbearbeiten noetig)
- updater.py: plattformabhaengige Asset-Auswahl + Installation (Windows .zip/robocopy, Linux .tar.gz/Shell-Skript)
- browser.py/chrome_shim.py: Sec-CH-UA + navigator.userAgentData jetzt je nach sys.platform (Windows/Linux/macOS)
- app_id.py: robustere Suche nach umbenanntem QtWebEngine-Hilfsprozess (rglob statt fixer Pfade)
- packaging/playtube.spec: icon/version nur unter Windows setzen (Linux-Build faehig)
- packaging/install-linux.sh: Installationsskript fuer native Linux-Version (Desktop-Eintrag, Icon, PATH)
- .github/workflows/release.yml: baut bei Tag-Push automatisch Windows-.exe UND Linux-Binary und veroeffentlicht beide als GitHub Release

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-11 19:34:45 +02:00

57 lines
2.1 KiB
Python

"""Branding-Helfer: eigener Prozessname/Icon im Taskmanager, in der Taskleiste und
(so weit von Windows respektiert) im Lautstaerkemixer.
Wichtig: Diese Funktionen muessen VOR dem Import von QtWebEngineWidgets/QtWebEngineCore
aufgerufen werden, weil QtWebEngine seinen Sub-Prozess (QtWebEngineProcess.exe) beim
Import-Zeitpunkt vorbereitet.
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
from .config import APP_AUMID
def set_app_user_model_id() -> None:
"""Setzt die Windows AppUserModelID fuer diesen Prozess.
Das sorgt dafuer, dass Windows die App in Taskleiste/Alt-Tab/Benachrichtigungen
als eigenstaendige Anwendung fuehrt (eigenes Icon, eigene Gruppierung) statt als
generisches "Python".
"""
if sys.platform != "win32":
return
try:
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(APP_AUMID)
except Exception:
# Auf aelteren Windows-Versionen oder ohne shell32 einfach ignorieren.
pass
def configure_webengine_process_path() -> None:
"""Wenn ein umbenannter QtWebEngineProcess (siehe packaging/build.ps1) neben der
.exe liegt, wird QtWebEngine angewiesen diesen zu benutzen statt des Standard-
"QtWebEngineProcess.exe". Dadurch zeigt auch der Sub-Prozess, der tatsaechlich den
Ton wiedergibt, im Taskmanager/Lautstaerkemixer den Playtube-Namen statt
"QtWebEngineProcess".
Nur relevant fuer gepackte (PyInstaller-)Builds. Im Entwicklungsmodus (python
main.py) wird der Standardprozess von PySide6 benutzt - das ist voellig normal
und hat keinen Einfluss auf die Funktion der App.
"""
if sys.platform != "win32" or not getattr(sys, "frozen", False):
return
exe_dir = Path(sys.executable).resolve().parent
# PyInstaller legt PySide6 je nach Version unterschiedlich tief in _internal ab
# (z.B. _internal\PySide6\), daher rekursiv suchen statt feste Pfade anzunehmen.
try:
candidate = next(exe_dir.rglob("PlaytubeHelper.exe"))
except StopIteration:
return
os.environ["QTWEBENGINEPROCESS_PATH"] = str(candidate)