download_service.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # download_service.py
  2. import os
  3. import time
  4. from services.download_manager import DownloadManager
  5. class DownloadService:
  6. def __init__(self, api_manager, parent_dir: str):
  7. self.parent_dir = parent_dir
  8. self.api_manager = api_manager
  9. self.download_manager = DownloadManager()
  10. def fetch_directory_contents(self):
  11. remote_json_path = self.api_manager.alist_api.save_directory_contents(
  12. self.api_manager.config.get_value('REMOTE_ALIST', 'DOWNLOAD_PATH'),
  13. self.api_manager.config.get_value('HOME_ALIST', 'DOWNLOAD_PATH'),
  14. self.api_manager.config.get_value('HOME_ALIST', 'SCY_COPY_PATH'),
  15. self.api_manager.config.get_value('HOME_ALIST', 'DES_COPY_PATH'),
  16. self.parent_dir)
  17. # 检查每个文件是否已下载,并添加下载状态信息
  18. for item in remote_json_path:
  19. item['is_downloaded'] = self.download_manager.is_downloaded(item['name'])
  20. return remote_json_path
  21. def fetch_and_download(self):
  22. remote_json_path = self.api_manager.alist_api.save_directory_contents(
  23. self.api_manager.config.get_value('REMOTE_ALIST', 'DOWNLOAD_PATH'),
  24. self.api_manager.config.get_value('HOME_ALIST', 'DOWNLOAD_PATH'),
  25. self.api_manager.config.get_value('HOME_ALIST', 'SCY_COPY_PATH'),
  26. self.api_manager.config.get_value('HOME_ALIST', 'DES_COPY_PATH'),
  27. self.parent_dir
  28. )
  29. download_url = []
  30. for home_item in remote_json_path:
  31. if not home_item['is_dir']:
  32. if not self.download_manager.is_downloaded(home_item['name']):
  33. name = home_item['name']
  34. parent_folder_name = home_item['parent_folder_name']
  35. download_path = self.api_manager.config.get_value('ARIA2',
  36. 'DOCKER_DOWNLOAD_PATH') + "/" + parent_folder_name
  37. cent_data = self.api_manager.alist_api.get_file_or_directory_info(home_item['path'])
  38. if cent_data['code'] != 200:
  39. break
  40. dow_time = {
  41. 'raw_url': cent_data['data']['raw_url'],
  42. 'download_path': download_path,
  43. 'name': name,
  44. }
  45. download_url.append(dow_time)
  46. self.download_manager.record_download(name)
  47. return download_url