subinfo.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package supplier
  2. import (
  3. "crypto/sha256"
  4. "fmt"
  5. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/types/language"
  6. )
  7. type SubInfo struct {
  8. FromWhere string `json:"from_where"` // 从哪个网站下载来的
  9. TopN int64 `json:"top_n"` // 是 Top 几?
  10. Name string `json:"name"` // 字幕的名称,这个比较随意,优先是影片的名称,然后才是从网上下载字幕的对应名称
  11. Language language.MyLanguage `json:"language"` // 字幕的语言
  12. FileUrl string `json:"file-url"` // 字幕文件下载的路径
  13. Score int64 `json:"score"` // TODO 字幕的评分,需要有一个独立的评价体系。首先是每个网站自己的评价排序,然后再到统一的评分体系
  14. Offset int64 `json:"offset"` // 字幕的偏移
  15. Ext string `json:"ext"` // 字幕文件的后缀名带点,有可能是直接能用的字幕文件,也可能是压缩包
  16. Data []byte `json:"data"` // 字幕文件的二进制数据
  17. Season int `json:"season"` // 第几季,默认-1
  18. Episode int `json:"episode"` // 第几集,默认-1
  19. IsFullSeason bool `json:"is_full_season"` // 是否是全季的字幕
  20. fileUrlSha256 string // 字幕文件的 FileUrl sha256 值
  21. }
  22. func NewSubInfo(fromWhere string, topN int64, name string, language language.MyLanguage, fileUrl string,
  23. score int64, offset int64, ext string, data []byte) *SubInfo {
  24. s := SubInfo{FromWhere: fromWhere, TopN: topN, Name: name, Language: language, FileUrl: fileUrl,
  25. Score: score, Offset: offset, Ext: ext, Data: data}
  26. s.Season = -1
  27. s.Episode = -1
  28. return &s
  29. }
  30. // GetUID 通过 FileUrl 获取字幕的唯一标识
  31. func (s *SubInfo) GetUID() string {
  32. if s.fileUrlSha256 == "" {
  33. if s.FileUrl == "" {
  34. return ""
  35. }
  36. s.fileUrlSha256 = fmt.Sprintf("%x", sha256.Sum256([]byte(s.FileUrl)))
  37. return s.fileUrlSha256
  38. } else {
  39. return s.fileUrlSha256
  40. }
  41. }
  42. // SetFileUrlSha256 为了 ASSRT 这种下载连接是临时情况所准备的
  43. func (s *SubInfo) SetFileUrlSha256(fileUrlSha256 string) {
  44. s.fileUrlSha256 = fileUrlSha256
  45. }