@@ -18,9 +18,12 @@ package media
1818
1919import (
2020 "context"
21+ "fmt"
22+ "io"
2123 "os"
2224 "strconv"
2325
26+ "github.com/klauspost/compress/gzip"
2427 "github.com/rs/zerolog"
2528 "go.mau.fi/util/ffmpeg"
2629 "go.mau.fi/util/lottie"
@@ -107,13 +110,44 @@ func (c *AnimatedStickerConfig) convertWebm(ctx context.Context, src *os.File) *
107110 }
108111}
109112
110- func (c * AnimatedStickerConfig ) convert (ctx context.Context , src * os.File ) * ConvertedSticker {
111- if c .Target == "disable" {
112- return nil
113+ func extractGZip (src * os.File ) (* ConvertedSticker , error ) {
114+ reader , err := gzip .NewReader (src )
115+ if err != nil {
116+ return nil , fmt .Errorf ("failed to create gzip reader: %w" , err )
113117 }
118+ defer func () {
119+ _ = reader .Close ()
120+ }()
121+ replFile , err := os .OpenFile (src .Name ()+ ".json" , os .O_CREATE | os .O_WRONLY | os .O_TRUNC , 0644 )
122+ if err != nil {
123+ return nil , fmt .Errorf ("failed to create temp file: %w" , err )
124+ }
125+ defer func () {
126+ _ = replFile .Close ()
127+ }()
128+ n , err := io .Copy (replFile , reader )
129+ if err != nil {
130+ return nil , fmt .Errorf ("failed to extract lottie gzip: %w" , err )
131+ }
132+ return & ConvertedSticker {
133+ Success : true ,
134+ NewPath : replFile .Name (),
135+ MIMEType : "video/lottie+json" ,
136+ Size : int (n ),
137+ }, nil
138+ }
114139
140+ func (c * AnimatedStickerConfig ) convert (ctx context.Context , src * os.File ) * ConvertedSticker {
115141 log := zerolog .Ctx (ctx ).With ().Str ("animated_sticker_target" , c .Target ).Logger ()
116142
143+ if c .Target == "disable" {
144+ converted , err := extractGZip (src )
145+ if err != nil {
146+ log .Err (err ).Msg ("Failed to extract lottie sticker" )
147+ }
148+ return converted
149+ }
150+
117151 if ! lottie .Supported () {
118152 log .Warn ().Msg ("Not converting lottie sticker as lottieconverter is not installed" )
119153 return nil
0 commit comments