deps: update esbuild to 0.27.4, rollup to 4.60.0, vite to 7.3.1 - bump esbuild and all platform-specific binaries from 0.25.10 to 0.27.4 - bump rollup and all platform-specific binaries from 4.52.3 to 4.60.0 - bump vite from 7.1.7 to 7.3.1 (esbuild peer dep updated to ^0.27.0) - bump dompurify from 3.2.7 to 3.3.3 web: improve cover image retry logic - increase maxRetries default from 3 to 5 - reduce initial retryDelay from 1000ms to 500ms - implement exponential backoff: delay = retryDelay * 2^(retryCount - 1) - add detailed logging for retries and final failure rust: minor cleanup - remove unused imports (watch, Url, AudioSegment, SyncMarker) - add tracing debug logs for cache file requests - handle missing files gracefully with warning + client retry hint - add #[allow(async_fn_in_trait)] where needed
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
- IMPLEMENTATION_STATUS.md - Statut d'implémentation complet
- API_ANALYSIS.md - Analyse des différences avec l'API Python
- examples/basic_usage.rs - Exemple complet
- examples/spoofer.rs - Utilisation manuelle du Spoofer