fix vanilla downloader

This commit is contained in:
Headshotnoby 2021-05-26 21:46:21 -04:00
parent 582a4eaf6c
commit a8ca0b11bf

View File

@ -55,83 +55,91 @@ class downloadThread(QtCore.QThread):
self.showMessageBox.emit("critical", "Download failed", "Could not check for latest AO vanilla version.\nPlease check your internet connection.") self.showMessageBox.emit("critical", "Download failed", "Could not check for latest AO vanilla version.\nPlease check your internet connection.")
self.finished.emit() self.finished.emit()
return return
latest_version = manifest["versions"][0]["version"] downloads = []
print latest_version selected_version = 0
link = "" while not "full" in manifest["versions"][selected_version]:
check_hash = "" version = manifest["versions"][selected_version]
for actions in manifest["versions"][0]["full"]:
if "update" in version:
for actions in version["update"]:
if actions["action"] == "dl":
downloads.insert(0, [version["version"], actions["url"], actions["hash"]])
print "update:\t"+repr(downloads[0])
break
selected_version += 1
for actions in manifest["versions"][selected_version]["full"]:
if actions["action"] == "dl": if actions["action"] == "dl":
link = actions["url"] downloads.insert(0, [manifest["versions"][selected_version]["version"], actions["url"], actions["hash"]])
check_hash = actions["hash"] print "full:\t"+repr(downloads[0])
print link
break break
#link = "http://somepeople.ddns.net/headbot/song.zip" for version, link, check_hash in downloads:
resume_bytes = 0
filename = os.path.basename(link)
download_it = True
if not os.path.exists(filename):
downloadfile = open(filename, "wb")
else:
existing_data = open(filename, "rb").read()
sha1 = sha.new(existing_data).hexdigest()
downloadfile = open(filename, "ab")
resume_bytes = len(existing_data)
print resume_bytes
del existing_data
if sha1 == check_hash: # don't download, the local file already exists
download_it = False
downloadfile.close()
resume_bytes = 0 if download_it:
filename = os.path.basename(link) self.labelText.emit("Downloading version '%s'..." % version)
download_it = True dl = resume_bytes
if not os.path.exists(filename): speed = 0.0
downloadfile = open(filename, "wb") start = time.clock()
else: calcspeed_time = time.time()
existing_data = open(filename, "rb").read() zip = requests.get(link, stream=True, headers={"Range": "bytes=%d-" % resume_bytes})
sha1 = sha.new(existing_data).hexdigest() length = resume_bytes + int(zip.headers.get("content-length"))
downloadfile = open(filename, "ab")
resume_bytes = len(existing_data) for noby in zip.iter_content(chunk_size=4096):
print resume_bytes if not self.jm.isVisible():
del existing_data downloadfile.close()
returncode = -5
if sha1 == check_hash: # don't download, the local file already exists return
download_it = False
downloadfile.write(noby)
dl += len(noby)
percent = 100 * dl / length
if percent != self.jm.value():
self.progressValue.emit(percent)
self.labelText.emit("Downloading version '%s'... %.1f KB/s" % (version, speed))
if (time.time() - calcspeed_time) >= 0.5:
calcspeed_time = time.time()
speed = ((dl-resume_bytes)/(time.clock() - start)) / 1024.
self.labelText.emit("Downloading version '%s'... %.1f KB/s" % (version, speed))
print "downloaded"
downloadfile.close() downloadfile.close()
if download_it: self.labelText.emit("Opening '%s'..." % filename)
self.labelText.emit("Downloading version '%s'..." % latest_version) zip = zipfile.ZipFile(filename)
dl = resume_bytes
speed = 0.0
start = time.clock()
calcspeed_time = time.time()
zip = requests.get(link, stream=True, headers={"Range": "bytes=%d-" % resume_bytes})
length = resume_bytes + int(zip.headers.get("content-length"))
for noby in zip.iter_content(chunk_size=4096): notheme_list = []
if not self.jm.isVisible():
downloadfile.close() for f in zip.filelist:
returncode = -5 if not "base/themes" in f.filename:
return notheme_list.append(f.filename)
downloadfile.write(noby) self.labelText.emit("Extracting '%s'..." % filename)
dl += len(noby) for f in notheme_list:
percent = 100 * dl / length i = notheme_list.index(f)
if percent != self.jm.value(): zip.extract(f)
self.progressValue.emit(percent) self.progressValue.emit(100 * i / len(notheme_list))
self.labelText.emit("Downloading version '%s'... %.1f KB/s" % (latest_version, speed)) zip.close()
os.remove(filename)
if (time.time() - calcspeed_time) >= 0.5:
calcspeed_time = time.time()
speed = ((dl-resume_bytes)/(time.clock() - start)) / 1024.
self.labelText.emit("Downloading version '%s'... %.1f KB/s" % (latest_version, speed))
print "downloaded"
downloadfile.close()
self.labelText.emit("Opening '%s'..." % filename)
zip = zipfile.ZipFile(filename)
notheme_list = []
for f in zip.filelist:
if not "base/themes" in f.filename:
notheme_list.append(f.filename)
self.labelText.emit("Extracting '%s'..." % filename)
for f in notheme_list:
i = notheme_list.index(f)
zip.extract(f)
self.progressValue.emit(100 * i / len(notheme_list))
zip.close()
os.remove(filename)
returncode = 0 returncode = 0
self.finished.emit() self.finished.emit()