mirror of
https://github.com/Andre-Bzk/twitch4steamdeck.git
synced 2026-11-15 15:43:08 +01:00
- Remove mpvController.ts and hlsTrimmer.ts entirely - Rewrite PlaybackService: streamlink --stream-url → HLS-URL → IPC event playback:hls-url - Add VideoPlayer.tsx (hls.js <video> wrapper, forwardRef with seek/seekTo/pause/play/stop/getCurrentTime) - Integrate VideoPlayer into ChannelScreen with direct videoRef calls (no IPC roundtrip for seek/pause) - Add global AppShell playback overlay for direct stream start (A-button in Browse/Category/StreamList) - Propagate onStartLive callback through BrowseScreen, CategoryScreen, StreamListScreen - Add CORS bypass for Twitch CDN (webRequest.onBeforeSendHeaders) and autoplay-policy switch - Update CSP: add media-src 'self' blob: for hls.js MediaSource API - Open chapter panel without stopping playback (pause + resume instead of stop/restart) - Drop IPC channels: seek, seekTo, resume, togglePause, getCurrentPosition, onTimeUpdate - Add IPC channel: playback:hls-url event with HlsUrlPayload
217 lines
12 KiB
Bash
217 lines
12 KiB
Bash
#!/bin/bash
|
|
# build-flatpak.sh — Kompletter Build-Ablauf für das Twitch4SteamDeck Flatpak.
|
|
# Ausführen in WSL2 Ubuntu: bash flatpak/build-flatpak.sh
|
|
set -e
|
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 0: Projektdateien vom Windows-Dateisystem in WSL2 synchronisieren
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
WIN_PROJECT="/mnt/c/Projekte/twitch4steamdeck"
|
|
WSL_PROJECT="$HOME/twitch4steamdeck"
|
|
|
|
echo "=== Synchronisiere $WIN_PROJECT → $WSL_PROJECT ==="
|
|
rsync -a --delete \
|
|
--exclude=node_modules/ \
|
|
--exclude=out/ \
|
|
--exclude=dist/ \
|
|
--exclude=build-dir/ \
|
|
--exclude='*.flatpak' \
|
|
"$WIN_PROJECT/" "$WSL_PROJECT/"
|
|
echo " ✓ Sync abgeschlossen"
|
|
|
|
cd "$WSL_PROJECT"
|
|
echo "=== Arbeitsverzeichnis: $WSL_PROJECT ==="
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# WSL2-Dateisystem-Check: flatpak-builder kann nicht über /mnt/ (Windows 9P) bauen
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
if [[ "$WSL_PROJECT" == /mnt/* ]]; then
|
|
echo ""
|
|
echo "FEHLER: WSL_PROJECT zeigt auf das Windows-Dateisystem ($WSL_PROJECT)."
|
|
echo " flatpak-builder benötigt FUSE, das auf /mnt/ nicht funktioniert."
|
|
exit 1
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 1: Flatpak-Abhängigkeiten prüfen
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "=== [1/6] Prüfe Flatpak-Voraussetzungen ==="
|
|
for cmd in flatpak flatpak-builder node npm python3 rsvg-convert; do
|
|
if ! command -v "$cmd" &>/dev/null; then
|
|
echo "FEHLER: '$cmd' nicht gefunden."
|
|
case "$cmd" in
|
|
flatpak|flatpak-builder) echo " → sudo apt install flatpak flatpak-builder" ;;
|
|
node|npm) echo " → curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install nodejs" ;;
|
|
rsvg-convert) echo " → sudo apt install librsvg2-bin" ;;
|
|
esac
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 2: libplacebo-Tarball erzeugen (enthält glad2-Submodul, GitHub-Tarball reicht nicht)
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
LIBPLACEBO_VERSION="6.338.2"
|
|
LIBPLACEBO_TARBALL="flatpak/libplacebo-${LIBPLACEBO_VERSION}-full.tar.gz"
|
|
LIBPLACEBO_SHA="7f5da41b872302208f0e10c22d3e108ab9fdb1f253eb47c18651698c65d6b426"
|
|
|
|
echo ""
|
|
echo "=== [2/7] libplacebo-Tarball ==="
|
|
if [ -f "$LIBPLACEBO_TARBALL" ] && echo "$LIBPLACEBO_SHA $LIBPLACEBO_TARBALL" | sha256sum -c --quiet 2>/dev/null; then
|
|
echo " ✓ libplacebo-${LIBPLACEBO_VERSION}-full.tar.gz bereits vorhanden und korrekt"
|
|
else
|
|
echo " → Klone libplacebo v${LIBPLACEBO_VERSION} mit Submodulen ..."
|
|
TMPDIR_LP=$(mktemp -d)
|
|
git clone --recurse-submodules --depth 1 --branch "v${LIBPLACEBO_VERSION}" \
|
|
https://github.com/haasn/libplacebo.git "$TMPDIR_LP/libplacebo"
|
|
echo " → Erstelle Tarball ..."
|
|
tar czf "$LIBPLACEBO_TARBALL" -C "$TMPDIR_LP" libplacebo/
|
|
rm -rf "$TMPDIR_LP"
|
|
ACTUAL_SHA=$(sha256sum "$LIBPLACEBO_TARBALL" | awk '{print $1}')
|
|
if [ "$ACTUAL_SHA" != "$LIBPLACEBO_SHA" ]; then
|
|
echo " WARNUNG: SHA256 weicht ab!"
|
|
echo " Erwartet: $LIBPLACEBO_SHA"
|
|
echo " Erhalten: $ACTUAL_SHA"
|
|
echo " → Manifest muss aktualisiert werden. Aktualisiere jetzt ..."
|
|
sed -i "s|sha256: ${LIBPLACEBO_SHA}|sha256: ${ACTUAL_SHA}|" flatpak/tv.twitch4steamdeck.App.yml
|
|
echo " ✓ Manifest-SHA aktualisiert"
|
|
else
|
|
echo " ✓ SHA256 korrekt"
|
|
fi
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 3: Flatpak-Runtimes prüfen / installieren
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "=== [3/7] Prüfe Flatpak-Runtimes ==="
|
|
RUNTIMES=(
|
|
"org.freedesktop.Platform//24.08"
|
|
"org.freedesktop.Sdk//24.08"
|
|
"org.electronjs.Electron2.BaseApp//24.08"
|
|
)
|
|
for rt in "${RUNTIMES[@]}"; do
|
|
if ! flatpak info --user "$rt" &>/dev/null 2>&1 && \
|
|
! flatpak info --system "$rt" &>/dev/null 2>&1; then
|
|
echo "Installiere: $rt"
|
|
flatpak install --user --noninteractive flathub "$rt"
|
|
else
|
|
echo " ✓ $rt bereits vorhanden"
|
|
fi
|
|
done
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 3: .env prüfen
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "=== [4/7] Prüfe .env (Twitch Client-ID) ==="
|
|
if [ ! -f .env ]; then
|
|
echo "FEHLER: .env nicht gefunden."
|
|
echo " → Kopiere .env.example nach .env und trage MAIN_VITE_TWITCH_CLIENT_ID ein."
|
|
exit 1
|
|
fi
|
|
if ! grep -q "MAIN_VITE_TWITCH_CLIENT_ID=" .env; then
|
|
echo "FEHLER: MAIN_VITE_TWITCH_CLIENT_ID fehlt in .env"
|
|
exit 1
|
|
fi
|
|
echo " ✓ .env gefunden"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 4: npm install (Linux) + better-sqlite3 rebuild + Build
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "=== [5/7] npm install (Linux-Binaries) + Rebuild native Modules ==="
|
|
npm install
|
|
echo " → Rebuilde better-sqlite3 für Linux x64 ..."
|
|
npx @electron/rebuild --module-dir node_modules/better-sqlite3
|
|
echo " → Build (electron-vite) ..."
|
|
npm run build
|
|
|
|
# Verifikation: better_sqlite3.node muss ELF/Linux sein
|
|
NATIVE_NODE="node_modules/better-sqlite3/build/Release/better_sqlite3.node"
|
|
if [ -f "$NATIVE_NODE" ]; then
|
|
FILE_OUT=$(file "$NATIVE_NODE")
|
|
echo " native module: $FILE_OUT"
|
|
if echo "$FILE_OUT" | grep -q "ELF"; then
|
|
echo " ✓ Linux ELF — korrekt"
|
|
else
|
|
echo " WARNUNG: Datei ist kein Linux-ELF. Rebuild möglicherweise fehlgeschlagen."
|
|
fi
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 4b: Python-Deps für streamlink via flatpak-pip-generator
|
|
# Erzeugt flatpak/python3-streamlink.json mit allen pip-Deps + sha256-Hashes.
|
|
# Die Datei wird von tv.twitch4steamdeck.App.yml per !include eingebunden.
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "=== [5b] Python-Deps für streamlink generieren ==="
|
|
if ! python3 -c "import flatpak_pip_generator" &>/dev/null; then
|
|
echo " → Installiere flatpak-pip-generator ..."
|
|
# Ubuntu 24.04: externally-managed-environment → --break-system-packages nötig
|
|
pip3 install --quiet --break-system-packages flatpak-pip-generator
|
|
fi
|
|
python3 -m flatpak_pip_generator \
|
|
streamlink==6.11.0 \
|
|
--output flatpak/python3-streamlink
|
|
echo " ✓ flatpak/python3-streamlink.json generiert ($(wc -l < flatpak/python3-streamlink.json) Zeilen)"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 5: Manifest-SHA256-Werte füllen (interaktiv)
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "=== [6/7] SHA256-Prüfsummen für Manifest-Sources ==="
|
|
echo ""
|
|
|
|
MPV_URL="https://github.com/mpv-player/mpv/archive/refs/tags/v0.41.0.tar.gz"
|
|
SL_URL="https://github.com/streamlink/streamlink/archive/refs/tags/6.11.0.tar.gz"
|
|
MANIFEST="flatpak/tv.twitch4steamdeck.App.yml"
|
|
|
|
MPV_ARCHIVE="/tmp/mpv-0.41.0.tar.gz"
|
|
SL_ARCHIVE="/tmp/streamlink-6.11.0.tar.gz"
|
|
|
|
echo "Lade mpv 0.41.0 ..."
|
|
curl -L --progress-bar -o "$MPV_ARCHIVE" "$MPV_URL"
|
|
MPV_SHA=$(sha256sum "$MPV_ARCHIVE" | awk '{print $1}')
|
|
echo " mpv sha256: $MPV_SHA"
|
|
|
|
echo "Lade streamlink 6.11.0 ..."
|
|
curl -L --progress-bar -o "$SL_ARCHIVE" "$SL_URL"
|
|
SL_SHA=$(sha256sum "$SL_ARCHIVE" | awk '{print $1}')
|
|
echo " streamlink sha256: $SL_SHA"
|
|
|
|
# Platzhalter im Manifest ersetzen
|
|
sed -i "s/FILL_IN_sha256sum_of_mpv_0\.41\.0_tarball/$MPV_SHA/" "$MANIFEST"
|
|
sed -i "s/FILL_IN_sha256sum_of_streamlink_tarball/$SL_SHA/" "$MANIFEST"
|
|
echo " ✓ Manifest aktualisiert"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Schritt 6: flatpak-builder — Build + lokale Installation
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo "=== [7/7] flatpak-builder ==="
|
|
flatpak-builder \
|
|
--user \
|
|
--install \
|
|
--force-clean \
|
|
--disable-rofiles-fuse \
|
|
build-dir \
|
|
flatpak/tv.twitch4steamdeck.App.yml
|
|
|
|
echo ""
|
|
echo "======================================================"
|
|
echo " Build abgeschlossen!"
|
|
echo " Starten: flatpak run tv.twitch4steamdeck.App"
|
|
echo ""
|
|
echo " Für Steam Deck (Bundle erstellen):"
|
|
echo " flatpak build-bundle ~/.local/share/flatpak/repo \\"
|
|
echo " twitch4steamdeck.flatpak tv.twitch4steamdeck.App"
|
|
echo " # Dann twitch4steamdeck.flatpak per USB/SSH auf Deck kopieren"
|
|
echo " # Dort: flatpak install --user twitch4steamdeck.flatpak"
|
|
echo "======================================================"
|
|
echo "=== flatpak build-bundle ==="
|
|
flatpak build-bundle ~/.local/share/flatpak/repo twitch4steamdeck.flatpak tv.twitch4steamdeck.App
|
|
echo "=== Übertrage auf Steamdeck ==="
|
|
scp twitch4steamdeck.flatpak steamdeck:/home/deck/ |