mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 07:56:52 +08:00
fix deadlock
This commit is contained in:
+28
-43
@@ -221,9 +221,8 @@ class JobManager:
|
|||||||
"""
|
"""
|
||||||
移除作业
|
移除作业
|
||||||
"""
|
"""
|
||||||
__mediaid__ = self.__get_media_id(media=task.mediainfo, season=task.meta.begin_season)
|
|
||||||
with job_lock:
|
with job_lock:
|
||||||
# 移除作业
|
__mediaid__ = self.__get_media_id(media=task.mediainfo, season=task.meta.begin_season)
|
||||||
if __mediaid__ in self._job_view:
|
if __mediaid__ in self._job_view:
|
||||||
# 移除季集信息
|
# 移除季集信息
|
||||||
if __mediaid__ in self._season_episodes:
|
if __mediaid__ in self._season_episodes:
|
||||||
@@ -320,55 +319,48 @@ class JobManager:
|
|||||||
获取某项任务成功的任务
|
获取某项任务成功的任务
|
||||||
"""
|
"""
|
||||||
__mediaid__ = self.__get_media_id(media=media, season=season)
|
__mediaid__ = self.__get_media_id(media=media, season=season)
|
||||||
with job_lock:
|
if __mediaid__ not in self._job_view:
|
||||||
if __mediaid__ not in self._job_view:
|
return []
|
||||||
return []
|
return [task for task in self._job_view[__mediaid__].tasks if task.state == "completed"]
|
||||||
return [task for task in self._job_view[__mediaid__].tasks if task.state == "completed"]
|
|
||||||
|
|
||||||
def all_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[TransferJobTask]:
|
def all_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[TransferJobTask]:
|
||||||
"""
|
"""
|
||||||
获取全部任务
|
获取全部任务
|
||||||
"""
|
"""
|
||||||
__mediaid__ = self.__get_media_id(media=media, season=season)
|
__mediaid__ = self.__get_media_id(media=media, season=season)
|
||||||
with job_lock:
|
if __mediaid__ not in self._job_view:
|
||||||
if __mediaid__ not in self._job_view:
|
return []
|
||||||
return []
|
return self._job_view[__mediaid__].tasks
|
||||||
return self._job_view[__mediaid__].tasks
|
|
||||||
|
|
||||||
def count(self, media: MediaInfo, season: Optional[int] = None) -> int:
|
def count(self, media: MediaInfo, season: Optional[int] = None) -> int:
|
||||||
"""
|
"""
|
||||||
获取某项任务成功总数
|
获取某项任务成功总数
|
||||||
"""
|
"""
|
||||||
__mediaid__ = self.__get_media_id(media=media, season=season)
|
__mediaid__ = self.__get_media_id(media=media, season=season)
|
||||||
with job_lock:
|
if __mediaid__ not in self._job_view:
|
||||||
# 计算状态为完成的任务数
|
return 0
|
||||||
if __mediaid__ not in self._job_view:
|
return len([task for task in self._job_view[__mediaid__].tasks if task.state == "completed"])
|
||||||
return 0
|
|
||||||
return len([task for task in self._job_view[__mediaid__].tasks if task.state == "completed"])
|
|
||||||
|
|
||||||
def size(self, media: MediaInfo, season: Optional[int] = None) -> int:
|
def size(self, media: MediaInfo, season: Optional[int] = None) -> int:
|
||||||
"""
|
"""
|
||||||
获取某项任务成功文件总大小
|
获取某项任务成功文件总大小
|
||||||
"""
|
"""
|
||||||
__mediaid__ = self.__get_media_id(media=media, season=season)
|
__mediaid__ = self.__get_media_id(media=media, season=season)
|
||||||
with job_lock:
|
if __mediaid__ not in self._job_view:
|
||||||
# 计算状态为完成的任务数
|
return 0
|
||||||
if __mediaid__ not in self._job_view:
|
return sum([
|
||||||
return 0
|
task.fileitem.size if task.fileitem.size is not None
|
||||||
return sum([
|
else (
|
||||||
task.fileitem.size if task.fileitem.size is not None
|
SystemUtils.get_directory_size(Path(task.fileitem.path)) if task.fileitem.storage == "local" else 0)
|
||||||
else (
|
for task in self._job_view[__mediaid__].tasks
|
||||||
SystemUtils.get_directory_size(Path(task.fileitem.path)) if task.fileitem.storage == "local" else 0)
|
if task.state == "completed"
|
||||||
for task in self._job_view[__mediaid__].tasks
|
])
|
||||||
if task.state == "completed"
|
|
||||||
])
|
|
||||||
|
|
||||||
def total(self) -> int:
|
def total(self) -> int:
|
||||||
"""
|
"""
|
||||||
获取所有task任务总数
|
获取所有task任务总数
|
||||||
"""
|
"""
|
||||||
with job_lock:
|
return sum([len(job.tasks) for job in self._job_view.values()])
|
||||||
return sum([len(job.tasks) for job in self._job_view.values()])
|
|
||||||
|
|
||||||
def list_jobs(self) -> List[TransferJob]:
|
def list_jobs(self) -> List[TransferJob]:
|
||||||
"""
|
"""
|
||||||
@@ -381,8 +373,7 @@ class JobManager:
|
|||||||
获取季集清单
|
获取季集清单
|
||||||
"""
|
"""
|
||||||
__mediaid__ = self.__get_media_id(media=media, season=season)
|
__mediaid__ = self.__get_media_id(media=media, season=season)
|
||||||
with job_lock:
|
return self._season_episodes.get(__mediaid__) or []
|
||||||
return self._season_episodes.get(__mediaid__) or []
|
|
||||||
|
|
||||||
|
|
||||||
class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
||||||
@@ -527,8 +518,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
|||||||
})
|
})
|
||||||
|
|
||||||
# 移除已完成的任务
|
# 移除已完成的任务
|
||||||
with job_lock:
|
self.jobview.remove_job(task)
|
||||||
self.jobview.remove_job(task)
|
|
||||||
|
|
||||||
transferhis = TransferHistoryOper()
|
transferhis = TransferHistoryOper()
|
||||||
if not transferinfo.success:
|
if not transferinfo.success:
|
||||||
@@ -568,8 +558,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
|||||||
))
|
))
|
||||||
|
|
||||||
# 整理失败
|
# 整理失败
|
||||||
with job_lock:
|
self.jobview.fail_task(task)
|
||||||
self.jobview.fail_task(task)
|
|
||||||
|
|
||||||
# 全部整理完成且有成功的任务时
|
# 全部整理完成且有成功的任务时
|
||||||
if self.jobview.is_finished(task):
|
if self.jobview.is_finished(task):
|
||||||
@@ -579,8 +568,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
|||||||
return False, transferinfo.message
|
return False, transferinfo.message
|
||||||
|
|
||||||
# task转移成功
|
# task转移成功
|
||||||
with job_lock:
|
self.jobview.finish_task(task)
|
||||||
self.jobview.finish_task(task)
|
|
||||||
|
|
||||||
logger.info(f"{task.fileitem.name} 入库成功:{transferinfo.target_diritem.path}")
|
logger.info(f"{task.fileitem.name} 入库成功:{transferinfo.target_diritem.path}")
|
||||||
|
|
||||||
@@ -666,8 +654,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
|||||||
"""
|
"""
|
||||||
添加到作业视图
|
添加到作业视图
|
||||||
"""
|
"""
|
||||||
with job_lock:
|
self.jobview.add_task(task)
|
||||||
self.jobview.add_task(task)
|
|
||||||
|
|
||||||
def remove_from_queue(self, fileitem: FileItem):
|
def remove_from_queue(self, fileitem: FileItem):
|
||||||
"""
|
"""
|
||||||
@@ -675,8 +662,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
|||||||
"""
|
"""
|
||||||
if not fileitem:
|
if not fileitem:
|
||||||
return
|
return
|
||||||
with job_lock:
|
self.jobview.remove_task(fileitem)
|
||||||
self.jobview.remove_task(fileitem)
|
|
||||||
|
|
||||||
def __start_transfer(self):
|
def __start_transfer(self):
|
||||||
"""
|
"""
|
||||||
@@ -919,9 +905,8 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
|
|||||||
|
|
||||||
finally:
|
finally:
|
||||||
# 移除已完成的任务
|
# 移除已完成的任务
|
||||||
with job_lock:
|
if self.jobview.is_done(task):
|
||||||
if self.jobview.is_done(task):
|
self.jobview.remove_job(task)
|
||||||
self.jobview.remove_job(task)
|
|
||||||
|
|
||||||
def get_queue_tasks(self) -> List[TransferJob]:
|
def get_queue_tasks(self) -> List[TransferJob]:
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user