FFMPEG downloader (#36)

* Add ffmpeg_downloader.py

* Move shared download logic to downloader_core.py

* Added Windows support and some misc cleanup

* Fix issue with copying contents of .dmg files

* Add FFMPEGDownloader to engine_manager.py
This commit is contained in:
2023-10-20 18:46:54 -05:00
committed by GitHub
parent 7d1ecf1fa5
commit af5eda97c5
6 changed files with 373 additions and 216 deletions

View File

@@ -2,6 +2,8 @@ import os
import logging
import platform
import shutil
from .downloaders.blender_downloader import BlenderDownloader
from .downloaders.ffmpeg_downloader import FFMPEGDownloader
try:
from .blender_engine import Blender
@@ -41,7 +43,7 @@ class EngineManager:
# Create a dictionary with named keys
executable_names = {'linux': 'blender', 'windows': 'blender.exe', 'macos': 'Blender.app'}
result_dict = {keys[i]: segments[i] for i in range(min(len(keys), len(segments)))}
result_dict['path'] = os.path.join(cls.engines_path, directory, executable_names[result_dict['system_os']])
result_dict['path'] = os.path.join(cls.engines_path, directory, executable_names.get(result_dict['system_os'], 'unknown'))
result_dict['type'] = 'managed'
results.append(result_dict)
except FileNotFoundError:
@@ -98,15 +100,24 @@ class EngineManager:
logger.info(f"Requested download of {engine} {version}, but local copy already exists")
return existing_download
if engine == "blender":
from .scripts.blender.blender_downloader import BlenderDownloader
logger.info(f"Requesting download of {engine} {version}")
if BlenderDownloader.download_engine(version, download_location=cls.engines_path, system_os=system_os, cpu=cpu):
return cls.has_engine_version(engine, version, system_os, cpu)
else:
logger.error("Error downloading Engine")
logger.info(f"Requesting download of {engine} {version}")
downloader_classes = {
"blender": BlenderDownloader,
"ffmpeg": FFMPEGDownloader,
# Add more engine types and corresponding downloader classes as needed
}
return None # Return None to indicate an error
# Check if the provided engine type is valid
if engine not in downloader_classes:
logger.error("No valid engine found")
return
# Get the appropriate downloader class based on the engine type
downloader = downloader_classes[engine]
if downloader.download_engine(version, download_location=cls.engines_path, system_os=system_os, cpu=cpu):
return cls.has_engine_version(engine, version, system_os, cpu)
else:
logger.error(f"Error downloading {engine}")
@classmethod
def delete_engine_download(cls, engine, version, system_os=None, cpu=None):
@@ -125,4 +136,4 @@ if __name__ == '__main__':
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# print(EngineManager.newest_engine_version('blender', 'macos', 'arm64'))
EngineManager.delete_engine_download('blender', '3.2.1', 'windows', 'x64')
EngineManager.delete_engine_download('blender', '3.2.1', 'macos', 'a')