mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 03:26:37 +08:00
split organizer library classification helpers
This commit is contained in:
@@ -263,118 +263,3 @@ func (o *OrganizerService) ensureOrganizeLibraryForRoot(ctx context.Context, roo
|
||||
}
|
||||
return lib, true
|
||||
}
|
||||
|
||||
func organizeLibraryModelType(mediaType string) string {
|
||||
switch normalizeOrganizeMediaType(mediaType) {
|
||||
case "tv", "anime", "variety":
|
||||
return "tv"
|
||||
case "adult", "movie":
|
||||
return "movie"
|
||||
default:
|
||||
return "movie"
|
||||
}
|
||||
}
|
||||
|
||||
func organizeLibraryTypeName(mediaType string) string {
|
||||
switch normalizeOrganizeMediaType(mediaType) {
|
||||
case "tv":
|
||||
return "电视剧"
|
||||
case "anime":
|
||||
return "动漫"
|
||||
case "variety":
|
||||
return "综艺"
|
||||
case "adult":
|
||||
return "成人"
|
||||
default:
|
||||
return "电影"
|
||||
}
|
||||
}
|
||||
|
||||
func (o *OrganizerService) organizeCategoryAliases(mediaType, category string) map[string]struct{} {
|
||||
aliases := map[string]struct{}{}
|
||||
add := func(values ...string) {
|
||||
for _, value := range values {
|
||||
key := normalizeOrganizeCategoryKey(value)
|
||||
if key != "" {
|
||||
aliases[key] = struct{}{}
|
||||
}
|
||||
}
|
||||
}
|
||||
categories := o.categoryMap()
|
||||
add(category)
|
||||
switch normalizeOrganizeCategoryKey(category) {
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "jp_anime", "日番")), "日番", "日漫", "日本动漫", "日本動畫", "日本动画":
|
||||
add("日番", "日漫", "日本动漫", "日本动画")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "cn_anime", "国漫")), "国漫", "国产动漫", "國漫":
|
||||
add("国漫", "国产动漫")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "euus_anime", "欧美动漫")), "欧美动漫", "欧美动画", "西方动画":
|
||||
add("欧美动漫", "欧美动画", "西方动画")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "domestic_tv", "国产剧")), "国产剧", "国剧", "大陆剧", "国产电视剧":
|
||||
add("国产剧", "国剧", "大陆剧", "国产电视剧")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "euus_tv", "欧美剧")), "欧美剧", "欧美电视剧":
|
||||
add("欧美剧", "欧美电视剧")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "jk_tv", "日韩剧")), "日韩剧", "日剧", "韩剧":
|
||||
add("日韩剧", "日剧", "韩剧")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "variety", "综艺")), "综艺", "真人秀":
|
||||
add("综艺", "真人秀")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "documentary", "纪录片")), "纪录片", "纪录":
|
||||
add("纪录片", "纪录")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "children", "儿童")), "儿童", "少儿":
|
||||
add("儿童", "少儿")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "chinese_movie", "华语电影")), "华语电影", "国产电影", "大陆电影":
|
||||
add("华语电影", "国产电影", "大陆电影")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "foreign_movie", "外语电影")), "外语电影":
|
||||
add("外语电影")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "animation_movie", "动画电影")), "动画电影", "动漫电影":
|
||||
add("动画电影", "动漫电影")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "adult", "成人")), "成人":
|
||||
add("成人")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "adult_9kg", "9KG")), "9kg":
|
||||
add("9KG")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "adult_jav", "番号")), "番号", "jav":
|
||||
add("番号", "JAV")
|
||||
}
|
||||
return aliases
|
||||
}
|
||||
|
||||
func libraryMatchesOrganizeCategory(lib model.Library, aliases map[string]struct{}) bool {
|
||||
for _, value := range []string{lib.Name, filepath.Base(filepath.Clean(lib.Path))} {
|
||||
if _, ok := aliases[normalizeOrganizeCategoryKey(value)]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func organizeLibraryTypeScore(mediaType, libraryType string) int {
|
||||
libraryType = normalizeOrganizeMediaType(libraryType)
|
||||
if mediaType == "" || libraryType == "" {
|
||||
return 1
|
||||
}
|
||||
if mediaType == libraryType {
|
||||
return 8
|
||||
}
|
||||
if mediaType == "anime" && libraryType == "tv" {
|
||||
return 5
|
||||
}
|
||||
if mediaType == "variety" && libraryType == "tv" {
|
||||
return 5
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func normalizeOrganizeCategoryKey(value string) string {
|
||||
value = strings.ToLower(strings.TrimSpace(value))
|
||||
value = strings.ReplaceAll(value, " ", "")
|
||||
value = strings.ReplaceAll(value, "_", "")
|
||||
value = strings.ReplaceAll(value, "-", "")
|
||||
return value
|
||||
}
|
||||
|
||||
func pathDepth(path string) int {
|
||||
path = filepath.Clean(path)
|
||||
if path == "." || path == string(os.PathSeparator) {
|
||||
return 0
|
||||
}
|
||||
return len(strings.Split(path, string(os.PathSeparator)))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/ShukeBta/MediaStationGo/internal/model"
|
||||
)
|
||||
|
||||
func organizeLibraryModelType(mediaType string) string {
|
||||
switch normalizeOrganizeMediaType(mediaType) {
|
||||
case "tv", "anime", "variety":
|
||||
return "tv"
|
||||
case "adult", "movie":
|
||||
return "movie"
|
||||
default:
|
||||
return "movie"
|
||||
}
|
||||
}
|
||||
|
||||
func organizeLibraryTypeName(mediaType string) string {
|
||||
switch normalizeOrganizeMediaType(mediaType) {
|
||||
case "tv":
|
||||
return "电视剧"
|
||||
case "anime":
|
||||
return "动漫"
|
||||
case "variety":
|
||||
return "综艺"
|
||||
case "adult":
|
||||
return "成人"
|
||||
default:
|
||||
return "电影"
|
||||
}
|
||||
}
|
||||
|
||||
func (o *OrganizerService) organizeCategoryAliases(mediaType, category string) map[string]struct{} {
|
||||
aliases := map[string]struct{}{}
|
||||
add := func(values ...string) {
|
||||
for _, value := range values {
|
||||
key := normalizeOrganizeCategoryKey(value)
|
||||
if key != "" {
|
||||
aliases[key] = struct{}{}
|
||||
}
|
||||
}
|
||||
}
|
||||
categories := o.categoryMap()
|
||||
add(category)
|
||||
switch normalizeOrganizeCategoryKey(category) {
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "jp_anime", "日番")), "日番", "日漫", "日本动漫", "日本動畫", "日本动画":
|
||||
add("日番", "日漫", "日本动漫", "日本动画")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "cn_anime", "国漫")), "国漫", "国产动漫", "國漫":
|
||||
add("国漫", "国产动漫")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "euus_anime", "欧美动漫")), "欧美动漫", "欧美动画", "西方动画":
|
||||
add("欧美动漫", "欧美动画", "西方动画")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "domestic_tv", "国产剧")), "国产剧", "国剧", "大陆剧", "国产电视剧":
|
||||
add("国产剧", "国剧", "大陆剧", "国产电视剧")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "euus_tv", "欧美剧")), "欧美剧", "欧美电视剧":
|
||||
add("欧美剧", "欧美电视剧")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "jk_tv", "日韩剧")), "日韩剧", "日剧", "韩剧":
|
||||
add("日韩剧", "日剧", "韩剧")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "variety", "综艺")), "综艺", "真人秀":
|
||||
add("综艺", "真人秀")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "documentary", "纪录片")), "纪录片", "纪录":
|
||||
add("纪录片", "纪录")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "children", "儿童")), "儿童", "少儿":
|
||||
add("儿童", "少儿")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "chinese_movie", "华语电影")), "华语电影", "国产电影", "大陆电影":
|
||||
add("华语电影", "国产电影", "大陆电影")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "foreign_movie", "外语电影")), "外语电影":
|
||||
add("外语电影")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "animation_movie", "动画电影")), "动画电影", "动漫电影":
|
||||
add("动画电影", "动漫电影")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "adult", "成人")), "成人":
|
||||
add("成人")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "adult_9kg", "9KG")), "9kg":
|
||||
add("9KG")
|
||||
case normalizeOrganizeCategoryKey(categoryName(categories, "adult_jav", "番号")), "番号", "jav":
|
||||
add("番号", "JAV")
|
||||
}
|
||||
return aliases
|
||||
}
|
||||
|
||||
func libraryMatchesOrganizeCategory(lib model.Library, aliases map[string]struct{}) bool {
|
||||
for _, value := range []string{lib.Name, filepath.Base(filepath.Clean(lib.Path))} {
|
||||
if _, ok := aliases[normalizeOrganizeCategoryKey(value)]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func organizeLibraryTypeScore(mediaType, libraryType string) int {
|
||||
libraryType = normalizeOrganizeMediaType(libraryType)
|
||||
if mediaType == "" || libraryType == "" {
|
||||
return 1
|
||||
}
|
||||
if mediaType == libraryType {
|
||||
return 8
|
||||
}
|
||||
if mediaType == "anime" && libraryType == "tv" {
|
||||
return 5
|
||||
}
|
||||
if mediaType == "variety" && libraryType == "tv" {
|
||||
return 5
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func normalizeOrganizeCategoryKey(value string) string {
|
||||
value = strings.ToLower(strings.TrimSpace(value))
|
||||
value = strings.ReplaceAll(value, " ", "")
|
||||
value = strings.ReplaceAll(value, "_", "")
|
||||
value = strings.ReplaceAll(value, "-", "")
|
||||
return value
|
||||
}
|
||||
|
||||
func pathDepth(path string) int {
|
||||
path = filepath.Clean(path)
|
||||
if path == "." || path == string(os.PathSeparator) {
|
||||
return 0
|
||||
}
|
||||
return len(strings.Split(path, string(os.PathSeparator)))
|
||||
}
|
||||
Reference in New Issue
Block a user