Files
rmpc_controller/client.go
T
2025-12-31 03:11:49 -06:00

92 lines
1.9 KiB
Go

package main
import (
"fmt"
"log"
"net"
"os"
"os/exec"
"slices"
"strings"
"github.com/joho/godotenv"
)
const (
help =
`Uso del programa. rrmpc [COMMAND]
play Reproduce la cancion que se encuentre en pausa
pause Pausa la cancion que se encuentre en reproduccion
info Muestra informacion del estado de mpd
next Reproduce la siguiente cancion en la cola
`
)
func main() {
err := godotenv.Load()
if err != nil {
log.Println("Error al cargar .env", err)
os.Exit(1)
}
IP_SERVER := os.Getenv("IP_SERVER")
if (len(os.Args)) != 2 {
fmt.Printf("%s", help)
os.Exit(1)
}
comandosPermitidos := []string{"play", "pause", "info", "next", "addsong"}
var comando string
if slices.Contains(comandosPermitidos, os.Args[1]) {
comando = os.Args[1]
} else {
fmt.Printf("%s", help)
os.Exit(1)
}
conn, err := net.Dial("tcp", IP_SERVER)
if err != nil {
log.Println("Error al establecer la conexion", err)
}
defer conn.Close()
handleConn(conn, comando)
}
func handleConn(conn net.Conn, comando string) {
defer conn.Close()
if comando == "addsong" {
manageAddSong(conn, comando)
}
_, err := conn.Write([]byte(comando))
if err != nil {
log.Println("Error al enviar comando", err)
}
respuestaRaw := make([]byte, 1024)
n, err := conn.Read(respuestaRaw)
if err != nil {
log.Println("Error al recibir respuesta", err)
}
fmt.Printf("%s", string(respuestaRaw[:n]))
}
func manageAddSong(conn net.Conn, comando string) {
_, err := conn.Write([]byte(comando))
if err != nil {
log.Println("Error al enviar comando", err)
}
cmd := exec.Command("bash", "-c", `dmenu -i -l 1`)
cmd.Stdin = conn
output, err := cmd.CombinedOutput()
if err != nil {
log.Println("Error al ejecutar comando", err)
}
fmt.Printf("Enviando %s al servidor\n", strings.TrimSpace(string(output)))
_, err = conn.Write([]byte(output))
if err != nil {
log.Println("Error al enviar nueva cancion", err)
}
os.Exit(0)
}