@@ -19,6 +19,7 @@ import (
19
19
"github.com/JerryZhou343/cctool/internal/translate/tencent"
20
20
"github.com/panjf2000/ants/v2"
21
21
"github.com/pkg/errors"
22
+ "strings"
22
23
"sync"
23
24
24
25
"time"
@@ -47,6 +48,8 @@ type Application struct {
47
48
//生成字幕任务
48
49
generateTaskChan chan Task
49
50
51
+ cleanTaskChan chan Task
52
+
50
53
//任务数组
51
54
taskSlice []Task
52
55
//
@@ -64,6 +67,7 @@ func NewApplication() *Application {
64
67
translatorLock : new (sync.Mutex ),
65
68
66
69
convertTaskChan : make (chan Task , 100 ),
70
+ cleanTaskChan : make (chan Task , 100 ),
67
71
68
72
generatorSet : map [string ]* SrtGenerator {},
69
73
idleGenerator : map [string ]struct {}{},
@@ -86,6 +90,7 @@ func (a *Application) Run() {
86
90
go a .translate ()
87
91
go a .convert ()
88
92
go a .generate ()
93
+ go a .clean ()
89
94
}
90
95
91
96
func (a * Application ) GetRunningMsg () string {
@@ -190,7 +195,10 @@ func (a *Application) AddTask(task Task) (err error) {
190
195
a .generateTaskChan <- task
191
196
case TaskTypeConvert :
192
197
a .convertTaskChan <- task
198
+ case TaskTypeClean :
199
+ a .cleanTaskChan <- task
193
200
}
201
+
194
202
a .msgChan <- fmt .Sprintf ("添加任务成功 %s" , task )
195
203
a .taskSlice = append (a .taskSlice , task )
196
204
return nil
@@ -205,7 +213,7 @@ func (a *Application) CheckTask() {
205
213
select {
206
214
case <- time .After (2 * time .Second ):
207
215
for _ , itr := range a .taskSlice {
208
- a .msgChan <- fmt .Sprintf ("时间: %s %s" ,time .Now ().Local ().Format ("2006-01-02 15:04:05" ), itr )
216
+ a .msgChan <- fmt .Sprintf ("时间: %s %s" , time .Now ().Local ().Format ("2006-01-02 15:04:05" ), itr )
209
217
210
218
//任务超过最大重试次数就不再尝试
211
219
if itr .GetState () == TaskStateFailed && itr .GetFailedTimes () < 10 {
@@ -371,3 +379,61 @@ func (a *Application) convert() {
371
379
}
372
380
}
373
381
}
382
+
383
+ func (a * Application ) clean () {
384
+ for {
385
+ select {
386
+ case t := <- a .cleanTaskChan :
387
+ _ = ants .Submit (func () {
388
+ var (
389
+ err error
390
+ ret []* srt.Srt
391
+ src []* srt.Srt
392
+ )
393
+ task := t .(* CleanTask )
394
+ task .State = TaskStateInit
395
+ err = task .Init ()
396
+ if err != nil {
397
+ task .State = TaskStateFailed
398
+ task .Failed (err )
399
+ return
400
+ }
401
+
402
+ src , err = srt .Open (task .SrcFile )
403
+ if err != nil {
404
+ task .State = TaskStateFailed
405
+ task .Failed (err )
406
+ return
407
+ }
408
+ //doing
409
+ task .State = TaskStateDoing
410
+ newSequence := 0
411
+ for idx , itr := range src {
412
+ task .Progress = float32 (idx + 1 ) / float32 (len (src ))
413
+ if strings .TrimSpace (itr .Subtitle ) == "" {
414
+ continue
415
+ } else {
416
+ newSequence += 1
417
+ ret = append (ret , & srt.Srt {
418
+ Sequence : newSequence ,
419
+ Start : itr .Start ,
420
+ End : itr .End ,
421
+ Subtitle : itr .Subtitle ,
422
+ })
423
+ }
424
+
425
+ }
426
+ //done
427
+ err = srt .WriteSrt (task .DstFile , ret )
428
+ if err != nil {
429
+ task .State = TaskStateFailed
430
+ task .Failed (err )
431
+ return
432
+ }
433
+ task .State = TaskStateDone
434
+ })
435
+ case <- a .ctx .Done ():
436
+ return
437
+ }
438
+ }
439
+ }
0 commit comments