summaryrefslogtreecommitdiff
path: root/grimtube.go
diff options
context:
space:
mode:
authorJulian Hurst <ark@mansus.space>2024-09-11 00:57:26 +0200
committerJulian Hurst <ark@mansus.space>2024-09-11 00:57:26 +0200
commitd71de8ab2490081c184dd8a30cc8c8d2cf718286 (patch)
tree7ac860bdaa6b717571dc3c86ee2c51d857389a80 /grimtube.go
parentcbd9317993b188ef142aad11b64a235206369aa0 (diff)
downloadgrimtube-d71de8ab2490081c184dd8a30cc8c8d2cf718286.tar.gz
Handle downloading with yt-dlp and serving videonative_stream
Diffstat (limited to 'grimtube.go')
-rw-r--r--grimtube.go52
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))