mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-02-11 14:27:04 +08:00
Fix #247
This commit is contained in:
86
src/main.py
86
src/main.py
@@ -16,25 +16,32 @@ from module.conf.uvicorn_logging import logging_config
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
rss_link = settings.rss_link()
|
||||
stop_event = threading.Event()
|
||||
|
||||
rss_link = settings.rss_link()
|
||||
|
||||
def show_info():
|
||||
with open("icon", "r") as f:
|
||||
for line in f.readlines():
|
||||
logger.info(line.strip("\n"))
|
||||
logger.info(
|
||||
f"Version {VERSION} Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan"
|
||||
)
|
||||
logger.info("GitHub: https://github.com/EstrellaXD/Auto_Bangumi/")
|
||||
logger.info("Starting AutoBangumi...")
|
||||
|
||||
|
||||
def rss_loop(stop_event, rss_link: str):
|
||||
rss_analyser = RSSAnalyser()
|
||||
while not stop_event.is_set():
|
||||
rss_analyser.run(rss_link)
|
||||
logger.info("RSS loop finished.")
|
||||
stop_event.wait(settings.program.rss_time)
|
||||
|
||||
|
||||
def rename_loop(stop_event):
|
||||
while not stop_event.is_set():
|
||||
with Renamer() as renamer:
|
||||
renamer.rename()
|
||||
logger.info("Rename loop finished.")
|
||||
stop_event.wait(settings.program.rename_time)
|
||||
|
||||
|
||||
@@ -49,10 +56,37 @@ rename_thread = threading.Thread(
|
||||
)
|
||||
|
||||
|
||||
def stop_thread():
|
||||
global rss_thread, rename_thread
|
||||
if not stop_event.is_set():
|
||||
stop_event.set()
|
||||
rename_thread.join()
|
||||
rss_thread.join()
|
||||
|
||||
|
||||
def start_thread():
|
||||
global rss_thread, rename_thread
|
||||
if stop_event.is_set():
|
||||
stop_event.clear()
|
||||
time.sleep(1)
|
||||
settings.load()
|
||||
rss_link = settings.rss_link()
|
||||
new_level = logging.DEBUG if settings.log.debug_enable else logging.INFO
|
||||
setup_logger(new_level)
|
||||
print(new_level)
|
||||
rss_thread = threading.Thread(target=rss_loop, args=(stop_event, rss_link))
|
||||
rename_thread = threading.Thread(target=rename_loop, args=(stop_event,))
|
||||
rss_thread.start()
|
||||
rename_thread.start()
|
||||
return {"status": "ok"}
|
||||
|
||||
|
||||
@router.on_event("startup")
|
||||
async def startup():
|
||||
global rss_thread, rename_thread
|
||||
setup_logger()
|
||||
log_level = logging.DEBUG if settings.log.debug_enable else logging.INFO
|
||||
setup_logger(log_level)
|
||||
show_info()
|
||||
rss_thread.start()
|
||||
rename_thread.start()
|
||||
|
||||
@@ -65,48 +99,20 @@ async def shutdown():
|
||||
|
||||
@router.get("/api/v1/restart", tags=["program"])
|
||||
async def restart():
|
||||
global rss_thread, rename_thread
|
||||
if not rss_thread.is_alive():
|
||||
return {"status": "Already stopped."}
|
||||
stop_event.set()
|
||||
logger.info("Stopping RSS analyser...")
|
||||
rss_thread.join()
|
||||
rename_thread.join()
|
||||
stop_event.clear()
|
||||
time.sleep(1)
|
||||
settings.load()
|
||||
rss_link = settings.rss_link()
|
||||
setup_logger()
|
||||
rss_thread = threading.Thread(target=rss_loop, args=(stop_event, rss_link))
|
||||
rename_thread = threading.Thread(target=rename_loop, args=(stop_event,))
|
||||
rss_thread.start()
|
||||
rename_thread.start()
|
||||
stop_thread()
|
||||
start_thread()
|
||||
return {"status": "ok"}
|
||||
|
||||
|
||||
@router.get("/api/v1/start", tags=["program"])
|
||||
async def start():
|
||||
global rss_thread, rename_thread
|
||||
if not stop_event.is_set():
|
||||
return {"status": "Already started."}
|
||||
rss_thread = threading.Thread(target=rss_loop, args=(stop_event, rss_link))
|
||||
rename_thread = threading.Thread(target=rename_loop,args=(stop_event,))
|
||||
rss_thread.start()
|
||||
rename_thread.start()
|
||||
start_thread()
|
||||
return {"status": "ok"}
|
||||
|
||||
|
||||
@router.get("/api/v1/stop", tags=["program"])
|
||||
async def stop():
|
||||
global rss_thread, rename_thread
|
||||
if stop_event.is_set():
|
||||
return {"status": "Already stopped."}
|
||||
stop_event.set()
|
||||
logger.info("Stopping program...")
|
||||
rename_thread.join()
|
||||
rss_thread.join()
|
||||
stop_event.clear()
|
||||
logger.info("Program stopped.")
|
||||
stop_thread()
|
||||
return {"status": "ok"}
|
||||
|
||||
|
||||
@@ -119,9 +125,7 @@ if VERSION != "DEV_VERSION":
|
||||
def index(request: Request):
|
||||
context = {"request": request}
|
||||
return templates.TemplateResponse("index.html", context)
|
||||
|
||||
else:
|
||||
|
||||
@router.get("/", status_code=302, tags=["html"])
|
||||
def index():
|
||||
return RedirectResponse("/docs")
|
||||
@@ -129,5 +133,5 @@ else:
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run(
|
||||
router, host="0.0.0.0", port=settings.program.webui_port
|
||||
"main:router", host="0.0.0.0", port=settings.program.webui_port, log_config=logging_config, reload=True
|
||||
)
|
||||
|
||||
@@ -34,12 +34,4 @@ async def rename_loop(renamer: Renamer, wait_time: int = 360):
|
||||
await asyncio.sleep(wait_time)
|
||||
|
||||
|
||||
def show_info():
|
||||
with open("icon", "r") as f:
|
||||
for line in f.readlines():
|
||||
logger.info(line.strip("\n"))
|
||||
logger.info(
|
||||
f"Version {VERSION} Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan"
|
||||
)
|
||||
logger.info("GitHub: https://github.com/EstrellaXD/Auto_Bangumi/")
|
||||
logger.info("Starting AutoBangumi...")
|
||||
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
import logging
|
||||
|
||||
from .config import settings
|
||||
|
||||
LOG_PATH = "data/log.txt"
|
||||
|
||||
|
||||
def setup_logger():
|
||||
level = logging.DEBUG if settings.log.debug_enable else logging.INFO
|
||||
def setup_logger(level):
|
||||
logging.addLevelName(logging.DEBUG, "DEBUG:")
|
||||
logging.addLevelName(logging.INFO, "INFO:")
|
||||
logging.addLevelName(logging.WARNING, "WARNING:")
|
||||
LOGGING_FORMAT = "[%(asctime)s] %(levelname)-8s %(message)s"
|
||||
TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
|
||||
logging.basicConfig(
|
||||
level=level,
|
||||
format=LOGGING_FORMAT,
|
||||
datefmt=TIME_FORMAT,
|
||||
encoding="utf-8",
|
||||
handlers=[
|
||||
logging.FileHandler(LOG_PATH, encoding="utf-8"),
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
[loggers]
|
||||
keys=root, gunicorn.error, gunicorn.access,uvicorn.error,uvicorn.access
|
||||
|
||||
[handlers]
|
||||
keys=console, error_file, access_file, accesscustom
|
||||
|
||||
[formatters]
|
||||
keys=generic, access, AccessFormatter
|
||||
|
||||
[logger_root]
|
||||
level=INFO
|
||||
handlers=console
|
||||
propagate=1
|
||||
|
||||
[logger_gunicorn.error]
|
||||
level=INFO
|
||||
handlers=error_file
|
||||
propagate=0
|
||||
qualname=gunicorn.error
|
||||
|
||||
[logger_gunicorn.access]
|
||||
level=INFO
|
||||
handlers=accesscustom
|
||||
propagate=0
|
||||
qualname=gunicorn.access
|
||||
|
||||
[logger_uvicorn.error]
|
||||
level=INFO
|
||||
handlers=error_file
|
||||
propagate=0
|
||||
qualname=uvicorn.error
|
||||
|
||||
[logger_uvicorn.access]
|
||||
level=INFO
|
||||
handlers=accesscustom
|
||||
propagate=0
|
||||
qualname=uvicorn.access
|
||||
|
||||
[handler_console]
|
||||
class=StreamHandler
|
||||
formatter=generic
|
||||
args=(sys.stdout, )
|
||||
|
||||
[handler_error_file]
|
||||
class=StreamHandler
|
||||
formatter=generic
|
||||
args=(sys.stdout, )
|
||||
|
||||
[handler_access_file]
|
||||
class=StreamHandler
|
||||
formatter=access
|
||||
args=(sys.stdout, )
|
||||
|
||||
[handler_accesscustom]
|
||||
class=StreamHandler
|
||||
formatter=AccessFormatter
|
||||
args=(sys.stdout, )
|
||||
|
||||
[formatter_generic]
|
||||
format=%(levelname)s: %(message)s
|
||||
datefmt=%Y-%m-%dT%H:%M:%S
|
||||
class=uvicorn.logging.DefaultFormatter
|
||||
|
||||
[formatter_access]
|
||||
format=%(levelname)s: %(message)s
|
||||
datefmt=%Y-%m-%dT%H:%M:%S
|
||||
class=customlogger.CustomFormatter
|
||||
|
||||
[formatter_AccessFormatter]
|
||||
format={"event":"access_log","ip":"%(h)s","status":"%(s)s","method":"%(m)s","path":"%(U)s","referer":"%(f)s","x_session_id":"%(x-session-id)s","x_google_id":"%(x-google-id)s","x_server_time":"%(x-server-time)s","agent":"%(a)s"}
|
||||
datefmt=%Y-%m-%dT%H:%M:%S
|
||||
class=customlogger.CustomFormatter
|
||||
@@ -7,7 +7,7 @@ logging_config = {
|
||||
"handlers": ["default"],
|
||||
"propagate": True,
|
||||
},
|
||||
"uvicorn.access": {
|
||||
"uvicorn.asgi": { # 更改 "uvicorn.access" 为 "uvicorn.asgi"
|
||||
"level": "INFO",
|
||||
"handlers": ["access"],
|
||||
"propagate": True,
|
||||
@@ -18,18 +18,16 @@ logging_config = {
|
||||
"class": "logging.StreamHandler",
|
||||
"level": "INFO",
|
||||
"formatter": "default",
|
||||
"stream": "ext://sys.stderr",
|
||||
},
|
||||
"access": {
|
||||
"class": "logging.StreamHandler",
|
||||
"level": "INFO",
|
||||
"level": "DEBUG",
|
||||
"formatter": "access",
|
||||
"stream": "ext://sys.stdout",
|
||||
},
|
||||
},
|
||||
"formatters": {
|
||||
"default": {
|
||||
"format": "[%(asctime)s] %(levelname)s: %(message)s",
|
||||
"format": "[%(asctime)s] %(levelname)-8s %(message)s",
|
||||
"datefmt": "%Y-%m-%d %H:%M:%S",
|
||||
},
|
||||
"access": {
|
||||
|
||||
@@ -227,10 +227,3 @@ class Renamer(DownloadClient):
|
||||
)
|
||||
else:
|
||||
logger.warning(f"{info.name} has no media file")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from module.conf import setup_logger
|
||||
setup_logger()
|
||||
with Renamer() as renamer:
|
||||
renamer.rename()
|
||||
|
||||
@@ -35,6 +35,8 @@ def get_group(group_and_title) -> tuple[str | None, str]:
|
||||
while "" in n:
|
||||
n.remove("")
|
||||
if len(n) > 1:
|
||||
if re.match(r"\d+", n[1]):
|
||||
return None, group_and_title
|
||||
return n[0], n[1]
|
||||
else:
|
||||
return None, n[0]
|
||||
@@ -96,3 +98,9 @@ def torrent_parser(
|
||||
episode=episode,
|
||||
suffix=suffix
|
||||
)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
name = "海盗战记 (2019) S01E01.mp4"
|
||||
bf = torrent_parser(name, file_type="media")
|
||||
print(bf)
|
||||
@@ -30,6 +30,12 @@ def test_torrent_parser():
|
||||
assert bf.episode == 1082
|
||||
assert bf.season == 1
|
||||
|
||||
file_name = "海盗战记 (2019) S01E01.mp4"
|
||||
bf = torrent_parser(file_name)
|
||||
assert bf.title == "海盗战记 (2019)"
|
||||
assert bf.episode == 1
|
||||
assert bf.season == 1
|
||||
|
||||
file_name = "海盗战记/海盗战记 S01E01.mp4"
|
||||
bf = torrent_parser(file_name)
|
||||
assert bf.title == "海盗战记"
|
||||
|
||||
Reference in New Issue
Block a user