浏览代码

修复读取 nfo 文件的问题 fix #207

Signed-off-by: allan716 <[email protected]>
allan716 3 年之前
父节点
当前提交
773eae97b0
共有 3 个文件被更改,包括 68 次插入52 次删除
  1. 2 0
      go.sum
  2. 3 0
      internal/pkg/decode/decode.go
  3. 63 52
      internal/pkg/decode/decode_test.go

+ 2 - 0
go.sum

@@ -83,6 +83,8 @@ github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bernmic/nforeader v0.0.1 h1:leRHOyIugPSmOc5lS0TIH276q4b9Jt2uPtKgbws7cpU=
+github.com/bernmic/nforeader v0.0.1/go.mod h1:Mc43IEQFVrY8bDiUwCsdj+GJb6oRT47tgwYF80/piSY=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
 github.com/bodgit/plumbing v1.1.0 h1:lesbixvHgSBQFNMsrjdPNsm+EBk4vFFhxWl0+90vDY0=

+ 3 - 0
internal/pkg/decode/decode.go

@@ -19,6 +19,7 @@ func getImdbAndYearMovieXml(movieFilePath string) (types.VideoIMDBInfo, error) {
 
 	videoInfo := types.VideoIMDBInfo{}
 	doc := etree.NewDocument()
+	doc.ReadSettings.Permissive = true
 	if err := doc.ReadFromFile(movieFilePath); err != nil {
 		return videoInfo, err
 	}
@@ -39,6 +40,7 @@ func getImdbAndYearMovieXml(movieFilePath string) (types.VideoIMDBInfo, error) {
 func getImdbAndYearNfo(nfoFilePath string, rootKey string) (types.VideoIMDBInfo, error) {
 	imdbInfo := types.VideoIMDBInfo{}
 	doc := etree.NewDocument()
+	doc.ReadSettings.Permissive = true
 	// 这里会遇到一个梗,下面的关键词,可能是小写、大写、首字母大写
 	// 读取文件转换为全部的小写,然后在解析 xml ? etree 在转换为小写后,某些类型的文件的内容会崩溃···
 	// 所以这里很傻的方式解决
@@ -210,6 +212,7 @@ func GetImdbInfo4OneSeriesEpisode(oneEpFPath string) (types.VideoIMDBInfo, error
 	//
 	imdbInfo := types.VideoIMDBInfo{}
 	doc := etree.NewDocument()
+	doc.ReadSettings.Permissive = true
 	// 这里会遇到一个梗,下面的关键词,可能是小写、大写、首字母大写
 	// 读取文件转换为全部的小写,然后在解析 xml ? etree 在转换为小写后,某些类型的文件的内容会崩溃···
 	// 所以这里很傻的方式解决

+ 63 - 52
internal/pkg/decode/decode_test.go

@@ -8,27 +8,13 @@ import (
 	"testing"
 )
 
-func getTestFileDir(testFileName string) (xmlDir string) {
+func TestGetImdbAndYearMovieXml(t *testing.T) {
 
 	rootDir := unit_test_helper.GetTestDataResourceRootPath([]string{"movies", "Army of the Dead (2021)"}, 4, false)
 
-	if testFileName == "movie.xml" {
-		return filepath.Join(rootDir, "movie.xml")
-	} else if testFileName == "movie.nfo" {
-		return filepath.Join(rootDir, "Army of the Dead (2021) WEBDL-1080p.nfo")
-	} else if testFileName == "has_http_address.nfo" {
-		return filepath.Join(rootDir, "has_http_address.nfo")
-	} else if testFileName == "has_http_address.nfo" {
-		return filepath.Join(rootDir, "only_http_address.nfo")
-	}
-
-	return ""
-}
-
-func TestGetImdbAndYearMovieXml(t *testing.T) {
 	wantid := "tt0993840"
 	wantyear := "2021"
-	dirPth := getTestFileDir("movie.xml")
+	dirPth := filepath.Join(rootDir, "movie.xml")
 	imdbInfo, err := getImdbAndYearMovieXml(dirPth)
 	if err != nil {
 		t.Error(err)
@@ -41,41 +27,66 @@ func TestGetImdbAndYearMovieXml(t *testing.T) {
 	}
 }
 
-func TestGetImdbAndYearNfo(t *testing.T) {
-	wantid := "tt0993840"
-	wantyear := "2021"
-
-	imdbInfo, err := getImdbAndYearNfo(getTestFileDir("movie.nfo"), "movie")
-	if err != nil {
-		t.Fatal(err)
-	}
-	if imdbInfo.ImdbId != wantid {
-		t.Fatalf("\n\nid = %v, wantid %v", imdbInfo.ImdbId, wantid)
-	}
-	if imdbInfo.Year != wantyear {
-		t.Fatalf("\n\nyear = %v, wantyear %v", imdbInfo.Year, wantyear)
-	}
-
-	wantid = "tt12801326"
-	wantyear = "2020"
-	dirPth := getTestFileDir("has_http_address.nfo")
-	imdbInfo, err = getImdbAndYearNfo(dirPth, "movie")
-	if err != nil {
-		t.Fatal(err)
-	}
-	if imdbInfo.ImdbId != wantid {
-		t.Fatalf("\n\nid = %v, wantid %v", imdbInfo.ImdbId, wantid)
+func Test_getImdbAndYearNfo(t *testing.T) {
+	type args struct {
+		nfoFilePath string
+		rootKey     string
 	}
-	if imdbInfo.Year != wantyear {
-		t.Fatalf("\n\nyear = %v, wantyear %v", imdbInfo.Year, wantyear)
+	tests := []struct {
+		name    string
+		args    args
+		want    types.VideoIMDBInfo
+		wantErr bool
+	}{
+		{
+			name: "Army of the Dead (2021) WEBDL-1080p.nfo", args: args{
+				nfoFilePath: filepath.Join(unit_test_helper.GetTestDataResourceRootPath([]string{"movies", "Army of the Dead (2021)"}, 4, false), "Army of the Dead (2021) WEBDL-1080p.nfo"),
+				rootKey:     "movie",
+			},
+			want: types.VideoIMDBInfo{
+				ImdbId:      "tt0993840",
+				Title:       "活死人军团",
+				Year:        "2021",
+				ReleaseDate: "2021-05-13",
+			},
+			wantErr: false,
+		},
+		{
+			name: "tvshow_00 (2).nfo", args: args{
+				nfoFilePath: filepath.Join(unit_test_helper.GetTestDataResourceRootPath([]string{"nfo_files", "tvshow"}, 4, false), "tvshow_00 (2).nfo"),
+				rootKey:     "tvshow",
+			},
+			want: types.VideoIMDBInfo{
+				ImdbId:      "tt0346314",
+				Title:       "Ghost in the Shell: Stand Alone Complex",
+				ReleaseDate: "2002-10-01",
+			},
+			wantErr: false,
+		},
+		{
+			name: "tvshow_00 (3).nfo", args: args{
+				nfoFilePath: filepath.Join(unit_test_helper.GetTestDataResourceRootPath([]string{"nfo_files", "tvshow"}, 4, false), "tvshow_00 (3).nfo"),
+				rootKey:     "tvshow",
+			},
+			want: types.VideoIMDBInfo{
+				ImdbId:      "tt1856010",
+				Title:       "House of Cards (US)",
+				ReleaseDate: "2013-02-01",
+			},
+			wantErr: false,
+		},
 	}
-
-	wantid = ""
-	wantyear = ""
-	dirPth = getTestFileDir("only_http_address.nfo")
-	imdbInfo, err = getImdbAndYearNfo(dirPth, "movie")
-	if err == nil {
-		t.Fatal("need error")
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got, err := getImdbAndYearNfo(tt.args.nfoFilePath, tt.args.rootKey)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("getImdbAndYearNfo() error = %v, wantErr %v", err, tt.wantErr)
+				return
+			}
+			if !reflect.DeepEqual(got, tt.want) {
+				t.Errorf("getImdbAndYearNfo() got = %v, want %v", got, tt.want)
+			}
+		})
 	}
 }
 
@@ -136,9 +147,9 @@ func TestGetImdbInfo4SeriesDir(t *testing.T) {
 			name: "辛普森一家",
 			args: args{seriesDir: unit_test_helper.GetTestDataResourceRootPath([]string{"series", "辛普森一家"}, 4, false)},
 			want: types.VideoIMDBInfo{
-				ImdbId:      "tt9140554",
-				Title:       "Loki",
-				ReleaseDate: "2021-06-09",
+				ImdbId:      "tt0096697",
+				Title:       "The Simpsons",
+				ReleaseDate: "1989-12-17",
 			},
 			wantErr: false,
 		},