diff --git a/basedownloader.py b/basedownloader.py index e2d0062..d9a394a 100644 --- a/basedownloader.py +++ b/basedownloader.py @@ -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.finished.emit() return - - latest_version = manifest["versions"][0]["version"] - print latest_version - link = "" - check_hash = "" - for actions in manifest["versions"][0]["full"]: + + downloads = [] + selected_version = 0 + while not "full" in manifest["versions"][selected_version]: + version = manifest["versions"][selected_version] + + 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": - link = actions["url"] - check_hash = actions["hash"] - print link + downloads.insert(0, [manifest["versions"][selected_version]["version"], actions["url"], actions["hash"]]) + print "full:\t"+repr(downloads[0]) 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 - 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 + if download_it: + self.labelText.emit("Downloading version '%s'..." % version) + 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): + if not self.jm.isVisible(): + downloadfile.close() + returncode = -5 + return + + 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() - if download_it: - self.labelText.emit("Downloading version '%s'..." % latest_version) - 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")) + self.labelText.emit("Opening '%s'..." % filename) + zip = zipfile.ZipFile(filename) - for noby in zip.iter_content(chunk_size=4096): - if not self.jm.isVisible(): - downloadfile.close() - returncode = -5 - return + notheme_list = [] + + for f in zip.filelist: + if not "base/themes" in f.filename: + notheme_list.append(f.filename) - 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" % (latest_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" % (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) + 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 self.finished.emit() \ No newline at end of file