Browse Source

Merge remote-tracking branch 'upstream/master'

SuperNG6 4 years ago
parent
commit
22f22bbffc
7 changed files with 48 additions and 22 deletions
  1. 3 1
      README.md
  2. 4 3
      downloader_test.go
  3. 3 0
      main.go
  4. 9 9
      model/decode.go
  5. 10 0
      model/util.go
  6. 19 5
      series_helper/seriesHelper.go
  7. 0 4
      sub_supplier/subSupplierHub.go

+ 3 - 1
README.md

@@ -4,7 +4,9 @@
 
 > 开发中,可能有不兼容性的调整(配置文件字段变更)
 >
-> 最新版本 v0.6.x 支持字幕类型优先级设置
+> 最新版本 v0.7.x 优化视频跳过下载字幕的逻辑,加快扫描速度
+>
+> v0.6.x 支持字幕类型优先级设置
 
 ## Why?
 

+ 4 - 3
downloader_test.go

@@ -7,10 +7,10 @@ import (
 
 func TestDownloader_DownloadSub4Movie(t *testing.T) {
 	var err error
-	dirRoot := "X:\\电影\\Spiral From the Book of Saw (2021)"
+	//dirRoot := "X:\\电影\\Spiral From the Book of Saw (2021)"
 	//dirRoot := "X:\\电影\\Oslo (2021)"
 	//dirRoot := "X:\\电影\\The Devil All the Time (2020)"
-	//dirRoot := "X:\\电影\\21座桥 (2019)"
+	dirRoot := "X:\\电影\\21座桥 (2019)"
 	//dirRoot := "X:\\电影\\An Invisible Sign (2010)"
 	//dirRoot := "X:\\电影\\送你一朵小红花 (2020)"
 	//dirRoot := "X:\\电影\\冰海陷落 (2018)"
@@ -32,7 +32,8 @@ func TestDownloader_DownloadSub4Series(t *testing.T) {
 	//dirRoot := "X:\\连续剧\\The Bad Batch"
 	//dirRoot := "X:\\连续剧\\Why Women Kill"
 	//dirRoot := "X:\\连续剧\\Mare of Easttown"
-	dirRoot := "X:\\连续剧\\瑞克和莫蒂 (2013)"
+	//dirRoot := "X:\\连续剧\\瑞克和莫蒂 (2013)"
+	dirRoot := "X:\\连续剧\\黄石 (2018)"
 	//dirRoot := "X:\\连续剧"
 
 	dl := NewDownloader(common.ReqParam{

+ 3 - 0
main.go

@@ -46,6 +46,9 @@ func main() {
 	}
 	log.Infoln("MovieFolder:", config.MovieFolder)
 
+	// ReloadBrowser 提前把浏览器下载好
+	model.ReloadBrowser()
+
 	//任务还没执行完,下一次执行时间到来,下一次执行就跳过不执行
 	c := cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))
 	// 定时器

+ 9 - 9
model/decode.go

@@ -36,7 +36,7 @@ func getImdbAndYearMovieXml(movieFilePath string) (common.VideoIMDBInfo, error)
 	return videoInfo, common.CanNotFindIMDBID
 }
 
-func getImdbAndYearNfo(nfoFilePath string) (common.VideoIMDBInfo, error) {
+func getImdbAndYearNfo(nfoFilePath string, rootKey string) (common.VideoIMDBInfo, error) {
 	imdbInfo := common.VideoIMDBInfo{}
 	doc := etree.NewDocument()
 	// 这里会遇到一个梗,下面的关键词,可能是小写、大写、首字母大写
@@ -58,15 +58,15 @@ func getImdbAndYearNfo(nfoFilePath string) (common.VideoIMDBInfo, error) {
 		imdbInfo.ImdbId = t.Text()
 		break
 	}
-	for _, t := range doc.FindElements("./movie/year") {
+	for _, t := range doc.FindElements("./" + rootKey +"/year") {
 		imdbInfo.Year = t.Text()
 		break
 	}
-	for _, t := range doc.FindElements("./movie/releasedate") {
+	for _, t := range doc.FindElements("./" + rootKey + "/releasedate") {
 		imdbInfo.ReleaseDate = t.Text()
 		break
 	}
-	for _, t := range doc.FindElements("./movie/premiered") {
+	for _, t := range doc.FindElements("./" + rootKey + "/premiered") {
 		imdbInfo.ReleaseDate = t.Text()
 		break
 	}
@@ -82,7 +82,7 @@ func GetImdbInfo4Movie(movieFileFullPath string) (common.VideoIMDBInfo, error) {
 	dirPth := filepath.Dir(movieFileFullPath)
 	// 与 movie 文件名一致的 nfo 文件名称
 	movieNfoFileName := filepath.Base(movieFileFullPath)
-	movieNfoFileName = strings.ReplaceAll(movieNfoFileName, filepath.Ext(movieFileFullPath), "")
+	movieNfoFileName = strings.ReplaceAll(movieNfoFileName, filepath.Ext(movieFileFullPath), suffixNameNfo)
 	// movie.xml
 	movieXmlFPath := ""
 	// movieName.nfo 文件
@@ -120,7 +120,7 @@ func GetImdbInfo4Movie(movieFileFullPath string) (common.VideoIMDBInfo, error) {
 	}
 	// 优先分析 movieName.nfo 文件
 	if movieNameNfoFPath != "" {
-		imdbInfo, err = getImdbAndYearNfo(movieNameNfoFPath)
+		imdbInfo, err = getImdbAndYearNfo(movieNameNfoFPath, "movie")
 		if err != nil {
 			return common.VideoIMDBInfo{}, err
 		}
@@ -137,7 +137,7 @@ func GetImdbInfo4Movie(movieFileFullPath string) (common.VideoIMDBInfo, error) {
 		}
 	}
 	if nfoFilePath != "" {
-		imdbInfo, err = getImdbAndYearNfo(nfoFilePath)
+		imdbInfo, err = getImdbAndYearNfo(nfoFilePath, "movie")
 		if err != nil {
 			return imdbInfo, err
 		} else {
@@ -176,7 +176,7 @@ func GetImdbInfo4SeriesDir(seriesDir string) (common.VideoIMDBInfo, error) {
 	if nfoFilePath == "" {
 		return imdbInfo, common.NoMetadataFile
 	}
-	imdbInfo, err = getImdbAndYearNfo(nfoFilePath)
+	imdbInfo, err = getImdbAndYearNfo(nfoFilePath, "tvshow")
 	if err != nil {
 		return common.VideoIMDBInfo{}, err
 	}
@@ -189,7 +189,7 @@ func GetImdbInfo4OneSeriesEpisode(oneEpFPath string) (common.VideoIMDBInfo, erro
 	EPdir := filepath.Dir(oneEpFPath)
 	// 与 EP 文件名一致的 nfo 文件名称
 	EpNfoFileName := filepath.Base(oneEpFPath)
-	EpNfoFileName = strings.ReplaceAll(EpNfoFileName, filepath.Ext(oneEpFPath), "")
+	EpNfoFileName = strings.ReplaceAll(EpNfoFileName, filepath.Ext(oneEpFPath), suffixNameNfo)
 	// 全路径
 	EpNfoFPath := path.Join(EPdir, EpNfoFileName)
 	//

+ 10 - 0
model/util.go

@@ -13,6 +13,7 @@ import (
 	"regexp"
 	"strconv"
 	"strings"
+	"time"
 )
 
 // NewHttpClient 新建一个 resty 的对象
@@ -323,6 +324,15 @@ func GetEpisodeKeyName(season, eps int) string {
 	return "S" + strconv.Itoa(season) + "E" +strconv.Itoa(eps)
 }
 
+// ReloadBrowser 提前把浏览器下载好
+func ReloadBrowser() {
+	page, err := NewBrowserLoadPage("https://www.baidu.com", "", 300*time.Second, 2)
+	if err != nil {
+		return
+	}
+	defer page.Close()
+}
+
 var (
 	defDebugFolder = ""
 	defTmpFolder = ""

+ 19 - 5
series_helper/seriesHelper.go

@@ -37,9 +37,13 @@ func ReadSeriesInfoFromDir(seriesDir string, imdbInfo *imdb.Title) (*common.Seri
 		seriesInfo.ImdbId = videoInfo.ImdbId
 		iYear, err := strconv.Atoi(videoInfo.Year)
 		if err != nil {
-			return nil, err
+			// 不是必须的
+			seriesInfo.Year = 0
+			model.GetLogger().Errorln("ReadSeriesInfoFromDir.GetImdbInfo4SeriesDir.strconv.Atoi", err)
+		} else {
+			seriesInfo.Year = iYear
+
 		}
-		seriesInfo.Year = iYear
 	}
 	seriesInfo.ReleaseDate = videoInfo.ReleaseDate
 	seriesInfo.DirPath = seriesDir
@@ -159,15 +163,25 @@ func SkipChineseSeries(seriesRootPath string, _reqParam ...common.ReqParam) (boo
 		model.GetLogger().Infoln("Skip", filepath.Base(seriesRootPath), "Sub Download, because series is Chinese")
 		return true, t, nil
 	}
-	return false, nil, nil
+	return false, t, nil
 }
 
 // OneSeriesDlSubInAllSite 一部连续剧在所有的网站下载相应的字幕
 func OneSeriesDlSubInAllSite(Suppliers []_interface.ISupplier, seriesInfo *common.SeriesInfo, i int) []common.SupplierSubInfo {
+	defer func() {
+		model.GetLogger().Infoln("DlSub End", seriesInfo.DirPath)
+	}()
+	model.GetLogger().Infoln("DlSub Start", seriesInfo.DirPath)
+	model.GetLogger().Debugln(seriesInfo.Name, "IMDB ID:", seriesInfo.ImdbId, "NeedDownloadSubs:", len(seriesInfo.NeedDlEpsKeyList))
 	var outSUbInfos = make([]common.SupplierSubInfo, 0)
+	if len(seriesInfo.NeedDlEpsKeyList) < 1 {
+		return outSUbInfos
+	}
+	for key, _ := range seriesInfo.NeedDlEpsKeyList {
+		model.GetLogger().Debugln(key)
+	}
 	// 同时进行查询
 	subInfosChannel := make(chan []common.SupplierSubInfo)
-	model.GetLogger().Infoln("DlSub Start", seriesInfo.DirPath)
 	for _, supplier := range Suppliers {
 		supplier := supplier
 		go func() {
@@ -192,7 +206,7 @@ func OneSeriesDlSubInAllSite(Suppliers []_interface.ISupplier, seriesInfo *commo
 			outSUbInfos = append(outSUbInfos, v...)
 		}
 	}
-	model.GetLogger().Infoln("DlSub End", seriesInfo.DirPath)
+
 	return outSUbInfos
 }
 

+ 0 - 4
sub_supplier/subSupplierHub.go

@@ -81,10 +81,6 @@ func (d SubSupplierHub) DownloadSub4Series(seriesDirPath string, index int) (*co
 	if err != nil {
 		return nil, nil, err
 	}
-	d.log.Debugln(seriesInfo.Name, "IMDB ID:", seriesInfo.ImdbId, "NeedDownloadSubs:", len(seriesInfo.NeedDlEpsKeyList))
-	for key, _ := range seriesInfo.NeedDlEpsKeyList {
-		d.log.Debugln(key)
-	}
 	// 下载好的字幕
 	subInfos := series_helper.OneSeriesDlSubInAllSite(d.Suppliers, seriesInfo, index)
 	// 整理字幕,比如解压什么的