Add donwloaded megabytes and current download speed to the

download window
This commit is contained in:
alessandro90
2019-05-14 20:17:51 +02:00
parent bc63e56e32
commit 825386a8f1
4 changed files with 80 additions and 11 deletions

View File

@@ -1,12 +1,14 @@
import asyncio
from enum import Enum, auto
from io import BytesIO
from math import ceil
import os.path
from shutil import rmtree
from time import time
from zipfile import ZipFile
import aiohttp
import urllib3
from PyQt5.QtCore import QThread
from PyQt5.QtCore import QThread, pyqtSignal
from constants import Constants, Database, ChecksumWhat
from utilities import checksum_ok
@@ -30,23 +32,56 @@ class BaseDownloadThread(QThread):
class DownloadThread(BaseDownloadThread):
progress = pyqtSignal(int, float)
CHUNK = 1024**2
def __init__(self):
super().__init__()
self.reason = 0
def __pretty_len(self, byte_obj):
mega = len(byte_obj) / self.CHUNK
if mega.is_integer():
return int(mega)
else:
return ceil(mega)
def __get_download_speed(self, data, delta):
return round(
(len(data) / self.CHUNK) / delta,
2
)
def run(self):
self.status = ThreadStatus.UNDEFINED
raw_data = bytes(0)
try:
db = urllib3.PoolManager().request('GET', Database.LINK_LOC)
except urllib3.exceptions.MaxRetryError: # No internet connection.
db = urllib3.PoolManager().request(
'GET',
Database.LINK_LOC,
preload_content=False
)
while True:
start = time()
data = db.read(self.CHUNK)
delta = time() - start
if not data:
break
raw_data += data
self.progress.emit(
self.__pretty_len(raw_data),
self.__get_download_speed(data, delta)
)
db.release_conn()
except Exception: # No internet connection.
db.release_conn()
self.status = ThreadStatus.NO_CONNECTION_ERR
return
if db.status != 200:
self.reason = db.reason
self.status = ThreadStatus.BAD_DOWNLOAD_ERR
return
try:
is_checksum_ok = checksum_ok(db.data, ChecksumWhat.FOLDER)
is_checksum_ok = checksum_ok(raw_data, ChecksumWhat.FOLDER)
except Exception:
self.status = ThreadStatus.NO_CONNECTION_ERR
return
@@ -57,7 +92,8 @@ class DownloadThread(BaseDownloadThread):
if os.path.exists(Constants.DATA_FOLDER):
rmtree(Constants.DATA_FOLDER)
try:
with ZipFile(BytesIO(db.data)) as zipped:
self.progress.emit(Constants.EXTRACTING_CODE, 0.0)
with ZipFile(BytesIO(raw_data)) as zipped:
zipped.extractall()
except Exception:
self.status = ThreadStatus.UNKNOWN_ERR