Support et développement¶
Besoin d'aide, vous avez trouvé un bug, ou vous voulez contribuer ? Voici les ressources disponibles.
Communauté et support¶
Discord¶
Le serveur Discord est le point de contact principal pour :
- Support d'installation : aide au déploiement et à la configuration
- Signalement de bugs : remontez les problèmes rencontrés
- Discussion : échanges avec les développeurs et la communauté
- Contribution : participez au développement du projet
Signaler un problème¶
Si vous rencontrez un bug ou un comportement inattendu :
- Vérifiez les logs :
docker compose logs -f stream-fusion - Consultez le health check :
curl http://localhost:8080/api/monitoring/health - Rejoignez le Discord pour en discuter avec les développeurs
Participer au développement¶
Le dépôt est privé, mais toute personne souhaitant contribuer est la bienvenue ! Rejoignez le serveur Discord pour vous présenter et obtenir l'accès au dépôt.
Les contributions peuvent prendre plusieurs formes :
- Documentation : corrections, traductions, nouvelles pages
- Bug fixes : corrections de problèmes identifiés
- Fonctionnalités : nouvelles idées et implémentations
- Tests : retours sur les nouvelles versions
- Indexeurs : ajout de nouveaux indexeurs francophones
Guide: Ajouter un indexeur privé¶
L'ajout d'un nouvel indexeur privé (tracker Torznab) nécessite de toucher environ 14 fichiers dans la codebase. Cette section détaille la checklist complète.
Pattern 3 fichiers¶
Chaque indexeur privé suit un pattern dans indexers/private/{nom}/ :
| Fichier | Rôle | Règles obligatoires |
|---|---|---|
{nom}_api.py |
Client HTTP bas niveau | Retourne List[{Name}RawResult]. Strippe les credentials du torrent_download. privacy = "private" toujours. |
{nom}_result.py |
Modèle de résultat | from_api_item(raw, media) → self. convert_to_torrent_item() → TorrentItem. Display name fixé comme "{Name} - API". |
{nom}_service.py |
Orchestrateur | search(media) → List[Result]. Résolution des credentials : unique_account → server-side key, sinon user config → server default. |
Checklist des fichiers à modifier¶
-
settings.py— Ajouter dans le blocSERVER-SIDE INDEXER ENABLE FLAGS:{name}_enable: bool = True. Ajouter un bloc dédié avec{name}_url,{name}_api_key,{name}_passkey(si announce URL),{name}_unique_account. -
services/settings/settings_registry.py— AjouterSettingDef("{name}_enable", "bool", "Activer {Name}", "indexers", ...)après le dernier indexeur. -
indexers/__init__.py— La checklist complète est documentée en commentaire dans ce fichier (lignes 22-121). Consultez-la pour la référence exhaustive. -
utils/infrastructure/config/parse_config.py—DEFAULT_INDEXER_CATEGORIES:"{name}": "fallback_private"(oupriority_private/intermediary_private). -
utils/torrent/torrent_item.py—_PRIVATE_CREDENTIAL_INDEXERS: ajouter"{Name} - API"._TORBOX_PREFERRED_INDEXERS: ajouter"{Name} - API".to_debrid_stream_query(): ajouter blocelifpour reconstruire les credentials. -
web/root/search/views.py— Importer le service. Ajouter dans_POSTGRES_INDEXERS,_INDEXER_CONFIG_KEY, les fonctions_fetch_{name}()(movie + series), etALL_FETCHERS. -
tasks/search_tasks.py— Importer le service. Ajouter_fetch_{name}()dansbackground_db_refreshetprefetch_next_episode. Ajouter dansFETCHERS/ALL_FETCHERS. -
static/admin/config_indexers.html— Ajouter une ligne<tr>dans la table des indexeurs avec toggle + champ URL. -
static/index.html— Ajouter une section indexeur avec :- Toggle avec
data-unique-accountetonchange="updateProviderFields()" - Ligne de catégorie avec
<select> - Champs de credentials (conditionnes par
unique_accountdans le template Jinja2) - Bumper la version du cache JS :
config.js?v=N → config.js?v=N+1
- Toggle avec
-
static/config.js— Ajouter dans :handleUniqueAccounts(),updateProviderFields(),defaultConfig,restore/load,_defaultCats,serialization,validation. -
web/root/config/views.py— Ajouter dans le contexte du template :"{name}_enable","{name}_unique_account". -
Templates d'administration — Si l'indexeur nécessite une page de configuration admin, créer les templates Jinja2.
-
Modèle PostgreSQL — Si l'indexeur utilise une table dédiée, créer le modèle SQLAlchemy et la migration Alembic.
-
web/admin/— Ajouter les vues admin pour la gestion de l'indexeur (configuration, statistiques).
Indexeurs publics
Les indexeurs publics (indexers/public/) sont plus simples : seuls les fichiers API et service sont nécessaires. Pas de stockage PostgreSQL, pas d'intégration dans views.py ou config.js.
Liens utiles¶
| Ressource | Lien |
|---|---|
| Image Docker | limedrive/stream-fusion-reborn |
| Discord | https://discord.gg/87RV5DStEK |
| TMDB API | Obtenir une clé |