|
@@ -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)
|