# download_service.py import os import time from services.download_manager import DownloadManager class DownloadService: def __init__(self, api_manager, parent_dir: str): self.parent_dir = parent_dir self.api_manager = api_manager self.download_manager = DownloadManager() def fetch_directory_contents(self): remote_json_path = self.api_manager.alist_api.save_directory_contents( self.api_manager.config.get_value('REMOTE_ALIST', 'DOWNLOAD_PATH'), self.api_manager.config.get_value('HOME_ALIST', 'DOWNLOAD_PATH'), self.api_manager.config.get_value('HOME_ALIST', 'SCY_COPY_PATH'), self.api_manager.config.get_value('HOME_ALIST', 'DES_COPY_PATH'), self.parent_dir) # 检查每个文件是否已下载,并添加下载状态信息 for item in remote_json_path: item['is_downloaded'] = self.download_manager.is_downloaded(item['name']) return remote_json_path def fetch_and_download(self): remote_json_path = self.api_manager.alist_api.save_directory_contents( self.api_manager.config.get_value('REMOTE_ALIST', 'DOWNLOAD_PATH'), self.api_manager.config.get_value('HOME_ALIST', 'DOWNLOAD_PATH'), self.api_manager.config.get_value('HOME_ALIST', 'SCY_COPY_PATH'), self.api_manager.config.get_value('HOME_ALIST', 'DES_COPY_PATH'), self.parent_dir ) download_url = [] for home_item in remote_json_path: if not home_item['is_dir']: if not self.download_manager.is_downloaded(home_item['name']): name = home_item['name'] parent_folder_name = home_item['parent_folder_name'] download_path = self.api_manager.config.get_value('ARIA2', 'DOCKER_DOWNLOAD_PATH') + "/" + parent_folder_name cent_data = self.api_manager.alist_api.get_file_or_directory_info(home_item['path']) if cent_data['code'] != 200: break dow_time = { 'raw_url': cent_data['data']['raw_url'], 'download_path': download_path, 'name': name, } download_url.append(dow_time) self.download_manager.record_download(name) return download_url