Browse Source

修复读取连续剧 NFO 文件的问题

Signed-off-by: 716 <[email protected]>
716 4 years ago
parent
commit
4014bcf202
4 changed files with 81 additions and 5 deletions
  1. 27 0
      downloader.go
  2. 14 1
      downloader_test.go
  3. 31 4
      model/decode.go
  4. 9 0
      sub_supplier/subSupplierHub.go

+ 27 - 0
downloader.go

@@ -121,6 +121,33 @@ func (d Downloader) DownloadSub4Movie(dir string) error {
 	return nil
 }
 
+func (d Downloader) DownloadSub4Series(dir string) error {
+	defer func() {
+		// 抉择完毕,需要清理缓存目录
+		err := model.ClearTmpFolder()
+		if err != nil {
+			d.log.Error(err)
+		}
+	}()
+	// 构建每个字幕站点下载者的实例
+	var subSupplierHub *sub_supplier.SubSupplierHub
+	subSupplierHub = sub_supplier.NewSubSupplierHub(shooter.NewSupplier(d.reqParam),
+		subhd.NewSupplier(d.reqParam),
+		xunlei.NewSupplier(d.reqParam),
+		zimuku.NewSupplier(d.reqParam),
+	)
+
+	organizeSubFiles, err := subSupplierHub.DownloadSub4Series(dir, 0)
+	if err != nil {
+		d.log.Errorln("subSupplierHub.DownloadSub4Series", dir ,err)
+		return err
+	}
+
+	println(organizeSubFiles)
+
+	return nil
+}
+
 // 在前面需要进行语言的筛选、排序,这里仅仅是存储
 func (d Downloader) writeSubFile2VideoPath(videoFileFullPath string, finalSubFile common.SubParserFileInfo, extraSubPreName string) error {
 	videoRootPath := filepath.Dir(videoFileFullPath)

+ 14 - 1
downloader_test.go

@@ -5,7 +5,7 @@ import (
 	"testing"
 )
 
-func TestDownloader_DownloadSub(t *testing.T) {
+func TestDownloader_DownloadSub4Movie(t *testing.T) {
 	var err error
 	//dirRoot := "X:\\电影\\Spiral From the Book of Saw (2021)"
 	//dirRoot := "X:\\电影\\Oslo (2021)"
@@ -21,4 +21,17 @@ func TestDownloader_DownloadSub(t *testing.T) {
 	if err != nil {
 		t.Fatal(err)
 	}
+}
+
+func TestDownloader_DownloadSub4Series(t *testing.T) {
+	var err error
+	dirRoot := "X:\\连续剧\\隐秘的角落 (2020)"
+
+	dl := NewDownloader(common.ReqParam{
+		SaveMultiSub: true,
+	})
+	err = dl.DownloadSub4Series(dirRoot)
+	if err != nil {
+		t.Fatal(err)
+	}
 }

+ 31 - 4
model/decode.go

@@ -89,11 +89,17 @@ func GetImdbInfo(dirPth string) (common.VideoInfo, error) {
 		// 找 movie.xml
 		if upperName == strings.ToUpper(metadataFileEmby) {
 			movieFilePath = dirPth + pathSep + fi.Name()
-		}
-		// 找 *.nfo
-		ok := strings.HasSuffix(fi.Name(), suffixNameNfo)
-		if ok {
+			break
+		} else if upperName == strings.ToUpper(metadateTVNfo) {
+			// 连续剧的 nfo 文件
 			nfoFilePath = dirPth + pathSep + fi.Name()
+			break
+		} else {
+			// 找 *.nfo
+			ok := strings.HasSuffix(fi.Name(), suffixNameNfo)
+			if ok {
+				nfoFilePath = dirPth + pathSep + fi.Name()
+			}
 		}
 	}
 	// 根据找到的开始解析
@@ -165,6 +171,26 @@ func SkipChineseMovie(videoFullPath string, _reqParam ...common.ReqParam) (bool,
 	return false, nil
 }
 
+func SkipChineseSeries(videoRootPath string, _reqParam ...common.ReqParam) (bool, error) {
+	var reqParam common.ReqParam
+	if len(_reqParam) > 0 {
+		reqParam = _reqParam[0]
+	}
+	imdbInfo, err := GetImdbInfo(videoRootPath)
+	if err != nil {
+		return false, err
+	}
+	t, err := GetVideoInfoFromIMDB(imdbInfo.ImdbId, reqParam)
+	if err != nil {
+		return false, err
+	}
+	if len(t.Languages) > 0 && strings.ToLower(t.Languages[0]) == "chinese" {
+		GetLogger().Infoln("Skip", filepath.Base(videoRootPath), "Sub Download, because series is Chinese")
+		return true, nil
+	}
+	return false, nil
+}
+
 func GetNumber2Float(input string) (float32, error) {
 	compile := regexp.MustCompile(regGetNumber)
 	params := compile.FindStringSubmatch(input)
@@ -195,6 +221,7 @@ const (
 	metadataFileEmby = "movie.xml"
 	suffixNameXml    = ".xml"
 	suffixNameNfo    = ".nfo"
+	metadateTVNfo    = "tvshow.nfo"
 	// 去除特殊字符,仅仅之有中文
 	regFixTitle = "[^\u4e00-\u9fa5a-zA-Z0-9\\s]"
 	// 去除特殊字符,把特殊字符都写进去

+ 9 - 0
sub_supplier/subSupplierHub.go

@@ -95,6 +95,15 @@ func (d SubSupplierHub) DownloadSub4Series(seriesDirPath string, index int) ([]s
 	if err != nil {
 		d.log.Error(err)
 	}
+	// 跳过中文的连续剧
+	skip, err := model.SkipChineseSeries(seriesDirPath, d.Suppliers[0].GetReqParam())
+	if err != nil {
+		return nil, err
+	}
+	if skip == true {
+		return nil, nil
+	}
+
 
 	return nil, nil
 }