trop de modifications
This commit is contained in:
@@ -7,17 +7,32 @@ date_format=$(date +"%Y%m%d_%H%M%S")
|
||||
|
||||
# Fonction pour afficher l'utilisation du script
|
||||
usage() {
|
||||
echo "Utilisation : $0 [-n <nombre de fichiers>] [-d <répertoire>] [-o <fichier de sortie>]"
|
||||
echo "Utilisation : $0 [-EU] [-n <nombre de fichiers>] [-d <répertoire>] [-o <fichier de sortie>]"
|
||||
echo "Options :"
|
||||
echo " -n <nombre de fichiers> : Nombre de fichiers à inclure dans le M3U"
|
||||
echo " -d <répertoire> : Répertoire à scanner (y compris les sous-répertoires)"
|
||||
echo " -o <fichier de sortie> : Nom du fichier M3U de sortie"
|
||||
echo " -E : Recherche des doublons basée sur l'empreinte auditive"
|
||||
echo " -U : Mise à jour de la base de données"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# Temps de début d'exécution
|
||||
start_time=$(date +%s)
|
||||
|
||||
# search_type
|
||||
search_type="S" # standard
|
||||
|
||||
# Analyse des options de ligne de commande
|
||||
while getopts "n:d:o:" opt; do
|
||||
while getopts "n:d:o:EU" opt; do
|
||||
case $opt in
|
||||
E)
|
||||
search_type="E" # empreintes identiques
|
||||
;;
|
||||
U)
|
||||
search_type="U" # mise à jour de la base
|
||||
;;
|
||||
n)
|
||||
num_files=$OPTARG
|
||||
;;
|
||||
@@ -34,6 +49,14 @@ while getopts "n:d:o:" opt; do
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
# Définition du dossier des paramètres
|
||||
CONFIG_DIR=${HOME}/.config/cedrix/generate_playlist
|
||||
if [ ! -d "$CONFIG_DIR" ]; then
|
||||
mkdir -p ${CONFIG_DIR}
|
||||
fi
|
||||
|
||||
|
||||
# Vérifier si le fichier user-dirs.dirs existe
|
||||
if [[ -f ~/.config/user-dirs.dirs ]]; then
|
||||
# Charger les variables depuis le fichier user-dirs.dirs
|
||||
@@ -43,14 +66,14 @@ if [[ -f ~/.config/user-dirs.dirs ]]; then
|
||||
if [[ -v XDG_MUSIC_DIR ]]; then
|
||||
# Le répertoire XDG_MUSIC_DIR existe
|
||||
mkdir -p "$XDG_MUSIC_DIR/playlists"
|
||||
output_file="$XDG_MUSIC_DIR/playlists/playlist_${date_format}_${num_files}.m3u"
|
||||
output_file="$XDG_MUSIC_DIR/playlists/playlist_${date_format}.m3u"
|
||||
else
|
||||
# La variable XDG_MUSIC_DIR n'est pas définie
|
||||
output_file="$HOME/playlist_${date_format}_${num_files}.m3u"
|
||||
output_file="$HOME/playlist_${date_format}.m3u"
|
||||
fi
|
||||
else
|
||||
# Le fichier user-dirs.dirs n'existe pas
|
||||
output_file="$HOME/playlist_${date_format}_${num_files}.m3u"
|
||||
output_file="$HOME/playlist_${date_format}.m3u"
|
||||
fi
|
||||
|
||||
|
||||
@@ -60,18 +83,134 @@ if [ ! -d "$directory" ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
# Création d'un fichier temporaire pour stocker la liste des fichiers audio avec leur date de création
|
||||
# Création d'un fichier temporaire pour stocker la liste des fichiers audio
|
||||
temp_file=$(mktemp)
|
||||
echo "Recherche en cours des fichiers audios dans \"$directory\""
|
||||
find "$directory" -type f \( -name "*.mp3" -o -name "*.opus" -o -name "*.ogg" -o -name "*.m4a" \) -exec stat --format="%Z %n" {} + > "$temp_file"
|
||||
|
||||
echo "Nombre de fichiers audios trouvé dans $directory : "$(wc -l "$temp_file")
|
||||
count=0
|
||||
|
||||
# Création de la liste des fichiers audio les plus récents à partir du fichier temporaire
|
||||
sort -n -r -o "$temp_file" "$temp_file"
|
||||
head -n "$num_files" "$temp_file" | awk '{print $2}' > "$output_file"
|
||||
# Si l'option -E est spécifiée, rechercher les doublons basés sur l'empreinte auditive
|
||||
if [ "$search_type" == "S" ]; then
|
||||
echo "Recherche en cours des $num_files derniers fichiers audios dans \"$directory\""
|
||||
find "$directory" -type f \( -name "*.mp3" -o -name "*.opus" -o -name "*.ogg" -o -name "*.m4a" \) -exec stat --format="%Z %n" {} + > "$temp_file"
|
||||
|
||||
echo "Nombre de fichiers audios trouvé dans $directory : "$(wc -l "$temp_file")
|
||||
|
||||
# Création de la liste des fichiers audio les plus récents à partir du fichier temporaire
|
||||
sort -n -r -o "$temp_file" "$temp_file"
|
||||
head -n "$num_files" "$temp_file" | awk '{print $2}' > "$output_file"
|
||||
|
||||
elif [ "$search_type" == "E" ]; then
|
||||
# Code pour rechercher les doublons basés sur l'empreinte auditive
|
||||
echo "Option -E spécifiée : Recherche des doublons basés sur l'empreinte auditive. Veuillez patienter ..."
|
||||
|
||||
# Chemin de la base de données SQLite
|
||||
db_file=${CONFIG_DIR}/database.sqlite
|
||||
|
||||
# Requête SQL pour récupérer les fichiers avec des empreintes identiques
|
||||
query="SELECT acoustid, GROUP_CONCAT(file_id) AS file_ids, COUNT(*) AS count
|
||||
FROM metadata
|
||||
GROUP BY acoustid
|
||||
HAVING count > 1;"
|
||||
|
||||
# Exécuter la requête SQL et afficher les résultats
|
||||
sqlite3 "$db_file" "$query"| while IFS='|' read -r acoustid file_ids count; do
|
||||
echo "Empreinte digitale ID : $acoustid"
|
||||
echo "Fichiers associés : $file_ids"
|
||||
echo "Nombre de fichiers : $count"
|
||||
echo "-------------------------"
|
||||
done
|
||||
|
||||
exit
|
||||
|
||||
elif [ "$search_type" == "U" ]; then
|
||||
# Code pour rechercher les doublons basés sur l'empreinte auditive
|
||||
echo "Mise à jour de la base de données. Le traitement peut être un peu long. Veuillez patienter ..."
|
||||
|
||||
# Vérifier si fpcalc est installé et l'installer si nécessaire
|
||||
if ! command -v fpcalc &>/dev/null; then
|
||||
echo "Téléchargement de fpcalc..."
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
wget -O /tmp/chromaprint.tar.gz https://github.com/acoustid/chromaprint/releases/download/v1.5.1/chromaprint-fpcalc-1.5.1-linux-x86_64.tar.gz
|
||||
tar -xzf /tmp/chromaprint.tar.gz -C "$HOME/.local/bin" --strip-components=1
|
||||
rm /tmp/chromaprint.tar.gz
|
||||
chmod +x "$HOME/.local/bin/fpcalc"
|
||||
echo "fpcalc installé avec succès."
|
||||
fi
|
||||
|
||||
|
||||
# Vérifier si PHP est installé
|
||||
if ! command -v php &>/dev/null; then
|
||||
echo "PHP n'est pas installé. Installation en cours..."
|
||||
if command -v dnf &>/dev/null; then
|
||||
sudo dnf install -y php
|
||||
elif command -v apt &>/dev/null; then
|
||||
sudo apt install -y php
|
||||
elif command -v yum &>/dev/null; then
|
||||
sudo yum install -y php
|
||||
else
|
||||
echo "Système de gestion de paquets non pris en charge."
|
||||
exit 1
|
||||
fi
|
||||
echo "PHP installé avec succès."
|
||||
fi
|
||||
|
||||
# Vérifier si SQLite pour PHP est installé
|
||||
if ! php -m | grep -q "sqlite3"; then
|
||||
echo "SQLite pour PHP n'est pas installé. Installation en cours..."
|
||||
if command -v dnf &>/dev/null; then
|
||||
sudo dnf install -y php-sqlite3
|
||||
elif command -v apt &>/dev/null; then
|
||||
sudo apt install -y php-sqlite3
|
||||
elif command -v yum &>/dev/null; then
|
||||
sudo yum install -y php-sqlite3
|
||||
else
|
||||
echo "Système de gestion de paquets non pris en charge."
|
||||
exit 1
|
||||
fi
|
||||
echo "SQLite pour PHP installé avec succès."
|
||||
fi
|
||||
|
||||
# Chemin de la base de données SQLite
|
||||
db_file=${CONFIG_DIR}/database.sqlite
|
||||
|
||||
# Chemin complet du script PHP
|
||||
php_script="$(dirname "$0")/generate_playlist_fp.php"
|
||||
|
||||
# Appeler le script PHP avec les paramètres appropriés
|
||||
php "$php_script" "$directory" "$db_file"
|
||||
|
||||
|
||||
fi
|
||||
|
||||
echo -e " and more...\n"
|
||||
|
||||
# Suppression du fichier temporaire
|
||||
rm "$temp_file"
|
||||
rm -v "$temp_file"
|
||||
|
||||
echo "Le fichier M3U a été créé avec les $num_files fichiers audio les plus récents dans le répertoire $directory : $output_file"
|
||||
|
||||
|
||||
# ajout du nombre de fichiers de la playlist dans le nom du fichier
|
||||
num_files_real=$(wc -l $output_file)
|
||||
|
||||
# Extraire le nom de fichier sans l'extension
|
||||
filename_without_extension="${output_file%.*}"
|
||||
|
||||
# Extraire l'extension du fichier
|
||||
extension="${original_file##*.}"
|
||||
|
||||
# Construire le nouveau nom de fichier avec num_files_real ajouté avant l'extension
|
||||
output_new_file="${filename_without_extension}_${num_files_real}.${extension}"
|
||||
|
||||
mv -v "${output_file}" "${output_new_file}"
|
||||
|
||||
|
||||
echo "Le fichier M3U a été créé avec les $num_files_real fichiers audio les plus récents dans le répertoire $directory : $output_file"
|
||||
|
||||
|
||||
# Temps de fin d'exécution
|
||||
end_time=$(date +%s)
|
||||
|
||||
# Calcul du temps écoulé
|
||||
execution_time=$((end_time - start_time))
|
||||
|
||||
echo "Temps d'exécution: $execution_time secondes"
|
||||
|
||||
Reference in New Issue
Block a user