瀏覽代碼

完成初版的手动上传字幕的功能,有待调试和编写对接文档

Signed-off-by: allan716 <[email protected]>
allan716 3 年之前
父節點
當前提交
f9c1df060f

+ 2 - 0
internal/backend/base_router.go

@@ -96,6 +96,8 @@ func InitRouter(
 
 		GroupV1.POST("/subtitles/refresh_media_server_sub_list", cbV1.RefreshMediaServerSubList)
 		GroupV1.POST("/subtitles/manual_upload_2_local", cbV1.ManualUploadSubtitle2Local)
+		GroupV1.GET("/subtitles/list_manual_upload_2_local_job", cbV1.ListManualUploadSubtitle2LocalJob)
+		GroupV1.GET("/subtitles/is_manual_upload_2_local_in_queue", cbV1.IsManualUploadSubtitle2LocalJobInQueue)
 	}
 
 	GroupAPIV1 := router.Group("/api/v1")

+ 39 - 2
internal/backend/controllers/v1/subtitles.go

@@ -4,6 +4,9 @@ import (
 	"fmt"
 	"net/http"
 	"path/filepath"
+	"strconv"
+
+	"github.com/allanpk716/ChineseSubFinder/pkg/manual_upload_sub_2_local"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg"
 
@@ -29,7 +32,7 @@ func (cb *ControllerBase) RefreshMediaServerSubList(c *gin.Context) {
 	return
 }
 
-// ManualUploadSubtitle2Local 人工上传字幕
+// ManualUploadSubtitle2Local 人工上传字幕到本地
 func (cb *ControllerBase) ManualUploadSubtitle2Local(c *gin.Context) {
 	var err error
 	defer func() {
@@ -61,8 +64,42 @@ func (cb *ControllerBase) ManualUploadSubtitle2Local(c *gin.Context) {
 		return
 	}
 
-	println("videoFPath", videoFPath)
+	cb.cronHelper.Downloader.ManualUploadSub2Local.Add(&manual_upload_sub_2_local.Job{
+		VideoFPath: videoFPath,
+		SubFPath:   filename,
+	})
 
 	c.JSON(http.StatusOK, backend2.ReplyCommon{Message: "ok"})
 	return
 }
+
+// ListManualUploadSubtitle2LocalJob 列举人工上传字幕到本地的任务列表
+func (cb *ControllerBase) ListManualUploadSubtitle2LocalJob(c *gin.Context) {
+	var err error
+	defer func() {
+		// 统一的异常处理
+		cb.ErrorProcess(c, "ListManualUploadSubtitle2LocalJob", err)
+	}()
+
+	listJob := cb.cronHelper.Downloader.ManualUploadSub2Local.ListJob()
+	c.JSON(http.StatusOK, manual_upload_sub_2_local.Reply{
+		Jobs: listJob,
+	})
+	return
+}
+
+// IsManualUploadSubtitle2LocalJobInQueue 人工上传字幕到本地的任务是否在列表中,或者说是在执行中
+func (cb *ControllerBase) IsManualUploadSubtitle2LocalJobInQueue(c *gin.Context) {
+	var err error
+	defer func() {
+		// 统一的异常处理
+		cb.ErrorProcess(c, "IsManualUploadSubtitle2LocalJobInQueue", err)
+	}()
+
+	found := cb.cronHelper.Downloader.ManualUploadSub2Local.IsJobInQueue(&manual_upload_sub_2_local.Job{
+		VideoFPath: c.Query("video_f_path"),
+	})
+
+	c.JSON(http.StatusOK, backend2.ReplyCommon{Message: strconv.FormatBool(found)})
+	return
+}

+ 10 - 1
pkg/manual_upload_sub_2_local/processor.go

@@ -1,9 +1,10 @@
 package manual_upload_sub_2_local
 
 import (
-	"github.com/pkg/errors"
 	"sync"
 
+	"github.com/pkg/errors"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg/save_sub_helper"
 	subCommon "github.com/allanpk716/ChineseSubFinder/pkg/sub_formatter/common"
 
@@ -66,6 +67,10 @@ func (m *ManualUploadSub2Local) IsJobInQueue(job *Job) bool {
 	defer func() {
 		m.addLocker.Unlock()
 	}()
+
+	if job == nil || job.VideoFPath == "" {
+		return false
+	}
 	if m.jobSet.Contains(job.VideoFPath) == true {
 		// 已经在队列中了
 		return true
@@ -192,3 +197,7 @@ type Job struct {
 	VideoFPath string
 	SubFPath   string
 }
+
+type Reply struct {
+	Jobs []*Job `json:"jobs"`
+}