4.2 KiB
4.2 KiB
xStream Downloader – Projektstatus
Stand: 6.7.2026, 22:25
Ziel
Web-Wrapper für das xstream Kodi-Addon, mit dem man Filme suchen, finden und herunterladen kann – direkt im Browser, ohne Kodi.
Architektur-Entscheidung
- Option A: Web-Wrapper mit XBMC-konformen Mock-Modulen
- Vorteil: läuft ohne Kodi-Installation, Downloads landen direkt als Datei
- Die XBMC-Architektur wurde aus
/home/matthiasberner/Dokumente/git/xbmcanalysiert
Dateistruktur
xstreamDownloader/
├── app.py ← AKTIVER Wrapper-App (XBMC-konform, ~800 Zeilen)
├── web/index.html ← Frontend (Sidebar, Search, Grid, Downloads)
├── xstream/sites/ ← 18 Site-Plugins
├── xstream/resources/lib/ ← xstream Core
├── deps/
│ ├── resolveurl/
│ ├── requests/
│ ├── six/
│ ├── kodi_six/
│ └── pyaes/
├── cookies/
└── downloads/
Was funktioniert
- Flask-Server startet auf http://localhost:8765
- 18 Sites werden erkannt und geladen
- XBMC-Mock-Module für xbmc, xbmcgui, xbmcplugin, xbmcvfs, xbmcaddon
- Subprozess-Worker mit eigenem sys.argv[1] = '1' (handle)
- xbmcplugin-Collector thread-lokal (addDirectoryItem/endOfDirectory)
- xbmc.addon Version 20.3 – verhindert float('3.8.')-Crash in resolveurl
- Deutsche xStream-Language-Map – Menu-Titel in Deutsch statt
[30813] - Plugin-URL-Generierung – sys.argv[0] als reiner Pfad (keine doppelten
?) - URL-Parsing – api_subentries parst plugin:// URLs und ruft die richtige Funktion auf
- API-Routen alle vorhanden:
- /api/sites
- /api/sites/ID/entries
- /api/sites/ID/entries/PLUGIN_URL (parst function/site/params aus URL)
- /api/sites/ID/search?q=...
- /api/sites/ID/hosters?url=...
- /api/resolve?url=...
- /api/download?url=...&title=...
- /api/downloads[/ID][/file]
- Download-Manager mit Fortschritt 0-100%
Navigation (Menü → Inhalte)
Die Site-Plugins zeigen Menüpunkte (Neues, Filme, Serien, etc.) auf Deutsch. Beim Klick auf einen Menüpunkt:
- URL wird geparst:
plugin://...?site=aniworld&function=showEntries&sUrl=... - Richtige Funktion (
showEntries,showNeues,showValue, etc.) wird aufgerufen - Echte Filme/Serien werden geladen (getestet: AniWorld 45 Titel, HD Filme 22 Titel)
Gelöste Bugs
| # | Bug | Fix | Datum |
|---|---|---|---|
| 1 | SyntaxError def setProperty |
sed-Korrektur | - |
| 2 | KeyError 'resources.lib.config' | Stubs nur im Worker | - |
| 3 | IndentationError in _CollectingGui.addFolder | Komplett neuer Collector | - |
| 4 | float('3.8.') Crash | xbmc.addon Version '20.3' | - |
| 5 | pyaes NOT in sys.path | deps/pyaes und deps/pyaes/lib | - |
| 6 | AttributeError 'xbmc' has no 'LOGERROR' | LOGERROR + LOGSEVERE in _make_xbmc() | 6.7.2026 |
| 7 | ModuleNotFoundError 'resources.lib' in Subprozess | BASE zum sys.path im Worker | 6.7.2026 |
| 8 | Menu-Titel als [30813] statt Deutsch |
Deutsche Language-Map in getLocalizedString | 6.7.2026 |
| 9 | Doppelte ? in plugin:// URLs |
sys.argv[0] = reiner Plugin-Pfad | 6.7.2026 |
| 10 | Navigation: immer showEntries statt spezifischer Funktion |
_parse_plugin_url() in api_subentries | 6.7.2026 |
| 11 | Such-API-Mismatch | Frontend: /search?q= statt /entries?search= |
6.7.2026 |
| 12 | Hoster-API-Mismatch | ?url= statt ?entryUrl= |
6.7.2026 |
| 13 | Download-Flow falsch | Resolve → Download → Poll statt /resolve?download=true |
6.7.2026 |
Verbleibende Aufgaben
- Browser-MCP Debugging (im Browser testen)
- Hoster-Flow E2E testen (Eintrag → Hosters → Download)
- Download E2E testen (Resolve → Download → File)
- Such-Qualität verbessern (manche Sites liefern Haupteinträge statt Suchergebnisse)
- fix_and_run.sh auf app.py umstellen (bereits erledigt)
- mini_app.py wurde am 6.7.2026 gelöscht
Starten
cd /home/matthiasberner/Schreibtisch/kodi/xstreamDownloader
python3 app.py
# → http://localhost:8765
Bekannte Probleme
- Port 8765 kann von Zombie-Prozessen belegt sein → mit
pkill -9 -f "python3 app.py"beheben - Manche Site-Suchfunktionen geben Haupteinträge statt Suchergebnisse zurück
- Manche Sites (z.B. serienstream A-Z) können 500er Timeout-Fehler werfen