Watch Together Plugin + Electron Desktop App mit Ad-Blocker

Neuer Tab: Watch Together - gemeinsam Videos schauen (w2g.tv-Style)
- Raum-System mit optionalem Passwort und Host-Kontrolle
- Video-Queue mit Hinzufuegen/Entfernen/Umordnen
- YouTube (IFrame API) + direkte Video-URLs (.mp4, .webm)
- Synchronisierte Wiedergabe via WebSocket (/ws/watch-together)
- Server-autoritative Playback-State mit Drift-Korrektur (2.5s Sync-Pulse)
- Host-Transfer bei Disconnect, Room-Cleanup nach 30s

Electron Desktop App (electron/):
- Wrapper fuer Gaming Hub mit integriertem Ad-Blocker
- uBlock-Style Request-Filtering via session.webRequest
- 100+ Ad-Domains + YouTube-spezifische Filter
- Download-Button im Web-Header (nur sichtbar wenn nicht in Electron)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Daniel 2026-03-07 02:40:59 +01:00
parent 4943bbf4a1
commit 73f247ada3
16 changed files with 7386 additions and 4833 deletions

View file

@ -3,6 +3,7 @@ import RadioTab from './plugins/radio/RadioTab';
import SoundboardTab from './plugins/soundboard/SoundboardTab';
import LolstatsTab from './plugins/lolstats/LolstatsTab';
import StreamingTab from './plugins/streaming/StreamingTab';
import WatchTogetherTab from './plugins/watch-together/WatchTogetherTab';
interface PluginInfo {
name: string;
@ -16,6 +17,7 @@ const tabComponents: Record<string, React.FC<{ data: any }>> = {
soundboard: SoundboardTab,
lolstats: LolstatsTab,
streaming: StreamingTab,
'watch-together': WatchTogetherTab,
};
export function registerTab(pluginName: string, component: React.FC<{ data: any }>) {
@ -101,6 +103,7 @@ export default function App() {
games: '\u{1F3B2}',
gamevote: '\u{1F3AE}',
streaming: '\u{1F4FA}',
'watch-together': '\u{1F3AC}',
};
return (
@ -127,6 +130,15 @@ export default function App() {
</nav>
<div className="hub-header-right">
{!(window as any).electronAPI && (
<a
className="hub-download-btn"
href="/downloads/GamingHub-Setup.exe"
title="Desktop App herunterladen"
>
{'\u2B07\uFE0F'}
</a>
)}
<span className="hub-version">v{version}</span>
</div>
</header>