Sfoglia il codice sorgente

重构,剥离全局的 log_helper 逻辑,全部改为传参

Signed-off-by: 716 <[email protected]>
716 3 anni fa
parent
commit
31c779f6ce
60 ha cambiato i file con 719 aggiunte e 633 eliminazioni
  1. 6 6
      cmd/GetCAPTCHA/backend/get_code.go
  2. 15 15
      cmd/GetCAPTCHA/backend/git_helper.go
  3. 38 11
      cmd/GetCAPTCHA/main.go
  4. 60 19
      cmd/chinesesubfinder/main.go
  5. 1 1
      go.mod
  6. 1 0
      go.sum
  7. 3 4
      internal/backend/backend.go
  8. 1 2
      internal/backend/controllers/base/controller_base.go
  9. 2 2
      internal/backend/controllers/base/path_things.go
  10. 8 4
      internal/backend/controllers/v1/controller_base.go
  11. 1 1
      internal/backend/routers/base_router.go
  12. 33 26
      internal/backend/ws_helper/client.go
  13. 1 3
      internal/dao/init.go
  14. 5 21
      internal/logic/cron_helper/cron_helper.go
  15. 80 48
      internal/logic/emby_helper/embyhelper.go
  16. 1 1
      internal/logic/emby_helper/embyhelper_test.go
  17. 3 4
      internal/logic/mark_system/markingsystem.go
  18. 23 23
      internal/logic/movie_helper/moviehelper.go
  19. 2 2
      internal/logic/scan_played_video_subinfo/scan_played_video_subinfo.go
  20. 44 44
      internal/logic/series_helper/seriesHelper.go
  21. 6 5
      internal/logic/sub_parser/ass/ass.go
  22. 6 5
      internal/logic/sub_parser/srt/srt.go
  23. 1 1
      internal/logic/sub_supplier/shooter/shooter_test.go
  24. 12 14
      internal/logic/sub_supplier/subSupplierHub.go
  25. 2 2
      internal/logic/sub_supplier/subhd/subhd.go
  26. 4 4
      internal/logic/sub_supplier/subhd/subhd_test.go
  27. 1 1
      internal/logic/sub_supplier/xunlei/xunlei_test.go
  28. 3 3
      internal/logic/sub_supplier/zimuku/zimuku.go
  29. 5 5
      internal/logic/sub_supplier/zimuku/zimuku_test.go
  30. 16 14
      internal/logic/sub_timeline_fixer/SubTimelineFixerHelperEx.go
  31. 31 29
      internal/logic/sub_timeline_fixer/sub_timeline_fixer_helper.go
  32. 1 2
      internal/logic/task_queue/init.go
  33. 5 5
      internal/logic/task_queue/task_queue_test.go
  34. 0 2
      internal/pkg/decode/decode.go
  35. 1 2
      internal/pkg/download_file_cache/init.go
  36. 3 3
      internal/pkg/downloader/downloader.go
  37. 3 3
      internal/pkg/downloader/downloader_test.go
  38. 12 10
      internal/pkg/emby_api/emby_api.go
  39. 11 9
      internal/pkg/ffmpeg_helper/ffmpeg_helper.go
  40. 5 3
      internal/pkg/ffmpeg_helper/ffmpeg_info.go
  41. 14 13
      internal/pkg/hot_fix/hot_fix_001.go
  42. 8 7
      internal/pkg/hot_fix/hot_fix_002.go
  43. 11 11
      internal/pkg/hot_fix/hot_fix_hub.go
  44. 12 9
      internal/pkg/imdb_helper/imdb.go
  45. 3 3
      internal/pkg/language/string_encoding.go
  46. 3 10
      internal/pkg/log_helper/log_hub.go
  47. 11 46
      internal/pkg/log_helper/loghelper.go
  48. 1 1
      internal/pkg/my_util/util.go
  49. 4 4
      internal/pkg/my_util/util_test.go
  50. 5 4
      internal/pkg/notify_center/NotifyCenter.go
  51. 16 16
      internal/pkg/rod_helper/rodHelper.go
  52. 4 2
      internal/pkg/sub_formatter/normal/normal.go
  53. 26 24
      internal/pkg/sub_formatter/sub_format_changer.go
  54. 14 14
      internal/pkg/sub_helper/sub_helper.go
  55. 11 9
      internal/pkg/sub_parser_hub/subParserHub.go
  56. 5 5
      internal/pkg/sub_share_center/share_sub_cache_helper.go
  57. 15 13
      internal/pkg/sub_timeline_fixer/fixer.go
  58. 3 3
      internal/pkg/sub_timeline_fixer/restore.go
  59. 2 1
      internal/pkg/task_control/task_control_test.go
  60. 95 79
      internal/pkg/video_scan_and_refresh_helper/video_scan_and_refresh_helper.go

+ 6 - 6
cmd/GetCAPTCHA/backend/get_code.go

@@ -3,20 +3,20 @@ package backend
 import (
 	b64 "encoding/base64"
 	"errors"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/rod_helper"
 	"github.com/go-rod/rod/lib/proto"
+	"github.com/sirupsen/logrus"
 	"regexp"
 	"strings"
 )
 
