- 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.
3.4 KiB
3.4 KiB
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'interfaceremove_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émarrageget_playlist_items()- Pour construire le cache de membershipsget_playlist_metadata()- Pour afficher les noms et comptes
Avantages de cette architecture
- Maintenabilité : Un seul endroit pour modifier la logique API
- Cohérence : Même gestion d'erreurs partout
- Testabilité : Facile de mocker les fonctions API
- Logging centralisé : Tous les logs API au même endroit
- É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
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.