1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-02 15:06:23 -07:00
gochan/pkg/posting/uploads/processvideo.go
Eggbertx b85b91c04d Don't write file thumbnail if spoiler (otherwise it overwrites /spoiler.png)
Also add spoilering for videos and non-video non-image uploads
2024-07-29 21:05:03 -07:00

79 lines
2.4 KiB
Go

package uploads
import (
"os/exec"
"strconv"
"strings"
"github.com/gochan-org/gochan/pkg/config"
"github.com/gochan-org/gochan/pkg/gcsql"
"github.com/gochan-org/gochan/pkg/gcutil"
"github.com/rs/zerolog"
)
func processVideo(upload *gcsql.Upload, post *gcsql.Post, board string, filePath string, thumbPath string, catalogThumbPath string, infoEv *zerolog.Event, accessEv *zerolog.Event, errEv *zerolog.Event) error {
boardConfig := config.GetBoardConfig(board)
infoEv.Str("post", "withVideo")
accessEv.Str("handler", "video")
var err error
if upload.IsSpoilered {
if err = createSpoilerThumbnail(upload, board, post.IsTopPost, thumbPath); err != nil {
errEv.Err(err).Caller().Msg("Unable to create spoiler thumbnail")
return ErrUnableToCreateSpoiler
}
return nil
}
if post.ThreadID == 0 {
if err = createVideoThumbnail(filePath, thumbPath, boardConfig.ThumbWidth); err != nil {
errEv.Err(err).Caller().
Int("thumbWidth", boardConfig.ThumbWidth).
Msg("Error creating video thumbnail")
return err
}
} else {
if err = createVideoThumbnail(filePath, thumbPath, boardConfig.ThumbWidthReply); err != nil {
errEv.Err(err).Caller().
Str("thumbPath", thumbPath).
Int("thumbWidth", boardConfig.ThumbWidthReply).
Msg("Error creating video thumbnail for reply")
return err
}
}
if err = createVideoThumbnail(filePath, catalogThumbPath, boardConfig.ThumbWidthCatalog); err != nil {
errEv.Err(err).Caller().
Str("thumbPath", thumbPath).
Int("thumbWidth", boardConfig.ThumbWidthCatalog).
Msg("Error creating video thumbnail for catalog")
return err
}
outputBytes, err := exec.Command("ffprobe", "-v", "quiet", "-show_format", "-show_streams", filePath).CombinedOutput()
if err != nil {
gcutil.LogError(err).Msg("Error getting video info")
return err
}
if outputBytes != nil {
outputStringArr := strings.Split(string(outputBytes), "\n")
for _, line := range outputStringArr {
lineArr := strings.Split(line, "=")
if len(lineArr) < 2 {
continue
}
value, _ := strconv.Atoi(lineArr[1])
switch lineArr[0] {
case "width":
upload.Width = value
case "height":
upload.Height = value
}
}
thumbType := ThumbnailReply
if post.ThreadID == 0 {
thumbType = ThumbnailOP
}
upload.ThumbnailWidth, upload.ThumbnailHeight = getThumbnailSize(
upload.Width, upload.Height, board, thumbType)
}
return nil
}