diff --git a/backend/src/module/api/bangumi.py b/backend/src/module/api/bangumi.py index f1397871..0c911816 100644 --- a/backend/src/module/api/bangumi.py +++ b/backend/src/module/api/bangumi.py @@ -48,6 +48,17 @@ async def delete_rule( return u_response(resp) +@router.delete("/delete/many/{bangumi_id}") +async def delete_many_rule( + bangumi_id: list, file: bool = False, current_user=Depends(get_current_user) +): + if not current_user: + raise UNAUTHORIZED + with TorrentManager() as manager: + for i in bangumi_id: + manager.delete_rule(i, file) + + @router.delete("/disable/{bangumi_id}") async def disable_rule( bangumi_id: str, file: bool = False, current_user=Depends(get_current_user) @@ -58,6 +69,17 @@ async def disable_rule( return manager.disable_rule(bangumi_id, file) +@router.delete("/disable/many/{bangumi_id}") +async def disable_many_rule( + bangumi_id: list, file: bool = False, current_user=Depends(get_current_user) +): + if not current_user: + raise UNAUTHORIZED + with TorrentManager() as manager: + for i in bangumi_id: + manager.disable_rule(i, file) + + @router.get("/enable/{bangumi_id}") async def enable_rule(bangumi_id: str, current_user=Depends(get_current_user)): if not current_user: diff --git a/backend/src/module/api/rss.py b/backend/src/module/api/rss.py index b584fab3..85a9a442 100644 --- a/backend/src/module/api/rss.py +++ b/backend/src/module/api/rss.py @@ -1,6 +1,10 @@ +from typing import Optional + from fastapi import APIRouter, Depends, HTTPException, status from fastapi.responses import JSONResponse +from .response import u_response + from module.models import RSSItem, RSSUpdate from module.rss import RSSEngine from module.security.api import get_current_user, UNAUTHORIZED @@ -18,6 +22,17 @@ async def get_rss(current_user=Depends(get_current_user)): return engine.rss.search_all() +@router.post("/add") +async def add_rss( + url: str, name: Optional[str], combine: bool, current_user=Depends(get_current_user) +): + if not current_user: + raise UNAUTHORIZED + with RSSEngine() as engine: + result = engine.add_rss(url, name, combine) + return u_response(result) + + @router.delete("/delete/{rss_id}") async def delete_rss(rss_id: int, current_user=Depends(get_current_user)): if not current_user: diff --git a/backend/src/module/database/rss.py b/backend/src/module/database/rss.py index ac75a282..55de2e5c 100644 --- a/backend/src/module/database/rss.py +++ b/backend/src/module/database/rss.py @@ -17,12 +17,13 @@ class RSSDatabase: db_data = self.session.exec(statement).first() if db_data: logger.debug(f"RSS Item {data.url} already exists.") - return + return False else: logger.debug(f"RSS Item {data.url} not exists, adding...") self.session.add(data) self.session.commit() self.session.refresh(data) + return True def add_all(self, data: list[RSSItem]): for item in data: diff --git a/backend/src/module/rss/engine.py b/backend/src/module/rss/engine.py index 8de5bf41..806d79dc 100644 --- a/backend/src/module/rss/engine.py +++ b/backend/src/module/rss/engine.py @@ -3,7 +3,7 @@ import logging from typing import Optional -from module.models import Bangumi, RSSItem, Torrent +from module.models import Bangumi, RSSItem, Torrent, ResponseModel from module.network import RequestContent from module.downloader import DownloadClient @@ -33,7 +33,20 @@ class RSSEngine(Database): with RequestContent() as req: name = req.get_rss_title(rss_link) rss_data = RSSItem(item_path=name, url=rss_link, combine=combine) - self.rss.add(rss_data) + if self.rss.add(rss_data): + return ResponseModel( + status=True, + status_code=200, + msg_en="RSS added successfully.", + msg_zh="RSS 添加成功。", + ) + else: + return ResponseModel( + status=False, + status_code=400, + msg_en="RSS added failed.", + msg_zh="RSS 添加失败。", + ) def pull_rss(self, rss_item: RSSItem) -> list[Torrent]: torrents = self._get_torrents(rss_item)