Files
pmomusic/pmoqobuz
Eric Coissac 8179c0e239 refactor: rework search implementation and fix navigation bug
Replaces raw string queries with structured `SearchQuery` types across the `MusicSource` trait and UPnP handlers. Adds dedicated paginated endpoints, explicit caching, and type-specific filtering for the Qobuz source. Fixes a frontend navigation bug by aligning state management with UPnP browse semantics and properly routing virtual container IDs. Also updates the Makefile for dynamic `RUST_LOG` configuration, standardizes logging with `tracing`, and adds the dependency lockfile.
2026-06-11 22:02:38 +02: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