aria2.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import logging
  2. import threading
  3. import time
  4. from pyarr import RadarrAPI
  5. from aria2p import API, Client
  6. class Aria2API:
  7. def __init__(self, url, secret):
  8. self.aria2_client = Client(url, secret=secret)
  9. self.aria2_api = API(self.aria2_client)
  10. self.is_running = True
  11. self.check_interval = 10
  12. self.monitor_thread = None
  13. def remove(self, download):
  14. return self.aria2_api.remove(download)
  15. def get_downloads(self):
  16. # 返回所有下载信息的列表
  17. return self.aria2_api.get_downloads()
  18. def add_url(self, url, options=None):
  19. """
  20. 将下载链接添加到 Aria2。
  21. :param url: 下载链接
  22. :param options: Aria2下载选项,例如下载目录
  23. """
  24. try:
  25. # 添加下载链接到 Aria2
  26. download = self.aria2_api.add_uris([url], options=options if options else {})
  27. return download
  28. except Exception as e:
  29. print(f"Error adding URL to Aria2: {e}")
  30. return None
  31. def monitor_aria2_and_delete(self):
  32. logging.info('Start remote Aria2 download is_complete monitoring')
  33. while self.is_running:
  34. # 获取 Aria2 当前的下载列表
  35. downloads = self.aria2_api.get_downloads()
  36. for download in downloads:
  37. if download.is_complete:
  38. pass
  39. # movie_name = self.radar_client.get_all_movie_names()
  40. # for file_name in movie_name:
  41. # # logging.info(f"Download completed: {file_name}")
  42. # # 处理每个下载完成的文件
  43. # # 调用方法并获取返回的电影 ID
  44. # movie_id = self.radar_client.find_movie_id_by_filename(file_name)
  45. #
  46. # # 打印结果
  47. # if movie_id is not None:
  48. # print(f"Found movie ID for '{file_name}': {movie_id}")
  49. # else:
  50. # print(f"No movie found for '{file_name}'")
  51. time.sleep(self.check_interval)
  52. def start_monitoring(self):
  53. if not self.is_running:
  54. self.is_running = True
  55. self.monitor_thread = threading.Thread(target=self.monitor_aria2_and_delete)
  56. self.monitor_thread.start()
  57. def stop_monitoring(self):
  58. self.is_running = False
  59. if self.monitor_thread:
  60. self.monitor_thread.join()