Quellcode durchsuchen

支持 cron 定时、指定时间、自定义 cron 规则,触发下载任务

Signed-off-by: allan716 <[email protected]>
allan716 vor 4 Jahren
Ursprung
Commit
fc96ef018b

+ 1 - 0
.gitignore

@@ -82,3 +82,4 @@ TestData/
 /opendebuglog
 /internal/logic/sub_supplier/subhd/cache
 /internal/logic/sub_supplier/zimuku/cache
+/internal/logic/movie_helper/Logs

+ 3 - 1
TestCode/test_chs_cht_convert.go

@@ -1,6 +1,8 @@
 package TestCode
 
-import "github.com/go-creed/sat"
+import (
+	"github.com/go-creed/sat"
+)
 
 func convertChsCht() {
 	/*

+ 30 - 0
internal/backend/controllers/base/check_cron.go

@@ -0,0 +1,30 @@
+package base
+
+import (
+	"github.com/allanpk716/ChineseSubFinder/internal/types/backend"
+	"github.com/gin-gonic/gin"
+	"github.com/robfig/cron/v3"
+	"net/http"
+)
+
+func (cb ControllerBase) CheckCronHandler(c *gin.Context) {
+	var err error
+	defer func() {
+		// 统一的异常处理
+		cb.ErrorProcess(c, "CheckCronHandler", err)
+	}()
+
+	checkCron := backend.ReqCheckCron{}
+	err = c.ShouldBindJSON(&checkCron)
+	if err != nil {
+		return
+	}
+
+	_, err2 := cron.ParseStandard(checkCron.ScanInterval)
+	if err2 != nil {
+		c.JSON(http.StatusOK, backend.ReplyCommon{Message: err2.Error()})
+		return
+	} else {
+		c.JSON(http.StatusOK, backend.ReplyCommon{Message: "ok"})
+	}
+}

+ 2 - 0
internal/backend/routers/base_router.go

@@ -28,6 +28,8 @@ func InitRouter(router *gin.Engine, cronHelper *cron_helper.CronHelper) {
 
 	router.POST("/check-proxy", cbBase.CheckProxyHandler)
 
+	router.POST("/check-cron", cbBase.CheckCronHandler)
+
 	router.GET("/def-settings", cbBase.DefSettingsHandler)
 
 	router.GET("/running-log", middle.CheckAuth(), cbBase.RunningLogHandler)

+ 5 - 4
internal/logic/cron_helper/cron_helper.go

@@ -32,7 +32,7 @@ func (ch *CronHelper) Start(runImmediately bool) {
 
 	ch.c = cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))
 	// 定时器
-	entryID, err := ch.c.AddFunc("@every "+settings.GetSettings().CommonSettings.ScanInterval, ch.coreSubDownloadProcess)
+	entryID, err := ch.c.AddFunc(settings.GetSettings().CommonSettings.ScanInterval, ch.coreSubDownloadProcess)
 	if err != nil {
 		log_helper.GetLogger().Panicln("CronHelper Cron entryID:", entryID, "Error:", err)
 	}
@@ -50,19 +50,20 @@ func (ch *CronHelper) Start(runImmediately bool) {
 		log_helper.GetLogger().Infoln("First Time coreSubDownloadProcess End")
 
 	} else {
-		log_helper.GetLogger().Infoln("RunAtStartup: false, so will not Run At Startup, wait",
-			settings.GetSettings().CommonSettings.ScanInterval, "to Download")
+		log_helper.GetLogger().Infoln("RunAtStartup: false, so will not Run At Startup")
 	}
 
 	log_helper.GetLogger().Infoln("CronHelper Start...")
-	log_helper.GetLogger().Infoln("Next Sub Scan Will Process After", settings.GetSettings().CommonSettings.ScanInterval)
 	ch.c.Start()
 
 	// 只有定时任务 start 之后才能拿到信息
 	if len(ch.c.Entries()) > 0 {
+
 		// 不会马上启动扫描,那么就需要设置当前的时间,且为 waiting
 		tttt := ch.c.Entries()[0].Next.Format("2006-01-02 15:04:05")
 		common.SetSubScanJobStatusWaiting(tttt)
+
+		log_helper.GetLogger().Infoln("Next Sub Scan Will Process At:", tttt)
 	} else {
 		log_helper.GetLogger().Errorln("Can't get cron jobs, will not send SubScanJobStatus")
 	}

+ 33 - 0
internal/logic/movie_helper/moviehelper_test.go

@@ -0,0 +1,33 @@
+package movie_helper
+
+import (
+	"testing"
+)
+
+func TestSkipChineseMovie(t *testing.T) {
+	//type args struct {
+	//	videoFullPath string
+	//}
+	//tests := []struct {
+	//	name    string
+	//	args    args
+	//	want    bool
+	//	wantErr bool
+	//}{
+	//	{name: "00", args: args{
+	//		videoFullPath: "smb://192.168.50.252/电影/Texas Chainsaw Massacre (2022)/Texas Chainsaw Massacre (2022) WEBDL-1080p.mkv",
+	//	}, want: false, wantErr: false},
+	//}
+	//for _, tt := range tests {
+	//	t.Run(tt.name, func(t *testing.T) {
+	//		got, err := SkipChineseMovie(tt.args.videoFullPath)
+	//		if (err != nil) != tt.wantErr {
+	//			t.Errorf("SkipChineseMovie() error = %v, wantErr %v", err, tt.wantErr)
+	//			return
+	//		}
+	//		if got != tt.want {
+	//			t.Errorf("SkipChineseMovie() got = %v, want %v", got, tt.want)
+	//		}
+	//	})
+	//}
+}

+ 12 - 10
internal/pkg/settings/common_settings.go

@@ -1,19 +1,21 @@
 package settings
 
 type CommonSettings struct {
-	ScanInterval     string   `json:"scan_interval"`        // 一轮字幕扫描的间隔
-	Threads          int      `json:"threads"`              // 同时扫描的并发数
-	RunScanAtStartUp bool     `json:"run_scan_at_start_up"` // 完成引导设置后,下次运行程序就开始扫描
-	MoviePaths       []string `json:"movie_paths"`          // 电影的目录
-	SeriesPaths      []string `json:"series_paths"`         // 连续剧的目录
+	IntervalOrAssignOrCustom int      `json:"interval_or_assign_or_custom"` // 扫描时间是,使用间隔还是指定时间
+	ScanInterval             string   `json:"scan_interval"`                // 一轮字幕扫描的间隔
+	Threads                  int      `json:"threads"`                      // 同时扫描的并发数
+	RunScanAtStartUp         bool     `json:"run_scan_at_start_up"`         // 完成引导设置后,下次运行程序就开始扫描
+	MoviePaths               []string `json:"movie_paths"`                  // 电影的目录
+	SeriesPaths              []string `json:"series_paths"`                 // 连续剧的目录
 }
 
 func NewCommonSettings() *CommonSettings {
 	return &CommonSettings{
-		ScanInterval:     "6h",
-		Threads:          1,
-		RunScanAtStartUp: true,
-		MoviePaths:       make([]string, 0),
-		SeriesPaths:      make([]string, 0),
+		IntervalOrAssignOrCustom: 0,
+		ScanInterval:             "@every 6h", // 间隔 6h 进行字幕的扫描 https://pkg.go.dev/github.com/robfig/cron/v3
+		Threads:                  1,
+		RunScanAtStartUp:         true,
+		MoviePaths:               make([]string, 0),
+		SeriesPaths:              make([]string, 0),
 	}
 }

+ 2 - 2
internal/pkg/settings/settings.go

@@ -128,8 +128,8 @@ func (s *Settings) Check() {
 		// 并发线程的范围控制
 		if s.CommonSettings.Threads <= 0 {
 			s.CommonSettings.Threads = 1
-		} else if s.CommonSettings.Threads >= 3 {
-			s.CommonSettings.Threads = 3
+		} else if s.CommonSettings.Threads >= 1 {
+			s.CommonSettings.Threads = 1
 		}
 	}
 }

+ 5 - 0
internal/types/backend/req_check_cron.go

@@ -0,0 +1,5 @@
+package backend
+
+type ReqCheckCron struct {
+	ScanInterval string `json:"scan_interval"  binding:"required"`
+}