mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
refactor: 推进后端分层架构治理
This commit is contained in:
@@ -0,0 +1 @@
|
||||
"""下载应用服务。"""
|
||||
@@ -0,0 +1,77 @@
|
||||
"""下载任务查询与控制应用服务。"""
|
||||
|
||||
from typing import Callable, List, Optional
|
||||
|
||||
from app.schemas.transfer import DownloaderTorrent
|
||||
from app.schemas.types import TorrentStatus
|
||||
|
||||
|
||||
class DownloadTaskService:
|
||||
"""通过下载器和历史端口查询、启停及删除下载任务。"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
list_torrents: Callable[..., List[DownloaderTorrent]],
|
||||
get_history_by_hashes: Callable[[list[str]], dict],
|
||||
start_torrents: Callable[..., bool],
|
||||
stop_torrents: Callable[..., bool],
|
||||
remove_torrents: Callable[..., bool],
|
||||
) -> None:
|
||||
"""注入下载器操作和历史读取端口。"""
|
||||
self._list_torrents = list_torrents
|
||||
self._get_history_by_hashes = get_history_by_hashes
|
||||
self._start_torrents = start_torrents
|
||||
self._stop_torrents = stop_torrents
|
||||
self._remove_torrents = remove_torrents
|
||||
|
||||
def downloading(self, name: Optional[str] = None) -> List[DownloaderTorrent]:
|
||||
"""查询下载中任务,并附加对应下载历史的媒体与用户信息。"""
|
||||
torrents = self._list_torrents(
|
||||
downloader=name,
|
||||
status=TorrentStatus.DOWNLOADING,
|
||||
)
|
||||
if not torrents:
|
||||
return []
|
||||
history_map = self._get_history_by_hashes(
|
||||
[torrent.hash for torrent in torrents if torrent.hash]
|
||||
)
|
||||
for torrent in torrents:
|
||||
history = history_map.get(torrent.hash)
|
||||
if not history:
|
||||
continue
|
||||
torrent.media = {
|
||||
"media_source": history.media_source,
|
||||
"media_id": history.media_id,
|
||||
"type": history.type,
|
||||
"title": history.title,
|
||||
"season": history.seasons,
|
||||
"episode": history.episodes,
|
||||
"image": history.poster,
|
||||
"poster": history.poster,
|
||||
"backdrop": history.image,
|
||||
}
|
||||
torrent.site_name = history.torrent_site
|
||||
torrent.userid = history.userid
|
||||
torrent.username = history.username
|
||||
return torrents
|
||||
|
||||
def set_downloading(
|
||||
self,
|
||||
hash_str: str,
|
||||
operation: str,
|
||||
name: Optional[str] = None,
|
||||
) -> bool:
|
||||
"""按 start/stop 操作控制单个下载任务。"""
|
||||
if operation == "start":
|
||||
return self._start_torrents(hashs=[hash_str], downloader=name)
|
||||
if operation == "stop":
|
||||
return self._stop_torrents(hashs=[hash_str], downloader=name)
|
||||
return False
|
||||
|
||||
def remove_downloading(
|
||||
self,
|
||||
hash_str: str,
|
||||
name: Optional[str] = None,
|
||||
) -> bool:
|
||||
"""删除单个下载任务。"""
|
||||
return self._remove_torrents(hashs=[hash_str], downloader=name)
|
||||
Reference in New Issue
Block a user