3dc5dd8fe9
- Fix register/login: dict-style access on UserTable ORM objects - Fix HTMX auth: inject JWT token in all HTMX request headers - Fix FS7 search: use DLE AJAX endpoint /engine/ajax/search.php - Fix ZT search: use ?p=series&search=QUERY (not DLE format) - Fix provider health: load hardcoded providers + domain manager - Add self.id to all anime/series providers - Redesign homepage: Netflix-style horizontal scroll cards (.hc) - Redesign search results: grouped by title, poster + synopsis + 3 buttons - Add Télécharger dropdown: season download + episode picker - Fix navbar CSS: restore .tabs flex layout, remove orphan rules - Fix HTMX spinner: remove inline display:none, use CSS indicator - Add AGENTS.md files across project for developer documentation
1.6 KiB
1.6 KiB
Video Players (app/downloaders/video_players/)
OVERVIEW
File hosting extractors that extract direct download links from video player pages (Doodstream, Sibnet, VidMoly, Uptobox, etc.).
WHERE TO LOOK
| File | Purpose |
|---|---|
base.py |
BaseVideoPlayer abstract class |
unfichier.py |
1fichier.com |
doodstream.py |
Doodstream |
vidmoly.py |
VidMoly (requires Playwright for extraction) |
uptobox.py |
Uptobox |
sendvid.py |
SendVid |
sibnet.py |
Sibnet |
rapidfile.py |
Rapidfile |
uqload.py |
Uqload |
lpayer.py |
Lplayer |
vidzy.py |
Vidzy |
luluv.py |
LuLuvid |
smoothpre.py |
Smoothpre |
oneupload.py |
OneUpload |
CONVENTIONS
Class naming: {Provider}Downloader (e.g., DoodStreamDownloader)
Required methods:
def can_handle(self, url: str) -> bool: ...
async def get_download_link(self, url: str, target_filename: str = None) -> tuple[str, str]: ...
Return format: (download_url, filename) tuple.
HTTP client: Use self.client (AsyncClient from base class). Always close via await self.close().
File operation: Always sanitize_filename() on extracted filenames.
ANTI-PATTERNS
- Do NOT hardcode User-Agent per player — use base class headers
- Do NOT forget
await self.close()— resource leak - Do NOT return None for missing URLs — raise an exception
- Do NOT use sync
requests— use asynchttpx - Do NOT skip
target_filenameparameter — required for anime/series site compatibility - 8 empty
except:blocks across players — known tech debt