mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-13 14:10:00 +08:00
feat: add version check func. add universal response func.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
from .response import u_response
|
||||
|
||||
from module.manager import TorrentManager
|
||||
from module.models import Bangumi, BangumiUpdate
|
||||
from module.security.api import get_current_user, UNAUTHORIZED
|
||||
@@ -13,7 +15,8 @@ async def get_all_data(current_user=Depends(get_current_user)):
|
||||
if not current_user:
|
||||
raise UNAUTHORIZED
|
||||
with TorrentManager() as manager:
|
||||
return manager.bangumi.search_all()
|
||||
resp = manager.bangumi.search_all()
|
||||
return u_response(resp)
|
||||
|
||||
|
||||
@router.get("/get/{bangumi_id}", response_model=Bangumi)
|
||||
@@ -21,7 +24,8 @@ async def get_data(bangumi_id: str, current_user=Depends(get_current_user)):
|
||||
if not current_user:
|
||||
raise UNAUTHORIZED
|
||||
with TorrentManager() as manager:
|
||||
return manager.search_one(bangumi_id)
|
||||
resp = manager.search_one(bangumi_id)
|
||||
return u_response(resp)
|
||||
|
||||
|
||||
@router.patch("/update/{bangumi_id}")
|
||||
@@ -31,7 +35,8 @@ async def update_rule(
|
||||
if not current_user:
|
||||
raise UNAUTHORIZED
|
||||
with TorrentManager() as manager:
|
||||
return manager.update_rule(bangumi_id, data)
|
||||
resp = manager.update_rule(bangumi_id, data)
|
||||
return u_response(resp)
|
||||
|
||||
|
||||
@router.delete("/delete/{bangumi_id}")
|
||||
@@ -41,7 +46,8 @@ async def delete_rule(
|
||||
if not current_user:
|
||||
raise UNAUTHORIZED
|
||||
with TorrentManager() as manager:
|
||||
return manager.delete_rule(bangumi_id, file)
|
||||
resp = manager.delete_rule(bangumi_id, file)
|
||||
return u_response(resp)
|
||||
|
||||
|
||||
@router.delete("/disable/{bangumi_id}")
|
||||
|
||||
@@ -3,7 +3,7 @@ from fastapi.responses import JSONResponse
|
||||
from module.models.response import ResponseModel
|
||||
|
||||
|
||||
def universal_response(response_model: ResponseModel):
|
||||
def u_response(response_model: ResponseModel):
|
||||
return JSONResponse(
|
||||
status_code=response_model.status_code,
|
||||
content={
|
||||
|
||||
@@ -18,9 +18,9 @@ class BangumiDatabase:
|
||||
self.session.commit()
|
||||
logger.debug(f"[Database] Insert {data.official_title} into database.")
|
||||
|
||||
def add_all(self, data: list[Bangumi]):
|
||||
self.session.add_all(data)
|
||||
logger.debug(f"[Database] Insert {len(data)} bangumi into database.")
|
||||
def add_all(self, datas: list[Bangumi]):
|
||||
self.session.add_all(datas)
|
||||
logger.debug(f"[Database] Insert {len(datas)} bangumi into database.")
|
||||
|
||||
def update(self, data: Bangumi) -> bool:
|
||||
db_data = self.session.get(Bangumi, data.id)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
|
||||
from sqlmodel import Session, select, delete
|
||||
from sqlmodel import Session, select, delete, and_
|
||||
|
||||
from module.models import RSSItem, RSSUpdate
|
||||
|
||||
@@ -49,7 +49,9 @@ class RSSDatabase:
|
||||
return self.session.exec(select(RSSItem).where(RSSItem.enabled)).all()
|
||||
|
||||
def search_combine(self) -> list[RSSItem]:
|
||||
return self.session.exec(select(RSSItem).where(RSSItem.combine)).all()
|
||||
return self.session.exec(
|
||||
select(RSSItem).where(and_(RSSItem.combine, RSSItem.enabled))
|
||||
).all()
|
||||
|
||||
def delete(self, _id: int):
|
||||
condition = delete(RSSItem).where(RSSItem.id == _id)
|
||||
|
||||
@@ -4,7 +4,7 @@ from fastapi.responses import JSONResponse
|
||||
|
||||
from module.database import Database
|
||||
from module.downloader import DownloadClient
|
||||
from module.models import Bangumi, BangumiUpdate
|
||||
from module.models import Bangumi, BangumiUpdate, ResponseModel
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -23,9 +23,19 @@ class TorrentManager(Database):
|
||||
if hash_list:
|
||||
client.delete_torrent(hash_list)
|
||||
logger.info(f"Delete rule and torrents for {data.official_title}")
|
||||
return f"Delete {data.official_title} torrents."
|
||||
return ResponseModel(
|
||||
status_code=200,
|
||||
status=True,
|
||||
msg_en=f"Delete rule and torrents for {data.official_title}",
|
||||
msg_zh=f"删除 {data.official_title} 规则和种子",
|
||||
)
|
||||
else:
|
||||
return f"Can't find {data.official_title} torrents."
|
||||
return ResponseModel(
|
||||
status_code=406,
|
||||
status=False,
|
||||
msg_en=f"Can't find torrents for {data.official_title}",
|
||||
msg_zh=f"无法找到 {data.official_title} 的种子",
|
||||
)
|
||||
|
||||
def delete_rule(self, _id: int | str, file: bool = False):
|
||||
data = self.bangumi.search_id(int(_id))
|
||||
@@ -37,20 +47,20 @@ class TorrentManager(Database):
|
||||
self.bangumi.delete_one(int(_id))
|
||||
if file:
|
||||
torrent_message = self.delete_torrents(data, client)
|
||||
return JSONResponse(
|
||||
status_code=200,
|
||||
content={
|
||||
"msg": f"Delete {data.official_title} rule. {torrent_message}"
|
||||
},
|
||||
)
|
||||
return torrent_message
|
||||
logger.info(f"[Manager] Delete rule for {data.official_title}")
|
||||
return JSONResponse(
|
||||
return ResponseModel(
|
||||
status_code=200,
|
||||
content={"msg": f"Delete rule for {data.official_title}"},
|
||||
status=True,
|
||||
msg_en=f"Delete rule for {data.official_title}",
|
||||
msg_zh=f"删除 {data.official_title} 规则",
|
||||
)
|
||||
else:
|
||||
return JSONResponse(
|
||||
status_code=406, content={"msg": f"Can't find id {_id}"}
|
||||
return ResponseModel(
|
||||
status_code=406,
|
||||
status=False,
|
||||
msg_en=f"Can't find id {_id}",
|
||||
msg_zh=f"无法找到 id {_id}",
|
||||
)
|
||||
|
||||
def disable_rule(self, _id: str | int, file: bool = False):
|
||||
@@ -69,15 +79,18 @@ class TorrentManager(Database):
|
||||
},
|
||||
)
|
||||
logger.info(f"[Manager] Disable rule for {data.official_title}")
|
||||
return JSONResponse(
|
||||
return ResponseModel(
|
||||
status_code=200,
|
||||
content={
|
||||
"msg": f"Disable {data.official_title} rule.",
|
||||
},
|
||||
status=True,
|
||||
msg_en=f"Disable rule for {data.official_title}",
|
||||
msg_zh=f"禁用 {data.official_title} 规则",
|
||||
)
|
||||
else:
|
||||
return JSONResponse(
|
||||
status_code=406, content={"msg": f"Can't find id {_id}"}
|
||||
return ResponseModel(
|
||||
status_code=406,
|
||||
status=False,
|
||||
msg_en=f"Can't find id {_id}",
|
||||
msg_zh=f"无法找到 id {_id}",
|
||||
)
|
||||
|
||||
def enable_rule(self, _id: str | int):
|
||||
@@ -86,22 +99,30 @@ class TorrentManager(Database):
|
||||
data.deleted = False
|
||||
self.bangumi.update(data)
|
||||
logger.info(f"[Manager] Enable rule for {data.official_title}")
|
||||
return JSONResponse(
|
||||
return ResponseModel(
|
||||
status_code=200,
|
||||
content={
|
||||
"msg": f"Enable {data.official_title} rule.",
|
||||
},
|
||||
status=True,
|
||||
msg_en=f"Enable rule for {data.official_title}",
|
||||
msg_zh=f"启用 {data.official_title} 规则",
|
||||
)
|
||||
else:
|
||||
return JSONResponse(
|
||||
status_code=406, content={"msg": f"Can't find bangumi id {_id}"}
|
||||
return ResponseModel(
|
||||
status_code=406,
|
||||
status=False,
|
||||
msg_en=f"Can't find id {_id}",
|
||||
msg_zh=f"无法找到 id {_id}",
|
||||
)
|
||||
|
||||
def update_rule(self, bangumi_id, data: BangumiUpdate):
|
||||
old_data = self.bangumi.search_id(bangumi_id)
|
||||
if not old_data:
|
||||
logger.error(f"[Manager] Can't find data with {bangumi_id}")
|
||||
return {"status": False, "msg": f"Can't find data with {bangumi_id}"}
|
||||
return ResponseModel(
|
||||
status_code=406,
|
||||
status=False,
|
||||
msg_en=f"Can't find data with {bangumi_id}",
|
||||
msg_zh=f"无法找到 id {bangumi_id} 的数据",
|
||||
)
|
||||
else:
|
||||
# Move torrent
|
||||
match_list = self.__match_torrents_list(old_data.save_path)
|
||||
@@ -110,11 +131,11 @@ class TorrentManager(Database):
|
||||
if match_list:
|
||||
client.move_torrent(match_list, path)
|
||||
self.bangumi.update(data)
|
||||
return JSONResponse(
|
||||
return ResponseModel(
|
||||
status_code=200,
|
||||
content={
|
||||
"msg": f"Set new path for {data.official_title}",
|
||||
},
|
||||
status=True,
|
||||
msg_en=f"Update rule for {data.official_title}",
|
||||
msg_zh=f"更新 {data.official_title} 规则",
|
||||
)
|
||||
|
||||
def search_all_bangumi(self):
|
||||
|
||||
@@ -2,4 +2,5 @@ from .bangumi import Bangumi, Episode, BangumiUpdate, Notification
|
||||
from .config import Config
|
||||
from .rss import RSSItem, RSSUpdate
|
||||
from .torrent import EpisodeFile, SubtitleFile, Torrent, TorrentUpdate
|
||||
from .user import UserLogin, User
|
||||
from .user import UserLogin, User, UserUpdate
|
||||
from .response import ResponseModel
|
||||
|
||||
@@ -10,7 +10,6 @@ class Torrent(SQLModel, table=True):
|
||||
name: str = Field("", alias="name")
|
||||
url: str = Field("https://example.com/torrent", alias="url")
|
||||
homepage: Optional[str] = Field(None, alias="homepage")
|
||||
save_path: Optional[str] = Field(None, alias="saved_path")
|
||||
downloaded: bool = Field(False, alias="downloaded")
|
||||
|
||||
|
||||
|
||||
11
backend/src/module/update/version_check.py
Normal file
11
backend/src/module/update/version_check.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from module.conf import VERSION
|
||||
|
||||
|
||||
def version_check() -> bool:
|
||||
with open("config/version.txt", "rw") as f:
|
||||
version = f.read()
|
||||
if VERSION > version:
|
||||
f.write(VERSION)
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
Reference in New Issue
Block a user