Files
pmomusic/pmoqobuz
Eric Coissac 76b7c126c2 refactor: replace absolute URLs with route-based cover URLs and generalize caching
- Remplacer les appels à `covers_absolute_url_for` par `covers_route_for` pour générer des URLs relatives basées sur les routes
- Introduire le trait `CoverCacheable` pour généraliser le cache des covers (Album, Playlist, Artist, Track)
- Remplacer les fonctions spécifiques (`cache_album_covers`, etc.) par une fonction générique `cache_covers`
- Simplifier le code en unifiant la logique de mise en cache des covers
- Corriger l'initialisation de `PMO_SERVER_URL` pour utiliser `base_url()` (incluant le port) au lieu d'une URL brute
2026-03-24 15:02:28 +01:00
..
2025-12-14 20:39:08 +01:00
2025-10-16 22:12:15 +02:00
2025-12-17 08:47:07 +01:00
2025-12-17 07:23:25 +01:00
2025-12-13 13:56:55 +01:00
2025-12-11 21:35:17 +00:00
2025-12-11 21:35:17 +00:00
2025-12-11 21:35:17 +00:00
2025-12-11 21:35:17 +00:00

pmoqobuz - Client Rust pour l'API Qobuz

Client Rust pour l'API Qobuz avec intégration automatique du Spoofer pour obtenir des AppID et secrets valides.

🎯 Fonctionnalités

  • Authentification automatique avec credentials
  • Spoofer intégré - Obtention automatique d'AppID et secrets valides
  • Signatures MD5 pour les requêtes sensibles (streaming, bibliothèque)
  • Cache en mémoire pour optimiser les performances
  • Support DIDL-Lite pour l'export UPnP/DLNA
  • Recherche dans le catalogue (albums, artistes, tracks, playlists)
  • Favoris et playlists utilisateur
  • Désérialisation robuste (gère integers et strings pour les IDs)

🚀 Utilisation rapide

Configuration minimale

# ~/.pmomusic/config.yaml
accounts:
  qobuz:
    username: "your_email@example.com"
    password: "your_password"
    # AppID et secret seront automatiquement obtenus via le Spoofer

Code d'exemple

use pmoqobuz::QobuzClient;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Le Spoofer s'exécute automatiquement si nécessaire
    let client = QobuzClient::from_config().await?;

    // Rechercher des albums
    let albums = client.search_albums("Miles Davis").await?;
    for album in albums.iter().take(5) {
        println!("{} - {}", album.artist.name, album.title);
    }

    Ok(())
}

📖 Documentation