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