68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
|
|
package handlers
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bufio"
|
||
|
|
"io"
|
||
|
|
"log"
|
||
|
|
"net/http"
|
||
|
|
|
||
|
|
"github.com/gofiber/fiber/v3"
|
||
|
|
"lmika.dev/lmika/weiro/models"
|
||
|
|
"lmika.dev/lmika/weiro/services/imgedit"
|
||
|
|
)
|
||
|
|
|
||
|
|
type ImageEditHandlers struct {
|
||
|
|
ImageEditService *imgedit.Service
|
||
|
|
}
|
||
|
|
|
||
|
|
func (ieh ImageEditHandlers) Create(c fiber.Ctx) error {
|
||
|
|
var req struct {
|
||
|
|
BaseUploadID int64 `json:"base_upload"`
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := c.Bind().JSON(&req); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
res, err := ieh.ImageEditService.NewSession(c.Context(), req.BaseUploadID)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
var resp = struct {
|
||
|
|
Session models.ImageEditSession `json:"session"`
|
||
|
|
PreviewURL string `json:"preview_url"`
|
||
|
|
}{
|
||
|
|
Session: res,
|
||
|
|
PreviewURL: res.PreviewURL(),
|
||
|
|
}
|
||
|
|
|
||
|
|
return c.Status(http.StatusCreated).JSON(resp)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (ieh ImageEditHandlers) Preview(c fiber.Ctx) error {
|
||
|
|
log.Printf("Previewing image edit session %v/%v", c.Params("sessionID"), c.Params("versionID"))
|
||
|
|
sessionID := c.Params("sessionID")
|
||
|
|
versionID := c.Params("versionID")
|
||
|
|
|
||
|
|
mimeTime, rw, err := ieh.ImageEditService.LoadImageVersion(c.Context(), sessionID, versionID)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
c.Set("Content-Type", mimeTime)
|
||
|
|
c.Status(http.StatusOK)
|
||
|
|
return c.SendStreamWriter(func(w *bufio.Writer) {
|
||
|
|
rw, err := rw()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer rw.Close()
|
||
|
|
|
||
|
|
_, err = io.Copy(w, rw)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|