diff options
Diffstat (limited to 'watch.go')
| -rw-r--r-- | watch.go | 33 |
1 files changed, 29 insertions, 4 deletions
@@ -3,6 +3,7 @@ package main import ( "html/template" "net/http" + "net/url" ) var templateWatchFiles = []string{ "templates/base.html", "templates/watch.html" } @@ -10,15 +11,39 @@ var templateWatch = template.Must(template.ParseFiles(templateWatchFiles...)) /* render template */ type WatchTemplateData struct { - Id string + Src string } -func renderWatchTemplate(w http.ResponseWriter, id string) { +func renderWatchTemplate(w http.ResponseWriter, id string, rawQuery string) { if debug { reloadTemplate(&templateWatch, templateWatchFiles...) } + + // construct url query from existing rawQuery + q, parseErr := url.ParseQuery(rawQuery) + if parseErr != nil { + templateError(parseErr, w) + return + } + q.Add("enablejsapi", "1") + q.Add("autoplay", "1") + q.Del("v") + if q.Has("t") { + q.Add("start", q.Get("t")) // translate 't' to 'start' (embed equivalent) + q.Del("t") + } + + // construct url + u, urlErr := url.Parse("https://www.youtube-nocookie.com/embed/" + id) + if urlErr != nil { + templateError(urlErr, w) + return + } + u.RawQuery = q.Encode() + + // execute template err := templateWatch.Execute(w, WatchTemplateData{ - Id: id, + Src: u.String(), }) if err != nil { templateError(err, w) @@ -29,6 +54,6 @@ func renderWatchTemplate(w http.ResponseWriter, id string) { func registerRoutesWatch(mux *http.ServeMux) { mux.HandleFunc("/watch", func(w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get("v") - renderWatchTemplate(w, id) + renderWatchTemplate(w, id, r.URL.RawQuery) }) } |
