app.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # app.py
  2. import logging
  3. import os
  4. from flask import Flask, render_template, request, redirect, url_for
  5. from config.config_manager import ConfigManager
  6. from api.api_clients import APIManager
  7. from services.download_manager import DownloadManager
  8. from services.download_service import DownloadService
  9. from services.nas_sync_service import NasSyncService
  10. app = Flask(__name__)
  11. # 获取当前脚本的绝对路径
  12. current_directory = os.path.dirname(os.path.abspath(__file__))
  13. # 构建 config.ini 文件的路径
  14. config_path = os.path.join(current_directory, 'config', 'config.ini')
  15. config = ConfigManager(config_path)
  16. api_manager = APIManager(config)
  17. download_manager = DownloadManager(config.get_value('ARIA2', 'DOCKER_DOWNLOAD_PATH'))
  18. download_service = DownloadService(api_manager, download_manager)
  19. nas_sync_service = NasSyncService(api_manager.nas_tools_api)
  20. @app.before_request
  21. def ensure_api_login():
  22. api_manager.login_apis()
  23. @app.route('/files')
  24. def files():
  25. file_list = download_service.fetch_directory_contents()
  26. return render_template('files.html', file_list=file_list)
  27. @app.route('/download/<path:filepath>')
  28. def download(filepath):
  29. # 这里添加触发下载的逻辑
  30. return redirect(url_for('files'))
  31. @app.route('/', methods=['GET', 'POST'])
  32. def index():
  33. message = ""
  34. if request.method == 'POST':
  35. if request.form.get('action') == 'sync':
  36. nas_sync_service.sync_directories()
  37. message = "Directories are being synchronized."
  38. elif request.form.get('action') == 'download':
  39. download_urls = download_service.fetch_and_download()
  40. message = f"Downloading: {len(download_urls)} files."
  41. return render_template('index.html', message=message)
  42. return render_template('index.html')
  43. if __name__ == '__main__':
  44. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  45. app.run(debug=True, port=5000)