Merge pull request #15 from coissac/claude/investigate-playlist-manager-011CUrEiQDobxYc8ejQWcixb
Claude/investigate playlist manager 011 c ur ei q dobx yc8ej q wcixb
This commit is contained in:
@@ -152,7 +152,22 @@ cargo test
|
||||
|
||||
### Configuration initiale (à faire une seule fois)
|
||||
|
||||
Dans une session Claude Code (https://claude.ai/code), vous n'avez pas de droits sudo. Suivez ces étapes :
|
||||
Dans une session Claude Code (https://claude.ai/code), vous n'avez pas de droits sudo.
|
||||
|
||||
**🚀 Méthode rapide (recommandée) :**
|
||||
|
||||
```bash
|
||||
# 1. Installation automatique des dépendances (une seule fois)
|
||||
./setup-deps.sh
|
||||
|
||||
# 2. Configuration des variables d'environnement (à chaque session)
|
||||
source setup-env.sh
|
||||
|
||||
# 3. Compilation
|
||||
cargo build
|
||||
```
|
||||
|
||||
**📋 Méthode manuelle (si les scripts ne fonctionnent pas) :**
|
||||
|
||||
#### 1. Installation des dépendances
|
||||
|
||||
@@ -184,14 +199,28 @@ export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
||||
export RUSTFLAGS="-L $HOME/.local/usr/lib/x86_64-linux-gnu"
|
||||
```
|
||||
|
||||
**Astuce :** Copier ces trois lignes dans un fichier `setup-env.sh` à la racine du projet :
|
||||
**Astuce :** Créez un fichier `setup-env.sh` pour ne pas avoir à retaper ces commandes à chaque session :
|
||||
|
||||
```bash
|
||||
cat > setup-env.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
# Script de configuration des variables d'environnement pour PMOMusic
|
||||
# Usage: source setup-env.sh
|
||||
|
||||
# Configuration des chemins pour libsoxr et libasound2
|
||||
export PKG_CONFIG_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
|
||||
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
||||
export RUSTFLAGS="-L $HOME/.local/usr/lib/x86_64-linux-gnu"
|
||||
|
||||
echo "Variables d'environnement configurées pour PMOMusic"
|
||||
echo " PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
|
||||
echo " LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
|
||||
echo " RUSTFLAGS=$RUSTFLAGS"
|
||||
echo ""
|
||||
echo "Vous pouvez maintenant compiler avec: cargo build"
|
||||
EOF
|
||||
|
||||
chmod +x setup-env.sh
|
||||
```
|
||||
|
||||
Puis dans chaque session :
|
||||
@@ -200,7 +229,7 @@ Puis dans chaque session :
|
||||
source setup-env.sh
|
||||
```
|
||||
|
||||
⚠️ **NE PAS committer `setup-env.sh`** - ajouter au `.gitignore`
|
||||
⚠️ **Note :** Le fichier `setup-env.sh` est dans `.gitignore` (configuration locale), vous devez le créer vous-même avec le contenu ci-dessus.
|
||||
|
||||
#### 3. Vérifier l'installation
|
||||
|
||||
@@ -228,9 +257,16 @@ cargo run --package pmoparadise --example play_and_cache --features full -- 0
|
||||
|
||||
À chaque fois que vous démarrez une nouvelle session Claude Code :
|
||||
|
||||
1. **Exporter les variables d'environnement** (ou `source setup-env.sh`)
|
||||
2. Compiler avec `cargo build`
|
||||
3. Exécuter les exemples ou tests
|
||||
```bash
|
||||
# 1. Configuration de l'environnement
|
||||
source setup-env.sh
|
||||
|
||||
# 2. Compilation
|
||||
cargo build
|
||||
|
||||
# 3. Exécution des exemples
|
||||
cargo run --package pmoparadise --example play_and_cache --features full -- 0
|
||||
```
|
||||
|
||||
**IMPORTANT :** Si vous oubliez d'exporter les variables, vous obtiendrez des erreurs comme :
|
||||
```
|
||||
@@ -244,7 +280,7 @@ ou
|
||||
rust-lld: error: unable to find library -lasound
|
||||
```
|
||||
|
||||
Solution : Exporter les variables et recompiler.
|
||||
**Solution :** Exécutez `source setup-env.sh` et recompilez.
|
||||
|
||||
### Notes importantes
|
||||
|
||||
|
||||
@@ -29,7 +29,22 @@ brew install libsoxr
|
||||
apk add soxr-dev alsa-lib-dev
|
||||
```
|
||||
|
||||
**Sans privilèges root** : Si vous n'avez pas les droits sudo, consultez `INSTALL_LIBSOXR.md` pour l'installation locale de `libsoxr` et `libasound2`.
|
||||
**Sans privilèges root (Claude Code, environnements sans sudo)** :
|
||||
|
||||
🚀 **Installation automatique** :
|
||||
|
||||
```bash
|
||||
# 1. Installation des dépendances (une seule fois)
|
||||
./setup-deps.sh
|
||||
|
||||
# 2. Configuration de l'environnement (à chaque session)
|
||||
source setup-env.sh
|
||||
|
||||
# 3. Compilation
|
||||
cargo build
|
||||
```
|
||||
|
||||
Pour plus de détails, consultez `INSTALL_LIBSOXR.md`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
38
Readme.md
38
Readme.md
@@ -1,5 +1,43 @@
|
||||
# Développement de l'application PMOMusic en RUST
|
||||
|
||||
## 🚀 Démarrage rapide
|
||||
|
||||
### Installation des dépendances (environnement sans sudo)
|
||||
|
||||
Pour compiler PMOMusic dans un environnement sans privilèges sudo (comme Claude Code) :
|
||||
|
||||
```bash
|
||||
# 1. Installation automatique de libsoxr et libasound2 (une seule fois)
|
||||
./setup-deps.sh
|
||||
|
||||
# 2. Créer le fichier setup-env.sh (une seule fois, voir INSTALL_LIBSOXR.md pour le contenu)
|
||||
cat > setup-env.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
export PKG_CONFIG_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
|
||||
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
||||
export RUSTFLAGS="-L $HOME/.local/usr/lib/x86_64-linux-gnu"
|
||||
echo "Variables d'environnement configurées pour PMOMusic"
|
||||
EOF
|
||||
|
||||
# 3. Configuration de l'environnement (à chaque nouvelle session)
|
||||
source setup-env.sh
|
||||
|
||||
# 4. Compilation
|
||||
cargo build
|
||||
|
||||
# 5. Test de l'exemple Radio Paradise
|
||||
cargo run --package pmoparadise --example play_and_cache --features full -- 0
|
||||
```
|
||||
|
||||
⚠️ **Note :** Le fichier `setup-env.sh` est dans `.gitignore` car il contient une configuration locale.
|
||||
|
||||
### Documentation
|
||||
|
||||
- **[INSTALL_NOTES.md](INSTALL_NOTES.md)** - Guide d'installation général
|
||||
- **[INSTALL_LIBSOXR.md](INSTALL_LIBSOXR.md)** - Installation détaillée de libsoxr et ALSA
|
||||
|
||||
---
|
||||
|
||||
## Création de la structure
|
||||
|
||||
```bash
|
||||
|
||||
@@ -181,8 +181,18 @@ impl<C: CacheConfig> Cache<C> {
|
||||
{
|
||||
let downloads = self.downloads.read().await;
|
||||
if downloads.contains_key(&pk) {
|
||||
// Download déjà en cours pour ce contenu, retourner la clé
|
||||
// Download déjà en cours pour ce contenu, attendre que le fichier soit créé
|
||||
tracing::debug!("Download already in progress for pk {}", pk);
|
||||
drop(downloads); // Libérer le lock avant la boucle d'attente
|
||||
|
||||
// Attendre que le fichier soit créé (pour le cache progressif)
|
||||
let file_path = self.get_file_path(&pk);
|
||||
let mut attempts = 0;
|
||||
while !file_path.exists() && attempts < 100 {
|
||||
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
|
||||
attempts += 1;
|
||||
}
|
||||
|
||||
return Ok(pk);
|
||||
}
|
||||
}
|
||||
@@ -215,6 +225,23 @@ impl<C: CacheConfig> Cache<C> {
|
||||
downloads_clone.write().await.remove(&pk_clone);
|
||||
});
|
||||
|
||||
// Attendre que le fichier soit créé sur disque (pour le cache progressif)
|
||||
// On attend jusqu'à 5 secondes maximum
|
||||
let file_path = self.get_file_path(&pk);
|
||||
let mut attempts = 0;
|
||||
while !file_path.exists() && attempts < 100 {
|
||||
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
|
||||
attempts += 1;
|
||||
}
|
||||
|
||||
if !file_path.exists() {
|
||||
tracing::warn!(
|
||||
"File {} not created after waiting 5 seconds, pk={}",
|
||||
file_path.display(),
|
||||
pk
|
||||
);
|
||||
}
|
||||
|
||||
Ok(pk)
|
||||
}
|
||||
|
||||
@@ -319,6 +346,23 @@ impl<C: CacheConfig> Cache<C> {
|
||||
downloads_clone.write().await.remove(&pk_clone);
|
||||
});
|
||||
|
||||
// Attendre que le fichier soit créé sur disque (pour le cache progressif)
|
||||
// On attend jusqu'à 5 secondes maximum
|
||||
let file_path = self.get_file_path(&pk);
|
||||
let mut attempts = 0;
|
||||
while !file_path.exists() && attempts < 100 {
|
||||
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
|
||||
attempts += 1;
|
||||
}
|
||||
|
||||
if !file_path.exists() {
|
||||
tracing::warn!(
|
||||
"File {} not created after waiting 5 seconds, pk={}",
|
||||
file_path.display(),
|
||||
pk
|
||||
);
|
||||
}
|
||||
|
||||
Ok(pk)
|
||||
}
|
||||
|
||||
|
||||
62
setup-deps.sh
Executable file
62
setup-deps.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
# Script d'installation automatique des dépendances soxr et alsa pour PMOMusic
|
||||
# Usage: ./setup-deps.sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "========================================="
|
||||
echo "Installation des dépendances PMOMusic"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
|
||||
# Créer le répertoire local
|
||||
echo "1. Création du répertoire ~/.local"
|
||||
mkdir -p ~/.local
|
||||
cd ~/.local
|
||||
|
||||
# Télécharger les packages
|
||||
echo ""
|
||||
echo "2. Téléchargement des packages libsoxr et libasound2"
|
||||
apt-get download libsoxr-dev libsoxr0 libasound2-dev libasound2t64
|
||||
|
||||
# Extraire les packages
|
||||
echo ""
|
||||
echo "3. Extraction des packages"
|
||||
dpkg -x libsoxr-dev_*.deb .
|
||||
dpkg -x libsoxr0_*.deb .
|
||||
dpkg -x libasound2-dev_*.deb .
|
||||
dpkg -x libasound2t64_*.deb .
|
||||
|
||||
# Vérifier l'installation
|
||||
echo ""
|
||||
echo "4. Vérification de l'installation"
|
||||
if [ -f usr/lib/x86_64-linux-gnu/pkgconfig/soxr.pc ]; then
|
||||
echo " ✓ libsoxr installé"
|
||||
else
|
||||
echo " ✗ Erreur: libsoxr non trouvé"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f usr/lib/x86_64-linux-gnu/pkgconfig/alsa.pc ]; then
|
||||
echo " ✓ libasound2 installé"
|
||||
else
|
||||
echo " ✗ Erreur: libasound2 non trouvé"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Retourner au projet
|
||||
cd - > /dev/null
|
||||
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo "Installation terminée avec succès !"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "Pour compiler le projet, exportez les variables d'environnement :"
|
||||
echo ""
|
||||
echo " source setup-env.sh"
|
||||
echo ""
|
||||
echo "Puis compilez avec :"
|
||||
echo ""
|
||||
echo " cargo build"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user