Files
ohm_streaming/app/downloaders/video_players/AGENTS.md
root 3dc5dd8fe9
CI / Test (Python 3.11) (push) Has been cancelled
CI / Test (Python 3.12) (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Type Check (push) Has been cancelled
CI / Summary (push) Has been cancelled
feat: fix auth, provider health checks, search, and redesign UI
- 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
2026-03-28 00:14:31 +00:00

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 async httpx
  • Do NOT skip target_filename parameter — required for anime/series site compatibility
  • 8 empty except: blocks across players — known tech debt