mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 03:06:38 +08:00
cc7c898277
优化
96 lines
2.4 KiB
Go
96 lines
2.4 KiB
Go
package service
|
||
|
||
import (
|
||
"path/filepath"
|
||
"strings"
|
||
)
|
||
|
||
func AdultCodeFromMediaPath(path string) string {
|
||
if code := normalizeAdultCode(filepath.Base(path)); code != "" {
|
||
return code
|
||
}
|
||
return normalizeAdultCode(path)
|
||
}
|
||
|
||
func normalizeAdultCode(input string) string {
|
||
input = strings.ToUpper(strings.TrimSpace(input))
|
||
if input == "" {
|
||
return ""
|
||
}
|
||
input = strings.ReplaceAll(input, "_", "-")
|
||
if m := adultFC2Pattern.FindStringSubmatch(input); len(m) > 1 {
|
||
return "FC2-PPV-" + m[1]
|
||
}
|
||
if m := adultHEYZOPattern.FindStringSubmatch(input); len(m) > 1 {
|
||
return "HEYZO-" + m[1]
|
||
}
|
||
if m := adultUncensoredPattern.FindStringSubmatch(input); len(m) > 2 {
|
||
return m[1] + "-" + m[2]
|
||
}
|
||
for _, m := range adultStandardPattern.FindAllStringSubmatch(input, -1) {
|
||
if len(m) < 3 {
|
||
continue
|
||
}
|
||
prefix := strings.TrimSpace(m[1])
|
||
if _, excluded := adultExcludedPrefixes[prefix]; excluded {
|
||
continue
|
||
}
|
||
return prefix + "-" + m[2]
|
||
}
|
||
return ""
|
||
}
|
||
|
||
// CleanAdultTitle 去除标题中冗余的前缀番号、方括号、分隔符,提取纯标题内容
|
||
func CleanAdultTitle(code, rawTitle string) string {
|
||
rawTitle = strings.TrimSpace(rawTitle)
|
||
code = normalizeAdultCode(code)
|
||
if rawTitle == "" {
|
||
return ""
|
||
}
|
||
clean := rawTitle
|
||
for {
|
||
trimmed := strings.TrimSpace(clean)
|
||
if trimmed == "" {
|
||
return ""
|
||
}
|
||
if code != "" {
|
||
upper := strings.ToUpper(trimmed)
|
||
upperCode := strings.ToUpper(code)
|
||
if strings.HasPrefix(upper, upperCode) {
|
||
clean = strings.TrimSpace(trimmed[len(upperCode):])
|
||
clean = strings.TrimLeft(clean, "-_ ::]】")
|
||
continue
|
||
}
|
||
}
|
||
if strings.HasPrefix(trimmed, "[") || strings.HasPrefix(trimmed, "【") {
|
||
idx := strings.IndexAny(trimmed, "]】")
|
||
if idx > 0 {
|
||
bracketContent := normalizeAdultCode(trimmed[1:idx])
|
||
if bracketContent != "" && (code == "" || bracketContent == code) {
|
||
clean = strings.TrimSpace(trimmed[idx+len("]"):])
|
||
clean = strings.TrimLeft(clean, "-_ ::")
|
||
continue
|
||
}
|
||
}
|
||
}
|
||
break
|
||
}
|
||
return strings.TrimSpace(clean)
|
||
}
|
||
|
||
// FormatAdultTitle 格式化番号标题:把番号放在最前面,如 "IPZZ-090-具体标题" 或 "IPZZ-090"
|
||
func FormatAdultTitle(code, rawTitle string) string {
|
||
code = normalizeAdultCode(code)
|
||
if code == "" {
|
||
code = normalizeAdultCode(rawTitle)
|
||
}
|
||
clean := CleanAdultTitle(code, rawTitle)
|
||
if code == "" {
|
||
return clean
|
||
}
|
||
if clean == "" || strings.EqualFold(clean, code) {
|
||
return code
|
||
}
|
||
return code + "-" + clean
|
||
}
|