video-server-backend/api/handler/searchvideo.go
Jose134 d9fbf941bd
All checks were successful
gitea/video-server-backend/pipeline/head This commit looks good
Structured the project in different files
2024-08-13 19:41:53 +02:00

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)
}
}