diff --git a/Makefile b/Makefile deleted file mode 100644 index 6737e08..0000000 --- a/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -mpd: - mkdir -p /tmp/sanic/{music,playlists} - mpd --no-daemon ./mpd.conf diff --git a/NOTES.md b/NOTES.md deleted file mode 100644 index d3ce923..0000000 --- a/NOTES.md +++ /dev/null @@ -1,20 +0,0 @@ -# mpd commands - -- [x] previous track -- [x] next track -- [x] stop -- [x] play/pause -- [x] set track progress -- [x] set volume -- [x] repeat queue -- [x] shuffle queue -- [ ] set fade -- [ ] add track to queue -- [ ] rm track from queue -- [ ] move track in queue -- [ ] clear queue -- [ ] list tracks in music db -- [ ] list playlists -- [ ] save playlist -- [ ] delete playlist - diff --git a/flake.lock b/flake.lock index bc26a35..8edcf61 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1699950847, - "narHash": "sha256-xN/yVtqHb7kimHA/WvQFrEG5WS38t0K+A/W+j/WhQWM=", + "lastModified": 1694616124, + "narHash": "sha256-c49BVhQKw3XDRgt+y+uPAbArtgUlMXCET6VxEBmzHXE=", "owner": "tweag", "repo": "gomod2nix", - "rev": "05c993c9a5bd55a629cd45ed49951557b7e9c61a", + "rev": "f95720e89af6165c8c0aa77f180461fe786f3c21", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1701237617, - "narHash": "sha256-Ryd8xpNDY9MJnBFDYhB37XSFIxCPVVVXAbInNPa95vs=", + "lastModified": 1697915759, + "narHash": "sha256-WyMj5jGcecD+KC8gEs+wFth1J1wjisZf8kVZH13f1Zo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "85306ef2470ba705c97ce72741d56e42d0264015", + "rev": "51d906d2341c9e866e48c2efcaac0f2d70bfd43e", "type": "github" }, "original": { diff --git a/server.go b/server.go index 80d1eec..3b3e73e 100644 --- a/server.go +++ b/server.go @@ -1,17 +1,13 @@ package main import ( - "fmt" - "github.com/fhs/gompd/v2/mpd" "github.com/labstack/echo-contrib/echoprometheus" - "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" "golang.org/x/net/websocket" - "log" "net/http" - "strconv" "strings" - "time" + + "github.com/labstack/echo/v4" ) func main() { @@ -29,7 +25,6 @@ func main() { e.GET("/metrics", echoprometheus.NewHandler()) e.GET("/", func(c echo.Context) (err error) { - // HTTP/2 Server Push pusher, ok := c.Response().Writer.(http.Pusher) if ok { if err = pusher.Push("/style.css", nil); err != nil { @@ -45,17 +40,6 @@ func main() { return c.File("index.html") }) - g := e.Group("/api") - g.GET("/previous_track", previousTrack) - g.GET("/next_track", nextTrack) - g.GET("/stop", stopPlayback) - g.GET("/play", resumePlayback) - g.GET("/pause", pausePlayback) - g.GET("/seek/:seconds", seek) - g.GET("/repeat", toggleRepeat) - g.GET("/random", toggleRandom) - g.GET("/volume/:level", setVolume) - e.GET("/ws", wsServe) e.Logger.Fatal(e.StartTLS(":1323", "cert.pem", "key.pem")) @@ -63,217 +47,33 @@ func main() { } func wsServe(c echo.Context) error { - fmt.Println("wsServe") websocket.Handler(func(ws *websocket.Conn) { defer ws.Close() - fmt.Println("handler") for { // Read msg := "" err := websocket.Message.Receive(ws, &msg) if err != nil { c.Logger().Error(err) - break - } else { - if strings.HasPrefix(strings.ToUpper(msg), "MPD#") { - // Forward MPD communication - // TODO: forward request to mpd and response back to client - err := websocket.Message.Send(ws, "MPD command received, processing... processing...") - if err != nil { - c.Logger().Error(err) - } - - } else if strings.HasPrefix(strings.ToUpper(msg), "YT#") { - // Download video link as audio file - // TODO: implement yt-dlp integration - err := websocket.Message.Send(ws, "YT-DLP command received, processing... processing...") - if err != nil { - c.Logger().Error(err) - } + } + // Forward MPD communication + if strings.HasPrefix(strings.ToUpper(msg), "MPD#") { + // TODO: forward request to mpd and response back to client + err := websocket.Message.Send(ws, "MPD command received, processing... processing...") + if err != nil { + c.Logger().Error(err) } } - //fmt.Println(msg) + // Download video link as audio file + if strings.HasPrefix(strings.ToUpper(msg), "YT#") { + // TODO: implement yt-dlp integration + err := websocket.Message.Send(ws, "YT-DLP command received, processing... processing...") + if err != nil { + c.Logger().Error(err) + } + } + //fmt.Printf("%s\n", msg) } }).ServeHTTP(c.Response(), c.Request()) return nil } - -// API calls - -func previousTrack(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - err = conn.Previous() - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func nextTrack(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - err = conn.Next() - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func stopPlayback(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - err = conn.Stop() - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func resumePlayback(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - err = conn.Pause(false) - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func pausePlayback(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - err = conn.Pause(true) - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func seek(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - seconds, err := strconv.Atoi(c.Param("seconds")) - if err != nil { - log.Fatalln(err) - } - - if seconds < 0 { - return c.String(http.StatusBadRequest, "seconds must be positive integer") - } - - err = conn.SeekCur(time.Duration(seconds)*time.Second, false) - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func toggleRepeat(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - status, err := conn.Status() - if err != nil { - log.Fatalln(err) - } - if status["repeat"] == "1" { - err = conn.Repeat(false) - } else { - err = conn.Repeat(true) - } - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func toggleRandom(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - status, err := conn.Status() - if err != nil { - log.Fatalln(err) - } - if status["toggleRandom"] == "1" { - err = conn.Random(false) - } else { - err = conn.Random(true) - } - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} - -func setVolume(c echo.Context) error { - // Connect to MPD server - conn, err := mpd.Dial("tcp", "localhost:6600") - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - level, err := strconv.Atoi(c.Param("level")) - if err != nil { - log.Fatalln(err) - } - - if level > 100 || level < 0 { - return c.String(http.StatusBadRequest, "Volume must be between 0 and 100") - } - - err = conn.SetVolume(level) - if err != nil { - log.Fatalln(err) - } - - return c.String(http.StatusNoContent, "") -} diff --git a/static/flexbox/sanic.css b/static/flexbox/sanic.css index 7d77655..6b2e072 100644 --- a/static/flexbox/sanic.css +++ b/static/flexbox/sanic.css @@ -53,8 +53,8 @@ td { } /* This is probably a better way to generate alternate coloring on tables. However, - background color for selected track is overwritten this way. Therefore the "old - school" way of alternate coloring is used for now. + background color for selected track is overwritten this way. Therefore the old + schoon way of alternate coloring is used for now. table tr:nth-child(odd) td { background:#1e1f1a; @@ -185,7 +185,6 @@ td.playing { #playlist_controls { background-color: #171812;; /* flex-grow: 1; */ - width: 20%; /* frickel? */ border-right: 4px ridge #3a506b; }