From c9cc4a6ee969511df47d8a21e006d0dcfae28afc Mon Sep 17 00:00:00 2001 From: ShukeBta <272197458+ShukeBta@users.noreply.github.com> Date: Sat, 27 Jun 2026 11:51:39 +0800 Subject: [PATCH] split site adapter helpers --- internal/service/site_adapter.go | 79 ------------------------ internal/service/site_adapter_factory.go | 40 ++++++++++++ internal/service/site_adapter_parse.go | 51 +++++++++++++++ 3 files changed, 91 insertions(+), 79 deletions(-) create mode 100644 internal/service/site_adapter_factory.go create mode 100644 internal/service/site_adapter_parse.go diff --git a/internal/service/site_adapter.go b/internal/service/site_adapter.go index 1f8cb26..4d3ec62 100644 --- a/internal/service/site_adapter.go +++ b/internal/service/site_adapter.go @@ -6,8 +6,6 @@ import ( "fmt" "io" "net/http" - "regexp" - "strconv" "strings" "time" @@ -227,80 +225,3 @@ func doRequestJSON(ctx context.Context, client *http.Client, method, rawURL stri } return data, resp.StatusCode, nil } - -func mteamCodeOK(code any) bool { - codeStr := mteamCodeString(code) - return codeStr == "0" || codeStr == "200" -} - -func mteamCodeString(code any) string { - switch v := code.(type) { - case string: - return strings.TrimSpace(v) - case float64: - return strconv.Itoa(int(v)) - case int: - return strconv.Itoa(v) - default: - return "" - } -} - -// parseSizeString 将带单位的字符串转换为字节数。 -func parseSizeString(value string, unit string) int64 { - v, err := strconv.ParseFloat(value, 64) - if err != nil { - return 0 - } - switch strings.ToLower(unit) { - case "kb": - return int64(v * 1024) - case "mb": - return int64(v * 1024 * 1024) - case "gb": - return int64(v * 1024 * 1024 * 1024) - case "tb": - return int64(v * 1024 * 1024 * 1024 * 1024) - default: - return int64(v) - } -} - -// stripHTML 移除 HTML 标签。 -func stripHTML(s string) string { - re := regexp.MustCompile(`<[^>]*>`) - return re.ReplaceAllString(s, "") -} - -// GetAdapterForType 根据站点类型返回对应的适配器实例。 -func GetAdapterForType(siteType string) SiteAdapter { - switch strings.ToLower(siteType) { - case "nexusphp": - return NewNexusPHPAdapter() - case "gazelle": - return NewGazelleAdapter() - case "unit3d": - return NewUNIT3DAdapter() - case "mteam": - return NewMTeamAdapter() - case "yemapt": - return NewYemaPTAdapter() - case "discuz": - return NewDiscuzAdapter() - case "custom_rss": - return NewCustomRSSAdapter() - default: - return NewNexusPHPAdapter() - } -} - -// NewSiteAdapter 根据站点模型创建对应的适配器。 -func NewSiteAdapter(site *model.Site) SiteAdapter { - if site == nil { - return nil - } - if isYemaPTURL(site.URL) { - return NewYemaPTAdapter() - } - return GetAdapterForType(site.Type) -} diff --git a/internal/service/site_adapter_factory.go b/internal/service/site_adapter_factory.go new file mode 100644 index 0000000..3e80682 --- /dev/null +++ b/internal/service/site_adapter_factory.go @@ -0,0 +1,40 @@ +package service + +import ( + "strings" + + "github.com/ShukeBta/MediaStationGo/internal/model" +) + +// GetAdapterForType 根据站点类型返回对应的适配器实例。 +func GetAdapterForType(siteType string) SiteAdapter { + switch strings.ToLower(siteType) { + case "nexusphp": + return NewNexusPHPAdapter() + case "gazelle": + return NewGazelleAdapter() + case "unit3d": + return NewUNIT3DAdapter() + case "mteam": + return NewMTeamAdapter() + case "yemapt": + return NewYemaPTAdapter() + case "discuz": + return NewDiscuzAdapter() + case "custom_rss": + return NewCustomRSSAdapter() + default: + return NewNexusPHPAdapter() + } +} + +// NewSiteAdapter 根据站点模型创建对应的适配器。 +func NewSiteAdapter(site *model.Site) SiteAdapter { + if site == nil { + return nil + } + if isYemaPTURL(site.URL) { + return NewYemaPTAdapter() + } + return GetAdapterForType(site.Type) +} diff --git a/internal/service/site_adapter_parse.go b/internal/service/site_adapter_parse.go new file mode 100644 index 0000000..e941076 --- /dev/null +++ b/internal/service/site_adapter_parse.go @@ -0,0 +1,51 @@ +package service + +import ( + "regexp" + "strconv" + "strings" +) + +func mteamCodeOK(code any) bool { + codeStr := mteamCodeString(code) + return codeStr == "0" || codeStr == "200" +} + +func mteamCodeString(code any) string { + switch v := code.(type) { + case string: + return strings.TrimSpace(v) + case float64: + return strconv.Itoa(int(v)) + case int: + return strconv.Itoa(v) + default: + return "" + } +} + +// parseSizeString 将带单位的字符串转换为字节数。 +func parseSizeString(value string, unit string) int64 { + v, err := strconv.ParseFloat(value, 64) + if err != nil { + return 0 + } + switch strings.ToLower(unit) { + case "kb": + return int64(v * 1024) + case "mb": + return int64(v * 1024 * 1024) + case "gb": + return int64(v * 1024 * 1024 * 1024) + case "tb": + return int64(v * 1024 * 1024 * 1024 * 1024) + default: + return int64(v) + } +} + +// stripHTML 移除 HTML 标签。 +func stripHTML(s string) string { + re := regexp.MustCompile(`<[^>]*>`) + return re.ReplaceAllString(s, "") +}