浏览代码

修复不适用 emby 时候连续剧搜索的逻辑 fix #198

Signed-off-by: 716 <[email protected]>
716 3 年之前
父节点
当前提交
58d8156ef1
共有 2 个文件被更改,包括 46 次插入17 次删除
  1. 6 17
      internal/logic/series_helper/seriesHelper.go
  2. 40 0
      internal/pkg/my_util/util.go

+ 6 - 17
internal/logic/series_helper/seriesHelper.go

@@ -19,10 +19,8 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/types/supplier"
 	"github.com/emirpasic/gods/maps/treemap"
 	"github.com/jinzhu/now"
-	"os"
 	"path/filepath"
 	"strconv"
-	"strings"
 	"time"
 )
 
@@ -247,24 +245,15 @@ func GetSeriesListFromDirs(dirs []string) (*treemap.Map, error) {
 // GetSeriesList 获取这个目录下的所有文件夹名称,默认为一个连续剧的目录的List
 func GetSeriesList(dir string) ([]string, error) {
 
-	var seriesDirList = make([]string, 0)
-	files, err := os.ReadDir(dir)
+	// 需要把所有 tvshow.nfo 搜索出来,那么这些文件对应的目录就是目标连续剧的目录
+	tvNFOs, err := my_util.SearchTVNfo(dir)
 	if err != nil {
 		return nil, err
 	}
-	for _, curFile := range files {
-		if curFile.IsDir() == false {
-
-			// 如果发现有 tvshow.nfo 文件,那么就任务这个目录就是剧集的目录
-			if strings.ToLower(curFile.Name()) == decode.MetadateTVNfo {
-				seriesDirList = make([]string, 0)
-				seriesDirList = append(seriesDirList, dir)
-				return seriesDirList, nil
-			}
-			continue
-		}
-		fullPath := filepath.Join(dir, curFile.Name())
-		seriesDirList = append(seriesDirList, fullPath)
+	var seriesDirList = make([]string, 0)
+
+	for _, tvNfo := range tvNFOs {
+		seriesDirList = append(seriesDirList, filepath.Dir(tvNfo))
 	}
 
 	return seriesDirList, err

+ 40 - 0
internal/pkg/my_util/util.go

@@ -5,6 +5,7 @@ import (
 	"encoding/hex"
 	"fmt"
 	"github.com/allanpk716/ChineseSubFinder/internal/common"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/regex_things"
@@ -201,6 +202,45 @@ func SearchMatchedVideoFile(dir string) ([]string, error) {
 	return fileFullPathList, nil
 }
 
+func SearchTVNfo(dir string) ([]string, error) {
+
+	var fileFullPathList = make([]string, 0)
+	pathSep := string(os.PathSeparator)
+	files, err := os.ReadDir(dir)
+	if err != nil {
+		return nil, err
+	}
+	for _, curFile := range files {
+		fullPath := dir + pathSep + curFile.Name()
+		if curFile.IsDir() {
+			// 内层的错误就无视了
+			oneList, _ := SearchTVNfo(fullPath)
+			if oneList != nil {
+				fileFullPathList = append(fileFullPathList, oneList...)
+			}
+		} else {
+			// 这里就是文件了
+			if strings.ToLower(curFile.Name()) != decode.MetadateTVNfo {
+				continue
+			} else {
+
+				// 跳过不符合的文件,比如 MAC OS 下可能有缓存文件,见 #138
+				fi, err := curFile.Info()
+				if err != nil {
+					log_helper.GetLogger().Debugln("SearchTVNfo, file.Info:", fullPath, err)
+					continue
+				}
+				if fi.Size() == 4096 && strings.HasPrefix(curFile.Name(), "._") == true {
+					log_helper.GetLogger().Debugln("SearchTVNfo file.Size() == 4096 && Prefix Name == ._*", fullPath)
+					continue
+				}
+				fileFullPathList = append(fileFullPathList, fullPath)
+			}
+		}
+	}
+	return fileFullPathList, nil
+}
+
 // IsWantedVideoExtDef 后缀名是否符合规则
 func IsWantedVideoExtDef(fileName string) bool {