Report Engine Download Status in UI (#64)

* Report downloads in status bar

* Update engine_browser.py UI with any active downloads
This commit is contained in:
2023-11-20 21:58:31 -06:00
committed by GitHub
parent 0e0eba7b22
commit e9f9521924
3 changed files with 55 additions and 21 deletions

View File

@@ -129,15 +129,6 @@ class EngineManager:
@classmethod
def download_engine(cls, engine, version, system_os=None, cpu=None, background=False):
def download_engine_task(engine, version, system_os=None, cpu=None):
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
# Get the appropriate downloader class based on the engine type
cls.engine_with_name(engine).downloader().download_engine(version, download_location=cls.engines_path,
system_os=system_os, cpu=cpu, timeout=300)
engine_to_download = cls.engine_with_name(engine)
existing_task = cls.is_already_downloading(engine, version, system_os, cpu)
@@ -152,8 +143,7 @@ class EngineManager:
elif not cls.engines_path:
raise FileNotFoundError("Engines path must be set before requesting downloads")
thread = threading.Thread(target=download_engine_task, args=(engine, version, system_os, cpu),
name=f'{engine}-{version}-{system_os}-{cpu}')
thread = EngineDownloadWorker(engine, version, system_os, cpu)
cls.download_tasks.append(thread)
thread.start()
@@ -251,6 +241,29 @@ class EngineManager:
return undefined_renderer_support[0]
class EngineDownloadWorker(threading.Thread):
def __init__(self, engine, version, system_os=None, cpu=None):
super().__init__()
self.engine = engine
self.version = version
self.system_os = system_os
self.cpu = cpu
def run(self):
existing_download = EngineManager.is_version_downloaded(self.engine, self.version, self.system_os, self.cpu)
if existing_download:
logger.info(f"Requested download of {self.engine} {self.version}, but local copy already exists")
return existing_download
# Get the appropriate downloader class based on the engine type
EngineManager.engine_with_name(self.engine).downloader().download_engine(
self.version, download_location=EngineManager.engines_path, system_os=self.system_os, cpu=self.cpu,
timeout=300)
# remove itself from the downloader list
EngineManager.download_tasks.remove(self)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')