diff options
Diffstat (limited to 'grimtube.go')
| -rw-r--r-- | grimtube.go | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/grimtube.go b/grimtube.go index 9f8061b..5ef91de 100644 --- a/grimtube.go +++ b/grimtube.go @@ -5,10 +5,11 @@ import ( "text/template" "net/http" "fmt" - //"io" + "io" "log" "strconv" "path" + "os/exec" "git.sr.ht/~ark/ytparser" ) @@ -165,6 +166,53 @@ func favicon(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "favicon.ico") } +func nativeStreamb(w http.ResponseWriter, r *http.Request) { + values := r.URL.Query() + if !values.Has("url") { + w.WriteHeader(http.StatusBadRequest) + return + } + cmd := exec.Command("yt-dlp", "-o", "/tmp/nativestreamgrimtube.%(ext)s",values.Get("url")) + stderr, err := cmd.StderrPipe() + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + if err := cmd.Start(); err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + io.Copy(w, stderr) +} + +func nativeStream(w http.ResponseWriter, r *http.Request) { + values := r.URL.Query() + if !values.Has("url") { + w.WriteHeader(http.StatusBadRequest) + return + } + cmd := exec.Command("yt-dlp", "-o", "/tmp/nativestreamgrimtube", "--force-overwrites", values.Get("url")) + if err := cmd.Run(); err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + data := struct { + Name string + }{ + "nativestreamgrimtube.webm", + } + serve(w, "templates/vid.html", data) +} + +func stream(w http.ResponseWriter, r *http.Request) { + values := r.URL.Query() + if !values.Has("name") { + w.WriteHeader(http.StatusBadRequest) + return + } + http.ServeFile(w, r, "/tmp/" + values.Get("name")) +} + func main() { port := flag.Int("p", 8080, "The port to bind to.") dir := flag.String("d", "", "Location of the templates and static resources.") @@ -180,6 +228,8 @@ func main() { http.HandleFunc("/", index) http.HandleFunc("/search", search) http.HandleFunc("/embed", embed) + http.HandleFunc("/native", nativeStream) + http.HandleFunc("/stream", stream) log.Printf("Listening on port %d\n", *port) log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil)) |
