1package main23import (4 "github.com/nmeum/mpvfs/mpv"5 "github.com/nmeum/mpvfs/playlistfs"6 "go.rbn.im/neinp"78 "flag"9 "fmt"10 "io"11 "log"12 "net"13 "os"14)1516var (17 state *playerState18 mpvClient *mpv.Client19)2021var (22 verbose = flag.Bool("v", false, "verbose output for debugging")23 addr = flag.String("a", "localhost:9999", "address to listen on")24)2526func usage() {27 fmt.Fprintf(flag.CommandLine.Output(),28 "USAGE: %s [FLAGS] MPV_SOCKET\n\n"+29 "The following flags are supported:\n\n", os.Args[0])3031 flag.PrintDefaults()32 os.Exit(2)33}3435func handleError(pc <-chan error, sc <-chan error) {36 for {37 select {38 case perr := <-pc:39 log.Println("[player error]", perr)40 case serr := <-sc:41 log.Println("[state error]", serr)42 }43 }44}4546func startServer(mpvClient *mpv.Client, state *playerState) {47 listener, err := net.Listen("tcp", *addr)48 if err != nil {49 log.Fatal(err)50 }5152 config := playlistfs.Config{53 Playctl: newCtl,54 Playlist: newPlaylist,55 Playvol: newVol,56 }5758 fs := playlistfs.NewPlaylistFS(config)59 for {60 conn, err := listener.Accept()61 if err != nil {62 log.Println(err)63 continue64 }6566 server := neinp.NewServer(fs)6768 err = server.Serve(conn)69 if err != nil && err != io.EOF {70 log.Println(err)71 continue72 }73 }74}7576func main() {77 flag.Parse()78 flag.Usage = usage7980 if flag.NArg() < 1 {81 usage()82 }83 socketFp := flag.Arg(0)8485 var err error86 mpvClient, err = mpv.NewClient(socketFp, *verbose)87 if err != nil {88 log.Fatal(err)89 }90 state, err = newPlayerState(mpvClient)91 if err != nil {92 log.Fatal(err)93 }9495 go handleError(mpvClient.ErrChan, state.ErrChan())96 startServer(mpvClient, state)97}