79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package server
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"git.lastassault.de/speatzle/morffix/constants"
|
|
"github.com/jackc/pgx/v5"
|
|
)
|
|
|
|
type FfmpegCommandsData struct {
|
|
FfmpegCommands []FfmpegCommand
|
|
}
|
|
|
|
type FfmpegCommand struct {
|
|
ID int `db:"id"`
|
|
Name string `db:"name"`
|
|
Data string `db:"data"`
|
|
}
|
|
|
|
func handleFfmpegCommands(w http.ResponseWriter, r *http.Request) {
|
|
data := FfmpegCommandsData{}
|
|
|
|
if r.Method == "POST" {
|
|
err := createFfmpegCommand(r)
|
|
if err != nil {
|
|
slog.ErrorContext(r.Context(), "Create FfmpegCommand", "err", err)
|
|
http.Error(w, "Error Create FfmpegCommand: "+err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
|
|
rows, err := db.Query(r.Context(), "SELECT id, name, data FROM ffmpeg_commands")
|
|
if err != nil {
|
|
slog.ErrorContext(r.Context(), "Query ffmpegCommands", "err", err)
|
|
http.Error(w, "Error Query ffmpegCommands: "+err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
ffmpegCommands, err := pgx.CollectRows[FfmpegCommand](rows, pgx.RowToStructByName[FfmpegCommand])
|
|
if err != nil {
|
|
slog.ErrorContext(r.Context(), "Collect Rows", "err", err)
|
|
http.Error(w, "Error Query ffmpegCommands: "+err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
data.FfmpegCommands = ffmpegCommands
|
|
|
|
buf := bytes.Buffer{}
|
|
err = templates.ExecuteTemplate(&buf, constants.FFMPEG_COMMANDS_TEMPLATE_NAME, data)
|
|
if err != nil {
|
|
slog.ErrorContext(r.Context(), "Executing ffmpegCommands Template", "err", err)
|
|
http.Error(w, "Error Executing Template: "+err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
_, err = w.Write(buf.Bytes())
|
|
if err != nil {
|
|
slog.ErrorContext(r.Context(), "Writing http Response", "err", err)
|
|
}
|
|
}
|
|
|
|
func createFfmpegCommand(r *http.Request) error {
|
|
err := r.ParseForm()
|
|
if err != nil {
|
|
return fmt.Errorf("Parseing Form: %w", err)
|
|
}
|
|
name := r.FormValue("name")
|
|
data := r.FormValue("data")
|
|
|
|
slog.Info("Got FfmpegCommand Create", "name", name, "data", data)
|
|
|
|
_, err = db.Exec(r.Context(), "INSERT INTO ffmpeg_commands (name, data) VALUES ($1,$2)", name, data)
|
|
if err != nil {
|
|
return fmt.Errorf("Inserting FfmpegCommand: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|