diff --git a/main.go b/main.go index f60890a..90e62bb 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,8 @@ import ( "log" "os" "server/server" + cmd "server/server/terminal_cmd" + api "server/server/api" ) func main() { @@ -23,20 +25,20 @@ func main() { break } if rep == "vfolder" { - server.ChangeVFolder(&cfg) + cmd.ChangeVFolder(&cfg) fmt.Printf("After change : %+v\n", cfg) continue } if rep == "list" { - server.TakeFolder(&cfg) + cmd.TakeFolder(&cfg) continue } if rep == "config" { - server.ViewConfig(cfg) + cmd.ViewConfig(cfg) continue } if rep == "start" && cfg.StartStatut == 0 { - go server.SimpleHost(cfg) + go api.SimpleHost(cfg) cfg.StartStatut = 1 continue } diff --git a/server/api/core.go b/server/api/core.go new file mode 100644 index 0000000..8e5cddf --- /dev/null +++ b/server/api/core.go @@ -0,0 +1,19 @@ +package api + +import ( + "fmt" + "net/http" + + srv "server/server" +) + +func SimpleHost(cfg srv.Conf) { + RequestFolder(cfg) // For take folder + RequestFile(cfg) // take file + + fmt.Println("API lancer") + err := http.ListenAndServe(":8000", nil) + if err != nil { + fmt.Println("error server") + } +} \ No newline at end of file diff --git a/server/api/request_file.go b/server/api/request_file.go new file mode 100644 index 0000000..09c1439 --- /dev/null +++ b/server/api/request_file.go @@ -0,0 +1,27 @@ +package api + +import ( + "net/http" + "path/filepath" + + srv "server/server" +) + +func RequestFile(cfg srv.Conf) { + http.HandleFunc("/api/video/{filename}", func(w http.ResponseWriter, r *http.Request) { + // Allow the frontend dev server to stream video from this API. + w.Header().Set("Access-Control-Allow-Origin", "http://localhost:5173") + w.Header().Set("Access-Control-Allow-Methods", "GET, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Range") + w.Header().Set("Access-Control-Expose-Headers", "Accept-Ranges, Content-Length, Content-Range") + + if r.Method == http.MethodOptions { + w.WriteHeader(http.StatusNoContent) + return + } + + filename := r.PathValue("filename") + videoPath := filepath.Join(cfg.Path, cfg.Folder.VideoF, filename) + http.ServeFile(w, r, videoPath) + }) +} diff --git a/server/server_request.go b/server/api/request_folder.go similarity index 88% rename from server/server_request.go rename to server/api/request_folder.go index 486e72d..e214c6b 100644 --- a/server/server_request.go +++ b/server/api/request_folder.go @@ -1,10 +1,12 @@ -package server +package api import ( "encoding/json" "fmt" "net/http" "os" + + srv "server/server" ) type Item struct { @@ -22,7 +24,7 @@ var items = []Item{ {ID: 2, Name: "Item B"}, } -func SearchInFolder() ([]Folder) { +func SearchInFolder() []Folder { entries, err := os.ReadDir(".") if err != nil { return nil @@ -41,6 +43,7 @@ func SearchInFolder() ([]Folder) { return folders } + func itemsHandler(w http.ResponseWriter, r *http.Request) { // Allow the Vite dev server to read API responses from the browser. w.Header().Set("Access-Control-Allow-Origin", "http://localhost:5173") @@ -66,11 +69,6 @@ func itemsHandler(w http.ResponseWriter, r *http.Request) { } } -func SimpleHost(cfg conf) { +func RequestFolder(cfg srv.Conf) { http.HandleFunc("/", itemsHandler) - fmt.Println("API lancer") - err := http.ListenAndServe(":8000", nil) - if err != nil { - fmt.Println("error server") - } } diff --git a/server/server.go b/server/server.go index 3fc7350..be3ed77 100644 --- a/server/server.go +++ b/server/server.go @@ -14,14 +14,16 @@ type conf struct { WebtoonF string `toml:"webtoon_f"` } `toml:"folder"` Server struct { - Port int `toml:"port"` + Port int `toml:"port"` Host string `toml:"host"` } `toml:"server"` - Path string + Path string StartStatut int } -func LoadConf(path string) (conf, error) { +type Conf = conf + +func LoadConf(path string) (Conf, error) { var cfg conf _, err := toml.DecodeFile(path, &cfg) cfg.Path, err = os.Getwd() @@ -29,7 +31,7 @@ func LoadConf(path string) (conf, error) { return cfg, err } -func ServerStart() conf { +func ServerStart() Conf { cfg, err := LoadConf("config/config.toml") if err != nil { log.Fatalf("error toml") diff --git a/server/command_server.go b/server/terminal_cmd/command_server.go similarity index 74% rename from server/command_server.go rename to server/terminal_cmd/command_server.go index bee6610..ac36e69 100644 --- a/server/command_server.go +++ b/server/terminal_cmd/command_server.go @@ -1,24 +1,26 @@ -package server +package cmd import ( "fmt" "os" + + srv "server/server" ) -func ChangeVFolder(cfg *conf) { +func ChangeVFolder(cfg *srv.Conf) { var ChangePath string fmt.Println("Quelle est le nouveau path ?") fmt.Scan(&ChangePath) cfg.Folder.VideoF = ChangePath } -func TakeFolder(cfg *conf) { +func TakeFolder(cfg *srv.Conf) { fmt.Printf("Path : %v\n", cfg.Path) - folder, _ := os.ReadDir(cfg.Folder.VideoF) + folder, _ := os.ReadDir(cfg.Folder.VideoF) fmt.Printf("%+v\n", folder) } -func ViewConfig(cfg conf) { +func ViewConfig(cfg srv.Conf) { fmt.Println("\t\tCONFIG") fmt.Println("Serveur :") fmt.Printf(" - Port : %v\n", cfg.Server.Port) @@ -26,4 +28,4 @@ func ViewConfig(cfg conf) { fmt.Println("Folders :") fmt.Printf(" - Folder for videos : %v\n", cfg.Folder.VideoF) fmt.Printf(" - Folder for Webtoon : %v\n", cfg.Folder.WebtoonF) -} \ No newline at end of file +} diff --git a/web-client/index.html b/web-client/index.html index a7160cd..e594afe 100644 --- a/web-client/index.html +++ b/web-client/index.html @@ -8,6 +8,6 @@
- +