mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-14 18:41:04 +08:00
110 lines
2.9 KiB
Python
110 lines
2.9 KiB
Python
import logging
|
|
import os
|
|
import signal
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from module.core import Program
|
|
from module.models import APIResponse
|
|
from module.conf import VERSION
|
|
from module.security.api import get_current_user, UNAUTHORIZED
|
|
|
|
logger = logging.getLogger(__name__)
|
|
program = Program()
|
|
router = APIRouter(tags=["program"])
|
|
|
|
|
|
@router.on_event("startup")
|
|
async def startup():
|
|
program.startup()
|
|
|
|
|
|
@router.on_event("shutdown")
|
|
async def shutdown():
|
|
program.stop()
|
|
|
|
|
|
@router.get("/restart", response_model=APIResponse, dependencies=[Depends(get_current_user)])
|
|
async def restart():
|
|
try:
|
|
program.restart()
|
|
return JSONResponse(
|
|
status_code=200,
|
|
content={"msg_en": "Restart program successfully.", "msg_zh": "重启程序成功。"},
|
|
)
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
logger.warning("Failed to restart program")
|
|
raise HTTPException(
|
|
status_code=500,
|
|
detail={
|
|
"msg_en": "Failed to restart program.",
|
|
"msg_zh": "重启程序失败。",
|
|
}
|
|
)
|
|
|
|
|
|
@router.get("/start", response_model=APIResponse)
|
|
async def start(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
try:
|
|
return program.start()
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
logger.warning("Failed to start program")
|
|
raise HTTPException(
|
|
status_code=500,
|
|
detail={
|
|
"msg_en": "Failed to start program.",
|
|
"msg_zh": "启动程序失败。",
|
|
}
|
|
)
|
|
|
|
|
|
@router.get("/stop")
|
|
async def stop(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
return program.stop()
|
|
|
|
|
|
@router.get("/status")
|
|
async def program_status(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
if not program.is_running:
|
|
return {
|
|
"status": False,
|
|
"version": VERSION,
|
|
"first_run": program.first_run,
|
|
}
|
|
else:
|
|
return {
|
|
"status": True,
|
|
"version": VERSION,
|
|
"first_run": program.first_run,
|
|
}
|
|
|
|
|
|
@router.get("/shutdown")
|
|
async def shutdown_program(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
program.stop()
|
|
logger.info("Shutting down program...")
|
|
os.kill(os.getpid(), signal.SIGINT)
|
|
return JSONResponse(
|
|
status_code=200,
|
|
content={"msg_en": "Shutdown program successfully.", "msg_zh": "关闭程序成功。"},
|
|
)
|
|
|
|
|
|
# Check status
|
|
@router.get("/check/downloader", tags=["check"], response_model=bool)
|
|
async def check_downloader_status(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
return program.check_downloader()
|