main.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package main
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal"
  4. "github.com/allanpk716/ChineseSubFinder/internal/pkg"
  5. "github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
  7. "github.com/allanpk716/ChineseSubFinder/internal/types"
  8. "github.com/robfig/cron/v3"
  9. "github.com/sirupsen/logrus"
  10. )
  11. func init() {
  12. log = log_helper.GetLogger()
  13. config = pkg.GetConfig()
  14. }
  15. func main() {
  16. if log == nil {
  17. panic("log init error")
  18. }
  19. if config == nil {
  20. panic("read config error")
  21. }
  22. httpProxy := config.HttpProxy
  23. if config.UseProxy == false {
  24. httpProxy = ""
  25. }
  26. // 判断文件夹是否存在
  27. if pkg.IsDir(config.MovieFolder) == false {
  28. log.Errorln("MovieFolder not found")
  29. return
  30. }
  31. if pkg.IsDir(config.SeriesFolder) == false {
  32. log.Errorln("SeriesFolder not found")
  33. return
  34. }
  35. notify_center.Notify = notify_center.NewNotifyCenter(config.WhenSubSupplierInvalidWebHook)
  36. log.Infoln("MovieFolder:", config.MovieFolder)
  37. log.Infoln("SeriesFolder:", config.SeriesFolder)
  38. // ReloadBrowser 提前把浏览器下载好
  39. pkg.ReloadBrowser()
  40. //任务还没执行完,下一次执行时间到来,下一次执行就跳过不执行
  41. c := cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))
  42. // 定时器
  43. entryID, err := c.AddFunc("@every " + config.EveryTime, func() {
  44. DownLoadStart(httpProxy)
  45. })
  46. if err != nil {
  47. log.Errorln("cron entryID:", entryID, "Error:", err)
  48. return
  49. }
  50. log.Infoln("First Time Download Start")
  51. DownLoadStart(httpProxy)
  52. log.Infoln("First Time Download End")
  53. c.Start()
  54. // 阻塞
  55. select {}
  56. }
  57. func DownLoadStart(httpProxy string) {
  58. defer func() {
  59. log.Infoln("Download One End...")
  60. notify_center.Notify.Send()
  61. }()
  62. notify_center.Notify.Clear()
  63. // 下载实例
  64. downloader := internal.NewDownloader(types.ReqParam{
  65. HttpProxy: httpProxy,
  66. DebugMode: config.DebugMode,
  67. SaveMultiSub: config.SaveMultiSub,
  68. Threads: config.Threads,
  69. SubTypePriority: config.SubTypePriority,
  70. WhenSubSupplierInvalidWebHook: config.WhenSubSupplierInvalidWebHook,
  71. EmbyConfig: config.EmbyConfig,
  72. })
  73. log.Infoln("Download One Started...")
  74. // 刷新 Emby 的字幕,如果下载了字幕倒是没有刷新,则先刷新一次,便于后续的 Emby api 统计逻辑
  75. err := downloader.RefreshEmbySubList()
  76. if err != nil {
  77. log.Errorln("RefreshEmbySubList", err)
  78. return
  79. }
  80. err = downloader.GetUpdateVideoListFromEmby(config.MovieFolder, config.SeriesFolder)
  81. if err != nil {
  82. log.Errorln("GetUpdateVideoListFromEmby", err)
  83. return
  84. }
  85. // 开始下载,电影
  86. err = downloader.DownloadSub4Movie(config.MovieFolder)
  87. if err != nil {
  88. log.Errorln("DownloadSub4Movie", err)
  89. return
  90. }
  91. // 开始下载,连续剧
  92. err = downloader.DownloadSub4Series(config.SeriesFolder)
  93. if err != nil {
  94. log.Errorln("DownloadSub4Series", err)
  95. return
  96. }
  97. // 刷新 Emby 的字幕,下载完毕字幕了,就统一刷新一下
  98. err = downloader.RefreshEmbySubList()
  99. if err != nil {
  100. log.Errorln("RefreshEmbySubList", err)
  101. return
  102. }
  103. }
  104. var(
  105. log *logrus.Logger
  106. config *types.Config
  107. )