checkpoint. beginning download process

This commit is contained in:
Brennen Raimer
2019-05-01 17:03:57 -04:00
parent cb491c7bbd
commit 602273a219
4 changed files with 144 additions and 13 deletions
@@ -10,6 +10,7 @@ import json
from collections import deque
from itertools import product
from functools import partial
from threading import Lock
import psutil
from PyQt5 import QtCore, QtGui, QtNetwork, QtWebEngineWidgets, QtWidgets
@@ -24,6 +25,7 @@ except ImportError:
from validators.location_validator import Location_Validator
from .menu_iterator import MenuIterator
from .downloader import DownloadWorker, Downloader
class InstallerWizard(QtWidgets.QWizard):
def __init__(self, parent=None):
@@ -49,6 +51,7 @@ class InstallerWizard(QtWidgets.QWizard):
self._network_manager = QtNetwork.QNetworkAccessManager(parent=QtWidgets.QApplication.instance())
self._thread_pool = QtCore.QThreadPool.globalInstance()
self._project_page=Path("https://github.com/norweeg/portable-computing-toolkit-installer/")
self._progress_update_lock = Lock()
@QtCore.pyqtSlot("QUrl")
def _link_clicked(self, address):
@@ -327,3 +330,47 @@ class InstallerWizard(QtWidgets.QWizard):
self._display_error(f"{str().join(names_of_dependant_items)} {depend_text} on {item.text(0)}")
item.setCheckState(0, QtCore.Qt.Checked)
def _begin_downloads(self, download_queue = None, install_ready = None, download_directory = None):
if download_queue:
pass
else:
self._download_queue = Queue()
if install_ready:
pass
else:
self._install_ready = Queue()
self._download_error = Queue()
if download_directory:
pass
else:
try:
self._download_directory = QtCore.QTemporaryDir()
except Exception as e:
self._display_error(str(e), self._download_directory.errorString()).accepted.connect(lambda: self.back())
if self._download_queue.empty():
tools_by_name = {tool["name"]:tool for tool in self.__tools__}
self._download_progress = {}
for selected_tool in self._get_selections():
self._download_queue.put_nowait(tools_by_name[selected_tool.text(0)])
self.progress_bar.setRange(0, self._download_queue.qsize())
while self._thread_pool.activeThreadCount() < self._thread_pool.maxThreadCount() and not self._download_queue.empty():
self._thread_pool.tryStart(DownloadWorker(self._download_queue, self._install_ready, self._download_error, self._download_directory, self))
QtCore.QThread.currentThread().msleep(250)
assert self._download_error.empty()
@QtCore.pyqtSignal(str, int, int)
def track_progress(self, tool_name, bytes_received, bytes_total):
if tool_name not in [tool["name"] for tool in self.__tools__]:
return
else:
self._download_progress[tool_name] = bytes_received/bytes_total
self._progress_update_lock.acquire()
self.progress_bar.setValue(sum(self._download_progress.values()))
self._progress_update_lock.release()