Browse Source

完成初版的手动上传字幕到本地的功能,还需要对接

Signed-off-by: allan716 <[email protected]>
allan716 3 years ago
parent
commit
e5610bf664
3 changed files with 38 additions and 24 deletions
  1. 1 1
      go.mod
  2. 0 1
      go.sum
  3. 37 22
      pkg/manual_upload_sub_2_local/processor.go

+ 1 - 1
go.mod

@@ -72,6 +72,7 @@ require (
 	github.com/cyruzin/golang-tmdb v1.4.3
 	github.com/elazarl/goproxy v0.0.0-20220417044921-416226498f94
 	github.com/longbridgeapp/opencc v0.1.7
+	github.com/pkg/errors v0.9.1
 	github.com/urfave/cli/v2 v2.6.0
 	github.com/wumansgy/goEncrypt v1.0.0
 	github.com/xuri/excelize/v2 v2.6.0
@@ -120,7 +121,6 @@ require (
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
 	github.com/nwaples/rardecode v1.1.0 // indirect
 	github.com/pierrec/lz4/v4 v4.0.3 // indirect
-	github.com/pkg/errors v0.9.1 // indirect
 	github.com/richardlehane/mscfb v1.0.4 // indirect
 	github.com/richardlehane/msoleps v1.0.1 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect

+ 0 - 1
go.sum

@@ -148,7 +148,6 @@ github.com/elazarl/goproxy v0.0.0-20220417044921-416226498f94 h1:VIy7cdK7ufs7ctp
 github.com/elazarl/goproxy v0.0.0-20220417044921-416226498f94/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
 github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2 h1:dWB6v3RcOy03t/bUadywsbyrQwCqZeNIEX6M1OtSZOM=
 github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8=
-github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
 github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
 github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
 github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=

+ 37 - 22
pkg/manual_upload_sub_2_local/processor.go

@@ -1,11 +1,8 @@
 package manual_upload_sub_2_local
 
 import (
-	"sync"
-
-	cb "github.com/emirpasic/gods/queues/circularbuffer"
-
 	"github.com/pkg/errors"
+	"sync"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/save_sub_helper"
 	subCommon "github.com/allanpk716/ChineseSubFinder/pkg/sub_formatter/common"
@@ -32,20 +29,19 @@ type ManualUploadSub2Local struct {
 	addOneSignal     chan interface{}
 	addLocker        sync.Mutex
 	subParserHub     *sub_parser_hub.SubParserHub
-	workingJob       string // 正在操作的任务的路径
-	jobStatusQueue   *cb.Queue
+	workingJob       *Job // 正在操作的任务的路径
 }
 
 func NewManualUploadSub2Local(log *logrus.Logger, saveSubHelper *save_sub_helper.SaveSubHelper) *ManualUploadSub2Local {
 
 	m := &ManualUploadSub2Local{
-		log:            log,
-		saveSubHelper:  saveSubHelper,
-		processQueue:   llq.New(),
-		addOneSignal:   make(chan interface{}, 1),
-		subParserHub:   sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log)),
-		workingJob:     "",
-		jobStatusQueue: cb.New(100),
+		log:           log,
+		saveSubHelper: saveSubHelper,
+		processQueue:  llq.New(),
+		jobSet:        hashset.New(),
+		addOneSignal:  make(chan interface{}, 1),
+		subParserHub:  sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log)),
+		workingJob:    nil,
 	}
 
 	// 这里就不单独弄一个 settings.SubNameFormatter 字段来传递值了,因为 inSubFormatter 就已经知道是什么 formatter 了
@@ -74,15 +70,20 @@ func (m *ManualUploadSub2Local) IsJobInQueue(job *Job) bool {
 		// 已经在队列中了
 		return true
 	} else {
+
+		if m.workingJob == nil {
+			return false
+		}
 		// 还有一种可能,任务从队列拿出来了,正在处理,那么在外部开来也还是在队列中的
-		if m.workingJob == job.VideoFPath {
+		if m.workingJob.VideoFPath == job.VideoFPath && m.workingJob.SubFPath == job.SubFPath {
 			return true
 		}
 	}
 	return false
 }
 
-func (m *ManualUploadSub2Local) Add(job *Job) string {
+// Add 添加任务
+func (m *ManualUploadSub2Local) Add(job *Job) {
 
 	m.addLocker.Lock()
 	defer func() {
@@ -91,17 +92,31 @@ func (m *ManualUploadSub2Local) Add(job *Job) string {
 
 	if m.jobSet.Contains(job.VideoFPath) == true {
 		// 已经在队列中了
-		return ""
+		return
 	}
-
-	//randomKey := pkg.RandStringBytesMaskImprSrcSB(10)
-
 	m.processQueue.Enqueue(job)
 	m.jobSet.Add(job.VideoFPath)
 	// 通知有新任务了
 	m.addOneSignal <- struct{}{}
 
-	return ""
+	return
+}
+
+// ListJob 任务列表
+func (m *ManualUploadSub2Local) ListJob() []*Job {
+
+	m.addLocker.Lock()
+	defer func() {
+		m.addLocker.Unlock()
+	}()
+	ret := make([]*Job, 0)
+	for _, v := range m.processQueue.Values() {
+		ret = append(ret, v.(*Job))
+	}
+	if m.workingJob != nil {
+		ret = append(ret, m.workingJob)
+	}
+	return ret
 }
 
 func (m *ManualUploadSub2Local) dealers() {
@@ -121,7 +136,7 @@ func (m *ManualUploadSub2Local) dealers() {
 	// 移除这个任务
 	m.jobSet.Remove(job.(*Job).VideoFPath)
 	// 标记这个正在处理
-	m.workingJob = job.(*Job).VideoFPath
+	m.workingJob = job.(*Job)
 	m.addLocker.Unlock()
 	// 具体处理这个任务
 	err := m.processSub(job.(*Job))
@@ -135,7 +150,7 @@ func (m *ManualUploadSub2Local) processSub(job *Job) error {
 	defer func() {
 		// 任务处理完了
 		m.addLocker.Lock()
-		m.workingJob = ""
+		m.workingJob = nil
 		m.addLocker.Unlock()
 	}()