Files
tidal-dl/docs/playlist_api_architecture.md
T
Warry 296c6c7d6b feat: Add playlist management functionality and compliance checks
- Introduced a new "Playlists" column in results view with visual indicators for membership.
- Added `playlist_api.py` to handle playlist-related operations (fetch, add, remove tracks).
- Implemented `PlaylistManagerDialog` for seamless playlist addition/removal with caching.
- Integrated compliance check script (`check_agents_compliance.py`) for ensuring coding standards.
- Added extensive documentation (`playlist_membership_manager.md`) covering architecture and flow.
- Updated GUI logic and QStandardItemModel setup to include playlist data.
- Included unit tests for playlist management components and API.
2025-12-29 17:37:39 +01:00

94 lines
3.4 KiB
Markdown

# Architecture des appels API pour les playlists
## Vue d'ensemble
Tous les appels API liés aux playlists ont été centralisés dans un seul module pour une meilleure maintenabilité et cohérence.
## Fichier centralisé : `tidal_dl_ng/helper/playlist_api.py`
Ce module contient toutes les fonctions d'interaction avec l'API Tidal pour les playlists :
### Fonctions disponibles
#### 1. `get_user_playlists(session: Session) -> list[UserPlaylist]`
- **Description**: Récupère toutes les playlists de l'utilisateur
- **Paramètres**: Session Tidal authentifiée
- **Retour**: Liste d'objets UserPlaylist
- **Exceptions**: RequestException, ValueError
#### 2. `get_playlist_items(playlist: UserPlaylist) -> list[Track]`
- **Description**: Récupère tous les morceaux d'une playlist
- **Paramètres**: Objet UserPlaylist
- **Retour**: Liste d'objets Track
- **Exceptions**: RequestException
#### 3. `add_track_to_playlist(session: Session, playlist_id: str, track_id: str) -> None`
- **Description**: Ajoute un morceau à une playlist
- **Paramètres**:
- session: Session Tidal
- playlist_id: UUID de la playlist
- track_id: UUID du morceau
- **Exceptions**: RequestException, ValueError
#### 4. `remove_track_from_playlist(session: Session, playlist_id: str, track_id: str) -> None`
- **Description**: Retire un morceau d'une playlist
- **Paramètres**:
- session: Session Tidal
- playlist_id: UUID de la playlist
- track_id: UUID du morceau
- **Exceptions**: RequestException, ValueError
- **Note**: Gère automatiquement la recherche de l'index du morceau
#### 5. `get_playlist_metadata(playlist: UserPlaylist) -> dict[str, str | int]`
- **Description**: Extrait les métadonnées d'une playlist
- **Paramètres**: Objet UserPlaylist
- **Retour**: Dictionnaire avec `name`, `item_count`, `id`
## Modules utilisant l'API centralisée
### 1. `tidal_dl_ng/gui/dialog_playlist_manager.py`
Utilise :
- `add_track_to_playlist()` - Pour ajouter des morceaux via l'interface
- `remove_track_from_playlist()` - Pour retirer des morceaux via l'interface
### 2. `tidal_dl_ng/gui/playlist_membership.py`
Utilise :
- `get_user_playlists()` - Pour charger les playlists au démarrage
- `get_playlist_items()` - Pour construire le cache de memberships
- `get_playlist_metadata()` - Pour afficher les noms et comptes
## Avantages de cette architecture
1. **Maintenabilité** : Un seul endroit pour modifier la logique API
2. **Cohérence** : Même gestion d'erreurs partout
3. **Testabilité** : Facile de mocker les fonctions API
4. **Logging centralisé** : Tous les logs API au même endroit
5. **Évolutivité** : Facile d'ajouter de nouvelles fonctions
## Gestion des erreurs
Toutes les fonctions :
- Loggent les erreurs avec `logger_gui`
- Propagent les exceptions (RequestException) pour que l'appelant puisse gérer
- Gèrent automatiquement les cas limites (playlist vide, morceau non trouvé, etc.)
## Exemple d'utilisation
```python
from tidal_dl_ng.helper.playlist_api import add_track_to_playlist, get_user_playlists
# Récupérer les playlists
playlists = get_user_playlists(session)
# Ajouter un morceau
try:
add_track_to_playlist(session, playlist_id="abc123", track_id="def456")
print("Morceau ajouté avec succès")
except RequestException as e:
print(f"Erreur: {e}")
```
## Migration future
Si besoin de passer à une autre bibliothèque API ou d'ajouter un cache HTTP, il suffit de modifier `playlist_api.py` sans toucher aux autres fichiers.