fix vanilla downloader
This commit is contained in:
parent
582a4eaf6c
commit
a8ca0b11bf
@ -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()
|
Loading…
Reference in New Issue
Block a user