mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-07-30 10:17:28 +08:00
62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
from typing import Dict, List, Optional
|
|
|
|
from app.db import DbOper
|
|
from app.db.models.downloadfailure import DownloadFailure
|
|
|
|
|
|
class DownloadFailureOper(DbOper):
|
|
"""
|
|
下载失败冷却记录管理。
|
|
"""
|
|
|
|
def get_active_by_fingerprints(
|
|
self,
|
|
fingerprints: List[str],
|
|
now_time: str,
|
|
) -> Dict[str, DownloadFailure]:
|
|
"""
|
|
批量按指纹查询仍在冷却期的失败记录。
|
|
"""
|
|
failures = DownloadFailure.get_active_by_fingerprints(
|
|
self._db,
|
|
fingerprints=fingerprints,
|
|
now_time=now_time,
|
|
)
|
|
return {
|
|
failure.fingerprint: failure
|
|
for failure in failures
|
|
if failure and failure.fingerprint
|
|
}
|
|
|
|
def record_failure(
|
|
self,
|
|
fingerprint: str,
|
|
now_time: str,
|
|
next_retry_at: str,
|
|
**kwargs: object,
|
|
) -> DownloadFailure:
|
|
"""
|
|
新增或更新资源失败记录。
|
|
"""
|
|
return DownloadFailure.record_failure(
|
|
self._db,
|
|
fingerprint=fingerprint,
|
|
now_time=now_time,
|
|
next_retry_at=next_retry_at,
|
|
**kwargs,
|
|
)
|
|
|
|
def delete_expired(
|
|
self,
|
|
before_time: str,
|
|
limit: Optional[int] = 500,
|
|
) -> int:
|
|
"""
|
|
删除已过期较久的失败记录。
|
|
"""
|
|
return DownloadFailure.delete_expired(
|
|
self._db,
|
|
before_time=before_time,
|
|
limit=limit,
|
|
)
|