Explorar o código

确认 subtitle_best 功能正确

Signed-off-by: allan716 <[email protected]>
allan716 %!s(int64=2) %!d(string=hai) anos
pai
achega
97be99396e

+ 29 - 17
pkg/logic/sub_supplier/subtitle_best/subtitle_best.go

@@ -78,7 +78,8 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 	if settings.Get().SubtitleSources.SubtitleBestSettings.ApiKey == "" {
 		return true
 	}
-	if s.dailyDownloadCount >= s.dailyDownloadLimit {
+	// 留 5 个下载次数的余量
+	if s.dailyDownloadCount >= s.dailyDownloadLimit-5 {
 		return true
 	}
 
@@ -212,26 +213,37 @@ func (s *Supplier) getSubListFromFile(videoFPath string, isMovie bool, season, e
 
 	for index, subInfo := range subtitle.Subtitles {
 
+		var found bool
+		var dSubInfo *supplier.SubInfo
 		// 获取具体的下载地址
-		var downloadUrl *GetUrlResponse
-		downloadUrl, limitInfo, err = s.api.GetDownloadUrl(client, subInfo.SubSha256, mediaInfo.ImdbId,
-			subInfo.IsMovie, subInfo.Season, subInfo.Episode,
-			"", subInfo.Language, subInfo.Token)
+		// 这里需要先从本地的缓存判断是否已经下载过了
+		found, dSubInfo, err = s.fileDownloader.CacheCenter.DownloadFileGet(subInfo.SubSha256)
 		if err != nil {
-			return nil, err
-		}
-		s.updateLimitInfo(limitInfo)
-
-		// 下载地址为空
-		if len(downloadUrl.DownloadLink) < 1 {
+			s.log.Errorln(s.GetSupplierName(), "DownloadFileGet", err)
 			continue
 		}
-		// 这里需要注意的是 SubtitleBest 的下载地址是时效性的,所以不能以下载地址进行唯一性存储
-		dSubInfo, err := s.fileDownloader.GetSubtitleBest(s.GetSupplierName(), int64(index), subInfo.Season, subInfo.Episode,
-			subInfo.Title, subInfo.Ext, subInfo.SubSha256, downloadUrl.DownloadLink)
-		if err != nil {
-			s.log.Error("FileDownloader.Get", err)
-			continue
+		if found == false {
+			// 本地没有缓存,需要从网络下载
+			var downloadUrl *GetUrlResponse
+			downloadUrl, limitInfo, err = s.api.GetDownloadUrl(client, subInfo.SubSha256, mediaInfo.ImdbId,
+				subInfo.IsMovie, subInfo.Season, subInfo.Episode,
+				"", subInfo.Language, subInfo.Token)
+			if err != nil {
+				return nil, err
+			}
+			s.updateLimitInfo(limitInfo)
+
+			// 下载地址为空
+			if len(downloadUrl.DownloadLink) < 1 {
+				continue
+			}
+			// 这里需要注意的是 SubtitleBest 的下载地址是时效性的,所以不能以下载地址进行唯一性存储
+			dSubInfo, err = s.fileDownloader.GetSubtitleBest(s.GetSupplierName(), int64(index), subInfo.Season, subInfo.Episode,
+				subInfo.Title, subInfo.Ext, subInfo.SubSha256, downloadUrl.DownloadLink)
+			if err != nil {
+				s.log.Error("FileDownloader.Get", err)
+				continue
+			}
 		}
 
 		outSubInfoList = append(outSubInfoList, *dSubInfo)

+ 67 - 0
pkg/logic/sub_supplier/subtitle_best/subtitle_best_test.go

@@ -0,0 +1,67 @@
+package subtitle_best
+
+import (
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg"
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/cache_center"
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/log_helper"
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/file_downloader"
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/random_auth_key"
+	"github.com/ChineseSubFinder/ChineseSubFinder/pkg/settings"
+	"testing"
+)
+
+var sbInstance *Supplier
+
+func defInstance() {
+
+	settings.SetConfigRootPath(pkg.ConfigRootDirFPath())
+
+	pkg.ReadCustomAuthFile(log_helper.GetLogger4Tester())
+
+	authKey := random_auth_key.AuthKey{
+		BaseKey:  pkg.BaseKey(),
+		AESKey16: pkg.AESKey16(),
+		AESIv16:  pkg.AESIv16(),
+	}
+
+	sbInstance = NewSupplier(file_downloader.NewFileDownloader(
+		cache_center.NewCacheCenter("test", log_helper.GetLogger4Tester()), authKey))
+}
+
+func TestSupplier_CheckAlive(t *testing.T) {
+
+	defInstance()
+
+	bok, speed := sbInstance.CheckAlive()
+	println(bok, speed)
+}
+
+func TestSupplier_GetSubListFromFile4Movie(t *testing.T) {
+
+	defInstance()
+
+	subInfos, err := sbInstance.GetSubListFromFile4Movie("X:\\电影\\Avatar (2009)\\Avatar (2009) Bluray-1080p.mp4")
+	if err != nil {
+		t.Fatal(err)
+		return
+	}
+	for i, subInfo := range subInfos {
+		println(i, subInfo.Name, subInfo.GetUID())
+	}
+}
+
+func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
+
+	defInstance()
+
+	eps := "X:\\连续剧\\曼达洛人 (2019)\\Season 1\\曼达洛人 - S01E01 - 第1章:曼达洛人.mp4"
+	subInfos, err := sbInstance.getSubListFromFile(eps, false, 1, 1)
+	if err != nil {
+		t.Fatal(err)
+		return
+	}
+
+	for i, subInfo := range subInfos {
+		println(i, subInfo.Name, subInfo.GetUID())
+	}
+}