-func GetCode(codeUrl string) (string, error) {
+func GetCode(log *logrus.Logger, codeUrl string) (string, error) {
 
 	defer func() {
-		log_helper.GetLogger().Infoln("End Get Code")
+		log.Infoln("End Get Code")
 	}()
 
-	log_helper.GetLogger().Infoln("Start Get Code...")
+	log.Infoln("Start Get Code...")
 	browser, err := rod_helper.NewBrowser("", false)
 	if err != nil {
 		return "", err
@@ -52,8 +52,8 @@ func GetCode(codeUrl string) (string, error) {
 
 	sEnc := b64.StdEncoding.EncodeToString([]byte(code))
 
-	log_helper.GetLogger().Infoln("code:", code)
-	log_helper.GetLogger().Infoln("sEnc:", sEnc)
+	log.Infoln("code:", code)
+	log.Infoln("sEnc:", sEnc)
 
 	return sEnc, nil
 }

+ 15 - 15
cmd/GetCAPTCHA/backend/git_helper.go

@@ -3,21 +3,21 @@ package backend
 import (
 	"fmt"
 	"github.com/allanpk716/ChineseSubFinder/cmd/GetCAPTCHA/backend/config"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/something_static"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	"github.com/go-git/go-git/v5"
 	"github.com/go-git/go-git/v5/plumbing/object"
 	"github.com/go-git/go-git/v5/plumbing/transport/ssh"
+	"github.com/sirupsen/logrus"
 	sshOrg "golang.org/x/crypto/ssh"
 	"os"
 	"time"
 )
 
-func GitProcess(config config.Config, enString string) error {
+func GitProcess(log *logrus.Logger, config config.Config, enString string) error {
 
-	log_helper.GetLogger().Infoln("Now Time", time.Now().Format("2006-01-02 15:04:05"))
+	log.Infoln("Now Time", time.Now().Format("2006-01-02 15:04:05"))
 	var delFileNames []string
 	nowTT := time.Now()
 	nowTime := nowTT.Format("2006-01-02")
@@ -34,7 +34,7 @@ func GitProcess(config config.Config, enString string) error {
 	var w *git.Worktree
 	if my_util.IsDir(config.CloneProjectDesSaveDir) == true {
 		// 需要 pull
-		log_helper.GetLogger().Infoln("Pull Start...")
+		log.Infoln("Pull Start...")
 		r, err = git.PlainOpen(config.CloneProjectDesSaveDir)
 		if err != nil {
 			return err
@@ -49,11 +49,11 @@ func GitProcess(config config.Config, enString string) error {
 				return err
 			}
 		}
-		log_helper.GetLogger().Infoln("Pull End")
+		log.Infoln("Pull End")
 
 	} else {
 		// 需要 clone
-		log_helper.GetLogger().Infoln("PlainClone Start...")
+		log.Infoln("PlainClone Start...")
 
 		r, err = git.PlainClone(config.CloneProjectDesSaveDir, false, &git.CloneOptions{
 			Auth:     publicKeys,
@@ -63,7 +63,7 @@ func GitProcess(config config.Config, enString string) error {
 		if err != nil {
 			return err
 		}
-		log_helper.GetLogger().Infoln("PlainClone End")
+		log.Infoln("PlainClone End")
 
 	}
 	// 存储外部传入的字符串到文件
@@ -73,18 +73,18 @@ func GitProcess(config config.Config, enString string) error {
 	}
 	if bok == false {
 		// 说明无需继续,因为文件没有变化
-		log_helper.GetLogger().Infoln("Code not change, Skip This Time")
+		log.Infoln("Code not change, Skip This Time")
 		return nil
 	}
 
-	log_helper.GetLogger().Infoln("Write File Done")
+	log.Infoln("Write File Done")
 	w, err = r.Worktree()
 	if err != nil {
 		return err
 	}
 
 	// 遍历当前文件夹,仅仅保留当天的文件 nowTimeFileNamePrix + common.StaticFileName00
-	delFileNames, err = delExpireFile(config.CloneProjectDesSaveDir, nowTimeFileNamePrix+common.StaticFileName00)
+	delFileNames, err = delExpireFile(log, config.CloneProjectDesSaveDir, nowTimeFileNamePrix+common.StaticFileName00)
 	if err != nil {
 		return err
 	}
@@ -100,7 +100,7 @@ func GitProcess(config config.Config, enString string) error {
 		return err
 	}
 	status, err := w.Status()
-	log_helper.GetLogger().Infoln("Status", status)
+	log.Infoln("Status", status)
 	commit, err := w.Commit("update", &git.CommitOptions{
 		Author: &object.Signature{
 			Name:  "haha",
@@ -115,7 +115,7 @@ func GitProcess(config config.Config, enString string) error {
 	if err != nil {
 		return err
 	}
-	log_helper.GetLogger().Infoln("Commit Done")
+	log.Infoln("Commit Done")
 	err = r.Push(&git.PushOptions{
 		Auth: publicKeys,
 	})
@@ -123,12 +123,12 @@ func GitProcess(config config.Config, enString string) error {
 		return err
 	}
 
-	log_helper.GetLogger().Infoln("Push Done.")
+	log.Infoln("Push Done.")
 
 	return nil
 }
 
-func delExpireFile(dir string, goldName string) ([]string, error) {
+func delExpireFile(log *logrus.Logger, dir string, goldName string) ([]string, error) {
 
 	delFileNames := make([]string, 0)
 	pathSep := string(os.PathSeparator)
@@ -149,7 +149,7 @@ func delExpireFile(dir string, goldName string) ([]string, error) {
 			// 这里就是文件了
 			if curFile.Name() != goldName {
 
-				log_helper.GetLogger().Infoln("Del Expire File:", fullPath)
+				log.Infoln("Del Expire File:", fullPath)
 				err = os.Remove(fullPath)
 				if err != nil {
 					return nil, err

+ 38 - 11
cmd/GetCAPTCHA/main.go

@@ -3,16 +3,41 @@ package main
 import (
 	"github.com/allanpk716/ChineseSubFinder/cmd/GetCAPTCHA/backend"
 	"github.com/allanpk716/ChineseSubFinder/cmd/GetCAPTCHA/backend/config"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
 	"github.com/robfig/cron/v3"
+	"github.com/sirupsen/logrus"
+	"path/filepath"
+	"time"
 )
 
-func main() {
+func newLog() *logrus.Logger {
+	var level logrus.Level
+	// --------------------------------------------------
+	// 之前是读取配置文件,现在改为,读取当前目录下,是否有一个特殊的文件,有则启动 Debug 日志级别
+	// 那么怎么写入这个文件,就靠额外的逻辑控制了
+	if my_util.IsFile(filepath.Join(global_value.ConfigRootDirFPath(), log_helper.DebugFileName)) == true {
+		level = logrus.DebugLevel
+	} else {
+		level = logrus.InfoLevel
+	}
+	logger := log_helper.NewLogHelper(log_helper.LogNameGetCAPTCHA,
+		global_value.ConfigRootDirFPath(),
+		level, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour)
+	logger.AddHook(log_helper.NewLoggerHub())
+
+	return logger
+}
 
-	log_helper.SetLoggerName(log_helper.LogNameGetCAPTCHA)
+func init() {
+	loggerBase = newLog()
+}
+
+func main() {
 
-	notify_center.Notify = notify_center.NewNotifyCenter(config.GetConfig().WhenSubSupplierInvalidWebHook)
+	notify_center.Notify = notify_center.NewNotifyCenter(loggerBase, config.GetConfig().WhenSubSupplierInvalidWebHook)
 
 	// 任务还没执行完,下一次执行时间到来,下一次执行就跳过不执行
 	c := cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))
@@ -21,20 +46,20 @@ func main() {
 
 		err := Process()
 		if err != nil {
-			log_helper.GetLogger().Errorln(err.Error())
+			loggerBase.Errorln(err.Error())
 			return
 		}
 	})
 	if err != nil {
-		log_helper.GetLogger().Errorln("cron entryID:", entryID, "Error:", err)
+		loggerBase.Errorln("cron entryID:", entryID, "Error:", err)
 		return
 	}
 	// 先执行一次
-	log_helper.GetLogger().Infoln("-----------------------------------------")
-	log_helper.GetLogger().Infoln("First Time Start")
+	loggerBase.Infoln("-----------------------------------------")
+	loggerBase.Infoln("First Time Start")
 	err = Process()
 	if err != nil {
-		log_helper.GetLogger().Errorln(err.Error())
+		loggerBase.Errorln(err.Error())
 	}
 
 	c.Start()
@@ -55,17 +80,19 @@ func Process() error {
 		notify_center.Notify.Send()
 	}()
 
-	log_helper.GetLogger().Infoln("-----------------------------------------")
+	loggerBase.Infoln("-----------------------------------------")
 
-	codeB64, err := backend.GetCode(config.GetConfig().DesURL)
+	codeB64, err := backend.GetCode(loggerBase, config.GetConfig().DesURL)
 	if err != nil {
 		return err
 	}
 
-	err = backend.GitProcess(*config.GetConfig(), codeB64)
+	err = backend.GitProcess(loggerBase, *config.GetConfig(), codeB64)
 	if err != nil {
 		return err
 	}
 
 	return nil
 }
+
+var loggerBase *logrus.Logger

+ 60 - 19
cmd/chinesesubfinder/main.go

@@ -9,40 +9,79 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
+	"github.com/sirupsen/logrus"
 	"os"
+	"path/filepath"
 	"strconv"
+	"time"
 )
 
-func init() {
+func newLog() *logrus.Logger {
+	var level logrus.Level
+	// --------------------------------------------------
+	// 之前是读取配置文件,现在改为,读取当前目录下,是否有一个特殊的文件,有则启动 Debug 日志级别
+	// 那么怎么写入这个文件,就靠额外的逻辑控制了
+	if my_util.IsFile(filepath.Join(global_value.ConfigRootDirFPath(), log_helper.DebugFileName)) == true {
+		level = logrus.DebugLevel
+	} else {
+		level = logrus.InfoLevel
+	}
+	logger := log_helper.NewLogHelper(log_helper.LogNameChineseSubFinder,
+		global_value.ConfigRootDirFPath(),
+		level, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour)
+	logger.AddHook(log_helper.NewLoggerHub())
 
-	log_helper.GetLogger().Infoln("ChineseSubFinder Version:", AppVersion)
+	return logger
+}
+
+func init() {
+	loggerBase = newLog()
+	// --------------------------------------------------
+	loggerBase.Infoln("ChineseSubFinder Version:", AppVersion)
 
 	global_value.SetAppVersion(AppVersion)
 
 	global_value.SetExtEnCode(ExtEnCode)
 
 	if my_util.OSCheck() == false {
-		log_helper.GetLogger().Panicln(`You should search runtime.GOOS in the project, Implement unimplemented function`)
+		loggerBase.Panicln(`You should search runtime.GOOS in the project, Implement unimplemented function`)
 	}
 }
 
 func main() {
 
-	//// ----------------------------------------------
+	// ------------------------------------------------------------------------
+	// 如果是 Debug 模式,那么就需要写入特殊文件
+	if settings.GetSettings().AdvancedSettings.DebugMode == true {
+		err := log_helper.WriteDebugFile()
+		if err != nil {
+			loggerBase.Errorln("log_helper.WriteDebugFile " + err.Error())
+		}
+		loggerBase = newLog()
+		loggerBase.Infoln("Reload Log Settings, level = Debug")
+	} else {
+		err := log_helper.DeleteDebugFile()
+		if err != nil {
+			loggerBase.Errorln("log_helper.DeleteDebugFile " + err.Error())
+		}
+		loggerBase = newLog()
+		loggerBase.Infoln("Reload Log Settings, level = Info")
+	}
+	// ------------------------------------------------------------------------
 	//// 前置的任务,热修复、字幕修改文件名格式、提前下载好浏览器
-	//pj := pre_job.NewPreJob(settings.GetSettings(), log_helper.GetLogger())
+	//pj := pre_job.NewPreJob(settings.GetSettings(), loggerBase)
 	//err := pj.HotFix().ChangeSubNameFormat().ReloadBrowser().Wait()
 	//if err != nil {
-	//	log_helper.GetLogger().Panicln("pre_job", err)
+	//	loggerBase.Panicln("pre_job", err)
 	//}
 	//// ----------------------------------------------
-	//scan, err := scan_played_video_subinfo.NewScanPlayedVideoSubInfo(log_helper.GetLogger(), settings.GetSettings())
+	//scan, err := scan_played_video_subinfo.NewScanPlayedVideoSubInfo(loggerBase, settings.GetSettings())
 	//if err != nil {
-	//	log_helper.GetLogger().Panicln(err)
+	//	loggerBase.Panicln(err)
 	//}
 	//bok, err := scan.GetPlayedItemsSubtitle()
 	//if err != nil {
-	//	log_helper.GetLogger().Panicln(err)
+	//	loggerBase.Panicln(err)
 	//}
 	//if bok == true {
 	//
@@ -50,25 +89,25 @@ func main() {
 	//
 	//	err = scan.Scan()
 	//	if err != nil {
-	//		log_helper.GetLogger().Panicln(err)
+	//		loggerBase.Panicln(err)
 	//	}
 	//}
 	// ----------------------------------------------
-	fileDownloader := file_downloader.NewFileDownloader(settings.GetSettings(), log_helper.GetLogger())
+	fileDownloader := file_downloader.NewFileDownloader(settings.GetSettings(), loggerBase)
 	cronHelper := cron_helper.NewCronHelper(fileDownloader)
 	if settings.GetSettings().UserInfo.Username == "" || settings.GetSettings().UserInfo.Password == "" {
 		// 如果没有完成,那么就不开启
-		log_helper.GetLogger().Infoln("Need do Setup")
+		loggerBase.Infoln("Need do Setup")
 	} else {
 		// 是否完成了 Setup,如果完成了,那么就开启第一次的扫描
 		go func() {
-			log_helper.GetLogger().Infoln("Setup is Done")
+			loggerBase.Infoln("Setup is Done")
 			cronHelper.Start(settings.GetSettings().CommonSettings.RunScanAtStartUp)
 		}()
 	}
 
 	nowPort := readCustomPortFile()
-	log_helper.GetLogger().Infoln(fmt.Sprintf("WebUI will listen at 0.0.0.0:%d", nowPort))
+	loggerBase.Infoln(fmt.Sprintf("WebUI will listen at 0.0.0.0:%d", nowPort))
 	// 支持在外部配置特殊的端口号,以防止本地本占用了无法使用
 	backend.StartBackEnd(fileDownloader, nowPort, cronHelper)
 }
@@ -79,19 +118,19 @@ func readCustomPortFile() int {
 	} else {
 		bytes, err := os.ReadFile(customPort)
 		if err != nil {
-			log_helper.GetLogger().Errorln("ReadFile CustomPort Error", err)
-			log_helper.GetLogger().Infoln("Use DefPort", defPort)
+			loggerBase.Errorln("ReadFile CustomPort Error", err)
+			loggerBase.Infoln("Use DefPort", defPort)
 			return defPort
 		}
 
 		atoi, err := strconv.Atoi(string(bytes))
 		if err != nil {
-			log_helper.GetLogger().Errorln("Atoi CustomPort Error", err)
-			log_helper.GetLogger().Infoln("Use DefPort", defPort)
+			loggerBase.Errorln("Atoi CustomPort Error", err)
+			loggerBase.Infoln("Use DefPort", defPort)
 			return defPort
 		}
 
-		log_helper.GetLogger().Infoln("Use CustomPort", atoi)
+		loggerBase.Infoln("Use CustomPort", atoi)
 		return atoi
 	}
 }
@@ -108,3 +147,5 @@ const (
 	defPort    = 19035
 	customPort = "CustomPort"
 )
+
+var loggerBase *logrus.Logger

+ 1 - 1
go.mod

@@ -70,6 +70,7 @@ require (
 require (
 	github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de
 	github.com/dgraph-io/badger/v3 v3.2103.2
+	github.com/elazarl/goproxy v0.0.0-20220417044921-416226498f94
 )
 
 require (
@@ -88,7 +89,6 @@ require (
 	github.com/dgraph-io/ristretto v0.1.0 // indirect
 	github.com/dsnet/compress v0.0.1 // indirect
 	github.com/dustin/go-humanize v1.0.0 // indirect
-	github.com/elazarl/goproxy v0.0.0-20220417044921-416226498f94 // indirect
 	github.com/gin-contrib/sse v0.1.0 // indirect
 	github.com/go-git/gcfg v1.5.0 // indirect
 	github.com/go-git/go-billy/v5 v5.3.1 // indirect

+ 1 - 0
go.sum

@@ -150,6 +150,7 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP
 github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
 github.com/elazarl/goproxy v0.0.0-20220417044921-416226498f94 h1:VIy7cdK7ufs7ctpTFkXJHm1uP3dJSnCGSPysEICB1so=
 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=

+ 3 - 4
internal/backend/backend.go

@@ -7,7 +7,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/backend/ws_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/cron_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/gin-contrib/cors"
 	"github.com/gin-gonic/gin"
 	"io/ioutil"
@@ -43,13 +42,13 @@ func StartBackEnd(fileDownloader *file_downloader.FileDownloader, httpPort int,
 	go hub.Run()
 
 	engine.GET("/ws", func(context *gin.Context) {
-		ws_helper.ServeWs(hub, context.Writer, context.Request)
+		ws_helper.ServeWs(fileDownloader.Log, hub, context.Writer, context.Request)
 	})
 
 	// listen and serve on 0.0.0.0:8080(default)
-	log_helper.GetLogger().Infoln("Try Start Server At Port", httpPort)
+	fileDownloader.Log.Infoln("Try Start Server At Port", httpPort)
 	err := engine.Run(":" + fmt.Sprintf("%d", httpPort))
 	if err != nil {
-		log_helper.GetLogger().Errorln("Start Server At Port", httpPort, "Error", err)
+		fileDownloader.Log.Errorln("Start Server At Port", httpPort, "Error", err)
 	}
 }

+ 1 - 2
internal/backend/controllers/base/controller_base.go

@@ -2,7 +2,6 @@ package base
 
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/backend"
 	"github.com/gin-gonic/gin"
 	"net/http"
@@ -20,7 +19,7 @@ func NewControllerBase(fileDownloader *file_downloader.FileDownloader) *Controll
 
 func (cb *ControllerBase) ErrorProcess(c *gin.Context, funcName string, err error) {
 	if err != nil {
-		log_helper.GetLogger().Errorln(funcName, err.Error())
+		cb.fileDownloader.Log.Errorln(funcName, err.Error())
 		c.JSON(http.StatusInternalServerError, backend.ReplyCommon{Message: err.Error()})
 	}
 }

+ 2 - 2
internal/backend/controllers/base/path_things.go

@@ -33,7 +33,7 @@ func (cb ControllerBase) CheckPathHandler(c *gin.Context) {
 	}
 }
 
-func (cb ControllerBase) CheckEmbyPathHandler(c *gin.Context) {
+func (cb *ControllerBase) CheckEmbyPathHandler(c *gin.Context) {
 	var err error
 	defer func() {
 		// 统一的异常处理
@@ -63,7 +63,7 @@ func (cb ControllerBase) CheckEmbyPathHandler(c *gin.Context) {
 		emSettings.SeriesPathsMapping[reqCheckPath.CFSMediaPath] = reqCheckPath.EmbyMediaPath
 	}
 
-	emHelper := emby_helper.NewEmbyHelper(&settings.Settings{EmbySettings: &emSettings})
+	emHelper := emby_helper.NewEmbyHelper(cb.fileDownloader.Log, &settings.Settings{EmbySettings: &emSettings})
 
 	outList, err := emHelper.CheckPath(reqCheckPath.PathType)
 	if err != nil {

+ 8 - 4
internal/backend/controllers/v1/controller_base.go

@@ -2,18 +2,22 @@ package v1
 
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/cron_helper"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/backend"
 	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
 	"net/http"
 )
 
 type ControllerBase struct {
+	log        *logrus.Logger
 	cronHelper *cron_helper.CronHelper
 }
 
-func NewControllerBase(cronHelper *cron_helper.CronHelper) *ControllerBase {
-	return &ControllerBase{cronHelper}
+func NewControllerBase(log *logrus.Logger, cronHelper *cron_helper.CronHelper) *ControllerBase {
+	return &ControllerBase{
+		log:        log,
+		cronHelper: cronHelper,
+	}
 }
 
 func (cb ControllerBase) GetVersion() string {
@@ -22,7 +26,7 @@ func (cb ControllerBase) GetVersion() string {
 
 func (cb *ControllerBase) ErrorProcess(c *gin.Context, funcName string, err error) {
 	if err != nil {
-		log_helper.GetLogger().Errorln(funcName, err.Error())
+		cb.log.Errorln(funcName, err.Error())
 		c.JSON(http.StatusInternalServerError, backend.ReplyCommon{Message: err.Error()})
 	}
 }

+ 1 - 1
internal/backend/routers/base_router.go

@@ -12,7 +12,7 @@ import (
 func InitRouter(fileDownloader *file_downloader.FileDownloader, router *gin.Engine, cronHelper *cron_helper.CronHelper) {
 
 	cbBase := base.NewControllerBase(fileDownloader)
-	cbV1 := v1.NewControllerBase(cronHelper)
+	cbV1 := v1.NewControllerBase(fileDownloader.Log, cronHelper)
 	// 基础的路由
 	router.GET("/system-status", cbBase.SystemStatusHandler)
 

+ 33 - 26
internal/backend/ws_helper/client.go

@@ -9,6 +9,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/types/backend/ws"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/log_hub"
 	"github.com/gorilla/websocket"
+	"github.com/sirupsen/logrus"
 	"net/http"
 	"sync"
 	"time"
@@ -48,6 +49,7 @@ var upGrader = websocket.Upgrader{
 }
 
 type Client struct {
+	log              *logrus.Logger
 	hub              *Hub
 	conn             *websocket.Conn // 与服务器连接实例
 	sendLogLineIndex int             // 日志发送到那个位置了
@@ -56,6 +58,10 @@ type Client struct {
 	closeOnce        sync.Once
 }
 
+func NewClient(log *logrus.Logger, hub *Hub, conn *websocket.Conn, sendLogLineIndex int, authed bool, send chan []byte) *Client {
+	return &Client{log: log, hub: hub, conn: conn, sendLogLineIndex: sendLogLineIndex, authed: authed, send: send}
+}
+
 func (c *Client) close() {
 	c.closeOnce.Do(func() {
 		c.hub.unregister <- c
@@ -68,7 +74,7 @@ func (c *Client) readPump() {
 
 	defer func() {
 		if err := recover(); err != nil {
-			log_helper.GetLogger().Debugln("readPump.recover", err)
+			c.log.Debugln("readPump.recover", err)
 		}
 	}()
 
@@ -82,7 +88,7 @@ func (c *Client) readPump() {
 	c.conn.SetReadLimit(maxMessageSize)
 	err = c.conn.SetReadDeadline(time.Now().Add(pongWait))
 	if err != nil {
-		log_helper.GetLogger().Debugln("readPump.SetReadDeadline", err)
+		c.log.Debugln("readPump.SetReadDeadline", err)
 		return
 	}
 	c.conn.SetPongHandler(func(string) error {
@@ -93,7 +99,7 @@ func (c *Client) readPump() {
 		_, message, err = c.conn.ReadMessage()
 		if err != nil {
 			if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
-				log_helper.GetLogger().Debugln("readPump.IsUnexpectedCloseError", err)
+				c.log.Debugln("readPump.IsUnexpectedCloseError", err)
 			}
 			return
 		}
@@ -101,7 +107,7 @@ func (c *Client) readPump() {
 		revMessage := ws.BaseMessage{}
 		err = json.Unmarshal(message, &revMessage)
 		if err != nil {
-			log_helper.GetLogger().Debugln("readPump.BaseMessage.parse", err)
+			c.log.Debugln("readPump.BaseMessage.parse", err)
 			return
 		}
 
@@ -115,7 +121,7 @@ func (c *Client) readPump() {
 			login := ws.Login{}
 			err = json.Unmarshal([]byte(revMessage.Data), &login)
 			if err != nil {
-				log_helper.GetLogger().Debugln("readPump.Login.parse", err)
+				c.log.Debugln("readPump.Login.parse", err)
 				return
 			}
 
@@ -124,7 +130,7 @@ func (c *Client) readPump() {
 				// 发送 token 失败的消息
 				outBytes, err := AuthReply(ws.AuthError)
 				if err != nil {
-					log_helper.GetLogger().Debugln("readPump.AuthReply", err)
+					c.log.Debugln("readPump.AuthReply", err)
 					return
 				}
 				c.send <- outBytes
@@ -135,7 +141,7 @@ func (c *Client) readPump() {
 				// Token 通过
 				outBytes, err := AuthReply(ws.AuthOk)
 				if err != nil {
-					log_helper.GetLogger().Debugln("readPump.AuthReply", err)
+					c.log.Debugln("readPump.AuthReply", err)
 					return
 				}
 				c.send <- outBytes
@@ -153,7 +159,7 @@ func (c *Client) writePump() {
 
 	defer func() {
 		if err := recover(); err != nil {
-			log_helper.GetLogger().Debugln("writePump.recover", err)
+			c.log.Debugln("writePump.recover", err)
 		}
 	}()
 
@@ -182,42 +188,42 @@ func (c *Client) writePump() {
 			// 当然首先还是得先把当前消息的发送超时,给确定下来
 			err := c.conn.SetWriteDeadline(time.Now().Add(writeWait))
 			if err != nil {
-				log_helper.GetLogger().Debugln("writePump.SetWriteDeadline", err)
+				c.log.Debugln("writePump.SetWriteDeadline", err)
 				return
 			}
 			if ok == false {
 				// The hub closed the channel.
 				err = c.conn.WriteMessage(websocket.CloseMessage, []byte{})
 				if err != nil {
-					log_helper.GetLogger().Debugln("writePump close hub WriteMessage", err)
+					c.log.Debugln("writePump close hub WriteMessage", err)
 				}
 				return
 			}
 
 			w, err := c.conn.NextWriter(websocket.TextMessage)
 			if err != nil {
-				log_helper.GetLogger().Debugln("writePump.NextWriter", err)
+				c.log.Debugln("writePump.NextWriter", err)
 				return
 			}
 			_, err = w.Write(message)
 			if err != nil {
-				log_helper.GetLogger().Debugln("writePump.Write", err)
+				c.log.Debugln("writePump.Write", err)
 				return
 			}
 
 			if err := w.Close(); err != nil {
-				log_helper.GetLogger().Debugln("writePump.Close", err)
+				c.log.Debugln("writePump.Close", err)
 				return
 			}
 		case <-pingTicker.C:
 			// 心跳相关,这里是定时器到了触发的间隔,设置发送下一条心跳的超时时间
 			if err := c.conn.SetWriteDeadline(time.Now().Add(writeWait)); err != nil {
-				log_helper.GetLogger().Debugln("writePump.pingTicker.C.SetWriteDeadline", err)
+				c.log.Debugln("writePump.pingTicker.C.SetWriteDeadline", err)
 				return
 			}
 			// 然后发送心跳
 			if err := c.conn.WriteMessage(websocket.PingMessage, nil); err != nil {
-				log_helper.GetLogger().Debugln("writePump.pingTicker.C.WriteMessage", err)
+				c.log.Debugln("writePump.pingTicker.C.WriteMessage", err)
 				return
 			}
 		case <-subScanJobStatusTicker.C:
@@ -234,7 +240,7 @@ func (c *Client) writePump() {
 			// 统一丢到 send 里面得了
 			outLogsBytes, err := SubScanJobStatusReply(info)
 			if err != nil {
-				log_helper.GetLogger().Debugln("writePump.SubScanJobStatusReply", err)
+				c.log.Debugln("writePump.SubScanJobStatusReply", err)
 				return
 			}
 			c.send <- outLogsBytes
@@ -253,7 +259,7 @@ func (c *Client) writePump() {
 			// 这里需要考虑一次性的信息太多,超过发送的缓冲区,所以需要拆分发送
 			outLogsBytes, err := RunningLogReply(nowRunningLog, c.sendLogLineIndex)
 			if err != nil {
-				log_helper.GetLogger().Debugln("writePump.RunningLogReply", err)
+				c.log.Debugln("writePump.RunningLogReply", err)
 				return
 			}
 			// 拆分到一条日志来发送
@@ -341,21 +347,22 @@ func SubScanJobStatusReply(info *ws.SubDownloadJobInfo) ([]byte, error) {
 }
 
 // ServeWs 每个 Client 连接 ws 上线时触发
-func ServeWs(hub *Hub, w http.ResponseWriter, r *http.Request) {
+func ServeWs(log *logrus.Logger, hub *Hub, w http.ResponseWriter, r *http.Request) {
 
 	conn, err := upGrader.Upgrade(w, r, nil)
 	if err != nil {
-		log_helper.GetLogger().Errorln("ServeWs.Upgrade", err)
+		log.Errorln("ServeWs.Upgrade", err)
 		return
 	}
 
-	client := &Client{
-		hub:              hub,
-		conn:             conn,
-		sendLogLineIndex: 0,
-		authed:           false,
-		send:             make(chan []byte, bufSize),
-	}
+	client := NewClient(
+		log,
+		hub,
+		conn,
+		0,
+		false,
+		make(chan []byte, bufSize),
+	)
 	client.hub.register <- client
 
 	go client.writePump()

+ 1 - 3
internal/dao/init.go

@@ -4,7 +4,6 @@ import (
 	"errors"
 	"fmt"
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"gorm.io/driver/sqlite"
@@ -20,8 +19,7 @@ func GetDb() *gorm.DB {
 		once.Do(func() {
 			err := InitDb()
 			if err != nil {
-				log_helper.GetLogger().Errorln("dao.InitDb()", err)
-				log_helper.GetLogger().Panicln(err)
+				panic(err)
 			}
 		})
 	}

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

@@ -61,7 +61,7 @@ func (ch *CronHelper) Start(runImmediately bool) {
 	// ----------------------------------------------
 	// 初始化下载者,里面的两个 func 需要使用定时器启动 SupplierCheck QueueDownloader
 	ch.downloader = downloader.NewDownloader(
-		sub_formatter.GetSubFormatter(ch.sets.AdvancedSettings.SubNameFormatter),
+		sub_formatter.GetSubFormatter(ch.log, ch.sets.AdvancedSettings.SubNameFormatter),
 		ch.fileDownloader, ch.downloadQueue)
 	// ----------------------------------------------
 	// 判断扫描任务的时间间隔是否符合要求,不符合则重写默认值
@@ -206,22 +206,6 @@ func (ch *CronHelper) scanVideoProcessAdd2DownloadQueue() {
 		tttt := ch.c.Entry(ch.entryIDScanVideoProcess).Next.Format("2006-01-02 15:04:05")
 		common.SetSubScanJobStatusWaiting(tttt)
 	}()
-
-	// ------------------------------------------------------------------------
-	// 如果是 Debug 模式,那么就需要写入特殊文件
-	if ch.sets.AdvancedSettings.DebugMode == true {
-		err := log_helper.WriteDebugFile()
-		if err != nil {
-			ch.log.Errorln("log_helper.WriteDebugFile " + err.Error())
-		}
-		log_helper.GetLogger(true).Infoln("Reload Log Settings, level = Debug")
-	} else {
-		err := log_helper.DeleteDebugFile()
-		if err != nil {
-			ch.log.Errorln("log_helper.DeleteDebugFile " + err.Error())
-		}
-		log_helper.GetLogger(true).Infoln("Reload Log Settings, level = Info")
-	}
 	// ------------------------------------------------------------------------
 	// 开始标记,这个是单次扫描的开始
 	ch.log.Infoln(log_helper.OnceSubsScanStart)
@@ -237,14 +221,14 @@ func (ch *CronHelper) scanVideoProcessAdd2DownloadQueue() {
 
 	ch.log.Infoln("Video Scan Started...")
 	// 先进行扫描
-	scanResult, err := videoScanAndRefreshHelper.ScanMovieAndSeriesWait2DownloadSub()
+	scanResult, err := videoScanAndRefreshHelper.ScanNormalMovieAndSeries()
 	if err != nil {
-		ch.log.Errorln("ScanMovieAndSeriesWait2DownloadSub", err)
+		ch.log.Errorln("ScanNormalMovieAndSeries", err)
 		return
 	}
-	err = videoScanAndRefreshHelper.UpdateLocalVideoCacheInfo(scanResult)
+	err = videoScanAndRefreshHelper.ScanEmbyMovieAndSeries(scanResult)
 	if err != nil {
-		ch.log.Errorln("UpdateLocalVideoCacheInfo", err)
+		ch.log.Errorln("ScanEmbyMovieAndSeries", err)
 		return
 	}
 	// 过滤出需要下载的视频有那些,并放入队列中

+ 80 - 48
internal/logic/emby_helper/embyhelper.go

@@ -3,15 +3,17 @@ package emby_helper
 import (
 	"fmt"
 	embyHelper "github.com/allanpk716/ChineseSubFinder/internal/pkg/emby_api"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/imdb_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/path_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
+	"github.com/allanpk716/ChineseSubFinder/internal/types"
 	common2 "github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/emby"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/language"
 	"github.com/panjf2000/ants/v2"
+	"github.com/sirupsen/logrus"
 	"golang.org/x/net/context"
 	"path"
 	"path/filepath"
@@ -23,15 +25,16 @@ import (
 
 type EmbyHelper struct {
 	embyApi  *embyHelper.EmbyApi
+	log      *logrus.Logger
 	settings *settings.Settings
 	threads  int
 	timeOut  time.Duration
 	listLock sync.Mutex
 }
 
-func NewEmbyHelper(_settings *settings.Settings) *EmbyHelper {
-	em := EmbyHelper{settings: _settings}
-	em.embyApi = embyHelper.NewEmbyApi(_settings.EmbySettings)
+func NewEmbyHelper(_log *logrus.Logger, _settings *settings.Settings) *EmbyHelper {
+	em := EmbyHelper{log: _log, settings: _settings}
+	em.embyApi = embyHelper.NewEmbyApi(_log, _settings.EmbySettings)
 	em.threads = 6
 	em.timeOut = 60 * time.Second
 	return &em
@@ -49,23 +52,23 @@ func (em *EmbyHelper) GetRecentlyAddVideoListWithNoChineseSubtitle() ([]emby.Emb
 	if err != nil {
 		return nil, nil, err
 	}
-	log_helper.GetLogger().Debugln("-----------------")
+	em.log.Debugln("-----------------")
 	noSubSeriesList, err := em.filterNoChineseSubVideoList(filterSeriesList)
 	if err != nil {
 		return nil, nil, err
 	}
 	// 输出调试信息
-	log_helper.GetLogger().Debugln("-----------------")
-	log_helper.GetLogger().Debugln("filterNoChineseSubVideoList found no chinese movie", len(noSubMovieList))
+	em.log.Debugln("-----------------")
+	em.log.Debugln("filterNoChineseSubVideoList found no chinese movie", len(noSubMovieList))
 	for index, info := range filterMovieList {
-		log_helper.GetLogger().Debugln(index, info.VideoFileName)
+		em.log.Debugln(index, info.VideoFileName)
 	}
-	log_helper.GetLogger().Debugln("-----------------")
-	log_helper.GetLogger().Debugln("filterNoChineseSubVideoList found no chinese series", len(noSubSeriesList))
+	em.log.Debugln("-----------------")
+	em.log.Debugln("filterNoChineseSubVideoList found no chinese series", len(noSubSeriesList))
 	for index, info := range filterSeriesList {
-		log_helper.GetLogger().Debugln(index, info.VideoFileName)
+		em.log.Debugln(index, info.VideoFileName)
 	}
-	log_helper.GetLogger().Debugln("-----------------")
+	em.log.Debugln("-----------------")
 	// 需要将连续剧零散的每一集,进行合并到一个连续剧下面,也就是这个连续剧有那些需要更新的
 	var seriesMap = make(map[string][]emby.EmbyMixInfo)
 	for _, info := range noSubSeriesList {
@@ -91,21 +94,21 @@ func (em *EmbyHelper) GetRecentlyAddVideoList() ([]emby.EmbyMixInfo, []emby.Emby
 	var EpisodeIdList = make([]string, 0)
 	var MovieIdList = make([]string, 0)
 
-	log_helper.GetLogger().Debugln("-----------------")
-	log_helper.GetLogger().Debugln("GetRecentlyAddVideoListWithNoChineseSubtitle - GetRecentlyItems Count", len(items.Items))
+	em.log.Debugln("-----------------")
+	em.log.Debugln("GetRecentlyAddVideoListWithNoChineseSubtitle - GetRecentlyItems Count", len(items.Items))
 
 	// 分类
 	for index, item := range items.Items {
 		if item.Type == videoTypeEpisode {
 			// 这个里面可能混有其他的内容,比如目标是连续剧,但是 emby_helper 其实会把其他的混合内容也标记进去
 			EpisodeIdList = append(EpisodeIdList, item.Id)
-			log_helper.GetLogger().Debugln("Episode:", index, item.SeriesName, item.ParentIndexNumber, item.IndexNumber)
+			em.log.Debugln("Episode:", index, item.SeriesName, item.ParentIndexNumber, item.IndexNumber)
 		} else if item.Type == videoTypeMovie {
 			// 这个里面可能混有其他的内容,比如目标是连续剧,但是 emby_helper 其实会把其他的混合内容也标记进去
 			MovieIdList = append(MovieIdList, item.Id)
-			log_helper.GetLogger().Debugln("Movie:", index, item.Name)
+			em.log.Debugln("Movie:", index, item.Name)
 		} else {
-			log_helper.GetLogger().Debugln("GetRecentlyItems - Is not a goal video type:", index, item.Name, item.Type)
+			em.log.Debugln("GetRecentlyItems - Is not a goal video type:", index, item.Name, item.Type)
 		}
 	}
 
@@ -119,17 +122,17 @@ func (em *EmbyHelper) GetRecentlyAddVideoList() ([]emby.EmbyMixInfo, []emby.Emby
 		return nil, nil, err
 	}
 	// 输出调试信息
-	log_helper.GetLogger().Debugln("-----------------")
-	log_helper.GetLogger().Debugln("getMoreVideoInfoList found valid movie", len(filterMovieList))
+	em.log.Debugln("-----------------")
+	em.log.Debugln("getMoreVideoInfoList found valid movie", len(filterMovieList))
 	for index, info := range filterMovieList {
-		log_helper.GetLogger().Debugln(index, info.VideoFileName)
+		em.log.Debugln(index, info.VideoFileName)
 	}
-	log_helper.GetLogger().Debugln("-----------------")
-	log_helper.GetLogger().Debugln("getMoreVideoInfoList found valid series", len(filterSeriesList))
+	em.log.Debugln("-----------------")
+	em.log.Debugln("getMoreVideoInfoList found valid series", len(filterSeriesList))
 	for index, info := range filterSeriesList {
-		log_helper.GetLogger().Debugln(index, info.VideoFileName)
+		em.log.Debugln(index, info.VideoFileName)
 	}
-	log_helper.GetLogger().Debugln("-----------------")
+	em.log.Debugln("-----------------")
 	return filterMovieList, filterSeriesList, nil
 }
 
@@ -186,12 +189,12 @@ func (em *EmbyHelper) GetPlayedItemsSubtitle() (map[string]string, map[string]st
 			}
 			// 首先不能越界
 			if videoInfoByUserId.GetDefaultSubIndex() < 0 || len(videoInfo.MediaStreams)-1 < videoInfoByUserId.GetDefaultSubIndex() {
-				log_helper.GetLogger().Debugln("GetPlayedItemsSubtitle", videoInfo.Name, "SubIndex Out Of Range")
+				em.log.Debugln("GetPlayedItemsSubtitle", videoInfo.Name, "SubIndex Out Of Range")
 				continue
 			}
 			// 然后找出来的字幕必须是外置字幕,内置还导出个啥子
 			if videoInfo.MediaStreams[videoInfoByUserId.GetDefaultSubIndex()].IsExternal == false {
-				log_helper.GetLogger().Debugln("GetPlayedItemsSubtitle", videoInfo.Name,
+				em.log.Debugln("GetPlayedItemsSubtitle", videoInfo.Name,
 					"Get Played SubIndex", videoInfoByUserId.GetDefaultSubIndex(),
 					"is IsExternal == false, Skip")
 				continue
@@ -211,7 +214,7 @@ func (em *EmbyHelper) GetPlayedItemsSubtitle() (map[string]string, map[string]st
 	for key, value := range movieEmbyFPathMap {
 		bok, prefixOldPath, prefixNewPath := em.findMappingPath(key, true)
 		if bok == false {
-			log_helper.GetLogger().Warningln("GetPlayedItemsSubtitle.findMappingPath miss matched,", key)
+			em.log.Warningln("GetPlayedItemsSubtitle.findMappingPath miss matched,", key)
 			continue
 		}
 		phyVideoPath := strings.ReplaceAll(key, prefixOldPath, prefixNewPath)
@@ -222,7 +225,7 @@ func (em *EmbyHelper) GetPlayedItemsSubtitle() (map[string]string, map[string]st
 	for key, value := range seriesEmbyFPathMap {
 		bok, prefixOldPath, prefixNewPath := em.findMappingPath(key, false)
 		if bok == false {
-			log_helper.GetLogger().Warningln("GetPlayedItemsSubtitle.findMappingPath miss matched,", key)
+			em.log.Warningln("GetPlayedItemsSubtitle.findMappingPath miss matched,", key)
 			continue
 		}
 		phyVideoPath := strings.ReplaceAll(key, prefixOldPath, prefixNewPath)
@@ -354,6 +357,14 @@ func (em *EmbyHelper) getMoreVideoInfo(videoID string, isMovieOrSeries bool) (*e
 // 根据 IMDB ID 自动转换路径
 func (em *EmbyHelper) autoFindMappingPathWithMixInfoByIMDBId(mixInfo *emby.EmbyMixInfo, isMovieOrSeries bool) bool {
 
+	// 获取 IMDB 信息
+	localIMDBInfo, err := imdb_helper.GetVideoIMDBInfoFromLocal(em.log, types.VideoIMDBInfo{ImdbId: mixInfo.IMDBId}, em.settings.AdvancedSettings.ProxySettings)
+	if err != nil {
+		return false
+	}
+
+	println(localIMDBInfo.RootDirPath)
+
 	if isMovieOrSeries == true {
 
 	} else {
@@ -493,19 +504,40 @@ func (em *EmbyHelper) getMoreVideoInfoList(videoIdList []string, isMovieOrSeries
 		if err != nil {
 			return nil, err
 		}
-		if isMovieOrSeries == true {
-			// 电影
-			// 过滤掉不符合要求的,拼接绝对路径
-			isFit := em.findMappingPathWithMixInfo(oneMixInfo, isMovieOrSeries)
-			if isFit == false {
-				return nil, err
+
+		if em.settings.EmbySettings.AutoOrManual == true {
+			// 通过 IMDB ID 自动转换路径
+			if isMovieOrSeries == true {
+				// 电影
+				// 过滤掉不符合要求的,拼接绝对路径
+				isFit := em.autoFindMappingPathWithMixInfoByIMDBId(oneMixInfo, isMovieOrSeries)
+				if isFit == false {
+					return nil, err
+				}
+			} else {
+				// 连续剧
+				// 过滤掉不符合要求的,拼接绝对路径
+				isFit := em.autoFindMappingPathWithMixInfoByIMDBId(oneMixInfo, isMovieOrSeries)
+				if isFit == false {
+					return nil, err
+				}
 			}
 		} else {
-			// 连续剧
-			// 过滤掉不符合要求的,拼接绝对路径
-			isFit := em.findMappingPathWithMixInfo(oneMixInfo, isMovieOrSeries)
-			if isFit == false {
-				return nil, err
+			// 通过手动的路径映射
+			if isMovieOrSeries == true {
+				// 电影
+				// 过滤掉不符合要求的,拼接绝对路径
+				isFit := em.findMappingPathWithMixInfo(oneMixInfo, isMovieOrSeries)
+				if isFit == false {
+					return nil, err
+				}
+			} else {
+				// 连续剧
+				// 过滤掉不符合要求的,拼接绝对路径
+				isFit := em.findMappingPathWithMixInfo(oneMixInfo, isMovieOrSeries)
+				if isFit == false {
+					return nil, err
+				}
 			}
 		}
 
@@ -540,7 +572,7 @@ func (em *EmbyHelper) getMoreVideoInfoList(videoIdList []string, isMovieOrSeries
 		case outData := <-done:
 			// 收到结果,需要加锁
 			if outData.Err != nil {
-				log_helper.GetLogger().Errorln("getMoreVideoInfoList.NewPoolWithFunc got Err", outData.Err)
+				em.log.Errorln("getMoreVideoInfoList.NewPoolWithFunc got Err", outData.Err)
 				return
 			}
 			if outData.Info == nil {
@@ -551,9 +583,9 @@ func (em *EmbyHelper) getMoreVideoInfoList(videoIdList []string, isMovieOrSeries
 			em.listLock.Unlock()
 			return
 		case p := <-panicChan:
-			log_helper.GetLogger().Errorln("getMoreVideoInfoList.NewPoolWithFunc got panic", p)
+			em.log.Errorln("getMoreVideoInfoList.NewPoolWithFunc got panic", p)
 		case <-ctx.Done():
-			log_helper.GetLogger().Errorln("getMoreVideoInfoList.NewPoolWithFunc got time out", ctx.Err())
+			em.log.Errorln("getMoreVideoInfoList.NewPoolWithFunc got time out", ctx.Err())
 			return
 		}
 	})
@@ -567,7 +599,7 @@ func (em *EmbyHelper) getMoreVideoInfoList(videoIdList []string, isMovieOrSeries
 		wg.Add(1)
 		err = p.Invoke(InputData{Id: m, Wg: &wg})
 		if err != nil {
-			log_helper.GetLogger().Errorln("getMoreVideoInfoList ants.Invoke", err)
+			em.log.Errorln("getMoreVideoInfoList ants.Invoke", err)
 		}
 	}
 	wg.Wait()
@@ -621,7 +653,7 @@ func (em *EmbyHelper) filterNoChineseSubVideoList(videoList []emby.EmbyMixInfo)
 			// 没有外置字幕
 			// 如果创建了7天,且有内置的中文字幕,那么也不进行下载了
 			if info.VideoInfo.DateCreated.AddDate(0, 0, em.settings.AdvancedSettings.TaskQueue.DownloadSubDuringXDays).After(currentTime) == false && haveInsideChineseSub == true {
-				log_helper.GetLogger().Debugln("Create Over 7 Days, And It Has Inside ChineseSub, Than Skip", info.VideoFileName)
+				em.log.Debugln("Create Over 7 Days, And It Has Inside ChineseSub, Than Skip", info.VideoFileName)
 				continue
 			}
 			//// 如果创建了三个月,还是没有字幕,那么也不进行下载了
@@ -634,7 +666,7 @@ func (em *EmbyHelper) filterNoChineseSubVideoList(videoList []emby.EmbyMixInfo)
 			// 有外置字幕
 			// 如果视频发布时间超过两年了,有字幕就直接跳过了,一般字幕稳定了
 			if currentTime.Year()-2 > info.VideoInfo.PremiereDate.Year() {
-				log_helper.GetLogger().Debugln("Create Over 2 Years, And It Has External ChineseSub, Than Skip", info.VideoFileName)
+				em.log.Debugln("Create Over 2 Years, And It Has External ChineseSub, Than Skip", info.VideoFileName)
 				continue
 			}
 			// 有中文字幕,且如果在三个月内,则需要继续下载字幕`
@@ -784,13 +816,13 @@ func (em *EmbyHelper) CheckPath(pathType string) ([]string, error) {
 		if item.Type == videoTypeEpisode {
 			// 这个里面可能混有其他的内容,比如目标是连续剧,但是 emby_helper 其实会把其他的混合内容也标记进去
 			EpisodeIdList = append(EpisodeIdList, item.Id)
-			log_helper.GetLogger().Debugln("Episode:", index, item.SeriesName, item.ParentIndexNumber, item.IndexNumber)
+			em.log.Debugln("Episode:", index, item.SeriesName, item.ParentIndexNumber, item.IndexNumber)
 		} else if item.Type == videoTypeMovie {
 			// 这个里面可能混有其他的内容,比如目标是连续剧,但是 emby_helper 其实会把其他的混合内容也标记进去
 			MovieIdList = append(MovieIdList, item.Id)
-			log_helper.GetLogger().Debugln("Movie:", index, item.Name)
+			em.log.Debugln("Movie:", index, item.Name)
 		} else {
-			log_helper.GetLogger().Debugln("GetRecentlyItems - Is not a goal video type:", index, item.Name, item.Type)
+			em.log.Debugln("GetRecentlyItems - Is not a goal video type:", index, item.Name, item.Type)
 		}
 	}
 

+ 1 - 1
internal/logic/emby_helper/embyhelper_test.go

@@ -43,7 +43,7 @@ func TestEmbyHelper_GetRecentlyAddVideoList(t *testing.T) {
 func TestEmbyHelper_RefreshEmbySubList(t *testing.T) {
 	//config := config.GetConfig()
 	//em := NewEmbyHelper(config.EmbyConfig)
-	//bok, err := em.RefreshEmbySubList()
+	//bok, err := em.refreshEmbySubList()
 	//if err != nil {
 	//	t.Fatal(err)
 	//}

+ 3 - 4
internal/logic/mark_system/markingsystem.go

@@ -3,7 +3,6 @@ package mark_system
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/ass"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/srt"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
@@ -18,11 +17,11 @@ type MarkingSystem struct {
 	subParserHub    *sub_parser_hub.SubParserHub
 }
 
-func NewMarkingSystem(subSiteSequence []string, subTypePriority int) *MarkingSystem {
+func NewMarkingSystem(log *logrus.Logger, subSiteSequence []string, subTypePriority int) *MarkingSystem {
 	mk := MarkingSystem{subSiteSequence: subSiteSequence,
-		log:             log_helper.GetLogger(),
+		log:             log,
 		SubTypePriority: subTypePriority,
-		subParserHub:    sub_parser_hub.NewSubParserHub(ass.NewParser(), srt.NewParser())}
+		subParserHub:    sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log))}
 	return &mk
 }
 

+ 23 - 23
internal/logic/movie_helper/moviehelper.go

@@ -6,13 +6,13 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/srt"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/imdb_helper"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/supplier"
 	"github.com/jinzhu/now"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 	"strings"
@@ -20,39 +20,39 @@ import (
 )
 
 // OneMovieDlSubInAllSite 一部电影在所有的网站下载相应的字幕
-func OneMovieDlSubInAllSite(Suppliers []ifaces.ISupplier, oneVideoFullPath string, i int64) []supplier.SubInfo {
+func OneMovieDlSubInAllSite(log *logrus.Logger, Suppliers []ifaces.ISupplier, oneVideoFullPath string, i int64) []supplier.SubInfo {
 
 	defer func() {
-		log_helper.GetLogger().Infoln(common.QueueName, i, "DlSub End", oneVideoFullPath)
+		log.Infoln(common.QueueName, i, "DlSub End", oneVideoFullPath)
 	}()
 
 	var outSUbInfos = make([]supplier.SubInfo, 0)
-	log_helper.GetLogger().Infoln(common.QueueName, i, "DlSub Start", oneVideoFullPath)
+	log.Infoln(common.QueueName, i, "DlSub Start", oneVideoFullPath)
 	for _, oneSupplier := range Suppliers {
 
-		log_helper.GetLogger().Infoln(common.QueueName, i, oneSupplier.GetSupplierName(), oneVideoFullPath)
+		log.Infoln(common.QueueName, i, oneSupplier.GetSupplierName(), oneVideoFullPath)
 
-		subInfos, err := OneMovieDlSubInOneSite(oneVideoFullPath, i, oneSupplier)
+		subInfos, err := OneMovieDlSubInOneSite(log, oneVideoFullPath, i, oneSupplier)
 		if err != nil {
-			log_helper.GetLogger().Errorln(common.QueueName, i, oneSupplier.GetSupplierName(), "oneMovieDlSubInOneSite", err)
+			log.Errorln(common.QueueName, i, oneSupplier.GetSupplierName(), "oneMovieDlSubInOneSite", err)
 			continue
 		}
 		outSUbInfos = append(outSUbInfos, subInfos...)
 	}
 
 	for index, info := range outSUbInfos {
-		log_helper.GetLogger().Debugln(common.QueueName, i, "OneMovieDlSubInAllSite get sub", index, "Name:", info.Name, "FileUrl:", info.FileUrl)
+		log.Debugln(common.QueueName, i, "OneMovieDlSubInAllSite get sub", index, "Name:", info.Name, "FileUrl:", info.FileUrl)
 	}
 
 	return outSUbInfos
 }
 
 // OneMovieDlSubInOneSite 一部电影在一个站点下载字幕
-func OneMovieDlSubInOneSite(oneVideoFullPath string, i int64, supplier ifaces.ISupplier) ([]supplier.SubInfo, error) {
+func OneMovieDlSubInOneSite(log *logrus.Logger, oneVideoFullPath string, i int64, supplier ifaces.ISupplier) ([]supplier.SubInfo, error) {
 	defer func() {
-		log_helper.GetLogger().Infoln(common.QueueName, i, supplier.GetSupplierName(), "End...")
+		log.Infoln(common.QueueName, i, supplier.GetSupplierName(), "End...")
 	}()
-	log_helper.GetLogger().Infoln(common.QueueName, i, supplier.GetSupplierName(), "Start...")
+	log.Infoln(common.QueueName, i, supplier.GetSupplierName(), "Start...")
 	subInfos, err := supplier.GetSubListFromFile4Movie(oneVideoFullPath)
 	if err != nil {
 		return nil, err
@@ -64,7 +64,7 @@ func OneMovieDlSubInOneSite(oneVideoFullPath string, i int64, supplier ifaces.IS
 }
 
 // MovieHasChineseSub 这个视频文件的目录下面有字幕文件了没有
-func MovieHasChineseSub(videoFilePath string) (bool, []string, []string, error) {
+func MovieHasChineseSub(log *logrus.Logger, videoFilePath string) (bool, []string, []string, error) {
 	dir := filepath.Dir(videoFilePath)
 	videoFileName := filepath.Base(videoFilePath)
 	videoFileName = strings.ReplaceAll(videoFileName, filepath.Ext(videoFileName), "")
@@ -87,7 +87,7 @@ func MovieHasChineseSub(videoFilePath string) (bool, []string, []string, error)
 			}
 			// 字幕文件是否包含中文
 			subFileFullPath := filepath.Join(dir, curFile.Name())
-			if sub_parser_hub.NewSubParserHub(ass.NewParser(), srt.NewParser()).IsSubHasChinese(subFileFullPath) == true {
+			if sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log)).IsSubHasChinese(subFileFullPath) == true {
 				if bFoundChineseSub == false {
 					bFoundChineseSub = true
 				}
@@ -104,27 +104,27 @@ func MovieHasChineseSub(videoFilePath string) (bool, []string, []string, error)
 }
 
 // SkipChineseMovie 跳过中文的电影
-func SkipChineseMovie(videoFullPath string, _proxySettings ...*settings.ProxySettings) (bool, error) {
+func SkipChineseMovie(log *logrus.Logger, videoFullPath string, _proxySettings ...*settings.ProxySettings) (bool, error) {
 
 	imdbInfo, err := decode.GetImdbInfo4Movie(videoFullPath)
 	if err != nil {
 		return false, err
 	}
-	isChineseVideo, _, err := imdb_helper.IsChineseVideo(imdbInfo, _proxySettings...)
+	isChineseVideo, _, err := imdb_helper.IsChineseVideo(log, imdbInfo, _proxySettings...)
 	if err != nil {
 		return false, err
 	}
 	if isChineseVideo == true {
-		log_helper.GetLogger().Infoln("Skip", videoFullPath, "Sub Download, because movie is Chinese")
+		log.Infoln("Skip", videoFullPath, "Sub Download, because movie is Chinese")
 		return true, nil
 	} else {
 		return false, nil
 	}
 }
 
-func MovieNeedDlSub(videoFullPath string, ExpirationTime int) (bool, error) {
+func MovieNeedDlSub(log *logrus.Logger, videoFullPath string, ExpirationTime int) (bool, error) {
 	// 视频下面有不有字幕
-	found, _, _, err := MovieHasChineseSub(videoFullPath)
+	found, _, _, err := MovieHasChineseSub(log, videoFullPath)
 	if err != nil {
 		return false, err
 	}
@@ -141,14 +141,14 @@ func MovieNeedDlSub(videoFullPath string, ExpirationTime int) (bool, error) {
 			return true, nil
 		} else {
 			// 有字幕了,没必要每次都刷新,跳过
-			log_helper.GetLogger().Infoln("Skip", filepath.Base(videoFullPath), "Sub Download, because movie has sub and published more than 2 years")
+			log.Infoln("Skip", filepath.Base(videoFullPath), "Sub Download, because movie has sub and published more than 2 years")
 			return false, nil
 		}
 	} else {
 		// 读取不到 IMDB 信息也能接受
 		videoIMDBInfo, err := decode.GetImdbInfo4Movie(videoFullPath)
 		if err != nil {
-			log_helper.GetLogger().Errorln("MovieNeedDlSub.GetImdbInfo4Movie", err)
+			log.Errorln("MovieNeedDlSub.GetImdbInfo4Movie", err)
 		}
 		// 如果播出时间能够读取到,那么就以这个完后推算 3个月
 		// 如果读取不到 Aired Time 那么,下载后的 ModifyTime 3个月天内,都进行字幕的下载
@@ -156,7 +156,7 @@ func MovieNeedDlSub(videoFullPath string, ExpirationTime int) (bool, error) {
 		if videoIMDBInfo.ReleaseDate != "" {
 			baseTime, err = now.Parse(videoIMDBInfo.ReleaseDate)
 			if err != nil {
-				log_helper.GetLogger().Errorln("Movie parse AiredTime", err)
+				log.Errorln("Movie parse AiredTime", err)
 				baseTime = modifyTime
 			}
 		} else {
@@ -169,11 +169,11 @@ func MovieNeedDlSub(videoFullPath string, ExpirationTime int) (bool, error) {
 			return true, nil
 		} else {
 			if baseTime.AddDate(0, 0, ExpirationTime).After(currentTime) == false {
-				log_helper.GetLogger().Infoln("Skip", filepath.Base(videoFullPath), "Sub Download, because movie has sub and downloaded or aired more than 3 months")
+				log.Infoln("Skip", filepath.Base(videoFullPath), "Sub Download, because movie has sub and downloaded or aired more than 3 months")
 				return false, nil
 			}
 			if found == true {
-				log_helper.GetLogger().Infoln("Skip", filepath.Base(videoFullPath), "Sub Download, because sub file found")
+				log.Infoln("Skip", filepath.Base(videoFullPath), "Sub Download, because sub file found")
 				return false, nil
 			}
 

+ 2 - 2
internal/logic/scan_played_video_subinfo/scan_played_video_subinfo.go

@@ -61,7 +61,7 @@ func NewScanPlayedVideoSubInfo(log *logrus.Logger, _settings *settings.Settings)
 	scanPlayedVideoSubInfo.settings.Check()
 	// 初始化 Emby API 接口
 	if scanPlayedVideoSubInfo.settings.EmbySettings.Enable == true && scanPlayedVideoSubInfo.settings.EmbySettings.AddressUrl != "" && scanPlayedVideoSubInfo.settings.EmbySettings.APIKey != "" {
-		scanPlayedVideoSubInfo.embyHelper = embyHelper.NewEmbyHelper(scanPlayedVideoSubInfo.settings)
+		scanPlayedVideoSubInfo.embyHelper = embyHelper.NewEmbyHelper(log, scanPlayedVideoSubInfo.settings)
 	}
 
 	// 初始化任务控制
@@ -304,7 +304,7 @@ func (s *ScanPlayedVideoSubInfo) dealOneVideo(index int, videoFPath, orgSubFPath
 	// 先把 IMDB 信息查询查来,不管是从数据库还是网络(查询出来也得写入到数据库)
 	if imdbInfo, ok = imdbInfoCache[imdbInfo4Video.ImdbId]; ok == false {
 		// 不存在,那么就去查询和新建缓存
-		imdbInfo, err = imdb_helper.GetVideoIMDBInfoFromLocal(imdbInfo4Video, s.settings.AdvancedSettings.ProxySettings)
+		imdbInfo, err = imdb_helper.GetVideoIMDBInfoFromLocal(s.log, imdbInfo4Video, s.settings.AdvancedSettings.ProxySettings)
 		if err != nil {
 			s.log.Warningln("ScanPlayedVideoSubInfo.Scan", videoTypes, ".GetVideoIMDBInfoFromLocal", videoFPath, err)
 			return

+ 44 - 44
internal/logic/series_helper/seriesHelper.go

@@ -8,7 +8,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/imdb_helper"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
@@ -19,16 +18,17 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/types/supplier"
 	"github.com/emirpasic/gods/maps/treemap"
 	"github.com/jinzhu/now"
+	"github.com/sirupsen/logrus"
 	"path/filepath"
 	"strconv"
 	"time"
 )
 
-func readSeriesInfo(seriesDir string, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, map[string][]series.SubInfo, error) {
+func readSeriesInfo(log *logrus.Logger, seriesDir string, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, map[string][]series.SubInfo, error) {
 
-	subParserHub := sub_parser_hub.NewSubParserHub(ass.NewParser(), srt.NewParser())
+	subParserHub := sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log))
 
-	seriesInfo, err := getSeriesInfoFromDir(seriesDir, _proxySettings...)
+	seriesInfo, err := getSeriesInfoFromDir(log, seriesDir, _proxySettings...)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -36,7 +36,7 @@ func readSeriesInfo(seriesDir string, _proxySettings ...*settings.ProxySettings)
 	seriesInfo.NeedDlEpsKeyList = make(map[string]series.EpisodeInfo)
 
 	// 搜索所有的字幕
-	subFiles, err := sub_helper.SearchMatchedSubFileByDir(seriesDir)
+	subFiles, err := sub_helper.SearchMatchedSubFileByDir(log, seriesDir)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -49,16 +49,16 @@ func readSeriesInfo(seriesDir string, _proxySettings ...*settings.ProxySettings)
 		}
 		info, _, err := decode.GetVideoInfoFromFileFullPath(subFile)
 		if err != nil {
-			log_helper.GetLogger().Errorln(err)
+			log.Errorln(err)
 			continue
 		}
 		bFind, subParserFileInfo, err := subParserHub.DetermineFileTypeFromFile(subFile)
 		if err != nil {
-			log_helper.GetLogger().Errorln("DetermineFileTypeFromFile", subFile, err)
+			log.Errorln("DetermineFileTypeFromFile", subFile, err)
 			continue
 		}
 		if bFind == false {
-			log_helper.GetLogger().Warnln("DetermineFileTypeFromFile", subFile, "not support SubType")
+			log.Warnln("DetermineFileTypeFromFile", subFile, "not support SubType")
 			continue
 		}
 		epsKey := my_util.GetEpisodeKeyName(info.Season, info.Episode)
@@ -82,21 +82,21 @@ func readSeriesInfo(seriesDir string, _proxySettings ...*settings.ProxySettings)
 }
 
 // ReadSeriesInfoFromDir 读取剧集的信息,只有那些 Eps 需要下载字幕的 NeedDlEpsKeyList
-func ReadSeriesInfoFromDir(seriesDir string, ExpirationTime int, forcedScanAndDownloadSub bool, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, error) {
+func ReadSeriesInfoFromDir(log *logrus.Logger, seriesDir string, ExpirationTime int, forcedScanAndDownloadSub bool, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, error) {
 
-	seriesInfo, SubDict, err := readSeriesInfo(seriesDir, _proxySettings...)
+	seriesInfo, SubDict, err := readSeriesInfo(log, seriesDir, _proxySettings...)
 	if err != nil {
 		return nil, err
 	}
 	// 搜索所有的视频
-	videoFiles, err := my_util.SearchMatchedVideoFile(log_helper.GetLogger(), seriesDir)
+	videoFiles, err := my_util.SearchMatchedVideoFile(log, seriesDir)
 	if err != nil {
 		return nil, err
 	}
 	// 视频字典 S01E01 - EpisodeInfo
 	EpisodeDict := make(map[string]series.EpisodeInfo)
 	for _, videoFile := range videoFiles {
-		getEpsInfoAndSubDic(videoFile, EpisodeDict, SubDict)
+		getEpsInfoAndSubDic(log, videoFile, EpisodeDict, SubDict)
 	}
 
 	for _, episodeInfo := range EpisodeDict {
@@ -104,22 +104,22 @@ func ReadSeriesInfoFromDir(seriesDir string, ExpirationTime int, forcedScanAndDo
 		seriesInfo.SeasonDict[episodeInfo.Season] = episodeInfo.Season
 	}
 
-	seriesInfo.NeedDlEpsKeyList, seriesInfo.NeedDlSeasonDict = whichSeasonEpsNeedDownloadSub(seriesInfo, ExpirationTime, forcedScanAndDownloadSub)
+	seriesInfo.NeedDlEpsKeyList, seriesInfo.NeedDlSeasonDict = whichSeasonEpsNeedDownloadSub(log, seriesInfo, ExpirationTime, forcedScanAndDownloadSub)
 
 	return seriesInfo, nil
 }
 
 // ReadSeriesInfoFromEmby 将 Emby API 读取到的数据进行转换到通用的结构中,需要填充那些剧集需要下载,这样要的是一个连续剧的,不是所有的传入(只有那些 Eps 需要下载字幕的 NeedDlEpsKeyList)
-func ReadSeriesInfoFromEmby(seriesDir string, seriesVideoList []emby.EmbyMixInfo, ExpirationTime int, forcedScanAndDownloadSub bool, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, error) {
+func ReadSeriesInfoFromEmby(log *logrus.Logger, seriesDir string, seriesVideoList []emby.EmbyMixInfo, ExpirationTime int, forcedScanAndDownloadSub bool, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, error) {
 
-	seriesInfo, SubDict, err := readSeriesInfo(seriesDir, _proxySettings...)
+	seriesInfo, SubDict, err := readSeriesInfo(log, seriesDir, _proxySettings...)
 	if err != nil {
 		return nil, err
 	}
 
 	EpisodeDict := make(map[string]series.EpisodeInfo)
 	for _, info := range seriesVideoList {
-		getEpsInfoAndSubDic(info.PhysicalVideoFileFullPath, EpisodeDict, SubDict)
+		getEpsInfoAndSubDic(log, info.PhysicalVideoFileFullPath, EpisodeDict, SubDict)
 	}
 
 	for _, episodeInfo := range EpisodeDict {
@@ -127,25 +127,25 @@ func ReadSeriesInfoFromEmby(seriesDir string, seriesVideoList []emby.EmbyMixInfo
 		seriesInfo.SeasonDict[episodeInfo.Season] = episodeInfo.Season
 	}
 
-	seriesInfo.NeedDlEpsKeyList, seriesInfo.NeedDlSeasonDict = whichSeasonEpsNeedDownloadSub(seriesInfo, ExpirationTime, forcedScanAndDownloadSub)
+	seriesInfo.NeedDlEpsKeyList, seriesInfo.NeedDlSeasonDict = whichSeasonEpsNeedDownloadSub(log, seriesInfo, ExpirationTime, forcedScanAndDownloadSub)
 
 	return seriesInfo, nil
 }
 
 // SkipChineseSeries 跳过中文连续剧
-func SkipChineseSeries(seriesRootPath string, _proxySettings ...*settings.ProxySettings) (bool, *models.IMDBInfo, error) {
+func SkipChineseSeries(log *logrus.Logger, seriesRootPath string, _proxySettings ...*settings.ProxySettings) (bool, *models.IMDBInfo, error) {
 
 	imdbInfo, err := decode.GetImdbInfo4SeriesDir(seriesRootPath)
 	if err != nil {
 		return false, nil, err
 	}
 
-	isChineseVideo, t, err := imdb_helper.IsChineseVideo(imdbInfo, _proxySettings...)
+	isChineseVideo, t, err := imdb_helper.IsChineseVideo(log, imdbInfo, _proxySettings...)
 	if err != nil {
 		return false, nil, err
 	}
 	if isChineseVideo == true {
-		log_helper.GetLogger().Infoln("Skip", filepath.Base(seriesRootPath), "Sub Download, because series is Chinese")
+		log.Infoln("Skip", filepath.Base(seriesRootPath), "Sub Download, because series is Chinese")
 		return true, t, nil
 	} else {
 		return false, t, nil
@@ -153,36 +153,36 @@ func SkipChineseSeries(seriesRootPath string, _proxySettings ...*settings.ProxyS
 }
 
 // DownloadSubtitleInAllSiteByOneSeries 一部连续剧,在所有的网站,下载相应的字幕
-func DownloadSubtitleInAllSiteByOneSeries(Suppliers []ifaces.ISupplier, seriesInfo *series.SeriesInfo, i int64) []supplier.SubInfo {
+func DownloadSubtitleInAllSiteByOneSeries(log *logrus.Logger, Suppliers []ifaces.ISupplier, seriesInfo *series.SeriesInfo, i int64) []supplier.SubInfo {
 
 	defer func() {
-		log_helper.GetLogger().Infoln(i, "DlSub End", seriesInfo.DirPath)
+		log.Infoln(i, "DlSub End", seriesInfo.DirPath)
 	}()
-	log_helper.GetLogger().Infoln(common.QueueName, i, "DlSub Start", seriesInfo.DirPath)
-	log_helper.GetLogger().Infoln(common.QueueName, i, seriesInfo.Name, "IMDB ID:", seriesInfo.ImdbId, "NeedDownloadSubs:", len(seriesInfo.NeedDlEpsKeyList))
+	log.Infoln(common.QueueName, i, "DlSub Start", seriesInfo.DirPath)
+	log.Infoln(common.QueueName, i, seriesInfo.Name, "IMDB ID:", seriesInfo.ImdbId, "NeedDownloadSubs:", len(seriesInfo.NeedDlEpsKeyList))
 	var outSUbInfos = make([]supplier.SubInfo, 0)
 	if len(seriesInfo.NeedDlEpsKeyList) < 1 {
 		return outSUbInfos
 	}
 	for key := range seriesInfo.NeedDlEpsKeyList {
-		log_helper.GetLogger().Infoln(common.QueueName, i, seriesInfo.Name, "-", key)
+		log.Infoln(common.QueueName, i, seriesInfo.Name, "-", key)
 	}
 
 	for _, oneSupplier := range Suppliers {
 
 		oneSupplierFunc := func() {
 			defer func() {
-				log_helper.GetLogger().Infoln(common.QueueName, i, oneSupplier.GetSupplierName(), "End")
-				log_helper.GetLogger().Infoln("------------------------------------------")
+				log.Infoln(common.QueueName, i, oneSupplier.GetSupplierName(), "End")
+				log.Infoln("------------------------------------------")
 			}()
 
 			var subInfos []supplier.SubInfo
-			log_helper.GetLogger().Infoln("------------------------------------------")
-			log_helper.GetLogger().Infoln(common.QueueName, i, oneSupplier.GetSupplierName(), "Start...")
+			log.Infoln("------------------------------------------")
+			log.Infoln(common.QueueName, i, oneSupplier.GetSupplierName(), "Start...")
 			// 一次性把这一部连续剧的所有字幕下载完
 			subInfos, err := oneSupplier.GetSubListFromFile4Series(seriesInfo)
 			if err != nil {
-				log_helper.GetLogger().Errorln(common.QueueName, i, oneSupplier.GetSupplierName(), "GetSubListFromFile4Series", err)
+				log.Errorln(common.QueueName, i, oneSupplier.GetSupplierName(), "GetSubListFromFile4Series", err)
 				return
 			}
 			// 把后缀名给改好
@@ -227,12 +227,12 @@ func SetTheSpecifiedEps2Download(seriesInfo *series.SeriesInfo, epsMap map[int]i
 }
 
 // GetSeriesListFromDirs 获取这个目录下的所有文件夹名称,默认为一个连续剧的目录的List
-func GetSeriesListFromDirs(dirs []string) (*treemap.Map, error) {
+func GetSeriesListFromDirs(log *logrus.Logger, dirs []string) (*treemap.Map, error) {
 
 	var fileFullPathMap = treemap.NewWithStringComparator()
 	for _, dir := range dirs {
 
-		seriesList, err := GetSeriesList(dir)
+		seriesList, err := GetSeriesList(log, dir)
 		if err != nil {
 			return nil, err
 		}
@@ -250,10 +250,10 @@ func GetSeriesListFromDirs(dirs []string) (*treemap.Map, error) {
 }
 
 // GetSeriesList 获取这个目录下的所有文件夹名称,默认为一个连续剧的目录的List
-func GetSeriesList(dir string) ([]string, error) {
+func GetSeriesList(log *logrus.Logger, dir string) ([]string, error) {
 
 	// 需要把所有 tvshow.nfo 搜索出来,那么这些文件对应的目录就是目标连续剧的目录
-	tvNFOs, err := my_util.SearchTVNfo(log_helper.GetLogger(), dir)
+	tvNFOs, err := my_util.SearchTVNfo(log, dir)
 	if err != nil {
 		return nil, err
 	}
@@ -267,7 +267,7 @@ func GetSeriesList(dir string) ([]string, error) {
 }
 
 // whichSeasonEpsNeedDownloadSub 有那些 Eps 需要下载的,按 SxEx 反回 epsKey
-func whichSeasonEpsNeedDownloadSub(seriesInfo *series.SeriesInfo, ExpirationTime int, forcedScanAndDownloadSub bool) (map[string]series.EpisodeInfo, map[int]int) {
+func whichSeasonEpsNeedDownloadSub(log *logrus.Logger, seriesInfo *series.SeriesInfo, ExpirationTime int, forcedScanAndDownloadSub bool) (map[string]series.EpisodeInfo, map[int]int) {
 	var needDlSubEpsList = make(map[string]series.EpisodeInfo, 0)
 	var needDlSeasonList = make(map[int]int, 0)
 	currentTime := time.Now()
@@ -292,7 +292,7 @@ func whichSeasonEpsNeedDownloadSub(seriesInfo *series.SeriesInfo, ExpirationTime
 		if epsInfo.AiredTime != "" {
 			baseTime, err = now.Parse(epsInfo.AiredTime)
 			if err != nil {
-				log_helper.GetLogger().Errorln("SeriesInfo parse AiredTime", epsInfo.Title, epsInfo.Season, epsInfo.Episode, err)
+				log.Errorln("SeriesInfo parse AiredTime", epsInfo.Title, epsInfo.Season, epsInfo.Episode, err)
 				baseTime = epsInfo.ModifyTime
 			}
 		} else {
@@ -306,16 +306,16 @@ func whichSeasonEpsNeedDownloadSub(seriesInfo *series.SeriesInfo, ExpirationTime
 			needDlSeasonList[epsInfo.Season] = epsInfo.Season
 		} else {
 			if len(epsInfo.SubAlreadyDownloadedList) > 0 {
-				log_helper.GetLogger().Infoln("Skip because find sub file and downloaded or aired over 3 months,", epsInfo.Title, epsInfo.Season, epsInfo.Episode)
+				log.Infoln("Skip because find sub file and downloaded or aired over 3 months,", epsInfo.Title, epsInfo.Season, epsInfo.Episode)
 			} else if baseTime.AddDate(0, 0, ExpirationTime).After(currentTime) == false {
-				log_helper.GetLogger().Infoln("Skip because 3 months pass,", epsInfo.Title, epsInfo.Season, epsInfo.Episode)
+				log.Infoln("Skip because 3 months pass,", epsInfo.Title, epsInfo.Season, epsInfo.Episode)
 			}
 		}
 	}
 	return needDlSubEpsList, needDlSeasonList
 }
 
-func getSeriesInfoFromDir(seriesDir string, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, error) {
+func getSeriesInfoFromDir(log *logrus.Logger, seriesDir string, _proxySettings ...*settings.ProxySettings) (*series.SeriesInfo, error) {
 	seriesInfo := series.SeriesInfo{}
 	// 只考虑 IMDB 去查询,文件名目前发现可能会跟电影重复,导致很麻烦,本来也有前置要求要削刮器处理的
 	videoInfo, err := decode.GetImdbInfo4SeriesDir(seriesDir)
@@ -323,7 +323,7 @@ func getSeriesInfoFromDir(seriesDir string, _proxySettings ...*settings.ProxySet
 		return nil, err
 	}
 
-	imdbInfoFromLocal, err := imdb_helper.GetVideoIMDBInfoFromLocal(videoInfo, _proxySettings...)
+	imdbInfoFromLocal, err := imdb_helper.GetVideoIMDBInfoFromLocal(log, videoInfo, _proxySettings...)
 	if err != nil {
 		return nil, err
 	}
@@ -341,7 +341,7 @@ func getSeriesInfoFromDir(seriesDir string, _proxySettings ...*settings.ProxySet
 		if err != nil {
 			// 不是必须的
 			seriesInfo.Year = 0
-			log_helper.GetLogger().Warnln("ReadSeriesInfoFromDir.GetImdbInfo4SeriesDir.strconv.Atoi", seriesDir, err)
+			log.Warnln("ReadSeriesInfoFromDir.GetImdbInfo4SeriesDir.strconv.Atoi", seriesDir, err)
 		} else {
 			seriesInfo.Year = iYear
 		}
@@ -353,16 +353,16 @@ func getSeriesInfoFromDir(seriesDir string, _proxySettings ...*settings.ProxySet
 	return &seriesInfo, nil
 }
 
-func getEpsInfoAndSubDic(videoFile string, EpisodeDict map[string]series.EpisodeInfo, SubDict map[string][]series.SubInfo) {
+func getEpsInfoAndSubDic(log *logrus.Logger, videoFile string, EpisodeDict map[string]series.EpisodeInfo, SubDict map[string][]series.SubInfo) {
 	// 正常来说,一集只有一个格式的视频,也就是 S01E01 只有一个,如果有多个则会只保存第一个
 	info, modifyTime, err := decode.GetVideoInfoFromFileFullPath(videoFile)
 	if err != nil {
-		log_helper.GetLogger().Errorln("model.GetVideoInfoFromFileFullPath", videoFile, err)
+		log.Errorln("model.GetVideoInfoFromFileFullPath", videoFile, err)
 		return
 	}
 	episodeInfo, err := decode.GetImdbInfo4OneSeriesEpisode(videoFile)
 	if err != nil {
-		log_helper.GetLogger().Errorln("model.GetImdbInfo4OneSeriesEpisode", videoFile, err)
+		log.Errorln("model.GetImdbInfo4OneSeriesEpisode", videoFile, err)
 		return
 	}
 	epsKey := my_util.GetEpisodeKeyName(info.Season, info.Episode)

+ 6 - 5
internal/logic/sub_parser/ass/ass.go

@@ -2,20 +2,21 @@ package ass
 
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/language"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/regex_things"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
 	"github.com/emirpasic/gods/maps/treemap"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 	"strings"
 )
 
 type Parser struct {
+	log *logrus.Logger
 }
 
-func NewParser() *Parser {
-	return &Parser{}
+func NewParser(log *logrus.Logger) *Parser {
+	return &Parser{log: log}
 }
 
 func (p Parser) GetParserName() string {
@@ -30,7 +31,7 @@ func (p Parser) GetParserName() string {
 func (p Parser) DetermineFileTypeFromFile(filePath string) (bool, *subparser.FileInfo, error) {
 	nowExt := filepath.Ext(filePath)
 
-	log_helper.GetLogger().Debugln("DetermineFileTypeFromFile", p.GetParserName(), filePath)
+	p.log.Debugln("DetermineFileTypeFromFile", p.GetParserName(), filePath)
 
 	fBytes, err := os.ReadFile(filePath)
 	if err != nil {
@@ -51,7 +52,7 @@ func (p Parser) DetermineFileTypeFromBytes(inBytes []byte, nowExt string) (bool,
 	// 找到 start end text
 	matched := regex_things.ReMatchDialogueASS.FindAllStringSubmatch(allString, -1)
 	if matched == nil || len(matched) < 1 {
-		log_helper.GetLogger().Debugln("DetermineFileTypeFromBytes can't found DialoguesFilter, Skip")
+		p.log.Debugln("DetermineFileTypeFromBytes can't found DialoguesFilter, Skip")
 		return false, nil, nil
 	}
 	subFileInfo := subparser.FileInfo{}

+ 6 - 5
internal/logic/sub_parser/srt/srt.go

@@ -2,10 +2,10 @@ package srt
 
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/language"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/regex_things"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 	"strconv"
@@ -13,10 +13,11 @@ import (
 )
 
 type Parser struct {
+	log *logrus.Logger
 }
 
-func NewParser() *Parser {
-	return &Parser{}
+func NewParser(log *logrus.Logger) *Parser {
+	return &Parser{log: log}
 }
 
 func (p Parser) GetParserName() string {
@@ -31,7 +32,7 @@ func (p Parser) GetParserName() string {
 func (p Parser) DetermineFileTypeFromFile(filePath string) (bool, *subparser.FileInfo, error) {
 	nowExt := filepath.Ext(filePath)
 
-	log_helper.GetLogger().Debugln("DetermineFileTypeFromFile", p.GetParserName(), filePath)
+	p.log.Debugln("DetermineFileTypeFromFile", p.GetParserName(), filePath)
 
 	fBytes, err := os.ReadFile(filePath)
 	if err != nil {
@@ -55,7 +56,7 @@ func (p Parser) DetermineFileTypeFromBytes(inBytes []byte, nowExt string) (bool,
 
 	orgDialogues := p.parseContent(inBytes)
 	if len(orgDialogues) <= 0 {
-		log_helper.GetLogger().Debugln("DetermineFileTypeFromBytes can't found DialoguesFilter, Skip")
+		p.log.Debugln("DetermineFileTypeFromBytes can't found DialoguesFilter, Skip")
 		return false, nil, nil
 	}
 	subFileInfo.Dialogues = orgDialogues

+ 1 - 1
internal/logic/sub_supplier/shooter/shooter_test.go

@@ -27,7 +27,7 @@ func TestNewSupplier(t *testing.T) {
 	if err != nil {
 		t.Fatal(err)
 	}
-	shooter := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	shooter := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	outList, err := shooter.getSubListFromFile(gVideoFPath)
 	if err != nil {
 		t.Error(err)

+ 12 - 14
internal/logic/sub_supplier/subSupplierHub.go

@@ -15,11 +15,9 @@ import (
 )
 
 type SubSupplierHub struct {
-	settings *settings.Settings
-
+	settings  *settings.Settings
+	log       *logrus.Logger
 	Suppliers []ifaces.ISupplier
-
-	log *logrus.Logger
 }
 
 func NewSubSupplierHub(one ifaces.ISupplier, _inSupplier ...ifaces.ISupplier) *SubSupplierHub {
@@ -60,7 +58,7 @@ func (d *SubSupplierHub) MovieNeedDlSub(videoFullPath string, forcedScanAndDownl
 	if d.settings.AdvancedSettings.ScanLogic.SkipChineseMovie == true {
 		var skip bool
 		// 跳过中文的电影,不是一定要跳过的
-		skip, err = movieHelper.SkipChineseMovie(videoFullPath, d.settings.AdvancedSettings.ProxySettings)
+		skip, err = movieHelper.SkipChineseMovie(d.log, videoFullPath, d.settings.AdvancedSettings.ProxySettings)
 		if err != nil {
 			d.log.Warnln("SkipChineseMovie", videoFullPath, err)
 		}
@@ -74,7 +72,7 @@ func (d *SubSupplierHub) MovieNeedDlSub(videoFullPath string, forcedScanAndDownl
 		// 强制下载字幕
 		needDlSub = true
 	} else {
-		needDlSub, err = movieHelper.MovieNeedDlSub(videoFullPath, d.settings.AdvancedSettings.TaskQueue.ExpirationTime)
+		needDlSub, err = movieHelper.MovieNeedDlSub(d.log, videoFullPath, d.settings.AdvancedSettings.TaskQueue.ExpirationTime)
 		if err != nil {
 			d.log.Errorln(errors.Newf("MovieNeedDlSub %v %v", videoFullPath, err))
 			return false
@@ -91,7 +89,7 @@ func (d *SubSupplierHub) SeriesNeedDlSub(seriesRootPath string, forcedScanAndDow
 		var skip bool
 		var err error
 		// 跳过中文的电影,不是一定要跳过的
-		skip, _, err = seriesHelper.SkipChineseSeries(seriesRootPath, d.settings.AdvancedSettings.ProxySettings)
+		skip, _, err = seriesHelper.SkipChineseSeries(d.log, seriesRootPath, d.settings.AdvancedSettings.ProxySettings)
 		if err != nil {
 			d.log.Warnln("SkipChineseMovie", seriesRootPath, err)
 		}
@@ -101,7 +99,7 @@ func (d *SubSupplierHub) SeriesNeedDlSub(seriesRootPath string, forcedScanAndDow
 	}
 
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := seriesHelper.ReadSeriesInfoFromDir(seriesRootPath, d.settings.AdvancedSettings.TaskQueue.ExpirationTime, forcedScanAndDownloadSub, d.settings.AdvancedSettings.ProxySettings)
+	seriesInfo, err := seriesHelper.ReadSeriesInfoFromDir(d.log, seriesRootPath, d.settings.AdvancedSettings.TaskQueue.ExpirationTime, forcedScanAndDownloadSub, d.settings.AdvancedSettings.ProxySettings)
 	if err != nil {
 		return false, nil, errors.Newf("ReadSeriesInfoFromDir %v %v", seriesRootPath, err)
 	}
@@ -116,7 +114,7 @@ func (d *SubSupplierHub) SeriesNeedDlSubFromEmby(seriesRootPath string, seriesVi
 		var skip bool
 		var err error
 		// 跳过中文的电影,不是一定要跳过的
-		skip, _, err = seriesHelper.SkipChineseSeries(seriesRootPath, d.settings.AdvancedSettings.ProxySettings)
+		skip, _, err = seriesHelper.SkipChineseSeries(d.log, seriesRootPath, d.settings.AdvancedSettings.ProxySettings)
 		if err != nil {
 			d.log.Warnln("SkipChineseMovie", seriesRootPath, err)
 		}
@@ -125,7 +123,7 @@ func (d *SubSupplierHub) SeriesNeedDlSubFromEmby(seriesRootPath string, seriesVi
 		}
 	}
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := seriesHelper.ReadSeriesInfoFromEmby(seriesRootPath, seriesVideoList, ExpirationTime, forcedScanAndDownloadSub, d.settings.AdvancedSettings.ProxySettings)
+	seriesInfo, err := seriesHelper.ReadSeriesInfoFromEmby(d.log, seriesRootPath, seriesVideoList, ExpirationTime, forcedScanAndDownloadSub, d.settings.AdvancedSettings.ProxySettings)
 	if err != nil {
 		return false, nil, errors.Newf("ReadSeriesInfoFromDir %v %v", seriesRootPath, err)
 	}
@@ -137,12 +135,12 @@ func (d *SubSupplierHub) SeriesNeedDlSubFromEmby(seriesRootPath string, seriesVi
 func (d *SubSupplierHub) DownloadSub4Movie(videoFullPath string, index int64) ([]string, error) {
 
 	// 下载所有字幕
-	subInfos := movieHelper.OneMovieDlSubInAllSite(d.Suppliers, videoFullPath, index)
+	subInfos := movieHelper.OneMovieDlSubInAllSite(d.log, d.Suppliers, videoFullPath, index)
 	if subInfos == nil {
 		return nil, nil
 	}
 	// 整理字幕,比如解压什么的
-	organizeSubFiles, err := sub_helper.OrganizeDlSubFiles(filepath.Base(videoFullPath), subInfos)
+	organizeSubFiles, err := sub_helper.OrganizeDlSubFiles(d.log, filepath.Base(videoFullPath), subInfos)
 	if err != nil {
 		return nil, errors.Newf("OrganizeDlSubFiles %v %v", videoFullPath, err)
 	}
@@ -215,10 +213,10 @@ func (d *SubSupplierHub) CheckSubSiteStatus() backend.ReplyCheckStatus {
 
 func (d *SubSupplierHub) dlSubFromSeriesInfo(seriesDirPath string, index int64, seriesInfo *series.SeriesInfo) (map[string][]string, error) {
 	// 下载好的字幕
-	subInfos := seriesHelper.DownloadSubtitleInAllSiteByOneSeries(d.Suppliers, seriesInfo, index)
+	subInfos := seriesHelper.DownloadSubtitleInAllSiteByOneSeries(d.log, d.Suppliers, seriesInfo, index)
 	// 整理字幕,比如解压什么的
 	// 每一集 SxEx - 对应解压整理后的字幕列表
-	organizeSubFiles, err := sub_helper.OrganizeDlSubFiles(filepath.Base(seriesDirPath), subInfos)
+	organizeSubFiles, err := sub_helper.OrganizeDlSubFiles(d.log, filepath.Base(seriesDirPath), subInfos)
 	if err != nil {
 		return nil, errors.Newf("OrganizeDlSubFiles %v %v", seriesDirPath, err)
 	}

+ 2 - 2
internal/logic/sub_supplier/subhd/subhd.go

@@ -126,7 +126,7 @@ func (s *Supplier) GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]s
 
 	var browser *rod.Browser
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	browser, err := rod_helper.NewBrowserEx(true, s.settings)
+	browser, err := rod_helper.NewBrowserEx(s.log, true, s.settings)
 	if err != nil {
 		return nil, err
 	}
@@ -242,7 +242,7 @@ func (s *Supplier) getSubListFromKeyword4Movie(keyword string) ([]supplier.SubIn
 
 	var browser *rod.Browser
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	browser, err := rod_helper.NewBrowserEx(true, s.settings)
+	browser, err := rod_helper.NewBrowserEx(s.log, true, s.settings)
 	if err != nil {
 		return nil, err
 	}

+ 4 - 4
internal/logic/sub_supplier/subhd/subhd_test.go

@@ -28,7 +28,7 @@ func TestSupplier_GetSubListFromFile(t *testing.T) {
 	rootDir := unit_test_helper.GetTestDataResourceRootPath([]string{"sub_spplier"}, 5, true)
 	movie1 := filepath.Join(rootDir, "zimuku", "movies", "消失爱人 (2016)", "消失爱人 (2016) 720p AAC.rmvb")
 
-	subhd := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	subhd := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	outList, err := subhd.getSubListFromFile4Movie(movie1)
 	if err != nil {
 		t.Error(err)
@@ -65,7 +65,7 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	if err != nil {
 		t.Fatal(err)
 	}
-	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	outList, err := s.GetSubListFromFile4Series(seriesInfo)
 	if err != nil {
 		t.Fatal(err)
@@ -87,7 +87,7 @@ func TestSupplier_getSubListFromKeyword4Movie(t *testing.T) {
 	//imdbID := "tt15299712" // 云南虫谷
 	//imdbID := "tt3626476" // Vacation Friends (2021)
 	getCode()
-	subhd := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	subhd := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	subInfos, err := subhd.getSubListFromKeyword4Movie(imdbID)
 	if err != nil {
 		t.Fatal(err)
@@ -101,7 +101,7 @@ func getCode() {
 
 	nowTT := time.Now()
 	nowTimeFileNamePrix := fmt.Sprintf("%d%d%d", nowTT.Year(), nowTT.Month(), nowTT.Day())
-	updateTimeString, code, err := something_static.GetCodeFromWeb(log_helper.GetLogger(), nowTimeFileNamePrix)
+	updateTimeString, code, err := something_static.GetCodeFromWeb(log_helper.GetLogger4Tester(), nowTimeFileNamePrix)
 	if err != nil {
 		commonValue.SubhdCode = ""
 	} else {

+ 1 - 1
internal/logic/sub_supplier/xunlei/xunlei_test.go

@@ -29,7 +29,7 @@ func TestGetList(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	xunlie := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	xunlie := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	outList, err := xunlie.getSubListFromFile(gVideoFPath)
 	if err != nil {
 		t.Error(err)

+ 3 - 3
internal/logic/sub_supplier/zimuku/zimuku.go

@@ -68,7 +68,7 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 func (s *Supplier) CheckAlive() (bool, int64) {
 
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	browser, err := rod_helper.NewBrowserEx(true, s.settings, s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
+	browser, err := rod_helper.NewBrowserEx(s.log, true, s.settings, s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
 	if err != nil {
 		return false, 0
 	}
@@ -123,7 +123,7 @@ func (s *Supplier) GetSupplierName() string {
 func (s *Supplier) GetSubListFromFile4Movie(filePath string) ([]supplier.SubInfo, error) {
 
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	browser, err := rod_helper.NewBrowserEx(true, s.settings, s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
+	browser, err := rod_helper.NewBrowserEx(s.log, true, s.settings, s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
 	if err != nil {
 		return nil, err
 	}
@@ -144,7 +144,7 @@ func (s *Supplier) GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]s
 
 	var err error
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	browser, err := rod_helper.NewBrowserEx(true, s.settings, s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
+	browser, err := rod_helper.NewBrowserEx(s.log, true, s.settings, s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
 	if err != nil {
 		return nil, err
 	}

+ 5 - 5
internal/logic/sub_supplier/zimuku/zimuku_test.go

@@ -23,7 +23,7 @@ func TestSupplier_GetSubListFromKeyword(t *testing.T) {
 
 	//imdbId1 := "tt3228774"
 	videoName := "黑白魔女库伊拉"
-	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	outList, err := s.getSubListFromKeyword(browser, videoName)
 	if err != nil {
 		t.Error(err)
@@ -53,7 +53,7 @@ func TestSupplier_GetSubListFromFile(t *testing.T) {
 
 	rootDir := unit_test_helper.GetTestDataResourceRootPath([]string{"sub_spplier"}, 5, true)
 	movie1 := filepath.Join(rootDir, "zimuku", "movies", "The Devil All the Time (2020)", "The Devil All the Time (2020) WEBDL-1080p.mkv")
-	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	outList, err := s.getSubListFromMovie(browser, movie1)
 	if err != nil {
 		t.Error(err)
@@ -85,7 +85,7 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	//epsMap[1] = 4
 	//series_helper2.SetTheSpecifiedEps2Download(seriesInfo, epsMap)
 
-	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	outList, err := s.GetSubListFromFile4Series(seriesInfo)
 	if err != nil {
 		t.Fatal(err)
@@ -114,7 +114,7 @@ func TestSupplier_getSubListFromKeyword(t *testing.T) {
 	//imdbID := "tt15299712" // 云南虫谷
 	//imdbID := "tt3626476"  // Vacation Friends (2021)
 	imdbID := "tt11192306" // Superman.and.Lois
-	zimuku := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	zimuku := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	subInfos, err := zimuku.getSubListFromKeyword(browser, imdbID)
 	if err != nil {
 		t.Fatal(err)
@@ -139,7 +139,7 @@ func TestSupplier_step3(t *testing.T) {
 
 func TestSupplier_CheckAlive(t *testing.T) {
 
-	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger4Tester()))
 	alive, _ := s.CheckAlive()
 	if alive == false {
 		t.Fatal("CheckAlive == false")

+ 16 - 14
internal/logic/sub_timeline_fixer/SubTimelineFixerHelperEx.go

@@ -5,7 +5,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/ass"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/srt"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/ffmpeg_helper"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
@@ -14,11 +13,13 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
 	"github.com/emirpasic/gods/maps/treemap"
 	"github.com/emirpasic/gods/utils"
+	"github.com/sirupsen/logrus"
 	"math"
 	"os"
 )
 
 type SubTimelineFixerHelperEx struct {
+	log                 *logrus.Logger
 	ffmpegHelper        *ffmpeg_helper.FFMPEGHelper
 	subParserHub        *sub_parser_hub.SubParserHub
 	timelineFixPipeLine *sub_timeline_fixer.Pipeline
@@ -26,13 +27,14 @@ type SubTimelineFixerHelperEx struct {
 	needDownloadFFMPeg  bool
 }
 
-func NewSubTimelineFixerHelperEx(fixerConfig settings.TimelineFixerSettings) *SubTimelineFixerHelperEx {
+func NewSubTimelineFixerHelperEx(log *logrus.Logger, fixerConfig settings.TimelineFixerSettings) *SubTimelineFixerHelperEx {
 
 	fixerConfig.Check()
 
 	return &SubTimelineFixerHelperEx{
-		ffmpegHelper:        ffmpeg_helper.NewFFMPEGHelper(),
-		subParserHub:        sub_parser_hub.NewSubParserHub(ass.NewParser(), srt.NewParser()),
+		log:                 log,
+		ffmpegHelper:        ffmpeg_helper.NewFFMPEGHelper(log),
+		subParserHub:        sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log)),
 		timelineFixPipeLine: sub_timeline_fixer.NewPipeline(fixerConfig.MaxOffsetTime),
 		fixerConfig:         fixerConfig,
 		needDownloadFFMPeg:  false,
@@ -44,18 +46,18 @@ func (s *SubTimelineFixerHelperEx) Check() bool {
 	version, err := s.ffmpegHelper.Version()
 	if err != nil {
 		s.needDownloadFFMPeg = false
-		log_helper.GetLogger().Errorln("Need Install ffmpeg and ffprobe !")
+		s.log.Errorln("Need Install ffmpeg and ffprobe !")
 		return false
 	}
 	s.needDownloadFFMPeg = true
-	log_helper.GetLogger().Infoln(version)
+	s.log.Infoln(version)
 	return true
 }
 
 func (s SubTimelineFixerHelperEx) Process(videoFileFullPath, srcSubFPath string) error {
 
 	if s.needDownloadFFMPeg == false {
-		log_helper.GetLogger().Errorln("Need Install ffmpeg and ffprobe, Can't Do TimeLine Fix")
+		s.log.Errorln("Need Install ffmpeg and ffprobe, Can't Do TimeLine Fix")
 		return nil
 	}
 
@@ -104,7 +106,7 @@ func (s SubTimelineFixerHelperEx) Process(videoFileFullPath, srcSubFPath string)
 
 		// 使用音频进行时间轴的校正
 		if len(ffmpegInfo.AudioInfoList) <= 0 {
-			log_helper.GetLogger().Warnln("Can`t find audio info, skip time fix --", videoFileFullPath)
+			s.log.Warnln("Can`t find audio info, skip time fix --", videoFileFullPath)
 			return nil
 		}
 		bProcess, infoSrc, pipeResultMax, err = s.processByAudio(ffmpegInfo.AudioInfoList[0].FullPath, srcSubFPath)
@@ -134,15 +136,15 @@ func (s SubTimelineFixerHelperEx) Process(videoFileFullPath, srcSubFPath string)
 
 	// 开始调整字幕时间轴
 	if bProcess == false || math.Abs(pipeResultMax.GetOffsetTime()) < s.fixerConfig.MinOffset {
-		log_helper.GetLogger().Infoln("Skip TimeLine Fix -- OffsetTime:", pipeResultMax.GetOffsetTime(), srcSubFPath)
+		s.log.Infoln("Skip TimeLine Fix -- OffsetTime:", pipeResultMax.GetOffsetTime(), srcSubFPath)
 		return nil
 	}
 	err = s.changeTimeLineAndSave(infoSrc, pipeResultMax, srcSubFPath)
 	if err != nil {
 		return err
 	}
-	log_helper.GetLogger().Infoln("Fix Offset:", pipeResultMax.GetOffsetTime(), srcSubFPath)
-	log_helper.GetLogger().Infoln("BackUp Org SubFile:", pipeResultMax.GetOffsetTime(), srcSubFPath+sub_timeline_fixer.BackUpExt)
+	s.log.Infoln("Fix Offset:", pipeResultMax.GetOffsetTime(), srcSubFPath)
+	s.log.Infoln("BackUp Org SubFile:", pipeResultMax.GetOffsetTime(), srcSubFPath+sub_timeline_fixer.BackUpExt)
 
 	return nil
 }
@@ -154,7 +156,7 @@ func (s SubTimelineFixerHelperEx) processBySub(baseSubFileFPath, srcSubFileFPath
 		return false, nil, sub_timeline_fixer.PipeResult{}, err
 	}
 	if bFind == false {
-		log_helper.GetLogger().Warnln("processBySub.DetermineFileTypeFromFile sub not match --", baseSubFileFPath)
+		s.log.Warnln("processBySub.DetermineFileTypeFromFile sub not match --", baseSubFileFPath)
 		return false, nil, sub_timeline_fixer.PipeResult{}, nil
 	}
 	bFind, infoSrc, err := s.subParserHub.DetermineFileTypeFromFile(srcSubFileFPath)
@@ -162,7 +164,7 @@ func (s SubTimelineFixerHelperEx) processBySub(baseSubFileFPath, srcSubFileFPath
 		return false, nil, sub_timeline_fixer.PipeResult{}, err
 	}
 	if bFind == false {
-		log_helper.GetLogger().Warnln("processBySub.DetermineFileTypeFromFile sub not match --", srcSubFileFPath)
+		s.log.Warnln("processBySub.DetermineFileTypeFromFile sub not match --", srcSubFileFPath)
 		return false, nil, sub_timeline_fixer.PipeResult{}, nil
 	}
 	// ---------------------------------------------------------------------------------------
@@ -190,7 +192,7 @@ func (s SubTimelineFixerHelperEx) processByAudio(baseAudioFileFPath, srcSubFileF
 		return false, nil, sub_timeline_fixer.PipeResult{}, err
 	}
 	if bFind == false {
-		log_helper.GetLogger().Warnln("processByAudio.DetermineFileTypeFromFile sub not match --", srcSubFileFPath)
+		s.log.Warnln("processByAudio.DetermineFileTypeFromFile sub not match --", srcSubFileFPath)
 		return false, nil, sub_timeline_fixer.PipeResult{}, nil
 	}
 	// ---------------------------------------------------------------------------------------

+ 31 - 29
internal/logic/sub_timeline_fixer/sub_timeline_fixer_helper.go

@@ -27,6 +27,7 @@ package sub_timeline_fixer
 //)
 //
 //type SubTimelineFixerHelper struct {
+//  log *logrus.Logger
 //	embyHelper       *emby_helper.EmbyHelper
 //	EmbyConfig       emby.EmbyConfig
 //	FixerConfig      sub_timeline_fiexer.SubTimelineFixerConfig
@@ -37,8 +38,9 @@ package sub_timeline_fixer
 //	timeOut          time.Duration
 //}
 //
-//func NewSubTimelineFixerHelper(embyConfig emby.EmbyConfig, subTimelineFixerConfig sub_timeline_fiexer.SubTimelineFixerConfig) *SubTimelineFixerHelper {
+//func NewSubTimelineFixerHelper(log *logrus.Logger, embyConfig emby.EmbyConfig, subTimelineFixerConfig sub_timeline_fiexer.SubTimelineFixerConfig) *SubTimelineFixerHelper {
 //	sub := SubTimelineFixerHelper{
+//
 //		EmbyConfig:       embyConfig,
 //		FixerConfig:      subTimelineFixerConfig,
 //		embyHelper:       emby_helper.NewEmbyHelper(embyConfig),
@@ -65,7 +67,7 @@ package sub_timeline_fixer
 //
 //	// 首先得开启,不然就直接跳过不执行
 //	if s.EmbyConfig.FixTimeLine == false {
-//		log_helper.GetLogger().Debugf("EmbyConfig.FixTimeLine = false, Skip")
+//		s.log.Debugf("EmbyConfig.FixTimeLine = false, Skip")
 //		return nil
 //	}
 //
@@ -75,19 +77,19 @@ package sub_timeline_fixer
 //	}
 //
 //	// 输出调试信息
-//	log_helper.GetLogger().Debugln("FixRecentlyItemsSubTimeline - DebugInfo - movieList Start")
+//	s.log.Debugln("FixRecentlyItemsSubTimeline - DebugInfo - movieList Start")
 //	for s, value := range movieList {
-//		log_helper.GetLogger().Debugln(s, value)
+//		s.log.Debugln(s, value)
 //	}
-//	log_helper.GetLogger().Debugln("FixRecentlyItemsSubTimeline - DebugInfo - movieList End")
+//	s.log.Debugln("FixRecentlyItemsSubTimeline - DebugInfo - movieList End")
 //
-//	log_helper.GetLogger().Debugln("FixRecentlyItemsSubTimeline - DebugInfo - seriesList Start")
+//	s.log.Debugln("FixRecentlyItemsSubTimeline - DebugInfo - seriesList Start")
 //	for s, _ := range seriesList {
-//		log_helper.GetLogger().Debugln(s)
+//		s.log.Debugln(s)
 //	}
-//	log_helper.GetLogger().Debugln("FixRecentlyItemsSubTimeline - DebugInfo - seriesList End")
+//	s.log.Debugln("FixRecentlyItemsSubTimeline - DebugInfo - seriesList End")
 //
-//	log_helper.GetLogger().Debugln("Start movieList fix Timeline")
+//	s.log.Debugln("Start movieList fix Timeline")
 //	// 先做电影的字幕校正、然后才是连续剧的
 //	for _, info := range movieList {
 //		// path.Dir 在 Windows 有梗,所以换个方式获取路径
@@ -97,9 +99,9 @@ package sub_timeline_fixer
 //			return err
 //		}
 //	}
-//	log_helper.GetLogger().Debugln("End movieList fix Timeline")
+//	s.log.Debugln("End movieList fix Timeline")
 //
-//	log_helper.GetLogger().Debugln("Start seriesList fix Timeline")
+//	s.log.Debugln("Start seriesList fix Timeline")
 //	for _, infos := range seriesList {
 //		for _, info := range infos {
 //			// path.Dir 在 Windows 有梗,所以换个方式获取路径
@@ -110,16 +112,16 @@ package sub_timeline_fixer
 //			}
 //		}
 //	}
-//	log_helper.GetLogger().Debugln("End seriesList fix Timeline")
+//	s.log.Debugln("End seriesList fix Timeline")
 //
 //	// 强制调用,测试 CGO=1 编译问题
-//	log_helper.GetLogger().Debugln("VAD Mode", vad.Mode)
+//	s.log.Debugln("VAD Mode", vad.Mode)
 //
 //	return nil
 //}
 //
 //func (s SubTimelineFixerHelper) fixOneVideoSub(videoId string, videoRootPath string) error {
-//	log_helper.GetLogger().Debugln("fixOneVideoSub VideoROotPath:", videoRootPath)
+//	s.log.Debugln("fixOneVideoSub VideoROotPath:", videoRootPath)
 //	// internalEngSub 默认第一个是 srt 然后第二个是 ass,就不要去遍历了
 //	found, internalEngSub, containChineseSubFile, err := s.embyHelper.GetInternalEngSubAndExChineseEnglishSub(videoId)
 //	if err != nil {
@@ -127,11 +129,11 @@ package sub_timeline_fixer
 //	}
 //
 //	if found == false {
-//		log_helper.GetLogger().Debugln("GetInternalEngSubAndExChineseEnglishSub - found == false")
+//		s.log.Debugln("GetInternalEngSubAndExChineseEnglishSub - found == false")
 //		return nil
 //	}
 //
-//	log_helper.GetLogger().Debugln("internalEngSub:", len(internalEngSub), "containChineseSubFile:", len(containChineseSubFile))
+//	s.log.Debugln("internalEngSub:", len(internalEngSub), "containChineseSubFile:", len(containChineseSubFile))
 //	// 需要先把原有的外置字幕带有 -fix 的删除,然后再做修正
 //	// 不然如果调整了条件,之前修复的本次其实就不修正了,那么就会“残留”下来,误以为是本次配置的信息导致的
 //	for _, exSubInfo := range containChineseSubFile {
@@ -143,11 +145,11 @@ package sub_timeline_fixer
 //		subFileNeedRemove := filepath.Join(videoRootPath, exSubInfo.FileName)
 //
 //		if videoRootPath == "" {
-//			log_helper.GetLogger().Debugln("videoRootPath == \"\", Skip Remove:", subFileNeedRemove)
+//			s.log.Debugln("videoRootPath == \"\", Skip Remove:", subFileNeedRemove)
 //			continue
 //		}
 //
-//		log_helper.GetLogger().Debugln("Remove fixed sub:", subFileNeedRemove)
+//		s.log.Debugln("Remove fixed sub:", subFileNeedRemove)
 //		err = os.Remove(subFileNeedRemove)
 //		if err != nil {
 //			return err
@@ -165,18 +167,18 @@ package sub_timeline_fixer
 //			continue
 //		}
 //
-//		log_helper.GetLogger().Debugln("fixSubTimeline start")
+//		s.log.Debugln("fixSubTimeline start")
 //		bFound, subFixInfos, subNewName, err := s.fixSubTimeline(internalEngSub[inSelectSubIndex], exSubInfo)
 //		if err != nil {
 //			return err
 //		}
 //		if bFound == false {
-//			log_helper.GetLogger().Debugln("fixSubTimeline bFound == false", exSubInfo.FileName)
+//			s.log.Debugln("fixSubTimeline bFound == false", exSubInfo.FileName)
 //			continue
 //		}
 //		// 调试的时候用
 //		if videoRootPath == "" {
-//			log_helper.GetLogger().Debugln("videoRootPath == \"\", Skip fix sub:", exSubInfo.FileName)
+//			s.log.Debugln("videoRootPath == \"\", Skip fix sub:", exSubInfo.FileName)
 //			continue
 //		}
 //		for _, info := range subFixInfos {
@@ -186,7 +188,7 @@ package sub_timeline_fixer
 //			if err != nil {
 //				return err
 //			}
-//			log_helper.GetLogger().Infoln("Sub Timeline fixed:", desFixedSubFullName)
+//			s.log.Infoln("Sub Timeline fixed:", desFixedSubFullName)
 //		}
 //	}
 //
@@ -196,7 +198,7 @@ package sub_timeline_fixer
 //// fixSubTimeline 修复时间轴,containChineseSubFile 这里可能是,只要是带有中文的都算,简体、繁体、简英、繁英,需要后续额外的判断
 //func (s SubTimelineFixerHelper) fixSubTimeline(enSubFile emby.SubInfo, containChineseSubFile emby.SubInfo) (bool, []sub_timeline_fixer.SubFixInfo, string, error) {
 //	fixedSubName := ""
-//	log_helper.GetLogger().Debugln("fixSubTimeline - DetermineFileTypeFromBytes", enSubFile.FileName)
+//	s.log.Debugln("fixSubTimeline - DetermineFileTypeFromBytes", enSubFile.FileName)
 //	bFind, infoBase, err := s.subParserHub.DetermineFileTypeFromBytes(enSubFile.Content, enSubFile.Ext)
 //	if err != nil {
 //		return false, nil, fixedSubName, err
@@ -211,7 +213,7 @@ package sub_timeline_fixer
 //	*/
 //	sub_helper.MergeMultiDialogue4EngSubtitle(infoBase)
 //
-//	log_helper.GetLogger().Debugln("fixSubTimeline - DetermineFileTypeFromBytes", containChineseSubFile.FileName)
+//	s.log.Debugln("fixSubTimeline - DetermineFileTypeFromBytes", containChineseSubFile.FileName)
 //	bFind, infoSrc, err := s.subParserHub.DetermineFileTypeFromBytes(containChineseSubFile.Content, containChineseSubFile.Ext)
 //	if err != nil {
 //		return false, nil, fixedSubName, err
@@ -252,14 +254,14 @@ package sub_timeline_fixer
 //	}
 //	bok, offsetTime, sd, err := s.subTimelineFixer.GetOffsetTimeV1(infoBase, infoSrc, filepath.Join(cacheTmpPath, infoSrc.Name+"-bar.html"), filepath.Join(cacheTmpPath, infoSrc.Name+".log"))
 //	if offsetTime != 0 {
-//		log_helper.GetLogger().Infoln(infoSrc.Name, "offset time is", fmt.Sprintf("%f", offsetTime), "s")
+//		s.log.Infoln(infoSrc.Name, "offset time is", fmt.Sprintf("%f", offsetTime), "s")
 //	}
 //	// 超过 SD 阈值了
 //	if sd > s.FixerConfig.V1_MaxStartTimeDiffSD {
-//		log_helper.GetLogger().Infoln(infoSrc.Name, "Start Time Diff SD, skip", fmt.Sprintf("%f", sd))
+//		s.log.Infoln(infoSrc.Name, "Start Time Diff SD, skip", fmt.Sprintf("%f", sd))
 //		return false, nil, fixedSubName, nil
 //	} else {
-//		log_helper.GetLogger().Infoln(infoSrc.Name, "Start Time Diff SD", fmt.Sprintf("%f", sd))
+//		s.log.Infoln(infoSrc.Name, "Start Time Diff SD", fmt.Sprintf("%f", sd))
 //	}
 //
 //	if err != nil || bok == false {
@@ -268,7 +270,7 @@ package sub_timeline_fixer
 //
 //	// 偏移很小就无视了
 //	if offsetTime < s.FixerConfig.V1_MinOffset && offsetTime > -s.FixerConfig.V1_MinOffset {
-//		log_helper.GetLogger().Infoln(infoSrc.Name, fmt.Sprintf("Min Offset Config is %f, skip ", s.FixerConfig.V1_MinOffset), fmt.Sprintf("now is %f", offsetTime))
+//		s.log.Infoln(infoSrc.Name, fmt.Sprintf("Min Offset Config is %f, skip ", s.FixerConfig.V1_MinOffset), fmt.Sprintf("now is %f", offsetTime))
 //		return false, nil, fixedSubName, nil
 //	}
 //	// 写入校准时间轴后的字幕
@@ -277,7 +279,7 @@ package sub_timeline_fixer
 //		// 符合已知的字幕命名格式,不符合就跳过,都跳过也行,就不做任何操作而已
 //		bMatch, fileNameWithOutExt, subExt, subLang, extraSubName := formatter.IsMatchThisFormat(infoSrc.Name)
 //		if bMatch == false {
-//			log_helper.GetLogger().Debugln(fmt.Sprintf("%s IsMatchThisFormat == false, Skip, %s", formatter.GetFormatterName(), infoSrc.Name))
+//			s.log.Debugln(fmt.Sprintf("%s IsMatchThisFormat == false, Skip, %s", formatter.GetFormatterName(), infoSrc.Name))
 //			continue
 //		}
 //		// 是否包含 default 关键词,暂时无需判断 forced

+ 1 - 2
internal/logic/task_queue/init.go

@@ -1,7 +1,6 @@
 package task_queue
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/dgraph-io/badger/v3"
 	"path/filepath"
@@ -20,7 +19,7 @@ func GetDb() *badger.DB {
 		// 这边数据库会自动创建这个目录文件
 		dbBase, err = badger.Open(opt)
 		if err != nil {
-			log_helper.GetLogger().Panicln("task_queue.GetDb()", err)
+			panic(err)
 		}
 
 		go badgerGC(dbBase)

+ 5 - 5
internal/logic/task_queue/task_queue_test.go

@@ -17,7 +17,7 @@ func TestTaskQueue_AddAndGetAndDel(t *testing.T) {
 	}()
 	DelDb()
 
-	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger())
+	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester())
 	for i := taskPriorityCount; i >= 0; i-- {
 		bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, my_util.RandStringBytesMaskImprSrcSB(10), i))
 		if err != nil {
@@ -69,7 +69,7 @@ func TestTaskQueue_AddAndClear(t *testing.T) {
 	}()
 	DelDb()
 
-	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger())
+	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester())
 	for i := taskPriorityCount; i >= 0; i-- {
 		bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, my_util.RandStringBytesMaskImprSrcSB(10), i))
 		if err != nil {
@@ -97,7 +97,7 @@ func TestTaskQueue_Update(t *testing.T) {
 	}()
 	DelDb()
 
-	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger())
+	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester())
 	for i := taskPriorityCount; i >= 0; i-- {
 		bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, my_util.RandStringBytesMaskImprSrcSB(10), i))
 		if err != nil {
@@ -160,7 +160,7 @@ func TestTaskQueue_UpdateAdGetOneWaiting(t *testing.T) {
 	}()
 	DelDb()
 
-	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger())
+	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester())
 	for i := taskPriorityCount; i >= 0; i-- {
 		bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, fmt.Sprintf("%d", i), i))
 		if err != nil {
@@ -212,7 +212,7 @@ func TestTaskQueue_UpdatePriority(t *testing.T) {
 	}()
 	DelDb()
 
-	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger())
+	taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester())
 	for i := taskPriorityCount; i >= 0; i-- {
 		bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, fmt.Sprintf("%d", i), i))
 		if err != nil {

+ 0 - 2
internal/pkg/decode/decode.go

@@ -2,7 +2,6 @@ package decode
 
 import (
 	"errors"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/types"
 	common2 "github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	"github.com/beevik/etree"
@@ -149,7 +148,6 @@ func GetImdbInfo4Movie(movieFileFullPath string) (types.VideoIMDBInfo, error) {
 	if movieXmlFPath != "" {
 		imdbInfo, err = getImdbAndYearMovieXml(movieXmlFPath)
 		if err != nil {
-			log_helper.GetLogger().Errorln("getImdbAndYearMovieXml error, move on:", err)
 		} else {
 			return imdbInfo, nil
 		}

+ 1 - 2
internal/pkg/download_file_cache/init.go

@@ -1,7 +1,6 @@
 package download_file_cache
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/dgraph-io/badger/v3"
 	"path/filepath"
@@ -20,7 +19,7 @@ func GetDb() *badger.DB {
 		// 这边数据库会自动创建这个目录文件
 		dbBase, err = badger.Open(opt)
 		if err != nil {
-			log_helper.GetLogger().Panicln("sub_cache.GetDb()", err)
+			panic(err)
 		}
 
 		go badgerGC(dbBase)

+ 3 - 3
internal/pkg/downloader/downloader.go

@@ -59,10 +59,10 @@ func NewDownloader(inSubFormatter ifaces.ISubFormatter, fileDownloader *file_dow
 	sitesSequence = append(sitesSequence, common.SubSiteSubHd)
 	sitesSequence = append(sitesSequence, common.SubSiteShooter)
 	sitesSequence = append(sitesSequence, common.SubSiteXunLei)
-	downloader.mk = markSystem.NewMarkingSystem(sitesSequence, downloader.settings.AdvancedSettings.SubTypePriority)
+	downloader.mk = markSystem.NewMarkingSystem(downloader.log, sitesSequence, downloader.settings.AdvancedSettings.SubTypePriority)
 
 	// 初始化,字幕校正的实例
-	downloader.subTimelineFixerHelperEx = sub_timeline_fixer.NewSubTimelineFixerHelperEx(*downloader.settings.TimelineFixerSettings)
+	downloader.subTimelineFixerHelperEx = sub_timeline_fixer.NewSubTimelineFixerHelperEx(downloader.log, *downloader.settings.TimelineFixerSettings)
 
 	if downloader.settings.AdvancedSettings.FixTimeLine == true {
 		downloader.subTimelineFixerHelperEx.Check()
@@ -262,7 +262,7 @@ func (d *Downloader) seriesDlFunc(ctx context.Context, job taskQueue2.OneJob, do
 	}
 	var err error
 	// 这里拿到了这一部连续剧的所有的剧集信息,以及所有下载到的字幕信息
-	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(job.SeriesRootDirPath, d.settings.AdvancedSettings.TaskQueue.ExpirationTime, false, d.settings.AdvancedSettings.ProxySettings)
+	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(d.log, job.SeriesRootDirPath, d.settings.AdvancedSettings.TaskQueue.ExpirationTime, false, d.settings.AdvancedSettings.ProxySettings)
 	if err != nil {
 		err = errors.New(fmt.Sprintf("seriesDlFunc.ReadSeriesInfoFromDir, Error: %v", err))
 		d.downloadQueue.AutoDetectUpdateJobStatus(job, err)

+ 3 - 3
internal/pkg/downloader/downloader_test.go

@@ -31,7 +31,7 @@ func TestDownloader_DownloadSub4Movie(t *testing.T) {
 	//if err != nil {
 	//	t.Fatal(err)
 	//}
-	////err = dl.GetUpdateVideoListFromEmby(config.MovieFolder, config.SeriesFolder)
+	////err = dl.getUpdateVideoListFromEmby(config.MovieFolder, config.SeriesFolder)
 	////if err != nil {
 	////	t.Fatal(err)
 	////}
@@ -70,7 +70,7 @@ func TestDownloader_DownloadSub4Series(t *testing.T) {
 	//if err != nil {
 	//	t.Fatal(err)
 	//}
-	////err = dl.GetUpdateVideoListFromEmby(config.MovieFolder, config.SeriesFolder)
+	////err = dl.getUpdateVideoListFromEmby(config.MovieFolder, config.SeriesFolder)
 	////if err != nil {
 	////	t.Fatal(err)
 	////}
@@ -104,7 +104,7 @@ func TestDownloader_GetUpdateVideoListFromEmby(t *testing.T) {
 	//if err != nil {
 	//	t.Fatal(err)
 	//}
-	//err = dl.GetUpdateVideoListFromEmby()
+	//err = dl.getUpdateVideoListFromEmby()
 	//if err != nil {
 	//	t.Fatal(err)
 	//}

+ 12 - 10
internal/pkg/emby_api/emby_api.go

@@ -2,11 +2,11 @@ package emby_api
 
 import (
 	"fmt"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/emby"
 	"github.com/go-resty/resty/v2"
 	"github.com/panjf2000/ants/v2"
+	"github.com/sirupsen/logrus"
 	"golang.org/x/net/context"
 	"net/http"
 	"sync"
@@ -14,14 +14,16 @@ import (
 )
 
 type EmbyApi struct {
+	log        *logrus.Logger
 	embyConfig *settings.EmbySettings
 	threads    int
 	timeOut    time.Duration
 	client     *resty.Client
 }
 
-func NewEmbyApi(embyConfig *settings.EmbySettings) *EmbyApi {
+func NewEmbyApi(log *logrus.Logger, embyConfig *settings.EmbySettings) *EmbyApi {
 	em := EmbyApi{}
+	em.log = log
 	em.embyConfig = embyConfig
 	// 检查是否超过范围
 	em.embyConfig.Check()
@@ -43,7 +45,7 @@ func (em EmbyApi) RefreshRecentlyVideoInfo() error {
 		return err
 	}
 
-	log_helper.GetLogger().Debugln("RefreshRecentlyVideoInfo - GetRecentlyItems Count", len(items.Items))
+	em.log.Debugln("RefreshRecentlyVideoInfo - GetRecentlyItems Count", len(items.Items))
 
 	updateFunc := func(i interface{}) error {
 		tmpId := i.(string)
@@ -70,13 +72,13 @@ func (em EmbyApi) RefreshRecentlyVideoInfo() error {
 		select {
 		case err = <-done:
 			if err != nil {
-				log_helper.GetLogger().Errorln("RefreshRecentlyVideoInfo.NewPoolWithFunc got error", err)
+				em.log.Errorln("RefreshRecentlyVideoInfo.NewPoolWithFunc got error", err)
 			}
 			return
 		case p := <-panicChan:
-			log_helper.GetLogger().Errorln("RefreshRecentlyVideoInfo.NewPoolWithFunc got panic", p)
+			em.log.Errorln("RefreshRecentlyVideoInfo.NewPoolWithFunc got panic", p)
 		case <-ctx.Done():
-			log_helper.GetLogger().Errorln("RefreshRecentlyVideoInfo.NewPoolWithFunc got time out", ctx.Err())
+			em.log.Errorln("RefreshRecentlyVideoInfo.NewPoolWithFunc got time out", ctx.Err())
 			return
 		}
 	})
@@ -89,7 +91,7 @@ func (em EmbyApi) RefreshRecentlyVideoInfo() error {
 		wg.Add(1)
 		err = p.Invoke(InputData{Id: item.Id, Wg: &wg})
 		if err != nil {
-			log_helper.GetLogger().Errorln("RefreshRecentlyVideoInfo ants.Invoke", err)
+			em.log.Errorln("RefreshRecentlyVideoInfo ants.Invoke", err)
 		}
 	}
 	wg.Wait()
@@ -131,7 +133,7 @@ func (em EmbyApi) GetRecentlyItems() (emby.EmbyRecentlyItems, error) {
 	var recItemExsitMap = make(map[string]emby.EmbyRecentlyItem)
 	var err error
 	if em.embyConfig.SkipWatched == false {
-		log_helper.GetLogger().Debugln("Emby Setting SkipWatched = false")
+		em.log.Debugln("Emby Setting SkipWatched = false")
 
 		// 默认是不指定某一个User的视频列表
 		_, err = em.client.R().
@@ -152,7 +154,7 @@ func (em EmbyApi) GetRecentlyItems() (emby.EmbyRecentlyItems, error) {
 			return emby.EmbyRecentlyItems{}, err
 		}
 	} else {
-		log_helper.GetLogger().Debugln("Emby Setting SkipWatched = true")
+		em.log.Debugln("Emby Setting SkipWatched = true")
 
 		var userIds emby.EmbyUsers
 		userIds, err = em.GetUserIdList()
@@ -190,7 +192,7 @@ func (em EmbyApi) GetRecentlyItems() (emby.EmbyRecentlyItems, error) {
 		}
 
 		for id := range recItemExsitMap {
-			log_helper.GetLogger().Debugln("Skip Watched Video:", recItemMap[id].Type, recItemMap[id].Name)
+			em.log.Debugln("Skip Watched Video:", recItemMap[id].Type, recItemMap[id].Name)
 			delete(recItemMap, id)
 		}
 

+ 11 - 9
internal/pkg/ffmpeg_helper/ffmpeg_helper.go

@@ -7,11 +7,11 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/ass"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/srt"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/language"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/common"
+	"github.com/sirupsen/logrus"
 	"github.com/tidwall/gjson"
 	"os"
 	"os/exec"
@@ -21,12 +21,14 @@ import (
 )
 
 type FFMPEGHelper struct {
+	log          *logrus.Logger
 	SubParserHub *sub_parser_hub.SubParserHub // 字幕内容的解析器
 }
 
-func NewFFMPEGHelper() *FFMPEGHelper {
+func NewFFMPEGHelper(log *logrus.Logger) *FFMPEGHelper {
 	return &FFMPEGHelper{
-		SubParserHub: sub_parser_hub.NewSubParserHub(ass.NewParser(), srt.NewParser()),
+		log:          log,
+		SubParserHub: sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log)),
 	}
 }
 
@@ -80,7 +82,7 @@ func (f *FFMPEGHelper) GetFFMPEGInfo(videoFileFullPath string, exportType Export
 		if bok == false && ffMPEGInfo != nil {
 			err := os.RemoveAll(nowCacheFolderPath)
 			if err != nil {
-				log_helper.GetLogger().Errorln("GetFFMPEGInfo - RemoveAll", err.Error())
+				f.log.Errorln("GetFFMPEGInfo - RemoveAll", err.Error())
 				return
 			}
 		}
@@ -129,14 +131,14 @@ func (f *FFMPEGHelper) GetFFMPEGInfo(videoFileFullPath string, exportType Export
 				return true, ffMPEGInfo, nil
 			}
 		} else {
-			log_helper.GetLogger().Errorln("GetFFMPEGInfo.getAudioAndSubExportArgs Not Support ExportType")
+			f.log.Errorln("GetFFMPEGInfo.getAudioAndSubExportArgs Not Support ExportType")
 			return false, nil, nil
 		}
 		// 上面的操作为了就是确保后续的导出不会出问题
 		// 执行导出,音频和内置的字幕
 		execErrorString, err := f.exportAudioAndSubtitles(exportAudioArgs, exportSubArgs, exportType)
 		if err != nil {
-			log_helper.GetLogger().Errorln("exportAudioAndSubtitles", execErrorString)
+			f.log.Errorln("exportAudioAndSubtitles", execErrorString)
 			bok = false
 			return bok, nil, err
 		}
@@ -266,8 +268,8 @@ func (f *FFMPEGHelper) parseJsonString2GetFFProbeInfo(videoFileFullPath, inputFF
 		return false, nil, nil
 	}
 
-	ffmpegInfoFlitter := NewFFMPEGInfo(videoFileFullPath)
-	ffmpegInfoFull := NewFFMPEGInfo(videoFileFullPath)
+	ffmpegInfoFlitter := NewFFMPEGInfo(f.log, videoFileFullPath)
+	ffmpegInfoFull := NewFFMPEGInfo(f.log, videoFileFullPath)
 
 	// 进行字幕和音频的缓存,优先当然是导出 中、英、日、韩 相关的字幕和音频
 	// 但是如果都没得这些的时候,那么也需要导出至少一个字幕或者音频,用于字幕的校正
@@ -495,7 +497,7 @@ func (f *FFMPEGHelper) getAudioAndSubExportArgs(videoFileFullPath string, ffmpeg
 
 	nowCacheFolderPath, err := ffmpegInfo.GetCacheFolderFPath()
 	if err != nil {
-		log_helper.GetLogger().Errorln("getAudioAndSubExportArgs", videoFileFullPath, err.Error())
+		f.log.Errorln("getAudioAndSubExportArgs", videoFileFullPath, err.Error())
 		return nil, nil
 	}
 

+ 5 - 3
internal/pkg/ffmpeg_helper/ffmpeg_info.go

@@ -1,27 +1,29 @@
 package ffmpeg_helper
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 	"strings"
 )
 
 type FFMPEGInfo struct {
+	log              *logrus.Logger
 	VideoFullPath    string                // 视频文件的路径
 	AudioInfoList    []AudioInfo           // 内置音频列表
 	SubtitleInfoList []SubtitleInfo        // 内置字幕列表
 	ExternalSubInfos []*subparser.FileInfo // 外置字幕列表
 }
 
-func NewFFMPEGInfo(videoFullPath string) *FFMPEGInfo {
+func NewFFMPEGInfo(log *logrus.Logger, videoFullPath string) *FFMPEGInfo {
 	return &FFMPEGInfo{
+		log:              log,
 		VideoFullPath:    videoFullPath,
 		AudioInfoList:    make([]AudioInfo, 0),
 		SubtitleInfoList: make([]SubtitleInfo, 0),
@@ -42,7 +44,7 @@ func (f *FFMPEGInfo) IsExported(exportType ExportType) bool {
 	bProcessDone := false
 	nowCacheFolder, err := f.GetCacheFolderFPath()
 	if err != nil {
-		log_helper.GetLogger().Errorln("FFMPEGInfo.IsExported.GetCacheFolderFPath", f.VideoFullPath, err.Error())
+		f.log.Errorln("FFMPEGInfo.IsExported.GetCacheFolderFPath", f.VideoFullPath, err.Error())
 		return false
 	}
 	tmpNowExportedMaskFile := filepath.Join(nowCacheFolder, exportedMakeFileName)

+ 14 - 13
internal/pkg/hot_fix/hot_fix_001.go

@@ -4,10 +4,10 @@ import (
 	"errors"
 	movieHelper "github.com/allanpk716/ChineseSubFinder/internal/logic/movie_helper"
 	seriesHelper "github.com/allanpk716/ChineseSubFinder/internal/logic/series_helper"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter/old"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
+	"github.com/sirupsen/logrus"
 	"os"
 )
 
@@ -17,12 +17,13 @@ import (
 	chs_en[shooter] -> Chinese(中英,shooter)
 */
 type HotFix001 struct {
+	log            *logrus.Logger
 	movieRootDirs  []string
 	seriesRootDirs []string
 }
 
-func NewHotFix001(movieRootDirs []string, seriesRootDirs []string) *HotFix001 {
-	return &HotFix001{movieRootDirs: movieRootDirs, seriesRootDirs: seriesRootDirs}
+func NewHotFix001(log *logrus.Logger, movieRootDirs []string, seriesRootDirs []string) *HotFix001 {
+	return &HotFix001{log: log, movieRootDirs: movieRootDirs, seriesRootDirs: seriesRootDirs}
 }
 
 func (h HotFix001) GetKey() string {
@@ -32,10 +33,10 @@ func (h HotFix001) GetKey() string {
 func (h HotFix001) Process() (interface{}, error) {
 
 	defer func() {
-		log_helper.GetLogger().Infoln("Hotfix", h.GetKey(), "End")
+		h.log.Infoln("Hotfix", h.GetKey(), "End")
 	}()
 
-	log_helper.GetLogger().Infoln("Hotfix", h.GetKey(), "Start...")
+	h.log.Infoln("Hotfix", h.GetKey(), "Start...")
 
 	return h.process()
 }
@@ -47,31 +48,31 @@ func (h HotFix001) process() (OutStruct001, error) {
 	outStruct.ErrFiles = make([]string, 0)
 
 	for i, dir := range h.movieRootDirs {
-		log_helper.GetLogger().Infoln("Fix Movie Dir Index", i, dir, "Start...")
+		h.log.Infoln("Fix Movie Dir Index", i, dir, "Start...")
 		fixMovie, err := h.fixMovie(dir)
 		if err != nil {
-			log_helper.GetLogger().Errorln("Fix Movie Dir Index", i, dir, "End With Error", err)
+			h.log.Errorln("Fix Movie Dir Index", i, dir, "End With Error", err)
 			return outStruct, err
 		}
 
 		outStruct.RenamedFiles = append(outStruct.RenamedFiles, fixMovie.RenamedFiles...)
 		outStruct.ErrFiles = append(outStruct.ErrFiles, fixMovie.ErrFiles...)
 
-		log_helper.GetLogger().Infoln("Fix Movie Dir Index", i, dir, "End...")
+		h.log.Infoln("Fix Movie Dir Index", i, dir, "End...")
 	}
 
 	for i, dir := range h.seriesRootDirs {
-		log_helper.GetLogger().Infoln("Fix Series Dir Index", i, dir, "Start...")
+		h.log.Infoln("Fix Series Dir Index", i, dir, "Start...")
 		fixSeries, err := h.fixSeries(dir)
 		if err != nil {
-			log_helper.GetLogger().Errorln("Fix Series Dir Index", i, dir, "End With Error", err)
+			h.log.Errorln("Fix Series Dir Index", i, dir, "End With Error", err)
 			return outStruct, err
 		}
 
 		outStruct.RenamedFiles = append(outStruct.RenamedFiles, fixSeries.RenamedFiles...)
 		outStruct.ErrFiles = append(outStruct.ErrFiles, fixSeries.ErrFiles...)
 
-		log_helper.GetLogger().Infoln("Fix Series Dir Index", i, dir, "End...")
+		h.log.Infoln("Fix Series Dir Index", i, dir, "End...")
 	}
 
 	return outStruct, nil
@@ -88,7 +89,7 @@ func (h HotFix001) fixMovie(movieRootDir string) (OutStruct001, error) {
 	}
 	// 先找出有那些电影文件夹和连续剧文件夹
 	var movieFullPathList = make([]string, 0)
-	movieFullPathList, err = my_util.SearchMatchedVideoFile(log_helper.GetLogger(), movieRootDir)
+	movieFullPathList, err = my_util.SearchMatchedVideoFile(h.log, movieRootDir)
 	if err != nil {
 		return outStruct, err
 	}
@@ -126,7 +127,7 @@ func (h HotFix001) fixSeries(seriesRootDir string) (OutStruct001, error) {
 		return outStruct, errors.New("seriesRootDir path not exist: " + seriesRootDir)
 	}
 	// 先找出有那些电影文件夹和连续剧文件夹
-	seriesDirList, err := seriesHelper.GetSeriesList(seriesRootDir)
+	seriesDirList, err := seriesHelper.GetSeriesList(h.log, seriesRootDir)
 	if err != nil {
 		return outStruct, err
 	}

+ 8 - 7
internal/pkg/hot_fix/hot_fix_002.go

@@ -3,7 +3,7 @@ package hot_fix
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/dao"
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
+	"github.com/sirupsen/logrus"
 )
 
 /*
@@ -11,10 +11,11 @@ import (
 	那么之前有的需要进行清理一次,然后才能够正确的执行后续新的 sha256 的逻辑
 */
 type HotFix002 struct {
+	log *logrus.Logger
 }
 
-func NewHotFix002() *HotFix002 {
-	return &HotFix002{}
+func NewHotFix002(log *logrus.Logger) *HotFix002 {
+	return &HotFix002{log: log}
 }
 
 func (h HotFix002) GetKey() string {
@@ -24,10 +25,10 @@ func (h HotFix002) GetKey() string {
 func (h HotFix002) Process() (interface{}, error) {
 
 	defer func() {
-		log_helper.GetLogger().Infoln("Hotfix", h.GetKey(), "End")
+		h.log.Infoln("Hotfix", h.GetKey(), "End")
 	}()
 
-	log_helper.GetLogger().Infoln("Hotfix", h.GetKey(), "Start...")
+	h.log.Infoln("Hotfix", h.GetKey(), "Start...")
 
 	return h.process()
 }
@@ -37,12 +38,12 @@ func (h HotFix002) process() (bool, error) {
 	delSubInfo := func(imdbInfo *models.IMDBInfo, cacheInfo *models.VideoSubInfo) bool {
 		err := dao.GetDb().Model(imdbInfo).Association("VideoSubInfos").Delete(cacheInfo)
 		if err != nil {
-			log_helper.GetLogger().Warningln("ScanPlayedVideoSubInfo.Scan", ".Delete Association", cacheInfo.SubName, err)
+			h.log.Warningln("ScanPlayedVideoSubInfo.Scan", ".Delete Association", cacheInfo.SubName, err)
 			return false
 		}
 		// 继续删除这个对象
 		dao.GetDb().Delete(cacheInfo)
-		log_helper.GetLogger().Infoln("HotFix 002, Sub Association", cacheInfo.SubName)
+		h.log.Infoln("HotFix 002, Sub Association", cacheInfo.SubName)
 
 		return true
 	}

+ 11 - 11
internal/pkg/hot_fix/hot_fix_hub.go

@@ -6,18 +6,18 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/dao"
 	"github.com/allanpk716/ChineseSubFinder/internal/ifaces"
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/types"
+	"github.com/sirupsen/logrus"
 )
 
 // HotFixProcess 去 DB 中查询 Hotfix 的标记,看有那些需要修复,那些已经修复完毕
-func HotFixProcess(param types.HotFixParam) error {
+func HotFixProcess(log *logrus.Logger, param types.HotFixParam) error {
 
 	// -----------------------------------------------------------------------
 	// 一共有多少个 HotFix 要修复,需要固定下来
 	hotfixCases := []ifaces.IHotFix{
-		NewHotFix001(param.MovieRootDirs, param.SeriesRootDirs),
-		NewHotFix002(),
+		NewHotFix001(log, param.MovieRootDirs, param.SeriesRootDirs),
+		NewHotFix002(log),
 	}
 	// -----------------------------------------------------------------------
 	// 找现在有多少个 hotfix 执行过了
@@ -46,19 +46,19 @@ func HotFixProcess(param types.HotFixParam) error {
 			outStruct := processResult.(OutStruct001)
 			if err != nil {
 				for i, file := range outStruct.ErrFiles {
-					log_helper.GetLogger().Errorln("Hotfix 001, rename failed,", i, file)
+					log.Errorln("Hotfix 001, rename failed,", i, file)
 				}
 				// 如果任意故障则跳出后续的修复
-				log_helper.GetLogger().Errorln("Hotfix 001 failed, break")
+				log.Errorln("Hotfix 001 failed, break")
 				return err
 			} else {
 				for i, file := range outStruct.RenamedFiles {
-					log_helper.GetLogger().Infoln("Hotfix 001, rename done,", i, file)
+					log.Infoln("Hotfix 001, rename done,", i, file)
 				}
 			}
 			break
 		case "002":
-			log_helper.GetLogger().Infoln("Hotfix 002, process == ", processResult.(bool))
+			log.Infoln("Hotfix 002, process == ", processResult.(bool))
 			break
 		default:
 			continue
@@ -68,15 +68,15 @@ func HotFixProcess(param types.HotFixParam) error {
 		result = dao.GetDb().Create(&markHotFixDone)
 		if result == nil {
 			nowError := errors.New(fmt.Sprintf("hotfix %s is done, but record failed, dao.GetDb().Create return nil", hotfixCase.GetKey()))
-			log_helper.GetLogger().Errorln(nowError)
+			log.Errorln(nowError)
 			return nowError
 		}
 		if result.Error != nil {
 			nowError := errors.New(fmt.Sprintf("hotfix %s is done, but record failed, %s", hotfixCase.GetKey(), result.Error))
-			log_helper.GetLogger().Errorln(nowError)
+			log.Errorln(nowError)
 			return nowError
 		}
-		log_helper.GetLogger().Infoln("Hotfix", hotfixCase.GetKey(), "is Recorded")
+		log.Infoln("Hotfix", hotfixCase.GetKey(), "is Recorded")
 		// 找到了,目前的逻辑是成功才插入,那么查询到了,就默认是执行成功了
 	}
 	return nil

+ 12 - 9
internal/pkg/imdb_helper/imdb.go

@@ -4,13 +4,14 @@ import (
 	"github.com/StalkR/imdb"
 	"github.com/allanpk716/ChineseSubFinder/internal/dao"
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/types"
+	"github.com/sirupsen/logrus"
 	"strconv"
 	"strings"
+	"time"
 )
 
 // GetVideoInfoFromIMDBWeb 从 IMDB 网站 ID 查询影片的信息
@@ -41,9 +42,9 @@ func GetVideoInfoFromIMDBWeb(imdbInfo types.VideoIMDBInfo, _proxySettings ...*se
 }
 
 // GetVideoIMDBInfoFromLocal 从本地获取 IMDB 信息,如果找不到则去网络获取并写入本地缓存
-func GetVideoIMDBInfoFromLocal(imdbInfo types.VideoIMDBInfo, _proxySettings ...*settings.ProxySettings) (*models.IMDBInfo, error) {
+func GetVideoIMDBInfoFromLocal(log *logrus.Logger, imdbInfo types.VideoIMDBInfo, _proxySettings ...*settings.ProxySettings) (*models.IMDBInfo, error) {
 
-	log_helper.GetLogger().Debugln("GetVideoIMDBInfoFromLocal", 0)
+	log.Debugln("GetVideoIMDBInfoFromLocal", 0)
 
 	// 首先从数据库中查找是否存在这个 IMDB 信息,如果不存在再使用 Web 查找,且写入数据库
 	var imdbInfos []models.IMDBInfo
@@ -52,7 +53,7 @@ func GetVideoIMDBInfoFromLocal(imdbInfo types.VideoIMDBInfo, _proxySettings ...*
 		Preload("VideoSubInfos").
 		Limit(1).Where(&models.IMDBInfo{IMDBID: imdbInfo.ImdbId}).Find(&imdbInfos)
 
-	log_helper.GetLogger().Debugln("GetVideoIMDBInfoFromLocal", 1)
+	log.Debugln("GetVideoIMDBInfoFromLocal", 1)
 
 	if len(imdbInfos) <= 0 {
 		// 没有找到,去网上获取
@@ -60,7 +61,9 @@ func GetVideoIMDBInfoFromLocal(imdbInfo types.VideoIMDBInfo, _proxySettings ...*
 		if err != nil {
 			return nil, err
 		}
-		log_helper.GetLogger().Debugln("GetVideoIMDBInfoFromLocal", 2)
+		log.Debugln("GetVideoIMDBInfoFromLocal", 2)
+
+		time.Sleep(my_util.RandomSecondDuration(1, 3))
 
 		// 存入数据库
 		nowIMDBInfo := models.NewIMDBInfo(imdbInfo.ImdbId, t.Name, t.Year, t.Description, t.Languages, t.AKA)
@@ -68,24 +71,24 @@ func GetVideoIMDBInfoFromLocal(imdbInfo types.VideoIMDBInfo, _proxySettings ...*
 		imdbInfos = append(imdbInfos, *nowIMDBInfo)
 		dao.GetDb().Create(nowIMDBInfo)
 
-		log_helper.GetLogger().Debugln("GetVideoIMDBInfoFromLocal", 3)
+		log.Debugln("GetVideoIMDBInfoFromLocal", 3)
 
 		return nowIMDBInfo, nil
 	} else {
 
-		log_helper.GetLogger().Debugln("GetVideoIMDBInfoFromLocal", 4)
+		log.Debugln("GetVideoIMDBInfoFromLocal", 4)
 		// 找到
 		return &imdbInfos[0], nil
 	}
 }
 
 // IsChineseVideo 从 imdbID 去查询判断是否是中文视频
-func IsChineseVideo(imdbInfo types.VideoIMDBInfo, _proxySettings ...*settings.ProxySettings) (bool, *models.IMDBInfo, error) {
+func IsChineseVideo(log *logrus.Logger, imdbInfo types.VideoIMDBInfo, _proxySettings ...*settings.ProxySettings) (bool, *models.IMDBInfo, error) {
 
 	const chName0 = "chinese"
 	const chName1 = "mandarin"
 
-	localIMDBInfo, err := GetVideoIMDBInfoFromLocal(imdbInfo, _proxySettings...)
+	localIMDBInfo, err := GetVideoIMDBInfoFromLocal(log, imdbInfo, _proxySettings...)
 	if err != nil {
 		return false, nil, err
 	}

+ 3 - 3
internal/pkg/language/string_encoding.go

@@ -2,17 +2,17 @@ package language
 
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/charset"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/axgle/mahonia"
 	nzlov "github.com/nzlov/chardet"
+	"github.com/sirupsen/logrus"
 	"strings"
 )
 
 // ConvertToString 将字符串从原始编码转换到目标编码,需要配合字符串检测编码库使用 chardet.NewTextDetector()
-func ConvertToString(src string, srcCode string, tagCode string) string {
+func ConvertToString(log *logrus.Logger, src string, srcCode string, tagCode string) string {
 	defer func() {
 		if err := recover(); err != nil {
-			log_helper.GetLogger().Errorln("ConvertToString panic:", err)
+			log.Errorln("ConvertToString panic:", err)
 		}
 	}()
 	srcCoder := mahonia.NewDecoder(srcCode)

+ 3 - 10
internal/pkg/log_helper/log_hub.go

@@ -173,7 +173,7 @@ func newOnceLogger() *logrus.Logger {
 
 	onceLoggerFile, err = os.OpenFile(fileAbsPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm)
 	if err != nil {
-		GetLogger().Panicln("newOnceLogger.OpenFile", err)
+		panic(err)
 	}
 	Logger.SetOutput(onceLoggerFile)
 
@@ -196,18 +196,12 @@ func cleanAndLoadOnceLogs() {
 	onceLogs = make([]log_hub.OnceLog, 0)
 
 	pathRoot := filepath.Join(global_value.ConfigRootDirFPath(), "Logs")
-
-	GetLogger().Infoln("ConfigRootDirFPath", pathRoot)
-
 	// 扫描当前日志存储目录下有多少个符合要求的 Once- 日志
 	// 确保有且仅有最近的 20 次扫描日志记录存在即可
 	matches, err := filepath.Glob(filepath.Join(pathRoot, onceLogPrefix+"*.log"))
 	if err != nil {
-		GetLogger().Panicln("cleanAndLoadOnceLogs.Glob", err)
+		panic(err)
 	}
-
-	GetLogger().Infoln("matches logs:", len(matches))
-
 	if len(matches) > onceLogMaxCount {
 		// 需要清理多余的
 		// 保存的文件名是 Once-unixTime.log 做为前提
@@ -223,7 +217,7 @@ func cleanAndLoadOnceLogs() {
 		// 将有存在价值的“单次”日志缓存到内存中,供 Web API 查询
 		matches, err = filepath.Glob(filepath.Join(pathRoot, onceLogPrefix+"*.log"))
 		if err != nil {
-			GetLogger().Panicln("cleanAndLoadOnceLogs.Glob", err)
+			panic(err)
 		}
 	}
 	j := 0
@@ -246,7 +240,6 @@ func readLogFile(index int, filePath string) error {
 	}
 	matched := regex_things.ReMathLogOneLine.FindAllStringSubmatch(string(fBytes), -1)
 	if matched == nil || len(matched) < 1 {
-		GetLogger().Debugln("readLogFile can't found ReMathLogOneLine, Skip")
 		return nil
 	}
 

+ 11 - 46
internal/pkg/log_helper/loghelper.go

@@ -8,18 +8,17 @@ import (
 	"io"
 	"os"
 	"path/filepath"
-	"sync"
 	"time"
 )
 
-func NewLogHelper(appName string, level logrus.Level, maxAge time.Duration, rotationTime time.Duration) *logrus.Logger {
+func NewLogHelper(appName string, logStorePath string, level logrus.Level, maxAge time.Duration, rotationTime time.Duration) *logrus.Logger {
 
 	Logger := logrus.New()
 	Logger.Formatter = &easy.Formatter{
 		TimestampFormat: "2006-01-02 15:04:05",
 		LogFormat:       "[%lvl%]: %time% - %msg%\n",
 	}
-	pathRoot := filepath.Join(global_value.ConfigRootDirFPath(), "Logs")
+	pathRoot := filepath.Join(logStorePath, "Logs")
 	fileAbsPath := filepath.Join(pathRoot, appName+".log")
 	// 下面配置日志每隔 X 分钟轮转一个新文件,保留最近 X 分钟的日志文件,多余的自动清理掉。
 	writer, _ := rotatelogs.New(
@@ -39,46 +38,6 @@ func NewLogHelper(appName string, level logrus.Level, maxAge time.Duration, rota
 	return Logger
 }
 
-// SetLoggerName 如果是 ChineseSubFinder 调用则无需使用,其他子程序用的时候,为了区分日子名称,需要设置
-func SetLoggerName(logName string) {
-	if logName == "" {
-		panic("Need Set Logger Name")
-	}
-	logNameBase = logName
-}
-
-func GetLogger(reload ...bool) *logrus.Logger {
-
-	if len(reload) > 0 {
-		if reload[0] == true {
-			logInit()
-		}
-	}
-	oneBase.Do(logInit)
-
-	return loggerBase
-}
-
-func logInit() {
-	var level logrus.Level
-	// 之前是读取配置文件,现在改为,读取当前目录下,是否有一个特殊的文件,有则启动 Debug 日志级别
-	// 那么怎么写入这个文件,就靠额外的逻辑控制了
-	if isFile(filepath.Join(global_value.ConfigRootDirFPath(), DebugFileName)) == true {
-		level = logrus.DebugLevel
-	} else {
-		level = logrus.InfoLevel
-	}
-
-	if logNameBase == "" {
-		// 默认不设置的时候就是这个
-		logNameBase = LogNameChineseSubFinder
-	}
-
-	loggerBase = NewLogHelper(logNameBase, level, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour)
-
-	loggerBase.AddHook(NewLoggerHub())
-}
-
 func isFile(filePath string) bool {
 	s, err := os.Stat(filePath)
 	if err != nil {
@@ -115,6 +74,14 @@ func DeleteDebugFile() error {
 	return nil
 }
 
+func GetLogger4Tester() *logrus.Logger {
+	if logger4Tester == nil {
+		logger4Tester = NewLogHelper(LogNameChineseSubFinder, os.TempDir(), logrus.DebugLevel, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour)
+
+	}
+	return logger4Tester
+}
+
 const DebugFileName = "opendebuglog"
 
 const (
@@ -124,7 +91,5 @@ const (
 )
 
 var (
-	logNameBase = ""
-	oneBase     = sync.Once{}
-	loggerBase  *logrus.Logger
+	logger4Tester *logrus.Logger
 )

+ 1 - 1
internal/pkg/my_util/util.go

@@ -244,7 +244,7 @@ func SearchMatchedVideoFileFromDirs(l *logrus.Logger, dirs []string) ([]string,
 	}
 
 	// 排序,从最新的到最早的
-	SortByModTime(fileFullPathList)
+	fileFullPathList = SortByModTime(fileFullPathList)
 
 	for _, s := range fileFullPathList {
 		l.Debugln(s)

+ 4 - 4
internal/pkg/my_util/util_test.go

@@ -12,7 +12,7 @@ import (
 func TestCloseChrome(t *testing.T) {
 
 	// BUG: will produce Logs under this dir
-	CloseChrome(log_helper.GetLogger())
+	CloseChrome(log_helper.GetLogger4Tester())
 }
 
 func TestFileNameIsBDMV(t *testing.T) {
@@ -34,13 +34,13 @@ func TestGetRestOfDaySec(t *testing.T) {
 
 func TestGetPublicIP(t *testing.T) {
 
-	got := GetPublicIP(log_helper.GetLogger(), settings.NewTaskQueue())
+	got := GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue())
 	println("NoProxy:", got)
 
 	sock5ProxySettings := settings.NewProxySettings(true, "socks5", local_http_proxy_server.LocalHttpProxyPort,
 		"127.0.0.1", "10808", "", "")
 
-	got = GetPublicIP(log_helper.GetLogger(), settings.NewTaskQueue(), sock5ProxySettings)
+	got = GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue(), sock5ProxySettings)
 	println("UseProxy socks5:", got)
 	err := sock5ProxySettings.CloseLocalHttpProxyServer()
 	if err != nil {
@@ -49,7 +49,7 @@ func TestGetPublicIP(t *testing.T) {
 
 	httpProxySettings := settings.NewProxySettings(true, "http", local_http_proxy_server.LocalHttpProxyPort,
 		"127.0.0.1", "10809", "", "")
-	got = GetPublicIP(log_helper.GetLogger(), settings.NewTaskQueue(), httpProxySettings)
+	got = GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue(), httpProxySettings)
 	println("UseProxy http:", got)
 	err = httpProxySettings.CloseLocalHttpProxyServer()
 	if err != nil {

+ 5 - 4
internal/pkg/notify_center/NotifyCenter.go

@@ -1,20 +1,21 @@
 package notify_center
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/go-resty/resty/v2"
+	"github.com/sirupsen/logrus"
 	"net/url"
 	"sync"
 )
 
 type NotifyCenter struct {
+	log        *logrus.Logger
 	webhookUrl string
 	infos      map[string]string
 	mu         sync.Mutex
 }
 
-func NewNotifyCenter(webhookUrl string) *NotifyCenter {
-	n := NotifyCenter{webhookUrl: webhookUrl}
+func NewNotifyCenter(log *logrus.Logger, webhookUrl string) *NotifyCenter {
+	n := NotifyCenter{log: log, webhookUrl: webhookUrl}
 	n.infos = make(map[string]string)
 	return &n
 }
@@ -36,7 +37,7 @@ func (n *NotifyCenter) Send() {
 	for s, s2 := range n.infos {
 		_, err := client.R().Get(n.webhookUrl + s + "/" + url.QueryEscape(s2))
 		if err != nil {
-			log_helper.GetLogger().Errorln("NewNotifyCenter.Send", err)
+			n.log.Errorln("NewNotifyCenter.Send", err)
 			return
 		}
 	}

+ 16 - 16
internal/pkg/rod_helper/rodHelper.go

@@ -5,7 +5,6 @@ import (
 	_ "embed"
 	"errors"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/random_useragent"
@@ -14,16 +13,17 @@ import (
 	"github.com/go-rod/rod/lib/launcher"
 	"github.com/go-rod/rod/lib/proto"
 	"github.com/mholt/archiver/v3"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 	"sync"
 	"time"
 )
 
-func NewBrowserEx(loadAdblock bool, _settings *settings.Settings, preLoadUrl ...string) (*rod.Browser, error) {
+func NewBrowserEx(log *logrus.Logger, loadAdblock bool, _settings *settings.Settings, preLoadUrl ...string) (*rod.Browser, error) {
 
 	if _settings.ExperimentalFunction.RemoteChromeSettings.Enable == false {
-		return NewBrowser(_settings.AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl(), loadAdblock, preLoadUrl...)
+		return NewBrowser(log, _settings.AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl(), loadAdblock, preLoadUrl...)
 	} else {
 		return NewBrowserFromDocker(_settings.AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl(),
 			_settings.ExperimentalFunction.RemoteChromeSettings.RemoteDockerURL,
@@ -33,15 +33,15 @@ func NewBrowserEx(loadAdblock bool, _settings *settings.Settings, preLoadUrl ...
 	}
 }
 
-func NewBrowser(httpProxyURL string, loadAdblock bool, preLoadUrl ...string) (*rod.Browser, error) {
+func NewBrowser(log *logrus.Logger, httpProxyURL string, loadAdblock bool, preLoadUrl ...string) (*rod.Browser, error) {
 
 	var err error
 
 	once.Do(func() {
-		adblockSavePath, err = releaseAdblock()
+		adblockSavePath, err = releaseAdblock(log)
 		if err != nil {
-			log_helper.GetLogger().Errorln("releaseAdblock", err)
-			log_helper.GetLogger().Panicln("releaseAdblock", err)
+			log.Errorln("releaseAdblock", err)
+			log.Panicln("releaseAdblock", err)
 		}
 	})
 
@@ -229,8 +229,8 @@ func HttpGetFromBrowser(browser *rod.Browser, inputUrl string, tt time.Duration,
 }
 
 // ReloadBrowser 提前把浏览器下载好
-func ReloadBrowser() {
-	newBrowser, err := NewBrowserEx(true, settings.GetSettings())
+func ReloadBrowser(log *logrus.Logger) {
+	newBrowser, err := NewBrowserEx(log, true, settings.GetSettings())
 	if err != nil {
 		return
 	}
@@ -247,7 +247,7 @@ func ReloadBrowser() {
 }
 
 // Clear 清理缓存
-func Clear() {
+func Clear(log *logrus.Logger) {
 	//_ = rod.Try(func() {
 	//	l := launcher.New().
 	//		Headless(false).
@@ -255,7 +255,7 @@ func Clear() {
 	//
 	//	defer func() {
 	//		l.Cleanup() // remove launcher.FlagUserDataDir
-	//		log_helper.GetLogger().Infoln("rod clean up done.")
+	//		log.Infoln("rod clean up done.")
 	//	}()
 	//
 	//	url := l.MustLaunch()
@@ -272,11 +272,11 @@ func Clear() {
 
 	err := my_folder.ClearRodTmpRootFolder()
 	if err != nil {
-		log_helper.GetLogger().Errorln("ClearRodTmpRootFolder", err)
+		log.Errorln("ClearRodTmpRootFolder", err)
 		return
 	}
 
-	log_helper.GetLogger().Infoln("ClearRodTmpRootFolder Done")
+	log.Infoln("ClearRodTmpRootFolder Done")
 }
 
 func newPage(browser *rod.Browser) (*rod.Page, error) {
@@ -288,13 +288,13 @@ func newPage(browser *rod.Browser) (*rod.Page, error) {
 }
 
 // releaseAdblock 从程序中释放 adblock 插件出来到本地路径
-func releaseAdblock() (string, error) {
+func releaseAdblock(log *logrus.Logger) (string, error) {
 
 	defer func() {
-		log_helper.GetLogger().Infoln("releaseAdblock end")
+		log.Infoln("releaseAdblock end")
 	}()
 
-	log_helper.GetLogger().Infoln("releaseAdblock start")
+	log.Infoln("releaseAdblock start")
 
 	adblockFolderPath := global_value.AdblockTmpFolder()
 	err := os.MkdirAll(filepath.Join(adblockFolderPath), os.ModePerm)

+ 4 - 2
internal/pkg/sub_formatter/normal/normal.go

@@ -9,17 +9,19 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
 	languageConst "github.com/allanpk716/ChineseSubFinder/internal/types/language"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
+	"github.com/sirupsen/logrus"
 	"path/filepath"
 	"regexp"
 	"strings"
 )
 
 type Formatter struct {
+	log       *logrus.Logger
 	subParser *sub_parser_hub.SubParserHub
 }
 
-func NewFormatter() *Formatter {
-	return &Formatter{subParser: sub_parser_hub.NewSubParserHub(ass.NewParser(), srt.NewParser())}
+func NewFormatter(log *logrus.Logger) *Formatter {
+	return &Formatter{log: log, subParser: sub_parser_hub.NewSubParserHub(log, ass.NewParser(log), srt.NewParser(log))}
 }
 
 // GetFormatterName 当前的 Formatter 是那个

+ 26 - 24
internal/pkg/sub_formatter/sub_format_changer.go

@@ -8,7 +8,6 @@ import (
 	movieHelper "github.com/allanpk716/ChineseSubFinder/internal/logic/movie_helper"
 	seriesHelper "github.com/allanpk716/ChineseSubFinder/internal/logic/series_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter/emby"
@@ -16,6 +15,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
 	interCommon "github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
+	"github.com/sirupsen/logrus"
 	"gorm.io/gorm"
 	"os"
 	"path/filepath"
@@ -23,19 +23,21 @@ import (
 )
 
 type SubFormatChanger struct {
+	log            *logrus.Logger
 	movieRootDirs  []string
 	seriesRootDirs []string
 	formatter      map[string]ifaces.ISubFormatter
 }
 
-func NewSubFormatChanger(movieRootDirs []string, seriesRootDirs []string) *SubFormatChanger {
+func NewSubFormatChanger(log *logrus.Logger, movieRootDirs []string, seriesRootDirs []string) *SubFormatChanger {
 
 	formatter := SubFormatChanger{movieRootDirs: movieRootDirs, seriesRootDirs: seriesRootDirs}
+	formatter.log = log
 	// TODO 如果字幕格式新增了实现,这里也需要添加对应的实例
 	// 初始化支持的 formatter
 	// normal
 	formatter.formatter = make(map[string]ifaces.ISubFormatter)
-	normalM := normal.NewFormatter()
+	normalM := normal.NewFormatter(log)
 	formatter.formatter[normalM.GetFormatterName()] = normalM
 	// emby
 	embyM := emby.NewFormatter()
@@ -44,40 +46,40 @@ func NewSubFormatChanger(movieRootDirs []string, seriesRootDirs []string) *SubFo
 }
 
 // AutoDetectThenChangeTo 自动检测字幕的命名格式,然后转换到目标的 formatter 上
-func (s SubFormatChanger) AutoDetectThenChangeTo(desFormatter common.FormatterName) (RenameResults, error) {
+func (s *SubFormatChanger) AutoDetectThenChangeTo(desFormatter common.FormatterName) (RenameResults, error) {
 
 	outStruct := RenameResults{}
 	outStruct.RenamedFiles = make(map[string]int)
 	outStruct.ErrFiles = make(map[string]int)
 
 	for i, dir := range s.movieRootDirs {
-		log_helper.GetLogger().Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "Start")
+		s.log.Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "Start")
 
 		err := s.autoDetectMovieThenChangeTo(&outStruct, desFormatter, dir)
 		if err != nil {
-			log_helper.GetLogger().Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "End")
+			s.log.Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "End")
 			return RenameResults{}, err
 		}
 
-		log_helper.GetLogger().Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "Start")
+		s.log.Infoln("AutoDetectThenChangeTo Movie Index", i, dir, "Start")
 	}
 
 	for i, dir := range s.seriesRootDirs {
-		log_helper.GetLogger().Infoln("AutoDetectThenChangeTo Series Index", i, dir, "Start")
+		s.log.Infoln("AutoDetectThenChangeTo Series Index", i, dir, "Start")
 
 		err := s.autoDetectMovieThenChangeTo(&outStruct, desFormatter, dir)
 		if err != nil {
-			log_helper.GetLogger().Infoln("AutoDetectThenChangeTo Series Index", i, dir, "End")
+			s.log.Infoln("AutoDetectThenChangeTo Series Index", i, dir, "End")
 			return RenameResults{}, err
 		}
 
-		log_helper.GetLogger().Infoln("AutoDetectThenChangeTo Series Index", i, dir, "Start")
+		s.log.Infoln("AutoDetectThenChangeTo Series Index", i, dir, "Start")
 	}
 
 	return outStruct, nil
 }
 
-func (s SubFormatChanger) autoDetectMovieThenChangeTo(outStruct *RenameResults, desFormatter common.FormatterName, movieRootDir string) error {
+func (s *SubFormatChanger) autoDetectMovieThenChangeTo(outStruct *RenameResults, desFormatter common.FormatterName, movieRootDir string) error {
 
 	var err error
 	if my_util.IsDir(movieRootDir) == false {
@@ -85,7 +87,7 @@ func (s SubFormatChanger) autoDetectMovieThenChangeTo(outStruct *RenameResults,
 	}
 	// 先找出有那些电影文件夹和连续剧文件夹
 	var movieFullPathList = make([]string, 0)
-	movieFullPathList, err = my_util.SearchMatchedVideoFile(log_helper.GetLogger(), movieRootDir)
+	movieFullPathList, err = my_util.SearchMatchedVideoFile(s.log, movieRootDir)
 	// fmt.Println("No. of Movies: ", len(movieFullPathList), "  dir:  ", s.movieRootDir)
 	if err != nil {
 		return err
@@ -95,14 +97,14 @@ func (s SubFormatChanger) autoDetectMovieThenChangeTo(outStruct *RenameResults,
 
 		// 需要判断这个视频根目录是否有 .ignore 文件,有也跳过
 		if my_util.IsFile(filepath.Join(filepath.Dir(one), interCommon.Ignore)) == true {
-			log_helper.GetLogger().Infoln("Found", interCommon.Ignore, "Skip", one)
+			s.log.Infoln("Found", interCommon.Ignore, "Skip", one)
 			// 跳过下载字幕
 			continue
 		}
 
 		found := false
 		var fitMovieNameSubList = make([]string, 0)
-		found, _, fitMovieNameSubList, err = movieHelper.MovieHasChineseSub(one)
+		found, _, fitMovieNameSubList, err = movieHelper.MovieHasChineseSub(s.log, one)
 		if err != nil || found == false {
 			continue
 		}
@@ -115,14 +117,14 @@ func (s SubFormatChanger) autoDetectMovieThenChangeTo(outStruct *RenameResults,
 	return nil
 }
 
-func (s SubFormatChanger) autoDetectMSeriesThenChangeTo(outStruct *RenameResults, desFormatter common.FormatterName, seriesRootDir string) error {
+func (s *SubFormatChanger) autoDetectMSeriesThenChangeTo(outStruct *RenameResults, desFormatter common.FormatterName, seriesRootDir string) error {
 
 	var err error
 	if my_util.IsDir(seriesRootDir) == false {
 		return errors.New("seriesRootDir path not exist: " + seriesRootDir)
 	}
 	// 先找出有那些电影文件夹和连续剧文件夹
-	seriesDirList, err := seriesHelper.GetSeriesList(seriesRootDir)
+	seriesDirList, err := seriesHelper.GetSeriesList(s.log, seriesRootDir)
 	if err != nil {
 		return err
 	}
@@ -132,12 +134,12 @@ func (s SubFormatChanger) autoDetectMSeriesThenChangeTo(outStruct *RenameResults
 
 		// 需要判断这个视频根目录是否有 .ignore 文件,有也跳过
 		if my_util.IsFile(filepath.Join(oneSeriesDir, interCommon.Ignore)) == true {
-			log_helper.GetLogger().Infoln("Found", interCommon.Ignore, "Skip", oneSeriesDir)
+			s.log.Infoln("Found", interCommon.Ignore, "Skip", oneSeriesDir)
 			// 跳过下载字幕
 			continue
 		}
 
-		seriesSubFiles, err = sub_helper.SearchMatchedSubFileByDir(oneSeriesDir)
+		seriesSubFiles, err = sub_helper.SearchMatchedSubFileByDir(s.log, oneSeriesDir)
 		if err != nil {
 			return err
 		}
@@ -151,7 +153,7 @@ func (s SubFormatChanger) autoDetectMSeriesThenChangeTo(outStruct *RenameResults
 }
 
 // autoDetectAndChange 自动检测命名格式,然后修改至目标的命名格式
-func (s SubFormatChanger) autoDetectAndChange(outStruct *RenameResults, fitSubName string, desFormatter common.FormatterName) {
+func (s *SubFormatChanger) autoDetectAndChange(outStruct *RenameResults, fitSubName string, desFormatter common.FormatterName) {
 
 	for _, formatter := range s.formatter {
 
@@ -216,7 +218,7 @@ type RenameResults struct {
 }
 
 // GetSubFormatter 选择字幕命名格式化的实例
-func GetSubFormatter(subNameFormatter int) ifaces.ISubFormatter {
+func GetSubFormatter(log *logrus.Logger, subNameFormatter int) ifaces.ISubFormatter {
 	var subFormatter ifaces.ISubFormatter
 	switch subNameFormatter {
 	case int(common.Emby):
@@ -226,7 +228,7 @@ func GetSubFormatter(subNameFormatter int) ifaces.ISubFormatter {
 		}
 	case int(common.Normal):
 		{
-			subFormatter = normal.NewFormatter()
+			subFormatter = normal.NewFormatter(log)
 			break
 		}
 	default:
@@ -240,7 +242,7 @@ func GetSubFormatter(subNameFormatter int) ifaces.ISubFormatter {
 }
 
 // SubFormatChangerProcess 执行 SubFormatChanger 逻辑,并且更新数据库缓存
-func SubFormatChangerProcess(movieRootDirs []string, seriesRootDirs []string, nowDesFormatter common.FormatterName) (RenameResults, error) {
+func SubFormatChangerProcess(log *logrus.Logger, movieRootDirs []string, seriesRootDirs []string, nowDesFormatter common.FormatterName) (RenameResults, error) {
 	var subFormatRec models.SubFormatRec
 	re := dao.GetDb().First(&subFormatRec)
 	if re == nil {
@@ -251,7 +253,7 @@ func SubFormatChangerProcess(movieRootDirs []string, seriesRootDirs []string, no
 			return RenameResults{}, errors.New(fmt.Sprintf("SubFormatChangerProcess dao.GetDb().First, %v", re.Error))
 		}
 	}
-	subFormatChanger := NewSubFormatChanger(movieRootDirs, seriesRootDirs)
+	subFormatChanger := NewSubFormatChanger(log, movieRootDirs, seriesRootDirs)
 	// 理论上有且仅有一条记录
 	if subFormatRec.Done == false {
 		// 没有找到,认为是第一次执行
@@ -274,7 +276,7 @@ func SubFormatChangerProcess(movieRootDirs []string, seriesRootDirs []string, no
 		// 找到了,需要判断上一次执行的目标 formatter 是啥,如果这次的目标 formatter 不一样则执行
 		// 如果是一样的则跳过
 		if common.FormatterName(subFormatRec.FormatName) == nowDesFormatter {
-			log_helper.GetLogger().Infoln("DesSubFormatter == LateTimeSubFormatter then skip process")
+			log.Infoln("DesSubFormatter == LateTimeSubFormatter then skip process")
 			return RenameResults{}, nil
 		}
 		// 执行更改

+ 14 - 14
internal/pkg/sub_helper/sub_helper.go

@@ -5,7 +5,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/archive_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/language"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/regex_things"
@@ -14,6 +13,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/supplier"
+	"github.com/sirupsen/logrus"
 	"math"
 	"os"
 	"path/filepath"
@@ -23,7 +23,7 @@ import (
 )
 
 // OrganizeDlSubFiles 需要从汇总来是网站字幕中,解压对应的压缩包中的字幕出来
-func OrganizeDlSubFiles(tmpFolderName string, subInfos []supplier.SubInfo) (map[string][]string, error) {
+func OrganizeDlSubFiles(log *logrus.Logger, tmpFolderName string, subInfos []supplier.SubInfo) (map[string][]string, error) {
 
 	// 缓存列表,整理后的字幕列表
 	// SxEx - []string 字幕的路径
@@ -41,10 +41,10 @@ func OrganizeDlSubFiles(tmpFolderName string, subInfos []supplier.SubInfo) (map[
 	// 基于以上两点,写了一堆啰嗦的逻辑···
 	for i := range subInfos {
 		// 先存下来,保存是时候需要前缀,前缀就是从那个网站下载来的
-		nowFileSaveFullPath := filepath.Join(tmpFolderFullPath, GetFrontNameAndOrgName(&subInfos[i]))
+		nowFileSaveFullPath := filepath.Join(tmpFolderFullPath, GetFrontNameAndOrgName(log, &subInfos[i]))
 		err = my_util.WriteFile(nowFileSaveFullPath, subInfos[i].Data)
 		if err != nil {
-			log_helper.GetLogger().Errorln("getFrontNameAndOrgName - WriteFile", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
+			log.Errorln("getFrontNameAndOrgName - WriteFile", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
 			continue
 		}
 		nowExt := strings.ToLower(subInfos[i].Ext)
@@ -57,7 +57,7 @@ func OrganizeDlSubFiles(tmpFolderName string, subInfos []supplier.SubInfo) (map[
 		if nowExt != ".zip" && nowExt != ".tar" && nowExt != ".rar" && nowExt != ".7z" {
 			// 是否是受支持的字幕类型
 			if sub_parser_hub.IsSubExtWanted(nowExt) == false {
-				log_helper.GetLogger().Debugln("OrganizeDlSubFiles -> IsSubExtWanted == false", "Name:", subInfos[i].Name, "FileUrl:", subInfos[i].FileUrl)
+				log.Debugln("OrganizeDlSubFiles -> IsSubExtWanted == false", "Name:", subInfos[i].Name, "FileUrl:", subInfos[i].FileUrl)
 				continue
 			}
 			// 加入缓存列表
@@ -73,13 +73,13 @@ func OrganizeDlSubFiles(tmpFolderName string, subInfos []supplier.SubInfo) (map[
 			err = archive_helper.UnArchiveFile(nowFileSaveFullPath, unzipTmpFolder)
 			// 解压完成后,遍历受支持的字幕列表,加入缓存列表
 			if err != nil {
-				log_helper.GetLogger().Errorln("archiver.UnArchive", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
+				log.Errorln("archiver.UnArchive", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
 				continue
 			}
 			// 搜索这个目录下的所有符合字幕格式的文件
-			subFileFullPaths, err := SearchMatchedSubFileByDir(unzipTmpFolder)
+			subFileFullPaths, err := SearchMatchedSubFileByDir(log, unzipTmpFolder)
 			if err != nil {
-				log_helper.GetLogger().Errorln("searchMatchedSubFile", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
+				log.Errorln("searchMatchedSubFile", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
 				continue
 			}
 			// 这里需要给这些下载到的文件进行改名,加是从那个网站来的前缀,后续好查找
@@ -89,7 +89,7 @@ func OrganizeDlSubFiles(tmpFolderName string, subInfos []supplier.SubInfo) (map[
 				// 改名
 				err = os.Rename(fileFullPath, newSubNameFullPath)
 				if err != nil {
-					log_helper.GetLogger().Errorln("os.Rename", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
+					log.Errorln("os.Rename", subInfos[i].FromWhere, subInfos[i].Name, subInfos[i].TopN, err)
 					continue
 				}
 				// 加入缓存列表
@@ -178,12 +178,12 @@ func SelectChineseBestSubtitle(subs []subparser.FileInfo, subTypePriority int) *
 }
 
 // GetFrontNameAndOrgName 返回的名称包含,那个网站下载的,这个网站中排名第几,文件名
-func GetFrontNameAndOrgName(info *supplier.SubInfo) string {
+func GetFrontNameAndOrgName(log *logrus.Logger, info *supplier.SubInfo) string {
 
 	infoName := ""
 	fileName, err := decode.GetVideoInfoFromFileName(info.Name)
 	if err != nil {
-		log_helper.GetLogger().Warnln("", err)
+		log.Warnln("", err)
 		infoName = info.Name
 	} else {
 		infoName = fileName.Title + "_S" + strconv.Itoa(fileName.Season) + "E" + strconv.Itoa(fileName.Episode) + filepath.Ext(info.Name)
@@ -199,7 +199,7 @@ func AddFrontName(info supplier.SubInfo, orgName string) string {
 }
 
 // SearchMatchedSubFileByDir 搜索符合后缀名的视频文件,排除 Sub_SxE0 这样的文件夹中的文件
-func SearchMatchedSubFileByDir(dir string) ([]string, error) {
+func SearchMatchedSubFileByDir(log *logrus.Logger, dir string) ([]string, error) {
 	// 这里有个梗,会出现 __MACOSX 这类文件夹,那么里面会有一样的文件,需要用文件大小排除一下,至少大于 1 kb 吧
 	var fileFullPathList = make([]string, 0)
 	pathSep := string(os.PathSeparator)
@@ -216,7 +216,7 @@ func SearchMatchedSubFileByDir(dir string) ([]string, error) {
 				continue
 			}
 			// 内层的错误就无视了
-			oneList, _ := SearchMatchedSubFileByDir(fullPath)
+			oneList, _ := SearchMatchedSubFileByDir(log, fullPath)
 			if oneList != nil {
 				fileFullPathList = append(fileFullPathList, oneList...)
 			}
@@ -231,7 +231,7 @@ func SearchMatchedSubFileByDir(dir string) ([]string, error) {
 			}
 
 			if info.Size() == 4096 && strings.HasPrefix(curFile.Name(), "._") == true {
-				log_helper.GetLogger().Debugln("SearchMatchedSubFileByDir file.Size() == 4096 && Prefix Name == ._*", fullPath)
+				log.Debugln("SearchMatchedSubFileByDir file.Size() == 4096 && Prefix Name == ._*", fullPath)
 				continue
 			}
 

+ 11 - 9
internal/pkg/sub_parser_hub/subParserHub.go

@@ -3,10 +3,10 @@ package sub_parser_hub
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/ifaces"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/language"
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/common"
 	languageConst "github.com/allanpk716/ChineseSubFinder/internal/types/language"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/subparser"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 	"regexp"
@@ -14,12 +14,14 @@ import (
 )
 
 type SubParserHub struct {
+	log    *logrus.Logger
 	Parser []ifaces.ISubParser
 }
 
 // NewSubParserHub 处理的字幕文件需要符合 [siteName]_ 的前缀描述,是本程序专用的
-func NewSubParserHub(parser ifaces.ISubParser, _parser ...ifaces.ISubParser) *SubParserHub {
+func NewSubParserHub(log *logrus.Logger, parser ifaces.ISubParser, _parser ...ifaces.ISubParser) *SubParserHub {
 	s := SubParserHub{}
+	s.log = log
 	s.Parser = make([]ifaces.ISubParser, 0)
 	s.Parser = append(s.Parser, parser)
 	if len(_parser) > 0 {
@@ -77,15 +79,15 @@ func (p SubParserHub) IsSubHasChinese(fileFPath string) bool {
 	// 增加判断已存在的字幕是否有中文
 	bFind, file, err := p.DetermineFileTypeFromFile(fileFPath)
 	if err != nil {
-		log_helper.GetLogger().Errorln("IsSubHasChinese.DetermineFileTypeFromFile", fileFPath, err)
+		p.log.Errorln("IsSubHasChinese.DetermineFileTypeFromFile", fileFPath, err)
 		return false
 	}
 	if bFind == false {
-		log_helper.GetLogger().Warnln("IsSubHasChinese.DetermineFileTypeFromFile", fileFPath, "not support SubType")
+		p.log.Warnln("IsSubHasChinese.DetermineFileTypeFromFile", fileFPath, "not support SubType")
 		return false
 	}
 	if language.HasChineseLang(file.Lang) == false {
-		log_helper.GetLogger().Warnln("IsSubHasChinese.HasChineseLang", fileFPath, "not chinese sub, is ", file.Lang.String())
+		p.log.Warnln("IsSubHasChinese.HasChineseLang", fileFPath, "not chinese sub, is ", file.Lang.String())
 		return false
 	}
 
@@ -180,7 +182,7 @@ func IsEmbySubChineseLangStringWanted(inLangString string) bool {
 }
 
 // SearchMatchedSubFile 搜索符合后缀名的字幕文件
-func SearchMatchedSubFile(dir string) ([]string, error) {
+func SearchMatchedSubFile(log *logrus.Logger, dir string) ([]string, error) {
 
 	var fileFullPathList = make([]string, 0)
 	pathSep := string(os.PathSeparator)
@@ -192,7 +194,7 @@ func SearchMatchedSubFile(dir string) ([]string, error) {
 		fullPath := dir + pathSep + curFile.Name()
 		if curFile.IsDir() {
 			// 内层的错误就无视了
-			oneList, _ := SearchMatchedSubFile(fullPath)
+			oneList, _ := SearchMatchedSubFile(log, fullPath)
 			if oneList != nil {
 				fileFullPathList = append(fileFullPathList, oneList...)
 			}
@@ -205,11 +207,11 @@ func SearchMatchedSubFile(dir string) ([]string, error) {
 				// 跳过不符合的文件,比如 MAC OS 下可能有缓存文件,见 #138
 				fi, err := curFile.Info()
 				if err != nil {
-					log_helper.GetLogger().Debugln("SearchMatchedSubFile, file.Info:", fullPath, err)
+					log.Debugln("SearchMatchedSubFile, file.Info:", fullPath, err)
 					continue
 				}
 				if fi.Size() == 4096 && strings.HasPrefix(curFile.Name(), "._") == true {
-					log_helper.GetLogger().Debugln("SearchMatchedSubFile file.Size() == 4096 && Prefix Name == ._*", fullPath)
+					log.Debugln("SearchMatchedSubFile file.Size() == 4096 && Prefix Name == ._*", fullPath)
 					continue
 				}
 				fileFullPathList = append(fileFullPathList, fullPath)

+ 5 - 5
internal/pkg/sub_share_center/share_sub_cache_helper.go

@@ -1,32 +1,32 @@
 package sub_share_center
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 )
 
 // CopySub2Cache 检测原有字幕是否存在,然后放到缓存目录中
-func CopySub2Cache(orgSubFileFPath, imdbID string, year int) (bool, string) {
+func CopySub2Cache(log *logrus.Logger, orgSubFileFPath, imdbID string, year int) (bool, string) {
 
 	nowFolderDir, err := my_folder.GetShareFolderByYear(year)
 	if err != nil {
-		log_helper.GetLogger().Errorln("CheckOrgSubFileExistAndCopy2Cache.GetShareFolderByYear", err)
+		log.Errorln("CheckOrgSubFileExistAndCopy2Cache.GetShareFolderByYear", err)
 		return false, ""
 	}
 
 	err = os.MkdirAll(filepath.Join(nowFolderDir, imdbID), os.ModePerm)
 	if err != nil {
-		log_helper.GetLogger().Errorln("CheckOrgSubFileExistAndCopy2Cache.MkdirAll", err)
+		log.Errorln("CheckOrgSubFileExistAndCopy2Cache.MkdirAll", err)
 		return false, ""
 	}
 
 	desSubFileFPath := filepath.Join(nowFolderDir, imdbID, filepath.Base(orgSubFileFPath))
 	err = my_util.CopyFile(orgSubFileFPath, desSubFileFPath)
 	if err != nil {
-		log_helper.GetLogger().Errorln("CheckOrgSubFileExistAndCopy2Cache.CopyFile", err)
+		log.Errorln("CheckOrgSubFileExistAndCopy2Cache.CopyFile", err)
 		return false, ""
 	}
 

+ 15 - 13
internal/pkg/sub_timeline_fixer/fixer.go

@@ -28,11 +28,13 @@ package sub_timeline_fixer
 //)
 //
 //type SubTimelineFixer struct {
+//  log *logrus.Logger
 //	FixerConfig sub_timeline_fiexer.SubTimelineFixerConfig
 //}
 //
-//func NewSubTimelineFixer(fixerConfig sub_timeline_fiexer.SubTimelineFixerConfig) *SubTimelineFixer {
+//func NewSubTimelineFixer(log *logrus.Logger, fixerConfig sub_timeline_fiexer.SubTimelineFixerConfig) *SubTimelineFixer {
 //	return &SubTimelineFixer{
+//		log: log,
 //		FixerConfig: fixerConfig,
 //	}
 //}
@@ -431,13 +433,13 @@ package sub_timeline_fixer
 //
 //		debugInfos = append(debugInfos, tmpContent)
 //
-//		log_helper.GetLogger().Infoln(tmpContent)
+//		s.log.Infoln(tmpContent)
 //	} else {
 //		tmpContent := infoSrc.Name + fmt.Sprintf(" Sequence match %d dialogues,", s.FixerConfig.V1_MaxCompareDialogue) + fmt.Sprintf(" %f%% ", perMatch*100)
 //
 //		debugInfos = append(debugInfos, tmpContent)
 //
-//		log_helper.GetLogger().Infoln(tmpContent)
+//		s.log.Infoln(tmpContent)
 //	}
 //
 //	// 输出调试的匹配时间轴信息的列表
@@ -521,13 +523,13 @@ package sub_timeline_fixer
 //	// 这里的是 matchedInfos 是顺序的
 //	for index, matchInfo := range matchedInfos {
 //
-//		log_helper.GetLogger().Infoln(index, "------------------------------------")
+//		s.log.Infoln(index, "------------------------------------")
 //		outCorrelationFixResult := s.calcMeanAndSDV2(matchInfo.StartDiffTimeListEx, matchInfo.StartDiffTimeList)
-//		log_helper.GetLogger().Infoln(fmt.Sprintf("FFTAligner Old Mean: %v SD: %f Per: %v", outCorrelationFixResult.OldMean, outCorrelationFixResult.OldSD, outCorrelationFixResult.Per))
-//		log_helper.GetLogger().Infoln(fmt.Sprintf("FFTAligner New Mean: %v SD: %f Per: %v", outCorrelationFixResult.NewMean, outCorrelationFixResult.NewSD, outCorrelationFixResult.Per))
+//		s.log.Infoln(fmt.Sprintf("FFTAligner Old Mean: %v SD: %f Per: %v", outCorrelationFixResult.OldMean, outCorrelationFixResult.OldSD, outCorrelationFixResult.Per))
+//		s.log.Infoln(fmt.Sprintf("FFTAligner New Mean: %v SD: %f Per: %v", outCorrelationFixResult.NewMean, outCorrelationFixResult.NewSD, outCorrelationFixResult.Per))
 //
 //		value, indexMax := matchInfo.StartDiffTimeMap.Max()
-//		log_helper.GetLogger().Infoln("FFTAligner Max score:", fmt.Sprintf("%v", value.(float64)), "Time:", fmt.Sprintf("%v", matchInfo.StartDiffTimeList[indexMax.(int)]))
+//		s.log.Infoln("FFTAligner Max score:", fmt.Sprintf("%v", value.(float64)), "Time:", fmt.Sprintf("%v", matchInfo.StartDiffTimeList[indexMax.(int)]))
 //
 //		outCorrelationFixResult.StartVADIndex = index * perPartLen
 //		outCorrelationFixResult.EndVADIndex = index*perPartLen + perPartLen
@@ -741,8 +743,8 @@ package sub_timeline_fixer
 //		}
 //		// 时间差值
 //		TimeDiffStartCorrelation := nowBaseStartTime - nowSrcStartTime
-//		log_helper.GetLogger().Debugln("------------")
-//		log_helper.GetLogger().Debugln("OffsetTime:", fmt.Sprintf("%v", TimeDiffStartCorrelation),
+//		s.log.Debugln("------------")
+//		s.log.Debugln("OffsetTime:", fmt.Sprintf("%v", TimeDiffStartCorrelation),
 //			"offsetIndex:", offsetIndex,
 //			"score:", fmt.Sprintf("%v", score))
 //
@@ -781,14 +783,14 @@ package sub_timeline_fixer
 //		select {
 //		case err := <-done:
 //			if err != nil {
-//				log_helper.GetLogger().Errorln("GetOffsetTimeV2.NewPoolWithFunc done with Error", err.Error())
+//				s.log.Errorln("GetOffsetTimeV2.NewPoolWithFunc done with Error", err.Error())
 //			}
 //			return
 //		case p := <-panicChan:
-//			log_helper.GetLogger().Errorln("GetOffsetTimeV2.NewPoolWithFunc got panic", p)
+//			s.log.Errorln("GetOffsetTimeV2.NewPoolWithFunc got panic", p)
 //			return
 //		case <-ctx.Done():
-//			log_helper.GetLogger().Errorln("GetOffsetTimeV2.NewPoolWithFunc got time out", ctx.Err())
+//			s.log.Errorln("GetOffsetTimeV2.NewPoolWithFunc got time out", ctx.Err())
 //			return
 //		}
 //	})
@@ -811,7 +813,7 @@ package sub_timeline_fixer
 //		}
 //
 //		if err != nil {
-//			log_helper.GetLogger().Errorln("GetOffsetTimeV2 ants.Invoke", err)
+//			s.log.Errorln("GetOffsetTimeV2 ants.Invoke", err)
 //		}
 //
 //		i += windowInfo.OneStep

+ 3 - 3
internal/pkg/sub_timeline_fixer/restore.go

@@ -1,15 +1,15 @@
 package sub_timeline_fixer
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
+	"github.com/sirupsen/logrus"
 	"os"
 	"path/filepath"
 	"strings"
 )
 
 // Restore 从备份还原自动校正的字幕文件
-func Restore(movieDirs, seriesDirs []string) (int, error) {
+func Restore(log *logrus.Logger, movieDirs, seriesDirs []string) (int, error) {
 
 	var BackUpSubMoviesFilePathList = make([]string, 0)
 	var BackUpSubSeriesFilePathList = make([]string, 0)
@@ -51,7 +51,7 @@ func Restore(movieDirs, seriesDirs []string) (int, error) {
 				return 0, err
 			}
 			restoreCount++
-			log_helper.GetLogger().Infoln("Restore", index, fixedFileName)
+			log.Infoln("Restore", index, fixedFileName)
 		}
 	}
 

+ 2 - 1
internal/pkg/task_control/task_control_test.go

@@ -3,6 +3,7 @@ package task_control
 import (
 	"errors"
 	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/sirupsen/logrus"
 	"golang.org/x/net/context"
@@ -266,7 +267,7 @@ func process(name string, timeTester TimeTester) ([]int, []int, []int, error) {
 
 	once := sync.Once{}
 
-	tc, err := NewTaskControl(timeTester.ConcurrentCount, log_helper.NewLogHelper(name, logrus.DebugLevel, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour))
+	tc, err := NewTaskControl(timeTester.ConcurrentCount, log_helper.NewLogHelper(name, global_value.ConfigRootDirFPath(), logrus.DebugLevel, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour))
 	if err != nil {
 		return nil, nil, nil, err
 	}

+ 95 - 79
internal/pkg/video_scan_and_refresh_helper/video_scan_and_refresh_helper.go

@@ -63,19 +63,11 @@ func (v *VideoScanAndRefreshHelper) ReadSpeFile() error {
 	return nil
 }
 
-// ScanMovieAndSeriesWait2DownloadSub 扫描出有那些电影、连续剧需要进行字幕下载的
-func (v *VideoScanAndRefreshHelper) ScanMovieAndSeriesWait2DownloadSub() (*ScanVideoResult, error) {
+// ScanNormalMovieAndSeries 没有媒体服务器,扫描出有那些电影、连续剧需要进行字幕下载的
+func (v *VideoScanAndRefreshHelper) ScanNormalMovieAndSeries() (*ScanVideoResult, error) {
 
-	if v.settings.EmbySettings.Enable == false {
-		v.embyHelper = nil
-
-	} else {
-		v.embyHelper = embyHelper.NewEmbyHelper(v.settings)
-	}
-
-	outScanVideoResult := ScanVideoResult{}
 	var err error
-	// ------------------------------------------------------------------------------
+	outScanVideoResult := ScanVideoResult{}
 	// ------------------------------------------------------------------------------
 	// 由于需要进行视频信息的缓存,用于后续的逻辑,那么本地视频的扫描默认都会进行
 	normalScanResult := NormalScanVideoResult{}
@@ -94,7 +86,7 @@ func (v *VideoScanAndRefreshHelper) ScanMovieAndSeriesWait2DownloadSub() (*ScanV
 	// --------------------------------------------------
 	// 连续剧
 	// 遍历连续剧总目录下的第一层目录
-	normalScanResult.SeriesDirMap, err = seriesHelper.GetSeriesListFromDirs(v.settings.CommonSettings.SeriesPaths)
+	normalScanResult.SeriesDirMap, err = seriesHelper.GetSeriesListFromDirs(v.log, v.settings.CommonSettings.SeriesPaths)
 	if err != nil {
 		return nil, err
 	}
@@ -108,6 +100,26 @@ func (v *VideoScanAndRefreshHelper) ScanMovieAndSeriesWait2DownloadSub() (*ScanV
 	// ------------------------------------------------------------------------------
 	outScanVideoResult.Normal = &normalScanResult
 	// ------------------------------------------------------------------------------
+	// 将扫描到的信息缓存到本地中,用于后续的 Video 展示界面 和 Emby IMDB ID 匹配进行路径的转换
+	err = v.updateLocalVideoCacheInfo(&outScanVideoResult)
+	if err != nil {
+		return nil, err
+	}
+
+	return &outScanVideoResult, nil
+}
+
+// ScanEmbyMovieAndSeries Emby媒体服务器,扫描出有那些电影、连续剧需要进行字幕下载的
+func (v *VideoScanAndRefreshHelper) ScanEmbyMovieAndSeries(scanVideoResult *ScanVideoResult) error {
+
+	if v.settings.EmbySettings.Enable == false {
+		v.embyHelper = nil
+
+	} else {
+		v.embyHelper = embyHelper.NewEmbyHelper(v.log, v.settings)
+	}
+	var err error
+
 	// ------------------------------------------------------------------------------
 	// 从 Emby 获取视频
 	if v.embyHelper != nil {
@@ -116,27 +128,71 @@ func (v *VideoScanAndRefreshHelper) ScanMovieAndSeriesWait2DownloadSub() (*ScanV
 		embyScanResult := EmbyScanVideoResult{}
 		v.log.Infoln("Movie Sub Dl From Emby API...")
 		// Emby 情况,从 Emby 获取视频信息
-		err = v.RefreshEmbySubList()
+		err = v.refreshEmbySubList()
 		if err != nil {
-			v.log.Errorln("RefreshEmbySubList", err)
-			return nil, err
+			v.log.Errorln("refreshEmbySubList", err)
+			return err
 		}
 		// ------------------------------------------------------------------------------
 		// 有哪些更新的视频列表,包含电影、连续剧
-		embyScanResult.MovieSubNeedDlEmbyMixInfoList, embyScanResult.SeriesSubNeedDlEmbyMixInfoMap, err = v.GetUpdateVideoListFromEmby()
+		embyScanResult.MovieSubNeedDlEmbyMixInfoList, embyScanResult.SeriesSubNeedDlEmbyMixInfoMap, err = v.getUpdateVideoListFromEmby()
 		if err != nil {
-			v.log.Errorln("GetUpdateVideoListFromEmby", err)
-			return nil, err
+			v.log.Errorln("getUpdateVideoListFromEmby", err)
+			return err
 		}
 		// ------------------------------------------------------------------------------
-		outScanVideoResult.Emby = &embyScanResult
+		scanVideoResult.Emby = &embyScanResult
 	}
 
-	return &outScanVideoResult, nil
+	return nil
+}
+
+// FilterMovieAndSeriesNeedDownload 过滤出需要下载字幕的视频,比如是否跳过中文的剧集,是否超过3个月的下载时间,丢入队列中
+func (v *VideoScanAndRefreshHelper) FilterMovieAndSeriesNeedDownload(scanVideoResult *ScanVideoResult) error {
+
+	if scanVideoResult.Normal != nil {
+		err := v.filterMovieAndSeriesNeedDownloadNormal(scanVideoResult.Normal)
+		if err != nil {
+			return err
+		}
+	}
+
+	if scanVideoResult.Emby != nil {
+		err := v.filterMovieAndSeriesNeedDownloadEmby(scanVideoResult.Emby)
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (v *VideoScanAndRefreshHelper) refreshEmbySubList() error {
+
+	if v.embyHelper == nil {
+		return nil
+	}
+
+	bRefresh := false
+	defer func() {
+		if bRefresh == true {
+			v.log.Infoln("Refresh Emby Sub List Success")
+		} else {
+			v.log.Errorln("Refresh Emby Sub List Error")
+		}
+	}()
+	v.log.Infoln("Refresh Emby Sub List Start...")
+	//------------------------------------------------------
+	bRefresh, err := v.embyHelper.RefreshEmbySubList()
+	if err != nil {
+		return err
+	}
+
+	return nil
 }
 
-// UpdateLocalVideoCacheInfo 将扫描到的信息缓存到本地中,用于后续的 Video 展示界面 和 Emby IMDB ID 匹配进行路径的转换
-func (v *VideoScanAndRefreshHelper) UpdateLocalVideoCacheInfo(scanVideoResult *ScanVideoResult) error {
+// updateLocalVideoCacheInfo 将扫描到的信息缓存到本地中,用于后续的 Video 展示界面 和 Emby IMDB ID 匹配进行路径的转换
+func (v *VideoScanAndRefreshHelper) updateLocalVideoCacheInfo(scanVideoResult *ScanVideoResult) error {
 	// 这里只使用 Normal 情况下获取到的信息
 	if scanVideoResult.Normal == nil {
 		return nil
@@ -145,7 +201,7 @@ func (v *VideoScanAndRefreshHelper) UpdateLocalVideoCacheInfo(scanVideoResult *S
 	// 电影
 	for i, oneMovieFPath := range scanVideoResult.Normal.MovieFileFullPathList {
 
-		v.log.Debugln("UpdateLocalVideoCacheInfo", i, oneMovieFPath)
+		v.log.Infoln("updateLocalVideoCacheInfo", i, oneMovieFPath)
 		videoImdbInfo, err := decode.GetImdbInfo4Movie(oneMovieFPath)
 		if err != nil {
 			// 允许的错误,跳过,继续进行文件名的搜索
@@ -153,7 +209,7 @@ func (v *VideoScanAndRefreshHelper) UpdateLocalVideoCacheInfo(scanVideoResult *S
 			continue
 		}
 		// 获取 IMDB 信息
-		localIMDBInfo, err := imdb_helper.GetVideoIMDBInfoFromLocal(videoImdbInfo, v.settings.AdvancedSettings.ProxySettings)
+		localIMDBInfo, err := imdb_helper.GetVideoIMDBInfoFromLocal(v.log, videoImdbInfo, v.settings.AdvancedSettings.ProxySettings)
 		if err != nil {
 			v.log.Warningln("GetVideoIMDBInfoFromLocal,IMDB:", videoImdbInfo.ImdbId, oneMovieFPath, err)
 			continue
@@ -166,9 +222,12 @@ func (v *VideoScanAndRefreshHelper) UpdateLocalVideoCacheInfo(scanVideoResult *S
 	// 连续剧
 	scanVideoResult.Normal.SeriesDirMap.Each(func(seriesRootPathName interface{}, seriesNames interface{}) {
 
-		for _, oneSeriesRootDir := range seriesNames.([]string) {
+		for i, oneSeriesRootDir := range seriesNames.([]string) {
+
+			v.log.Infoln("updateLocalVideoCacheInfo", i, oneSeriesRootDir)
 
-			seriesInfo, err := seriesHelper.ReadSeriesInfoFromDir(oneSeriesRootDir,
+			seriesInfo, err := seriesHelper.ReadSeriesInfoFromDir(v.log,
+				oneSeriesRootDir,
 				v.settings.AdvancedSettings.TaskQueue.ExpirationTime,
 				false,
 				v.settings.AdvancedSettings.ProxySettings)
@@ -179,6 +238,7 @@ func (v *VideoScanAndRefreshHelper) UpdateLocalVideoCacheInfo(scanVideoResult *S
 			}
 			// 获取 IMDB 信息
 			localIMDBInfo, err := imdb_helper.GetVideoIMDBInfoFromLocal(
+				v.log,
 				types.VideoIMDBInfo{ImdbId: seriesInfo.ImdbId},
 				v.settings.AdvancedSettings.ProxySettings)
 			if err != nil {
@@ -195,26 +255,6 @@ func (v *VideoScanAndRefreshHelper) UpdateLocalVideoCacheInfo(scanVideoResult *S
 	return nil
 }
 
-// FilterMovieAndSeriesNeedDownload 过滤出需要下载字幕的视频,比如是否跳过中文的剧集,是否超过3个月的下载时间,丢入队列中
-func (v *VideoScanAndRefreshHelper) FilterMovieAndSeriesNeedDownload(scanVideoResult *ScanVideoResult) error {
-
-	if scanVideoResult.Normal != nil {
-		err := v.filterMovieAndSeriesNeedDownloadNormal(scanVideoResult.Normal)
-		if err != nil {
-			return err
-		}
-	}
-
-	if scanVideoResult.Emby != nil {
-		err := v.filterMovieAndSeriesNeedDownloadEmby(scanVideoResult.Emby)
-		if err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
 func (v *VideoScanAndRefreshHelper) filterMovieAndSeriesNeedDownloadNormal(normal *NormalScanVideoResult) error {
 	// ----------------------------------------
 	// Normal 过滤,电影
@@ -334,15 +374,15 @@ func (v *VideoScanAndRefreshHelper) filterMovieAndSeriesNeedDownloadEmby(emby *E
 	return nil
 }
 
-// GetUpdateVideoListFromEmby 这里首先会进行近期影片的获取,然后对这些影片进行刷新,然后在获取字幕列表,最终得到需要字幕获取的 video 列表
-func (v *VideoScanAndRefreshHelper) GetUpdateVideoListFromEmby() ([]emby.EmbyMixInfo, map[string][]emby.EmbyMixInfo, error) {
+// getUpdateVideoListFromEmby 这里首先会进行近期影片的获取,然后对这些影片进行刷新,然后在获取字幕列表,最终得到需要字幕获取的 video 列表
+func (v *VideoScanAndRefreshHelper) getUpdateVideoListFromEmby() ([]emby.EmbyMixInfo, map[string][]emby.EmbyMixInfo, error) {
 	if v.embyHelper == nil {
 		return nil, nil, nil
 	}
 	defer func() {
-		v.log.Infoln("GetUpdateVideoListFromEmby End")
+		v.log.Infoln("getUpdateVideoListFromEmby End")
 	}()
-	v.log.Infoln("GetUpdateVideoListFromEmby Start...")
+	v.log.Infoln("getUpdateVideoListFromEmby Start...")
 	//------------------------------------------------------
 	var err error
 	var movieList []emby.EmbyMixInfo
@@ -352,51 +392,27 @@ func (v *VideoScanAndRefreshHelper) GetUpdateVideoListFromEmby() ([]emby.EmbyMix
 		return nil, nil, err
 	}
 	// 输出调试信息
-	v.log.Debugln("GetUpdateVideoListFromEmby - DebugInfo - movieFileFullPathList Start")
+	v.log.Debugln("getUpdateVideoListFromEmby - DebugInfo - movieFileFullPathList Start")
 	for _, info := range movieList {
 		v.log.Debugln(info.PhysicalVideoFileFullPath)
 	}
-	v.log.Debugln("GetUpdateVideoListFromEmby - DebugInfo - movieFileFullPathList End")
+	v.log.Debugln("getUpdateVideoListFromEmby - DebugInfo - movieFileFullPathList End")
 
-	v.log.Debugln("GetUpdateVideoListFromEmby - DebugInfo - seriesSubNeedDlMap Start")
+	v.log.Debugln("getUpdateVideoListFromEmby - DebugInfo - seriesSubNeedDlMap Start")
 	for s := range seriesSubNeedDlMap {
 		v.log.Debugln(s)
 	}
-	v.log.Debugln("GetUpdateVideoListFromEmby - DebugInfo - seriesSubNeedDlMap End")
+	v.log.Debugln("getUpdateVideoListFromEmby - DebugInfo - seriesSubNeedDlMap End")
 
 	return movieList, seriesSubNeedDlMap, nil
 }
 
-func (v *VideoScanAndRefreshHelper) RefreshEmbySubList() error {
-
-	if v.embyHelper == nil {
-		return nil
-	}
-
-	bRefresh := false
-	defer func() {
-		if bRefresh == true {
-			v.log.Infoln("Refresh Emby Sub List Success")
-		} else {
-			v.log.Errorln("Refresh Emby Sub List Error")
-		}
-	}()
-	v.log.Infoln("Refresh Emby Sub List Start...")
-	//------------------------------------------------------
-	bRefresh, err := v.embyHelper.RefreshEmbySubList()
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
 func (v *VideoScanAndRefreshHelper) RestoreFixTimelineBK() error {
 
 	defer v.log.Infoln("End Restore Fix Timeline BK")
 	v.log.Infoln("Start Restore Fix Timeline BK...")
 	//------------------------------------------------------
-	_, err := subTimelineFixerPKG.Restore(v.settings.CommonSettings.MoviePaths, v.settings.CommonSettings.SeriesPaths)
+	_, err := subTimelineFixerPKG.Restore(v.log, v.settings.CommonSettings.MoviePaths, v.settings.CommonSettings.SeriesPaths)
 	if err != nil {
 		return err
 	}