Browse Source

重构更好的支持初始化步骤的呈现和逻辑调整

Signed-off-by: allan716 <[email protected]>
allan716 2 năm trước cách đây
mục cha
commit
3996de2bbd

+ 20 - 14
internal/backend/backend.go

@@ -45,7 +45,6 @@ func NewBackEnd(
 		cronHelper:    cronHelper,
 		httpPort:      httpPort,
 		restartSignal: restartSignal,
-		preJob:        pre_job.NewPreJob(logger),
 	}
 }
 
@@ -74,6 +73,7 @@ func (b *BackEnd) start() {
 	// 默认所有都通过
 	engine.Use(cors.Default())
 	// 初始化路由
+	b.preJob = pre_job.NewPreJob(b.logger)
 	cbBase, v1Router := InitRouter(engine, b.cronHelper, b.restartSignal, b.preJob)
 	// -----------------------------------------
 	// 静态文件服务器
@@ -167,18 +167,24 @@ func (b *BackEnd) Restart() {
 
 // doPreJob 前置的任务,热修复、字幕修改文件名格式、提前下载好浏览器
 func (b *BackEnd) doPreJob() {
-	// 启动程序只会执行一次,用 Once 控制
-	// 前置的任务,热修复、字幕修改文件名格式、提前下载好浏览器
-	if settings.Get().SpeedDevMode == true {
-		return
-	}
-	if pkg.LiteMode() == false {
-		return
-	}
-	// 不启用 Chrome 相关操作
-	err := b.preJob.HotFix().ChangeSubNameFormat().Wait()
-	if err != nil {
-		b.logger.Errorln("pre_job", err)
+
+	if settings.Get().UserInfo.Username == "" || settings.Get().UserInfo.Password == "" {
+		// 如果没有完成,那么就不执行初始化
+		b.logger.Infoln("Need do Setup, then do PreJob")
+	} else {
+		// 启动程序只会执行一次,用 Once 控制
+		// 前置的任务,热修复、字幕修改文件名格式、提前下载好浏览器
+		if settings.Get().SpeedDevMode == true {
+			return
+		}
+		if pkg.LiteMode() == false {
+			return
+		}
+		// 不启用 Chrome 相关操作
+		err := b.preJob.HotFix().ChangeSubNameFormat().Wait()
+		if err != nil {
+			b.logger.Errorln("pre_job", err)
+		}
 	}
 }
 
@@ -188,7 +194,7 @@ func (b *BackEnd) doCornJob() {
 	// 启动定时任务
 	if settings.Get().UserInfo.Username == "" || settings.Get().UserInfo.Password == "" {
 		// 如果没有完成,那么就不开启
-		b.logger.Infoln("Need do Setup")
+		b.logger.Infoln("Need do Setup, then do CornJob")
 	} else {
 		// 是否完成了 Setup,如果完成了,那么就开启第一次的扫描
 		go func() {

+ 17 - 2
internal/backend/controllers/base/pre_job.go

@@ -1,6 +1,7 @@
 package base
 
 import (
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/log_and_notifi"
 	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/types/backend"
 	"github.com/gin-gonic/gin"
 	"net/http"
@@ -15,8 +16,22 @@ func (cb *ControllerBase) PreJobHandler(c *gin.Context) {
 		cb.ErrorProcess(c, "PreJobHandler", err)
 	}()
 
-	c.JSON(http.StatusOK, backend.ReplyPreJob{
+	outInfo := backend.ReplyPreJob{
 		IsDone:    cb.preJob.IsDone(),
 		StageName: cb.preJob.GetStageName(),
-	})
+	}
+	if cb.preJob.IsDone() == true {
+		// 如果完成了,那么就附加对应的消息
+		outInfo.GErrorInfo = cb.preJob.GetGError().Error()
+		errFiles := cb.preJob.GetRenameResults().ErrFiles
+		// 将 errFiles 转为 []string
+		outInfo.RenameErrResults = make([]string, 0)
+		for k, _ := range errFiles {
+			outInfo.RenameErrResults = append(outInfo.RenameErrResults, k)
+		}
+	} else {
+		outInfo.NowProcessInfo = log_and_notifi.GetNowInfo()
+	}
+
+	c.JSON(http.StatusOK, outInfo)
 }

+ 26 - 0
pkg/log_and_notifi/base.go

@@ -0,0 +1,26 @@
+package log_and_notifi
+
+import (
+	"fmt"
+	"github.com/sirupsen/logrus"
+	"sync"
+)
+
+var locker sync.Mutex
+var nowInfo string
+
+func Infoln(log *logrus.Logger, args ...interface{}) {
+	log.Infoln(args...)
+
+	defer locker.Unlock()
+	locker.Lock()
+
+	nowInfo = fmt.Sprintln(args...)
+}
+
+func GetNowInfo() string {
+	defer locker.Unlock()
+	locker.Lock()
+
+	return nowInfo
+}

+ 17 - 6
pkg/logic/pre_job/pro_job.go

@@ -15,10 +15,11 @@ import (
 )
 
 type PreJob struct {
-	stageName string
-	gError    error
-	isDone    bool
-	log       *logrus.Logger
+	stageName     string
+	gError        error
+	isDone        bool
+	log           *logrus.Logger
+	renameResults sub_formatter.RenameResults
 }
 
 func NewPreJob(log *logrus.Logger) *PreJob {
@@ -71,12 +72,13 @@ func (p *PreJob) ChangeSubNameFormat() *PreJob {
 		然后需要在数据库中记录本次的转换结果
 	*/
 	p.log.Infoln(common2.NotifyStringTellUserWait)
-	renameResults, err := sub_formatter.SubFormatChangerProcess(p.log,
+	var err error
+	p.renameResults, err = sub_formatter.SubFormatChangerProcess(p.log,
 		settings.Get().CommonSettings.MoviePaths,
 		settings.Get().CommonSettings.SeriesPaths,
 		common.FormatterName(settings.Get().AdvancedSettings.SubNameFormatter))
 	// 出错的文件有哪一些
-	for s, i := range renameResults.ErrFiles {
+	for s, i := range p.renameResults.ErrFiles {
 		p.log.Errorln("reformat ErrFile:"+s, i)
 	}
 	if err != nil {
@@ -90,6 +92,7 @@ func (p *PreJob) ChangeSubNameFormat() *PreJob {
 
 func (p *PreJob) Wait() error {
 	defer func() {
+		p.isDone = true
 		p.log.Infoln("PreJob.Wait() Done.")
 	}()
 	if p.gError != nil {
@@ -109,6 +112,14 @@ func (p *PreJob) IsDone() bool {
 	return p.isDone
 }
 
+func (p *PreJob) GetRenameResults() sub_formatter.RenameResults {
+	return p.renameResults
+}
+
+func (p *PreJob) GetGError() error {
+	return p.gError
+}
+
 const (
 	stageNameCHotFix             = "HotFix"
 	stageNameChangeSubNameFormat = "ChangeSubNameFormat"

+ 11 - 10
pkg/sub_formatter/sub_format_changer.go

@@ -3,6 +3,7 @@ package sub_formatter
 import (
 	"errors"
 	"fmt"
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/log_and_notifi"
 	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/sub_formatter/same_as_video_name"
 	"os"
 	"path/filepath"
@@ -62,27 +63,27 @@ func (s *SubFormatChanger) AutoDetectThenChangeTo(desFormatter common.FormatterN
 	outStruct.ErrFiles = make(map[string]int)
 
 	for i, dir := range s.movieRootDirs {
-		s.log.Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "Start")
+		log_and_notifi.Infoln(s.log, "AutoDetectThenChangeTo Movie Index", i, dir, "Start")
 
 		err := s.autoDetectMovieThenChangeTo(&outStruct, desFormatter, dir)
 		if err != nil {
-			s.log.Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "End")
+			log_and_notifi.Infoln(s.log, "AutoDetectThenChangeTo Movie Index", i, dir, "End")
 			return RenameResults{}, err
 		}
 
-		s.log.Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "End")
+		log_and_notifi.Infoln(s.log, "AutoDetectThenChangeTo Movie Index", i, dir, "End")
 	}
 
 	for i, dir := range s.seriesRootDirs {
-		s.log.Infoln("AutoDetectThenChangeTo Series Index", i, dir, "Start")
+		log_and_notifi.Infoln(s.log, "AutoDetectThenChangeTo Series Index", i, dir, "Start")
 
 		err := s.autoDetectMSeriesThenChangeTo(&outStruct, desFormatter, dir)
 		if err != nil {
-			s.log.Infoln("AutoDetectThenChangeTo Series Index", i, dir, "End")
+			log_and_notifi.Infoln(s.log, "AutoDetectThenChangeTo Series Index", i, dir, "End")
 			return RenameResults{}, err
 		}
 
-		s.log.Infoln("AutoDetectThenChangeTo Series Index", i, dir, "End")
+		log_and_notifi.Infoln(s.log, "AutoDetectThenChangeTo Series Index", i, dir, "End")
 	}
 
 	return outStruct, nil
@@ -106,7 +107,7 @@ func (s *SubFormatChanger) autoDetectMovieThenChangeTo(outStruct *RenameResults,
 
 		// 需要判断这个视频根目录是否有 .ignore 文件,有也跳过
 		if pkg.IsFile(filepath.Join(filepath.Dir(one), interCommon.Ignore)) == true {
-			s.log.Infoln("Found", interCommon.Ignore, "Skip", one)
+			log_and_notifi.Infoln(s.log, "Found", interCommon.Ignore, "Skip", one)
 			// 跳过下载字幕
 			continue
 		}
@@ -143,7 +144,7 @@ func (s *SubFormatChanger) autoDetectMSeriesThenChangeTo(outStruct *RenameResult
 
 		// 需要判断这个视频根目录是否有 .ignore 文件,有也跳过
 		if pkg.IsFile(filepath.Join(oneSeriesDir, interCommon.Ignore)) == true {
-			s.log.Infoln("Found", interCommon.Ignore, "Skip", oneSeriesDir)
+			log_and_notifi.Infoln(s.log, "Found", interCommon.Ignore, "Skip", oneSeriesDir)
 			// 跳过下载字幕
 			continue
 		}
@@ -222,8 +223,8 @@ func (s *SubFormatChanger) autoDetectAndChange(outStruct *RenameResults, fitSubN
 }
 
 type RenameResults struct {
-	RenamedFiles map[string]int
-	ErrFiles     map[string]int
+	RenamedFiles map[string]int `json:"renamed_files"`
+	ErrFiles     map[string]int `json:"err_files"`
 }
 
 // GetSubFormatter 选择字幕命名格式化的实例

+ 5 - 4
pkg/types/backend/reply_prejob.go

@@ -1,8 +1,9 @@
 package backend
 
 type ReplyPreJob struct {
-	IsDone                    bool   `json:"is_done"`                       // 是否完成预处理工作
-	StageName                 string `json:"stage_name"`                    // 当前的阶段名称
-	HotFixStatus              string `json:"hot_fix_status"`                // 热修复的状态
-	ChangeSubNameFormatStatus string `json:"change_sub_name_format_status"` // 修改字幕文件名格式的状态
+	IsDone           bool     `json:"is_done"`                      // 是否完成预处理工作
+	StageName        string   `json:"stage_name"`                   // 当前的阶段名称
+	RenameErrResults []string `json:"rename_err_results,omitempty"` // 重命名结果
+	GErrorInfo       string   `json:"g_error_info,omitempty"`       // 全局错误信息
+	NowProcessInfo   string   `json:"now_process_info,omitempty"`   // 当前处理的信息
 }