Browse Source

字幕合集下载缓存的功能改进, 相关提交见 #23。 fix #25

Signed-off-by: allan716 <[email protected]>
allan716 4 years ago
parent
commit
6a44a48758

+ 1 - 0
.gitignore

@@ -21,3 +21,4 @@
 /internal/Logs/*.log
 /TestData/hotfix/001/test
 /internal/pkg/hot_fix/settings.db
+/TestData/sub_helper/test

+ 8 - 0
internal/downloader.go

@@ -14,6 +14,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/language"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/types"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/emby"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/series"
@@ -282,6 +283,13 @@ func (d Downloader) DownloadSub4Series(dir string) error {
 			seasonEpsKey := pkg.GetEpisodeKeyName(episodeInfo.Season, episodeInfo.Episode)
 			d.oneVideoSelectBestSub(episodeInfo.FileFullPath, fullSeasonSubDict[seasonEpsKey])
 		}
+		// 是否清理全季的缓存字幕文件夹
+		if d.reqParam.SaveOneSeasonSub == false {
+			err = sub_helper.DeleteOneSeasonSubCacheFolder(seriesInfo.DirPath)
+			if err != nil {
+				return err
+			}
+		}
 
 		return nil
 	}

+ 2 - 1
internal/downloader_test.go

@@ -39,6 +39,7 @@ func TestDownloader_DownloadSub4Series(t *testing.T) {
 	var err error
 	//dirRoot := "X:\\连续剧\\隐秘的角落 (2020)"
 	//dirRoot := "X:\\连续剧\\The Bad Batch"
+	dirRoot := "X:\\连续剧\\Loki"
 	//dirRoot := "X:\\连续剧\\豪斯医生 (2004)"
 	//dirRoot := "X:\\连续剧\\Why Women Kill"
 	//dirRoot := "X:\\连续剧\\Mare of Easttown"
@@ -47,7 +48,7 @@ func TestDownloader_DownloadSub4Series(t *testing.T) {
 	//dirRoot := "X:\\连续剧\\黑道家族 (1999)"
 	//dirRoot := "X:\\连续剧\\黑镜 (2011)"
 	//dirRoot := "X:\\连续剧\\黄石 (2018)"
-	dirRoot := "X:\\连续剧"
+	//dirRoot := "X:\\连续剧"
 
 	config := pkg.GetConfig()
 	// 如果需要调试 Emby 一定需要 dirRoot := "X:\\连续剧"

+ 26 - 0
internal/pkg/sub_helper/sub_helper.go

@@ -336,6 +336,32 @@ func makeMixSubExtString(orgFileNameWithOutExt, lang string, ext, site string, b
 	return orgFileNameWithOutExt + types.Emby_chinese + "(" + lang + "," + site + ")" + tmpDefault + ext
 }
 
+// DeleteOneSeasonSubCacheFolder 删除一个连续剧中的所有一季字幕的缓存文件夹
+func DeleteOneSeasonSubCacheFolder(seriesDir string) error {
+
+	files, err := ioutil.ReadDir(seriesDir)
+	if err != nil {
+		return err
+	}
+	pathSep := string(os.PathSeparator)
+	for _, curFile := range files {
+		if curFile.IsDir() == true {
+			matched := regOneSeasonSubFolderNameMatch.FindAllStringSubmatch(curFile.Name(), -1)
+			if matched == nil || len(matched) < 1 {
+				continue
+			}
+
+			fullPath := seriesDir + pathSep + curFile.Name()
+			err = os.RemoveAll(fullPath)
+			if err != nil {
+				return err
+			}
+		}
+	}
+
+	return nil
+}
+
 var (
 	regOneSeasonSubFolderNameMatch = regexp.MustCompile(`(?m)^Sub_S\dE0`)
 )

+ 21 - 1
internal/pkg/sub_helper/sub_helper_test.go

@@ -1,6 +1,10 @@
 package sub_helper
 
-import "testing"
+import (
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg"
+	"path"
+	"testing"
+)
 
 func TestIsOldVersionSubPrefixName(t *testing.T) {
 	type args struct {
@@ -34,3 +38,19 @@ func TestIsOldVersionSubPrefixName(t *testing.T) {
 		})
 	}
 }
+
+func TestDeleteOneSeasonSubCacheFolder(t *testing.T) {
+
+	testDataPath := "..\\..\\..\\TestData\\sub_helper"
+	testRootDir, err := pkg.CopyTestData(testDataPath)
+	if err != nil {
+		t.Fatal(err)
+	}
+	err = DeleteOneSeasonSubCacheFolder(testRootDir)
+	if err != nil {
+		t.Fatal(err)
+	}
+	if pkg.IsDir(path.Join(testRootDir, "Sub_S1E0")) == true {
+		t.Fatal("Sub_S1E0 not delete")
+	}
+}

+ 1 - 1
internal/pkg/util.go

@@ -176,7 +176,7 @@ func GetTmpFolder(folderName string) (string, error) {
 	return tmpFolderFullPath, nil
 }
 
-// ClearFolder 清文件夹
+// ClearFolder 清文件夹
 func ClearFolder(folderName string) error {
 	pathSep := string(os.PathSeparator)
 	files, err := ioutil.ReadDir(folderName)

+ 13 - 12
internal/types/config.go

@@ -3,16 +3,17 @@ package types
 import "github.com/allanpk716/ChineseSubFinder/internal/types/emby"
 
 type Config struct {
-	UseProxy                      bool
-	HttpProxy                     string
-	EveryTime                     string // 一轮扫描字幕下载的间隔时间
-	DebugMode                     bool
-	Threads                       int    // 同时并发的线程数(准确来说在go中不是线程,是 goroutine)
-	SubTypePriority               int    // 字幕下载的优先级,0 是自动,1 是 srt 优先,2 是 ass/ssa 优先
-	WhenSubSupplierInvalidWebHook string // 当字幕网站失效的时候,触发的 webhook 地址,默认是 get
-	EmbyConfig                    emby.EmbyConfig
-	SaveMultiSub                  bool
-	MovieFolder                   string
-	SeriesFolder                  string
-	AnimeFolder                   string
+	UseProxy                      bool            // 是否启用的代理
+	HttpProxy                     string          // http 代理地址
+	EveryTime                     string          // 一轮扫描字幕下载的间隔时间
+	DebugMode                     bool            // 是否启用 Debug 模式,调试功能
+	Threads                       int             // 同时并发的线程数(准确来说在go中不是线程,是 goroutine)
+	SubTypePriority               int             // 字幕下载的优先级,0 是自动,1 是 srt 优先,2 是 ass/ssa 优先
+	WhenSubSupplierInvalidWebHook string          // 当字幕网站失效的时候,触发的 webhook 地址,默认是 get
+	EmbyConfig                    emby.EmbyConfig // Emby API 高阶设置参数
+	SaveMultiSub                  bool            // 保存多个网站的 Top 1 字幕
+	SaveOneSeasonSub              bool            // 保存整个季度的字幕
+	MovieFolder                   string          // 电影文件夹
+	SeriesFolder                  string          // 连续剧文件夹
+	AnimeFolder                   string          // 日本动画文件夹,很可能不会实现该功能
 }

+ 15 - 13
internal/types/reqparam.go

@@ -4,19 +4,21 @@ import "github.com/allanpk716/ChineseSubFinder/internal/types/emby"
 
 // ReqParam 可选择传入的参数
 type ReqParam struct {
-	UserExtList                   []string // 用户确认的视频后缀名支持列表
-	SaveMultiSub                  bool     // 存储每个网站 Top1 的字幕
-	DebugMode                     bool     // 调试标志位
-	Threads                       int      // 同时并发的线程数(准确来说在go中不是线程,是 goroutine)
-	SubTypePriority               int      // 字幕下载的优先级,0 是自动,1 是 srt 优先,2 是 ass/ssa 优先
-	WhenSubSupplierInvalidWebHook string   // 当字幕网站失效的时候,触发的 webhook 地址,默认是 get
-	EmbyConfig                    emby.EmbyConfig
-	HttpProxy                     string // HttpClient 相关
-	UserAgent                     string // HttpClient 相关
-	Referer                       string // HttpClient 相关
-	MediaType                     string // HttpClient 相关
-	Charset                       string // HttpClient 相关
-	Topic                         int    // 搜索结果的时候,返回 Topic N 以内的
+	UserExtList                   []string        // 用户确认的视频后缀名支持列表
+	SaveMultiSub                  bool            // 存储每个网站 Top1 的字幕
+	DebugMode                     bool            // 调试标志位
+	Threads                       int             // 同时并发的线程数(准确来说在go中不是线程,是 goroutine)
+	SubTypePriority               int             // 字幕下载的优先级,0 是自动,1 是 srt 优先,2 是 ass/ssa 优先
+	WhenSubSupplierInvalidWebHook string          // 当字幕网站失效的时候,触发的 webhook 地址,默认是 get
+	EmbyConfig                    emby.EmbyConfig // Emby API 高阶设置参数
+	SaveOneSeasonSub              bool            // 保存整个季度的字幕
+
+	HttpProxy string // HttpClient 相关
+	UserAgent string // HttpClient 相关
+	Referer   string // HttpClient 相关
+	MediaType string // HttpClient 相关
+	Charset   string // HttpClient 相关
+	Topic     int    // 搜索结果的时候,返回 Topic N 以内的
 }
 
 func NewReqParam() *ReqParam {

+ 1 - 0
main.go

@@ -95,6 +95,7 @@ func DownLoadStart(httpProxy string) {
 		SubTypePriority:               config.SubTypePriority,
 		WhenSubSupplierInvalidWebHook: config.WhenSubSupplierInvalidWebHook,
 		EmbyConfig:                    config.EmbyConfig,
+		SaveOneSeasonSub:              config.SaveOneSeasonSub,
 	})
 
 	log.Infoln("Download One Started...")