All checks were successful
gitea/video-server-backend/pipeline/head This commit looks good
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package handler
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"video_server_backend/internal/bufferedsocket"
|
|
|
|
"github.com/gorilla/websocket"
|
|
)
|
|
|
|
const WEBSOCKET_WRITE_BUFFER_SIZE = 4096
|
|
const VIDEOS_DIR = "./videos"
|
|
|
|
var upgrader = websocket.Upgrader{
|
|
ReadBufferSize: 1024,
|
|
WriteBufferSize: WEBSOCKET_WRITE_BUFFER_SIZE,
|
|
CheckOrigin: func(r *http.Request) bool {
|
|
return true
|
|
},
|
|
}
|
|
|
|
type Video struct {
|
|
Filename string `json:"filename"`
|
|
}
|
|
|
|
func SearchVideoHandler(w http.ResponseWriter, r *http.Request) {
|
|
query := r.URL.Query().Get("q")
|
|
if query == "" {
|
|
http.Error(w, "Query is required.", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
conn, err := upgrader.Upgrade(w, r, nil)
|
|
if err != nil {
|
|
http.Error(w, "Could not upgrade to websocket.", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
socket := bufferedsocket.NewBufferedSocket(conn, WEBSOCKET_WRITE_BUFFER_SIZE)
|
|
defer socket.Close()
|
|
|
|
err = filepath.Walk(VIDEOS_DIR, func(path string, info os.FileInfo, err error) error {
|
|
if strings.HasSuffix(path, ".mp4") && strings.Contains(path, query) {
|
|
jsonMsg, err := json.Marshal(Video{Filename: path})
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
jsonMsg = append(jsonMsg, '\n')
|
|
|
|
socket.WriteMessage(jsonMsg)
|
|
}
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
|
|
err = socket.Flush()
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
}
|