mirror of
https://github.com/fish2018/pansou.git
synced 2025-11-25 03:14:59 +08:00
update
This commit is contained in:
@@ -112,6 +112,7 @@ cd pansou
|
||||
| ASYNC_MAX_BACKGROUND_WORKERS | 最大后台工作者数量 | CPU核心数×5 |
|
||||
| ASYNC_MAX_BACKGROUND_TASKS | 最大后台任务数量 | 工作者数×5 |
|
||||
| ASYNC_CACHE_TTL_HOURS | 异步缓存有效期(小时) | `1` |
|
||||
| ASYNC_PLUGIN_ENABLED | 异步插件是否启用 | `true` |
|
||||
| HTTP_READ_TIMEOUT | HTTP读取超时(秒) | 自动计算 |
|
||||
| HTTP_WRITE_TIMEOUT | HTTP写入超时(秒) | 自动计算 |
|
||||
| HTTP_IDLE_TIMEOUT | HTTP空闲超时(秒) | `120` |
|
||||
|
||||
29
main.go
29
main.go
@@ -298,20 +298,23 @@ func printServiceInfo(port string, pluginManager *plugin.PluginManager) {
|
||||
fmt.Println("异步插件已禁用")
|
||||
}
|
||||
|
||||
// 输出插件信息(按优先级排序)
|
||||
fmt.Println("已加载插件:")
|
||||
plugins := pluginManager.GetPlugins()
|
||||
// 只有当插件功能启用时才输出插件信息
|
||||
if config.AppConfig.AsyncPluginEnabled {
|
||||
// 输出插件信息(按优先级排序)
|
||||
fmt.Println("已加载插件:")
|
||||
plugins := pluginManager.GetPlugins()
|
||||
|
||||
// 按优先级排序(优先级数字越小越靠前)
|
||||
sort.Slice(plugins, func(i, j int) bool {
|
||||
// 优先级相同时按名称排序
|
||||
if plugins[i].Priority() == plugins[j].Priority() {
|
||||
return plugins[i].Name() < plugins[j].Name()
|
||||
// 按优先级排序(优先级数字越小越靠前)
|
||||
sort.Slice(plugins, func(i, j int) bool {
|
||||
// 优先级相同时按名称排序
|
||||
if plugins[i].Priority() == plugins[j].Priority() {
|
||||
return plugins[i].Name() < plugins[j].Name()
|
||||
}
|
||||
return plugins[i].Priority() < plugins[j].Priority()
|
||||
})
|
||||
|
||||
for _, p := range plugins {
|
||||
fmt.Printf(" - %s (优先级: %d)\n", p.Name(), p.Priority())
|
||||
}
|
||||
return plugins[i].Priority() < plugins[j].Priority()
|
||||
})
|
||||
|
||||
for _, p := range plugins {
|
||||
fmt.Printf(" - %s (优先级: %d)\n", p.Name(), p.Priority())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +147,6 @@ func (p *ClmaoPlugin) searchImpl(client *http.Client, keyword string, ext map[st
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("[%s] 找到搜索结果数量: %d\n", p.Name(), len(allResults))
|
||||
|
||||
// 3. 关键词过滤
|
||||
searchKeyword := keyword
|
||||
|
||||
@@ -248,7 +248,7 @@ func NewPanSearchPlugin() *PanSearchAsyncPlugin {
|
||||
go func() {
|
||||
_, err := p.getBuildId()
|
||||
if err != nil {
|
||||
fmt.Printf("预热获取 buildId 失败: %v\n", err)
|
||||
// fmt.Printf("预热获取 buildId 失败: %v\n", err)
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -278,7 +278,7 @@ func (p *PanSearchAsyncPlugin) updateBuildId() {
|
||||
// 发送请求获取页面
|
||||
req, err := http.NewRequestWithContext(ctx, "GET", WebsiteURL, nil)
|
||||
if err != nil {
|
||||
fmt.Printf("创建请求失败: %v\n", err)
|
||||
// fmt.Printf("创建请求失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@ func (p *PanSearchAsyncPlugin) updateBuildId() {
|
||||
|
||||
resp, err := p.GetClient().Do(req)
|
||||
if err != nil {
|
||||
fmt.Printf("请求失败: %v\n", err)
|
||||
// fmt.Printf("请求失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
@@ -306,7 +306,7 @@ func (p *PanSearchAsyncPlugin) updateBuildId() {
|
||||
var bodyBuilder strings.Builder
|
||||
_, err = io.Copy(&bodyBuilder, resp.Body)
|
||||
if err != nil {
|
||||
fmt.Printf("读取响应失败: %v\n", err)
|
||||
// fmt.Printf("读取响应失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
body := bodyBuilder.String()
|
||||
@@ -392,7 +392,7 @@ func (p *PanSearchAsyncPlugin) getBuildId() (string, error) {
|
||||
if err != nil {
|
||||
// 如果创建请求失败但有旧的缓存,使用旧的缓存(优雅降级)
|
||||
if buildIdCache != "" {
|
||||
fmt.Printf("创建请求失败,使用旧的buildId: %v\n", err)
|
||||
// fmt.Printf("创建请求失败,使用旧的buildId: %v\n", err)
|
||||
return buildIdCache, nil
|
||||
}
|
||||
return "", fmt.Errorf("创建请求失败: %w", err)
|
||||
@@ -430,7 +430,7 @@ func (p *PanSearchAsyncPlugin) getBuildId() (string, error) {
|
||||
// 如果所有重试都失败,但有旧的缓存,使用旧的缓存(优雅降级)
|
||||
if respErr != nil || resp == nil {
|
||||
if buildIdCache != "" {
|
||||
fmt.Printf("请求失败,使用旧的buildId: %v\n", respErr)
|
||||
// fmt.Printf("请求失败,使用旧的buildId: %v\n", respErr)
|
||||
return buildIdCache, nil
|
||||
}
|
||||
return "", fmt.Errorf("请求失败: %w", respErr)
|
||||
@@ -452,7 +452,7 @@ func (p *PanSearchAsyncPlugin) getBuildId() (string, error) {
|
||||
if err != nil {
|
||||
// 如果读取响应失败,但有旧的缓存,使用旧的缓存(优雅降级)
|
||||
if buildIdCache != "" {
|
||||
fmt.Printf("读取响应失败,使用旧的buildId: %v\n", err)
|
||||
// fmt.Printf("读取响应失败,使用旧的buildId: %v\n", err)
|
||||
return buildIdCache, nil
|
||||
}
|
||||
return "", fmt.Errorf("读取响应失败: %w", err)
|
||||
@@ -465,7 +465,7 @@ func (p *PanSearchAsyncPlugin) getBuildId() (string, error) {
|
||||
// 如果提取失败,但有旧的缓存,使用旧的缓存(优雅降级)
|
||||
if buildId == "" {
|
||||
if buildIdCache != "" {
|
||||
fmt.Println("未找到buildId,使用旧的buildId")
|
||||
// fmt.Println("未找到buildId,使用旧的buildId")
|
||||
return buildIdCache, nil
|
||||
}
|
||||
return "", fmt.Errorf("未找到buildId")
|
||||
|
||||
@@ -212,7 +212,6 @@ func (p *PanyqPlugin) doSearch(client *http.Client, keyword string, ext map[stri
|
||||
credentials, err := p.getCredentials(keyword, actionIDs[ActionIDKeys[0]], client)
|
||||
if err != nil {
|
||||
// 如果获取凭证失败,尝试刷新Action ID并重试
|
||||
fmt.Println("panyq: failed to get credentials, refreshing Action IDs...")
|
||||
actionIDs, err = p.discoverActionIDs()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("刷新Action ID失败: %w", err)
|
||||
|
||||
@@ -151,7 +151,6 @@ func (p *WujiPlugin) searchImpl(client *http.Client, keyword string, ext map[str
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("[%s] 找到搜索结果数量: %d\n", p.Name(), len(allResults))
|
||||
|
||||
// 3. 并发获取每个结果的详情页磁力链接
|
||||
finalResults := p.enrichWithMagnetLinks(allResults, client)
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"time"
|
||||
|
||||
"pansou/model"
|
||||
"pansou/plugin"
|
||||
"pansou/util/cache"
|
||||
)
|
||||
|
||||
@@ -82,18 +83,13 @@ func (c *CacheWriteIntegration) HandleCacheWrite(key string, results []model.Sea
|
||||
|
||||
// getPluginPriority 获取插件优先级
|
||||
func (c *CacheWriteIntegration) getPluginPriority(pluginName string) int {
|
||||
// 这里应该从插件管理器获取真实的优先级
|
||||
// 暂时使用简化的映射
|
||||
switch pluginName {
|
||||
case "hdr4k", "susu", "panta", "xuexizhinan", "zhizhen", "labi", "wanou":
|
||||
return 1 // 等级1插件
|
||||
case "muou", "huban", "ouge", "duoduo", "shandian", "panyq":
|
||||
return 2 // 等级2插件
|
||||
case "fox4k", "qupansou", "pansearch", "hunhepan", "pan666", "jikepan":
|
||||
return 3 // 等级3插件
|
||||
default:
|
||||
return 4 // 默认等级4
|
||||
// 从插件管理器动态获取真实的优先级
|
||||
if pluginInstance, exists := plugin.GetPluginByName(pluginName); exists {
|
||||
return pluginInstance.Priority()
|
||||
}
|
||||
|
||||
// 如果插件不存在,返回默认等级4(最低优先级)
|
||||
return 4
|
||||
}
|
||||
|
||||
// estimateDataSize 估算数据大小
|
||||
|
||||
@@ -436,8 +436,8 @@ func (s *SearchService) Search(keyword string, channels []string, concurrency in
|
||||
tgResults, tgErr = s.searchTG(keyword, channels, forceRefresh)
|
||||
}()
|
||||
}
|
||||
// 如果需要搜索插件
|
||||
if sourceType == "all" || sourceType == "plugin" {
|
||||
// 如果需要搜索插件(且插件功能已启用)
|
||||
if (sourceType == "all" || sourceType == "plugin") && config.AppConfig.AsyncPluginEnabled {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
@@ -1373,12 +1373,9 @@ func getPluginLevelBySource(source string) int {
|
||||
|
||||
// getPluginPriorityByName 根据插件名获取优先级
|
||||
func getPluginPriorityByName(pluginName string) int {
|
||||
// 从已注册插件中获取优先级
|
||||
plugins := plugin.GetRegisteredPlugins()
|
||||
for _, p := range plugins {
|
||||
if p.Name() == pluginName {
|
||||
return p.Priority()
|
||||
}
|
||||
// 从插件管理器动态获取真实的优先级 (O(1)哈希查找)
|
||||
if pluginInstance, exists := plugin.GetPluginByName(pluginName); exists {
|
||||
return pluginInstance.Priority()
|
||||
}
|
||||
return 3 // 默认等级
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user