96 lines
2.8 KiB
Bash
Executable File
96 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#set -x # Activa el modo de depuración
|
|
|
|
# Paths y archivos temporales
|
|
CURRENT_TRACK_FILE="/tmp/current_track.txt"
|
|
LYRICS_FILE="/tmp/lyrics.txt"
|
|
LOG_FILE="/tmp/lyrics_error.log"
|
|
STATE_FILE="/tmp/lyrics_state.txt"
|
|
|
|
# Función para limpiar el título de la canción
|
|
clean_title() {
|
|
local title="$1"
|
|
# Eliminar prefijos como "B3 ", "A1 ", etc.
|
|
title=$(echo "$title" | sed -E 's/^[A-Za-z0-9]{1,3}[[:space:]]+//')
|
|
# Eliminar caracteres especiales como "$", "#", etc.
|
|
title=$(echo "$title" | tr -d '$#@!%^&*()[]{}<>?/\\|`~')
|
|
# Eliminar espacios adicionales al inicio y al final
|
|
title=$(echo "$title" | sed 's/^ *//;s/ *$//')
|
|
echo "$title"
|
|
}
|
|
|
|
# Obtener información de la pista actual
|
|
TRACK_INFO=$(playerctl metadata --format "{{artist}} - {{title}}" 2>>"$LOG_FILE")
|
|
STATUS=$(playerctl status 2>>"$LOG_FILE")
|
|
echo "STATUS: '$STATUS'" >> "$LOG_FILE"
|
|
|
|
# Si no hay información de pista o el estado no es 'Playing', salimos
|
|
if [ -z "$TRACK_INFO" ] || [ "$STATUS" != "Playing" ]; then
|
|
jq -c -n '{"text":"","tooltip":""}'
|
|
exit 0
|
|
fi
|
|
|
|
echo "TRACK_INFO: '$TRACK_INFO'" >> "$LOG_FILE"
|
|
|
|
if [ -z "$TRACK_INFO" ]; then
|
|
echo "No track info available" > "$LYRICS_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Extraer artista y título
|
|
ARTIST=$(echo "$TRACK_INFO" | cut -d '-' -f 1 | sed 's/^ *//;s/ *$//')
|
|
TITLE=$(echo "$TRACK_INFO" | cut -d '-' -f 2- | sed 's/^ *//;s/ *$//')
|
|
|
|
echo "ARTIST: '$ARTIST'" >> "$LOG_FILE"
|
|
echo "TITLE Original: '$TITLE'" >> "$LOG_FILE"
|
|
|
|
# Limpiar el título de la canción
|
|
CLEAN_TITLE=$(clean_title "$TITLE")
|
|
echo "TITLE Limpio: '$CLEAN_TITLE'" >> "$LOG_FILE"
|
|
|
|
# Verificar si la pista ha cambiado
|
|
if [ "$TRACK_INFO" != "$(cat "$CURRENT_TRACK_FILE" 2>/dev/null)" ]; then
|
|
echo "$TRACK_INFO" > "$CURRENT_TRACK_FILE"
|
|
|
|
# Obtener letras usando el script Python
|
|
lyrics=$(python3 ~/.config/waybar/scripts/get_lyrics.py "$ARTIST" "$CLEAN_TITLE" 2>>"$LOG_FILE")
|
|
|
|
echo "lyrics: '$lyrics'" >> "$LOG_FILE"
|
|
|
|
if [[ "$lyrics" == "Letras no encontradas." ]]; then
|
|
lyrics="Letras no encontradas para $ARTIST - $CLEAN_TITLE"
|
|
fi
|
|
|
|
echo "$lyrics" > "$LYRICS_FILE"
|
|
else
|
|
lyrics=$(cat "$LYRICS_FILE")
|
|
fi
|
|
|
|
# Leer el estado
|
|
if [ -f "$STATE_FILE" ]; then
|
|
STATE=$(cat "$STATE_FILE")
|
|
else
|
|
STATE="full"
|
|
fi
|
|
|
|
# Ajustar las letras según el estado
|
|
if [ "$STATE" = "second_half" ]; then
|
|
total_lines=$(echo "$lyrics" | wc -l)
|
|
half_line=$(( (total_lines + 1) / 2 ))
|
|
lyrics=$(echo "$lyrics" | tail -n +$half_line)
|
|
fi
|
|
|
|
# Verificar si el player activo es Firefox
|
|
PLAYER_NAME=$(playerctl -a metadata --format '{{playerName}}' 2>>"$LOG_FILE" | head -n 1)
|
|
echo "PLAYER_NAME: '$PLAYER_NAME'" >> "$LOG_FILE"
|
|
|
|
if [[ "$PLAYER_NAME" == "firefox" ]]; then
|
|
jq -c -n '{"text":"","tooltip":""}'
|
|
exit 0
|
|
fi
|
|
|
|
# Generar JSON para Waybar
|
|
jq -c -n --arg text "🎵" --arg tooltip "$lyrics" '{"text":$text,"tooltip":$tooltip}'
|
|
|