Skip to content

Commit 1efe332

Browse files
committed
fix:优化设置种子状态标签的时机
1 parent 55c1e37 commit 1efe332

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

app/chain/transfer.py

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
class JobManager:
4747
"""
4848
作业管理器
49+
task任务负责一个文件的整理,job作业负责一个媒体的整理
4950
"""
5051

5152
# 整理中的作业
@@ -111,7 +112,7 @@ def __get_meta(task: TransferTask) -> schemas.MetaInfo:
111112

112113
def add_task(self, task: TransferTask, state: Optional[str] = "waiting"):
113114
"""
114-
添加整理任务
115+
添加整理任务,自动分组到对应的作业中
115116
"""
116117
if not any([task, task.meta, task.fileitem]):
117118
return
@@ -165,7 +166,7 @@ def running_task(self, task: TransferTask):
165166

166167
def finish_task(self, task: TransferTask):
167168
"""
168-
设置任务为完成
169+
设置任务为完成/成功
169170
"""
170171
with job_lock:
171172
__mediaid__ = self.__get_id(task)
@@ -198,7 +199,7 @@ def fail_task(self, task: TransferTask):
198199

199200
def remove_task(self, fileitem: FileItem) -> Optional[TransferJobTask]:
200201
"""
201-
移除任务
202+
根据文件项移除任务
202203
"""
203204
with job_lock:
204205
for mediaid in list(self._job_view):
@@ -293,21 +294,33 @@ def is_success(self, task: TransferTask) -> bool:
293294
media_success = True
294295
return meta_success and media_success
295296

297+
def is_torrent_done(self, download_hash: str) -> bool:
298+
"""
299+
检查指定种子的所有任务是否都已完成
300+
"""
301+
with job_lock:
302+
for job in self._job_view.values():
303+
for task in job.tasks:
304+
if task.download_hash == download_hash:
305+
if task.state not in ["completed", "failed"]:
306+
return False
307+
return True
308+
296309
def has_tasks(self, meta: MetaBase, mediainfo: Optional[MediaInfo] = None, season: Optional[int] = None) -> bool:
297310
"""
298-
判断是否有任务正在处理
311+
判断作业是否还有任务正在处理
299312
"""
300313
if mediainfo:
301314
__mediaid__ = self.__get_media_id(media=mediainfo, season=season)
302315
if __mediaid__ in self._job_view:
303316
return True
304317

305318
__metaid__ = self.__get_meta_id(meta=meta, season=season)
306-
return __metaid__ in self._job_view
319+
return __metaid__ in self._job_view and len(self._job_view[__metaid__].tasks) > 0
307320

308321
def success_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[TransferJobTask]:
309322
"""
310-
获取某项任务成功的任务
323+
获取作业中所有成功的任务
311324
"""
312325
__mediaid__ = self.__get_media_id(media=media, season=season)
313326
if __mediaid__ not in self._job_view:
@@ -316,7 +329,7 @@ def success_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[
316329

317330
def all_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[TransferJobTask]:
318331
"""
319-
获取全部任务
332+
获取作业中全部任务
320333
"""
321334
__mediaid__ = self.__get_media_id(media=media, season=season)
322335
if __mediaid__ not in self._job_view:
@@ -325,7 +338,7 @@ def all_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[Tran
325338

326339
def count(self, media: MediaInfo, season: Optional[int] = None) -> int:
327340
"""
328-
获取作业成功总数
341+
获取作业中成功总数
329342
"""
330343
__mediaid__ = self.__get_media_id(media=media, season=season)
331344
if __mediaid__ not in self._job_view:
@@ -334,7 +347,7 @@ def count(self, media: MediaInfo, season: Optional[int] = None) -> int:
334347

335348
def size(self, media: MediaInfo, season: Optional[int] = None) -> int:
336349
"""
337-
获取作业成功文件总大小
350+
获取作业中所有成功文件总大小
338351
"""
339352
__mediaid__ = self.__get_media_id(media=media, season=season)
340353
if __mediaid__ not in self._job_view:
@@ -355,13 +368,13 @@ def total(self) -> int:
355368

356369
def list_jobs(self) -> List[TransferJob]:
357370
"""
358-
获取所有任务列表
371+
获取所有作业的任务列表
359372
"""
360373
return list(self._job_view.values())
361374

362375
def season_episodes(self, media: MediaInfo, season: Optional[int] = None) -> List[int]:
363376
"""
364-
获取季集清单
377+
获取作业的季集清单
365378
"""
366379
__mediaid__ = self.__get_media_id(media=media, season=season)
367380
return self._season_episodes.get(__mediaid__) or []
@@ -627,10 +640,15 @@ def __notify():
627640
if self.jobview.is_done(task):
628641
# 查询作业中的所有任务
629642
tasks = self.jobview.all_tasks(task.mediainfo, task.meta.begin_season)
643+
processed_hashes = set()
630644
for t in tasks:
631-
if t.download_hash:
632-
# 设置种子状态为已整理
633-
self.transfer_completed(hashs=t.download_hash, downloader=t.downloader)
645+
if t.download_hash and t.download_hash not in processed_hashes:
646+
# 检查该种子的所有任务(跨作业)是否都已完成
647+
if self.jobview.is_torrent_done(t.download_hash):
648+
# 设置种子状态为已整理
649+
self.transfer_completed(hashs=t.download_hash, downloader=t.downloader)
650+
# 记录已处理的哈希,避免重复处理
651+
processed_hashes.add(t.download_hash)
634652
# 清理作业
635653
self.jobview.remove_job(task)
636654

0 commit comments

Comments
 (0)