all repos — fixyoutube-go @ e642c6324ad5251d2eebbd04f9817c35cb0dccf4

A better way to embed YouTube videos everywhere (inspired by FixTweet).

invidious/invidious.go (view raw)

 1package invidious
 2
 3import (
 4	"bytes"
 5	"time"
 6
 7	"github.com/birabittoh/myks"
 8	"github.com/birabittoh/rabbitpipe"
 9	"github.com/sirupsen/logrus"
10)
11
12var logger *logrus.Logger
13var buffers *myks.KeyStore[VideoBuffer]
14var RP *rabbitpipe.Client
15
16type VideoBuffer struct {
17	Buffer *bytes.Buffer
18	Length int64
19}
20
21func Init(logLevel logrus.Level, instance string) {
22	logger = logrus.New()
23	logger.SetLevel(logLevel)
24
25	buffers = myks.New[VideoBuffer](time.Minute)
26
27	RP = rabbitpipe.New(instance)
28}
29
30func GetVideoURL(video rabbitpipe.Video) string {
31	if len(video.FormatStreams) == 0 {
32		return ""
33	}
34	return video.FormatStreams[0].URL
35}
36
37func NewVideoBuffer(b *bytes.Buffer, l int64) *VideoBuffer {
38	d := new(bytes.Buffer)
39	d.Write(b.Bytes())
40
41	return &VideoBuffer{Buffer: d, Length: l}
42}
43
44func (vb *VideoBuffer) Clone() *VideoBuffer {
45	return NewVideoBuffer(vb.Buffer, vb.Length)
46}
47
48func (vb *VideoBuffer) ValidateLength() bool {
49	return vb.Length > 0 && vb.Length == int64(vb.Buffer.Len())
50}