This commit is contained in:
parent
b3e37757a2
commit
907a191bfa
1 changed files with 37 additions and 16 deletions
45
main.go
45
main.go
|
|
@ -41,6 +41,8 @@ type handler struct {
|
|||
tg *tgbotapi.BotAPI
|
||||
bsky *bsky.BSky
|
||||
channelAdmins map[int64]bool
|
||||
openFiles []*os.File
|
||||
tempFiles []string
|
||||
}
|
||||
|
||||
var (
|
||||
|
|
@ -211,38 +213,55 @@ func (h *handler) handleVideo(media bsky.ParsedEmbeds) (tgbotapi.InputMedia, err
|
|||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create video file: %w", err)
|
||||
}
|
||||
defer func() {
|
||||
f.Close()
|
||||
os.Remove(filename)
|
||||
}()
|
||||
|
||||
if _, err := io.Copy(f, resp.Body); err != nil {
|
||||
f.Close()
|
||||
os.Remove(filename)
|
||||
return nil, fmt.Errorf("failed to write video: %w", err)
|
||||
}
|
||||
if _, err := f.Seek(0, 0); err != nil {
|
||||
f.Close()
|
||||
os.Remove(filename)
|
||||
return nil, fmt.Errorf("failed to seek video: %w", err)
|
||||
}
|
||||
|
||||
mediaAdd := tgbotapi.NewInputMediaVideo(tgbotapi.FileReader{Name: "video.mp4", Reader: f})
|
||||
|
||||
metadata, err := getVideoMetadata(f.Name())
|
||||
if err != nil {
|
||||
f.Close()
|
||||
os.Remove(filename)
|
||||
return nil, fmt.Errorf("failed to read video metadata: %w", err)
|
||||
}
|
||||
|
||||
mediaAdd.SupportsStreaming = true
|
||||
mediaAdd.Height = metadata.Height()
|
||||
mediaAdd.Width = metadata.Width()
|
||||
mediaAdd.Duration = int(metadata.Duration())
|
||||
|
||||
frames, _ := metadata.ReadFrames(0)
|
||||
var buf bytes.Buffer
|
||||
jpeg.Encode(&buf, frames[0], &jpeg.Options{Quality: 90})
|
||||
|
||||
// Keep file open for SendMediaGroup to read, cleanup happens in ProcessPost after sending
|
||||
mediaAdd := tgbotapi.NewInputMediaVideo(tgbotapi.FileReader{Name: "video.mp4", Reader: f})
|
||||
mediaAdd.SupportsStreaming = true
|
||||
mediaAdd.Height = metadata.Height()
|
||||
mediaAdd.Width = metadata.Width()
|
||||
mediaAdd.Duration = int(metadata.Duration())
|
||||
mediaAdd.Thumb = tgbotapi.FileBytes{Name: "thumb.jpg", Bytes: buf.Bytes()}
|
||||
|
||||
// Store file reference for cleanup after sending
|
||||
h.openFiles = append(h.openFiles, f)
|
||||
h.tempFiles = append(h.tempFiles, filename)
|
||||
|
||||
return &mediaAdd, nil
|
||||
}
|
||||
|
||||
func (h *handler) cleanupFiles() {
|
||||
for _, f := range h.openFiles {
|
||||
f.Close()
|
||||
}
|
||||
for _, filename := range h.tempFiles {
|
||||
os.Remove(filename)
|
||||
}
|
||||
h.openFiles = nil
|
||||
h.tempFiles = nil
|
||||
}
|
||||
|
||||
func (h *handler) ProcessPost(event *models.Event) error {
|
||||
ps, _ := h.bsky.ParsePost(event.Commit.Record)
|
||||
po := ps.GetEmbeds()
|
||||
|
|
@ -407,7 +426,9 @@ func (h *handler) ProcessPost(event *models.Event) error {
|
|||
if isEditedPost {
|
||||
h.tg.Send(tgbotapi.NewEditMessageCaption(telegramRecord.ChannelID, telegramRecord.MessageID[0], captionText))
|
||||
} else {
|
||||
resp, _ := h.tg.SendMediaGroup(tgbotapi.NewMediaGroup(cid, mediaGroup))
|
||||
resp, err := h.tg.SendMediaGroup(tgbotapi.NewMediaGroup(cid, mediaGroup))
|
||||
fmt.Println(err)
|
||||
h.cleanupFiles()
|
||||
uri, postCid := getLink(event)
|
||||
var messageIDs []int
|
||||
for _, msgID := range resp {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue