Added engine update check on launch (#43)

This commit is contained in:
2023-10-23 08:26:11 -05:00
committed by GitHub
parent e52682c8b9
commit 782a1a4699
5 changed files with 40 additions and 21 deletions

View File

@@ -88,7 +88,7 @@ class EngineManager:
return None
@classmethod
def has_engine_version(cls, engine, version, system_os=None, cpu=None):
def is_version_downloaded(cls, engine, version, system_os=None, cpu=None):
system_os = system_os or cls.system_os()
cpu = cpu or cls.system_cpu()
@@ -107,26 +107,25 @@ class EngineManager:
@classmethod
def version_is_available_to_download(cls, engine, version, system_os=None, cpu=None):
try:
return cls.downloader_classes[engine].version_is_available_to_download(version, system_os, cpu)
return cls.downloader_classes[engine].version_is_available_to_download(version=version, system_os=system_os,
cpu=cpu)
except Exception as e:
return None
@classmethod
def find_most_recent_version(cls, engine, system_os, cpu, lts_only=False):
def find_most_recent_version(cls, engine=None, system_os=None, cpu=None, lts_only=False):
try:
return cls.downloader_classes[engine].find_most_recent_version(system_os, cpu)
return cls.downloader_classes[engine].find_most_recent_version(system_os=system_os, cpu=cpu)
except Exception as e:
return None
@classmethod
def download_engine(cls, engine, version, system_os=None, cpu=None):
existing_download = cls.has_engine_version(engine, version, system_os, cpu)
existing_download = cls.is_version_downloaded(engine, version, system_os, cpu)
if existing_download:
logger.info(f"Requested download of {engine} {version}, but local copy already exists")
return existing_download
logger.info(f"Requesting download of {engine} {version}")
# Check if the provided engine type is valid
if engine not in cls.downloader_classes:
logger.error("No valid engine found")
@@ -137,7 +136,7 @@ class EngineManager:
system_os=system_os, cpu=cpu, timeout=300)
# Check that engine was properly downloaded
found_engine = cls.has_engine_version(engine, version, system_os, cpu)
found_engine = cls.is_version_downloaded(engine, version, system_os, cpu)
if not found_engine:
logger.error(f"Error downloading {engine}")
return found_engine
@@ -146,7 +145,7 @@ class EngineManager:
@classmethod
def delete_engine_download(cls, engine, version, system_os=None, cpu=None):
logger.info(f"Requested deletion of engine: {engine}-{version}")
found = cls.has_engine_version(engine, version, system_os, cpu)
found = cls.is_version_downloaded(engine, version, system_os, cpu)
if found:
dir_path = os.path.dirname(found['path'])
shutil.rmtree(dir_path, ignore_errors=True)
@@ -155,6 +154,15 @@ class EngineManager:
else:
logger.error(f"Cannot find engine: {engine}-{version}")
@classmethod
def update_all_engines(cls):
logger.info(f"Checking for updates for render engines...")
for engine, engine_downloader in cls.downloader_classes.items():
latest_version = engine_downloader.find_most_recent_version().get('version')
if latest_version and not cls.is_version_downloaded(engine, latest_version):
logger.info(f"Downloading newest version of {engine} ({latest_version})")
cls.download_engine(engine, latest_version)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')