Skip to content

Commit

Permalink
feat: 加入 recheck 功能,在本地文件被删除后重新标记为未下载
Browse files Browse the repository at this point in the history
  • Loading branch information
amtoaer committed Nov 26, 2023
1 parent eee99d9 commit dc612ec
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
38 changes: 38 additions & 0 deletions commands.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import asyncio

from aiofiles.os import path
from loguru import logger

from constants import MediaStatus, MediaType
from models import FavoriteItem


async def recheck():
"""刷新数据库中视频的状态,如果发现文件不存在则标记未下载,以便在下次任务重新下载,在自己手动删除文件后调用"""
items = await FavoriteItem.filter(
type=MediaType.VIDEO,
status=MediaStatus.NORMAL,
downloaded=True,
)
exists = await asyncio.gather(
*[path.exists(item.video_path) for item in items]
)
for item, exist in zip(items, exists):
if isinstance(exist, Exception):
logger.error(
"Error when checking file {} {}: {}",
item.bvid,
item.name,
exist,
)
continue
if not exist:
logger.info(
"File {} {} not exists, mark as not downloaded.",
item.bvid,
item.name,
)
item.downloaded = False
logger.info("Updating database...")
await FavoriteItem.bulk_update(items, fields=["downloaded"])
logger.info("Database updated.")
6 changes: 6 additions & 0 deletions entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import uvloop
from loguru import logger

from commands import recheck
from models import init_model
from processor import cleanup, process
from settings import settings
Expand All @@ -18,6 +19,11 @@ async def entry() -> None:
logger.info("Running once...")
await process()
return
if any("recheck" in _ for _ in sys.argv):
# 重新检查
logger.info("Rechecking...")
await recheck()
return
logger.info("Running daemon...")
while True:
await process()
Expand Down

0 comments on commit dc612ec

Please sign in to comment.