Files
matthiasberner 8a82974e64 Wrapper-Site Auflösung für meinecloud.click implementiert
- _resolve_wrapper_site() erkennt meinecloud.click und parst data-link Attribute
- Rekursive Auflösung: Wrapper -> Hoster -> Streaming-API
- Streaming-API 404 Fallback: URL direkt zurückgeben wenn API nicht existiert
- HTML-Erkennung bei Downloads bleibt aktiv für Hosts die trotzdem HTML zurückgeben
- STATUS.md aktualisiert
2026-07-07 22:19:23 +02:00

109 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# xStream Downloader Projektstatus
Stand: 7.7.2026, 20:17
## 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/xbmc` analysiert
## Dateistruktur
```
xstreamDownloader/
├── app.py ← AKTIVER Wrapper-App (XBMC-konform, ~1150 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
1. **Flask-Server startet** auf http://localhost:8770
2. **18 Sites** werden erkannt und geladen
3. **XBMC-Mock-Module** für xbmc, xbmcgui, xbmcplugin, xbmcvfs, xbmcaddon
4. **Subprozess-Worker** mit eigenem sys.argv[1] = '1' (handle)
5. **xbmcplugin-Collector** thread-lokal (addDirectoryItem/endOfDirectory)
6. **xbmc.addon Version 20.3** verhindert float('3.8.')-Crash in resolveurl
7. **Deutsche xStream-Language-Map** Menu-Titel in Deutsch statt `[30813]`
8. **Plugin-URL-Generierung** sys.argv[0] als reiner Pfad (keine doppelten `?`)
9. **URL-Parsing** api_subentries parst plugin:// URLs und ruft die richtige Funktion auf
10. **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]
11. **Download-Manager** mit Fortschritt 0-100%, Cancel, Delete
12. **HLS/m3u8 Download** via ffmpeg
13. **HTML-Erkennung** verhindert 16KB HTML-Files als "fertige Downloads"
14. **Streaming-Site Auflösung** vidara.to etc. via API (filecode → m3u8)
15. **Wrapper-Site Auflösung** meinecloud.click etc. via HTML-Parsing (data-link Attribute)
16. **Rekursive Auflösung** Wrapper → Hoster → Streaming-API (z.B. meinecloud → dr0pstream → m3u8)
## Navigation (Menü → Inhalte)
Die Site-Plugins zeigen Menüpunkte (Neues, Filme, Serien, etc.) auf Deutsch.
Beim Klick auf einen Menüpunkt:
1. URL wird geparst: `plugin://...?site=aniworld&function=showEntries&sUrl=...`
2. Richtige Funktion (`showEntries`, `showNeues`, `showValue`, etc.) wird aufgerufen
3. 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 |
| 14 | Port 8769 belegt | Geändert auf Port 8770 | 6.7.2026 |
| 15 | Download 16KB HTML statt Video (VOE etc.) | HTML-Erkennung in _run_direct() | 7.7.2026 |
| 16 | Streaming-Sites liefern HTML statt m3u8 | _resolve_streaming_api() für vidara.to etc. | 7.7.2026 |
| 17 | Wrapper-Site meinecloud.click gibt HTML zurück | _resolve_wrapper_site() parst data-link Attribute | 7.7.2026 |
## Verbleibende Aufgaben
- [ ] Browser-MCP Debugging (im Browser testen)
- [ ] Hoster-Flow E2E testen (Eintrag → Hosters → Download)
- [ ] Such-Qualität verbessern (manche Sites liefern Haupteinträge statt Suchergebnisse)
- [ ] Stream-Button in Suchergebnissen
## Starten
```bash
cd /home/matthiasberner/Schreibtisch/kodi/xstreamDownloader
python3 app.py
# → http://localhost:8770
```
## Bekannte Probleme
- Port 8770 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