Browse Source

完成,实现字幕类型优先级选择

Signed-off-by: allan716 <[email protected]>
allan716 4 years ago
parent
commit
2c541fddd2
2 changed files with 43 additions and 2 deletions
  1. 3 1
      mark_system/marking_system.go
  2. 40 1
      model/sub_helper.go

+ 3 - 1
mark_system/marking_system.go

@@ -12,13 +12,15 @@ import (
 type MarkingSystem struct {
 	log *logrus.Logger
 	subSiteSequence []string			// 网站的优先级,从高到低
+	SubTypePriority int					// 字幕格式的优先级
 	subParserHub *model.SubParserHub
 }
 // TODO 在这里添加字幕格式选择的逻辑
 
-func NewMarkingSystem(subSiteSequence []string) *MarkingSystem {
+func NewMarkingSystem(subSiteSequence []string, subTypePriority int) *MarkingSystem {
 	mk := MarkingSystem{subSiteSequence: subSiteSequence,
 		log: model.GetLogger(),
+		SubTypePriority: subTypePriority,
 		subParserHub: model.NewSubParserHub(ass.NewParser(), srt.NewParser())}
 	return &mk
 }

+ 40 - 1
model/sub_helper.go

@@ -101,16 +101,55 @@ func ChangeVideoExt2SubExt(subInfos []common.SupplierSubInfo) {
 }
 
 // FindChineseBestSubtitle 找到合适的中文字幕,优先简体双语,简体->繁体,以及 字幕类型的优先级选择
-func FindChineseBestSubtitle(subs []common.SubParserFileInfo) *common.SubParserFileInfo {
+func FindChineseBestSubtitle(subs []common.SubParserFileInfo, subTypePriority int) *common.SubParserFileInfo {
+
+	// 先傻一点实现优先双语的,之前的写法有 bug
 	for _, info := range subs {
 		// 找到了中文字幕
 		if HasChineseLang(info.Lang) == true {
+			// 字幕的优先级 0 - 原样, 1 - srt , 2 - ass/ssa
+			if subTypePriority == 1 {
+				// 1 - srt
+				if strings.ToLower(info.Ext) == common.SubExtSRT {
+					// 优先双语
+					if IsBilingualSubtitle(info.Lang) == true {
+						return &info
+					}
+				}
+			} else if subTypePriority == 2 {
+				//  2 - ass/ssa
+				if strings.ToLower(info.Ext) == common.SubExtASS || strings.ToLower(info.Ext) == common.SubExtSSA {
+					// 优先双语
+					if IsBilingualSubtitle(info.Lang) == true {
+						return &info
+					}
+				}
+			}
 			// 优先双语
 			if IsBilingualSubtitle(info.Lang) == true {
 				return &info
 			}
+		}
+	}
+	// 然后才是 chs 和 cht
+	for _, info := range subs {
+		// 找到了中文字幕
+		if HasChineseLang(info.Lang) == true {
+			// 字幕的优先级 0 - 原样, 1 - srt , 2 - ass/ssa
+			if subTypePriority == 1 {
+				// 1 - srt
+				if strings.ToLower(info.Ext) == common.SubExtSRT {
+					return &info
+				}
+			} else if subTypePriority == 2 {
+				//  2 - ass/ssa
+				if strings.ToLower(info.Ext) == common.SubExtASS || strings.ToLower(info.Ext) == common.SubExtSSA {
+					return &info
+				}
+			}
 			return &info
 		}
 	}
+
 	return nil
 }