/
workers.go
105 lines (94 loc) · 2.47 KB
/
workers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package core
import (
"strings"
"github.com/panjf2000/ants/v2"
log "github.com/sirupsen/logrus"
"github.com/star-39/moe-sticker-bot/pkg/msbimport"
)
// Workers pool for converting webm
var wpDownloadStickerSet *ants.PoolWithFunc
func initWorkersPool() {
// wpConvertWebm, _ = ants.NewPoolWithFunc(4, wConvertWebm)
wpDownloadStickerSet, _ = ants.NewPoolWithFunc(
8, wDownloadStickerObject)
}
// *StickerDownloadObject
func wDownloadStickerObject(i interface{}) {
obj := i.(*StickerDownloadObject)
defer obj.wg.Done()
log.Debugf("Downloading in pool: %s -> %s", obj.sticker.FileID, obj.dest)
if obj.forWebApp || obj.forWhatsApp {
err := teleDownload(&obj.sticker.File, obj.dest)
if err != nil {
log.Warnln("download: error downloading sticker:", err)
obj.err = err
return
}
if obj.forWhatsApp {
if obj.sticker.Video {
obj.err = msbimport.FFToAnimatedWebpWA(obj.dest)
} else {
obj.err = msbimport.IMToWebpWA(obj.dest)
}
if obj.forWhatsAppThumb {
if obj.sticker.Animated {
f := strings.ReplaceAll(obj.dest, ".tgs", ".webp")
obj.err = msbimport.IMToPNGThumb(f)
} else {
obj.err = msbimport.IMToPNGThumb(obj.dest)
}
}
} else {
//TGS set is not managable, no need to convert.
if obj.sticker.Video {
obj.err = msbimport.FFToAnimatedWebpLQ(obj.dest)
}
}
return
}
var f string
var cf string
var err error
if obj.sticker.Video {
f = obj.dest + ".webm"
err = teleDownload(&obj.sticker.File, f)
if obj.needConvert {
cf, _ = msbimport.FFToGif(f)
}
} else if obj.sticker.Animated {
f = obj.dest + ".tgs"
err = teleDownload(&obj.sticker.File, f)
if obj.needConvert {
cf, _ = msbimport.RlottieToGIF(f)
}
} else {
f = obj.dest + ".webp"
err = teleDownload(&obj.sticker.File, f)
if obj.needConvert {
cf, _ = msbimport.IMToPng(f)
}
}
if err != nil {
log.Warnln("download: error downloading sticker:", err)
obj.err = err
return
}
obj.of = f
obj.cf = cf
}
// *StickerMoveObject
func wSubmitSMove(i interface{}) {
obj := i.(*StickerMoveObject)
defer obj.wg.Done()
sid := obj.sd.stickerSet.Stickers[obj.oldIndex].FileID
log.Debugf("Moving in pool %d(%s) -> %d", obj.oldIndex, sid, obj.newIndex)
err := b.SetStickerPosition(sid, obj.newIndex)
if err != nil {
log.Errorln("SMove failed!!", err)
obj.err = err
} else {
log.Debugf("Sticker move OK for %s", obj.sd.stickerSet.Name)
obj.sd.stickerSet.Stickers =
sliceMove(obj.oldIndex, obj.newIndex, obj.sd.stickerSet.Stickers)
}
}