From 3c7cd2186f599c81d0887eb06e29840278e9e64b Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 8 Apr 2026 07:58:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AE=A2=E9=98=85=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E5=B7=A5=E5=85=B7=E6=9C=89=E5=90=8D=E7=A7=B0=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=97=B6=E4=B8=8D=E5=88=86=E9=A1=B5=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=89=80=E6=9C=89=E5=8C=B9=E9=85=8D=E7=BB=93?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/impl/query_subscribe_history.py | 77 +++++++++++-------- 1 file changed, 46 insertions(+), 31 deletions(-) diff --git a/app/agent/tools/impl/query_subscribe_history.py b/app/agent/tools/impl/query_subscribe_history.py index 7acdabec..a01c8806 100644 --- a/app/agent/tools/impl/query_subscribe_history.py +++ b/app/agent/tools/impl/query_subscribe_history.py @@ -28,7 +28,8 @@ class QuerySubscribeHistoryInput(BaseModel): None, description="Filter by media name (partial match, optional)" ) page: Optional[int] = Field( - 1, description="Page number for pagination (default: 1, 20 items per page)" + 1, + description="Page number for pagination (default: 1, 20 items per page). Ignored when name filter is provided.", ) @@ -49,7 +50,8 @@ class QuerySubscribeHistoryTool(MoviePilotTool): parts.append(f"类型: {media_type}") if name: parts.append(f"名称: {name}") - parts.append(f"第{page}页") + else: + parts.append(f"第{page}页") return " | ".join(parts) @@ -72,8 +74,8 @@ class QuerySubscribeHistoryTool(MoviePilotTool): # 获取数据库会话 async with AsyncSessionFactory() as db: if name: - # 有名称过滤时,需要获取较多记录在内存中过滤 - fetch_count = page * PAGE_SIZE * 5 # 获取足够多的数据用于过滤后分页 + # 有名称过滤时,获取足够多的记录在内存中过滤,不分页 + fetch_count = 500 if media_type == "all": movie_history = await SubscribeHistory.async_list_by_type( db, mtype="movie", page=1, count=fetch_count @@ -97,6 +99,16 @@ class QuerySubscribeHistoryTool(MoviePilotTool): for record in all_history if record.name and name_lower in record.name.lower() ] + + if not filtered_history: + return "未找到相关订阅历史记录" + + # 名称过滤时直接返回所有匹配结果,不分页 + simplified_records = self._simplify_records(filtered_history) + result_json = json.dumps( + simplified_records, ensure_ascii=False, indent=2 + ) + return result_json else: # 无名称过滤时,直接利用数据库分页 if media_type == "all": @@ -128,33 +140,7 @@ class QuerySubscribeHistoryTool(MoviePilotTool): if not page_records: return f"第 {page} 页没有数据。" - # 转换为字典格式,只保留关键信息 - simplified_records = [] - for record in page_records: - simplified = { - "id": record.id, - "name": record.name, - "year": record.year, - "type": media_type_to_agent(record.type), - "season": record.season, - "tmdbid": record.tmdbid, - "doubanid": record.doubanid, - "bangumiid": record.bangumiid, - "poster": record.poster, - "vote": record.vote, - "total_episode": record.total_episode, - "date": record.date, - "username": record.username, - } - # 添加过滤规则信息(如果有) - if record.filter: - simplified["filter"] = record.filter - if record.quality: - simplified["quality"] = record.quality - if record.resolution: - simplified["resolution"] = record.resolution - simplified_records.append(simplified) - + simplified_records = self._simplify_records(page_records) result_json = json.dumps( simplified_records, ensure_ascii=False, indent=2 ) @@ -170,3 +156,32 @@ class QuerySubscribeHistoryTool(MoviePilotTool): except Exception as e: logger.error(f"查询订阅历史失败: {e}", exc_info=True) return f"查询订阅历史时发生错误: {str(e)}" + + @staticmethod + def _simplify_records(records) -> list: + """转换为字典格式,只保留关键信息""" + simplified_records = [] + for record in records: + simplified = { + "id": record.id, + "name": record.name, + "year": record.year, + "type": media_type_to_agent(record.type), + "season": record.season, + "tmdbid": record.tmdbid, + "doubanid": record.doubanid, + "bangumiid": record.bangumiid, + "poster": record.poster, + "vote": record.vote, + "total_episode": record.total_episode, + "date": record.date, + "username": record.username, + } + if record.filter: + simplified["filter"] = record.filter + if record.quality: + simplified["quality"] = record.quality + if record.resolution: + simplified["resolution"] = record.resolution + simplified_records.append(simplified) + return simplified_records