package caddyhugo
import (
"fmt"
"io"
"net/http"
"git.stephensearles.com/stephen/caddy-hugo2/media"
)
func (ch *CaddyHugo) uploadMedia(w http.ResponseWriter, r *http.Request) (int, error) {
if ch.Media == nil {
http.NotFound(w, r)
return 404, nil
}
mr, err := r.MultipartReader()
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return 400, nil
}
for {
part, err := mr.NextPart()
if err == io.EOF {
break
}
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return 400, nil
}
name := part.FileName()
if name != "" {
err = ch.Media.ReceiveNewMedia(name, part)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return 500, nil
}
}
}
return 200, nil
}
func (ch *CaddyHugo) serveMediaPage(w http.ResponseWriter, r *http.Request) (int, error) {
if ch.Media == nil {
http.NotFound(w, r)
return 404, nil
}
io.WriteString(w, `
`)
io.WriteString(w, UploadPage("media"))
io.WriteString(w, `
`)
if ch.Media != nil {
mm, err := ch.Media.Walk()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return 500, nil
}
for _, m := range media.Set(mm).ByDate() {
size, err := ch.Media.ThumbMax(*m, 100)
if err != nil {
fmt.Fprintf(w, `error rendering %q: %v
`, m.Name, err)
continue
}
switch m.Type {
case media.TypeImage:
fmt.Fprintf(w, ``, size.Dx(), size.Dy(), m.ThumbPath(size), m.Name, m.ThumbPath(size))
case media.TypeVideo:
// TODO: onmouseover sucks for mobile
fmt.Fprintf(w, `
📋
`, size.Dx(), size.Dy(), m.ThumbPath(size), m.Name, m.ThumbPath(size))
}
}
}
io.WriteString(w, ``)
return 200, nil
}
func (ch *CaddyHugo) serveMedia(w http.ResponseWriter, r *http.Request) (int, error) {
if ch.Media == nil {
http.NotFound(w, r)
return 404, nil
}
ch.Media.ServeHTTP(w, r)
return 200, nil
}