Skip to content

Commit b80b65b

Browse files
committed
fix bugs
1 parent aab965c commit b80b65b

50 files changed

Lines changed: 2271 additions & 747 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

backend/src/main.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,4 @@ def index():
8989
port=settings.program.webui_port,
9090
log_config=uvicorn_logging_config,
9191
)
92+

backend/src/module/api/bangumi.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from sqlalchemy.util.concurrency import asyncio
44

55
from module.database import Database, engine
6-
from module.manager import TorrentManager
6+
from module.manager import BangumiManager
77
from module.models import APIResponse, Bangumi, BangumiUpdate, ResponseModel
88
from module.security.api import get_current_user
99

@@ -33,7 +33,7 @@ async def get_all_data():
3333
dependencies=[Depends(get_current_user)],
3434
)
3535
async def get_data(bangumi_id: str):
36-
resp = TorrentManager().search_one(bangumi_id)
36+
resp = BangumiManager().search_one(bangumi_id)
3737
if resp is None:
3838
return ResponseModel(
3939
status_code=406,
@@ -53,7 +53,7 @@ async def update_rule(
5353
bangumi_id: int,
5454
data: BangumiUpdate,
5555
):
56-
resp = await TorrentManager().update_rule(bangumi_id, data)
56+
resp = await BangumiManager().update_rule(bangumi_id, data)
5757
if resp:
5858
resp = ResponseModel(
5959
status_code=200,
@@ -78,7 +78,7 @@ async def update_rule(
7878
dependencies=[Depends(get_current_user)],
7979
)
8080
async def delete_rule(bangumi_id: str, file: bool = False):
81-
data = await TorrentManager().delete_rule(bangumi_id, file)
81+
data = await BangumiManager().delete_rule(bangumi_id, file)
8282
if data:
8383
resp = ResponseModel(
8484
status_code=200,
@@ -104,7 +104,7 @@ async def delete_rule(bangumi_id: str, file: bool = False):
104104
async def delete_many_rule(bangumi_id: list, file: bool = False):
105105
tasks = []
106106
for i in bangumi_id:
107-
tasks.append(TorrentManager().delete_rule(i, file))
107+
tasks.append(BangumiManager().delete_rule(i, file))
108108

109109
resp = await asyncio.gather(*tasks)
110110
resp = resp[0]
@@ -117,7 +117,7 @@ async def delete_many_rule(bangumi_id: list, file: bool = False):
117117
dependencies=[Depends(get_current_user)],
118118
)
119119
async def disable_rule(bangumi_id: str, file: bool = False):
120-
resp = await TorrentManager().disable_rule(bangumi_id, file)
120+
resp = await BangumiManager().disable_rule(bangumi_id, file)
121121
if resp:
122122
resp = ResponseModel(
123123
status_code=200,
@@ -140,10 +140,10 @@ async def disable_rule(bangumi_id: str, file: bool = False):
140140
response_model=APIResponse,
141141
dependencies=[Depends(get_current_user)],
142142
)
143-
async def disable_many_rule(bangumi_id: list, file: bool = False):
143+
async def disable_many_rule(bangumi_id: list[int], file: bool = False):
144144
tasks = []
145145
for i in bangumi_id:
146-
tasks.append(TorrentManager().disable_rule(i, file))
146+
tasks.append(BangumiManager().disable_rule(i, file))
147147
resp = await asyncio.gather(*tasks)
148148
resp = resp[-1]
149149
return u_response(resp)
@@ -155,7 +155,7 @@ async def disable_many_rule(bangumi_id: list, file: bool = False):
155155
dependencies=[Depends(get_current_user)],
156156
)
157157
async def enable_rule(bangumi_id: str):
158-
resp = await TorrentManager().enable_rule(bangumi_id)
158+
resp = await BangumiManager().enable_rule(bangumi_id)
159159
if resp:
160160
resp = ResponseModel(
161161
status_code=200,
@@ -179,7 +179,7 @@ async def enable_rule(bangumi_id: str):
179179
dependencies=[Depends(get_current_user)],
180180
)
181181
async def refresh_poster():
182-
resp = await TorrentManager().refresh_poster()
182+
resp = await BangumiManager().refresh_poster()
183183
resp = ResponseModel(
184184
status_code=200,
185185
status=True,
@@ -195,7 +195,7 @@ async def refresh_poster():
195195
dependencies=[Depends(get_current_user)],
196196
)
197197
async def refresh_single_poster(bangumi_id: int):
198-
resp = await TorrentManager().refind_poster(bangumi_id)
198+
resp = await BangumiManager().refind_poster(bangumi_id)
199199
if resp:
200200
resp = ResponseModel(
201201
status_code=200,

backend/src/module/api/program.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
@asynccontextmanager
2121
async def lifespan(app: FastAPI):
2222
# 启动事件
23+
# 首先检查数据库版本并升级
24+
logger.info("检查数据库版本兼容性...")
25+
from module.database import check_and_upgrade_database
26+
27+
if not check_and_upgrade_database():
28+
logger.error("数据库升级失败,程序无法启动")
29+
raise RuntimeError("数据库升级失败")
30+
2331
await program.startup()
2432
yield
2533
# 关闭事件

backend/src/module/api/rss.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ async def update_rss(
180180
dependencies=[Depends(get_current_user)],
181181
)
182182
async def refresh_all():
183-
await engine.refresh_all_rss()
183+
await engine.refresh_all()
184184
return JSONResponse(
185185
status_code=200,
186186
content={
@@ -196,6 +196,7 @@ async def refresh_all():
196196
dependencies=[Depends(get_current_user)],
197197
)
198198
async def refresh_rss(rss_id: int):
199+
# TODO: 还没做
199200
await engine.refresh_rss(rss_id=rss_id)
200201
return JSONResponse(
201202
status_code=200,
@@ -233,7 +234,7 @@ async def analysis(rss: RSSItem):
233234
)
234235
# 只有非聚合才会用
235236
for torrent in torrents:
236-
data = await analyser.torrent_to_data(torrent, rss)
237+
data = await analyser.torrent_to_bangumi(torrent, rss)
237238
if data:
238239
return data
239240

@@ -245,11 +246,6 @@ async def analysis(rss: RSSItem):
245246
msg_zh="无法解析此链接。",
246247
)
247248
)
248-
# data = await analyser.link_to_data(rss)
249-
# if isinstance(data, Bangumi):
250-
# return data
251-
# else:
252-
# return u_response(data)
253249

254250

255251
@router.post(

backend/src/module/core/aiocore.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def __init__(self):
2121
self.services = []
2222
self._download_monitor = None
2323
self._rename_monitor = None
24+
self._notification_monitor = None
2425
self._running: bool = False
2526

2627
async def initialize(self) -> None:
@@ -73,6 +74,7 @@ async def _register_event_handlers(self) -> None:
7374
try:
7475
from module.downloader.download_monitor import DownloadMonitor
7576
from module.manager.rename_monitor import RenameMonitor
77+
from module.notification.notification_monitor import NotificationMonitor
7678
from module.utils.events import EventType
7779

7880
# 创建并注册 DownloadMonitor
@@ -92,6 +94,15 @@ async def _register_event_handlers(self) -> None:
9294
)
9395
logger.info("[AsyncCore] 已注册 RenameMonitor 事件处理器")
9496

97+
# 创建并注册 NotificationMonitor
98+
self._notification_monitor = NotificationMonitor(event_bus=self.event_bus)
99+
await self._notification_monitor.initialize()
100+
self.event_bus.subscribe(
101+
EventType.NOTIFICATION_REQUEST,
102+
self._notification_monitor.handle_notification_request,
103+
)
104+
logger.info("[AsyncCore] 已注册 NotificationMonitor 事件处理器")
105+
95106
# 为下载服务设置事件总线
96107
for service in self.services:
97108
if service.name == "download" and hasattr(
@@ -154,6 +165,10 @@ async def stop(self) -> None:
154165
except Exception as e:
155166
logger.error(f"[AsyncCore] 重命名监控器关闭失败: {e}")
156167

168+
try:
169+
if hasattr(self, "_notification_monitor") and self._notification_monitor:
170+
await self._notification_monitor.shutdown()
171+
logger.debug("[AsyncCore] 通知监控器已关闭")
157172
except Exception as e:
158173
logger.error(f"[AsyncCore] 通知监控器关闭失败: {e}")
159174

@@ -192,6 +207,7 @@ def get_status(self) -> dict[str, Any]:
192207
status["monitors"] = {
193208
"download_monitor": bool(self._download_monitor),
194209
"rename_monitor": bool(self._rename_monitor),
210+
"notification_monitor": bool(self._notification_monitor),
195211
}
196212

197213
return status

backend/src/module/core/services.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import logging
2-
from module.conf import settings
32
from abc import ABC, abstractmethod
43
from typing import TYPE_CHECKING, Any
4+
55
from typing_extensions import override
66

7+
from module.conf import settings
78
from module.utils.events import ServiceException
89

910
if TYPE_CHECKING:
@@ -15,7 +16,7 @@
1516
class BaseService(ABC):
1617
"""服务基类"""
1718

18-
def __init__(self, name: str = None):
19+
def __init__(self, name: str|None = None):
1920
# 如果没有指定名称,使用类名自动生成
2021
if name is None:
2122
name = self.__class__.__name__.lower().replace("service", "")
@@ -79,7 +80,6 @@ def get_task_config(self) -> dict[str, Any]:
7980
"enabled": True,
8081
}
8182

82-
8383
async def execute(self) -> None:
8484
"""执行RSS刷新任务"""
8585
if not self._engine:
@@ -107,8 +107,7 @@ def __init__(self):
107107
async def _setup(self) -> None:
108108
# 预检查下载模块是否可用
109109
try:
110-
from module.downloader import DownloadController
111-
from module.downloader import Client
110+
from module.downloader import Client, DownloadController
112111

113112
Client.start_login()
114113

@@ -143,10 +142,11 @@ async def execute(self) -> None:
143142
logger.error(f"[DownloadService] 执行失败: {e}")
144143
raise ServiceException("download", f"执行失败: {e}")
145144

146-
def set_event_bus(self,event_bus):
145+
def set_event_bus(self, event_bus):
147146
if not self._download_controller:
148147
raise ServiceException("download", "下载控制器未初始化")
149148
self._download_controller.set_event_bus(event_bus)
149+
150150
async def cleanup(self) -> None:
151151
"""清理下载客户端"""
152152
try:
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from .combine import Database
22
from .engine import engine
3+
from .migration import DatabaseMigration, check_and_upgrade_database
34

4-
__all__ = ["engine", "Database"]
5+
__all__ = ["engine", "Database", "DatabaseMigration", "check_and_upgrade_database"]

0 commit comments

Comments
 (0)