Browse Source

support http header "range" (needed for videos in safari)

master
Nicolas Massé 6 years ago
parent
commit
f079a64a56
  1. 6
      README.md
  2. 5
      http.go
  3. 15
      media_store.go

6
README.md

@ -96,7 +96,13 @@ service photo-bot enable
service photo-bot start service photo-bot start
``` ```
## Useful notes
Video autoplay is tricky:
- On Firefox, you have to interact with the page first (click somewhere in the page)
- On Safari, you have to [explicitly enable auto-play for this website](https://support.apple.com/fr-fr/guide/safari/ibrw29c6ecf8/mac)
- On Chrome, it seems to be enabled out-of-the-box
## Documentation ## Documentation

5
http.go

@ -2,7 +2,6 @@ package main
import ( import (
"html/template" "html/template"
"io"
"io/ioutil" "io/ioutil"
"log" "log"
"net/http" "net/http"
@ -200,14 +199,14 @@ func (bot *PhotoBot) HandleGetMedia(w http.ResponseWriter, r *http.Request, albu
albumName = "" albumName = ""
} }
fd, err := bot.MediaStore.OpenFile(albumName, mediaFilename) fd, modtime, err := bot.MediaStore.OpenFile(albumName, mediaFilename)
if err != nil { if err != nil {
log.Printf("MediaStore.OpenFile: %s", err) log.Printf("MediaStore.OpenFile: %s", err)
bot.HandleError(w, r) bot.HandleError(w, r)
return return
} }
defer fd.Close() defer fd.Close()
io.Copy(w, fd) // Best effort http.ServeContent(w, r, mediaFilename, modtime, fd)
} }
func (bot *PhotoBot) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (bot *PhotoBot) ServeHTTP(w http.ResponseWriter, r *http.Request) {

15
media_store.go

@ -122,12 +122,23 @@ func (store *MediaStore) ListAlbums() (AlbumList, error) {
return albums, nil return albums, nil
} }
func (store *MediaStore) OpenFile(albumName string, filename string) (*os.File, error) { func (store *MediaStore) OpenFile(albumName string, filename string) (*os.File, time.Time, error) {
if albumName == "" { if albumName == "" {
albumName = ".current" albumName = ".current"
} }
return os.OpenFile(filepath.Join(store.StoreLocation, albumName, filename), os.O_RDONLY, 0600) path := filepath.Join(store.StoreLocation, albumName, filename)
stat, err := os.Stat(path)
if err != nil {
return nil, time.Time{}, err
}
fd, err := os.OpenFile(path, os.O_RDONLY, 0600)
if err != nil {
return nil, time.Time{}, err
}
return fd, stat.ModTime(), nil
} }
func (store *MediaStore) GetAlbum(name string, metadataOnly bool) (*Album, error) { func (store *MediaStore) GetAlbum(name string, metadataOnly bool) (*Album, error) {

Loading…
Cancel
Save