import zipfile, tarfile, platform, os, time, shutil, thread from Tkinter import Tk, HORIZONTAL from ttk import Label, Progressbar ext = { "Windows": "zip", "Darwin": "zip", "Linux": "gz" } def extractzip(progressbar): # Windows and Mac archive = zipfile.ZipFile("update.zip") if platform.system() == "Darwin": shutil.rmtree("AO2XP.app", ignore_errors=True) # delete the old app package. #archive.extractall() # extract the new version for i in range(len(archive.filelist)): archive.extract(archive.filelist[i]) progressbar["value"] = 100. * i / len(archive.filelist) if os.path.exists("appbase"): # on a mac with the base folder moved out of .app Resources folder os.system("mv appbase AO2XP.app/Contents/Resources/") # put it back in place def extractgz(progressbar): # Linux archive = tarfile.open("update.tar.gz") archive.extractall() if os.path.exists("update." + ext[platform.system()]): window = Tk() window.title("AO2XP updater") window.wm_resizable(0,0) window.geometry("256x64") lb = Label(window) lb.pack() pb = Progressbar(window, orient=HORIZONTAL, length=100, mode="indeterminate") pb.pack(fill="x") pb.start() def extractThread(): time.sleep(0.1) lb["text"] = "Waiting 3 seconds for AO2XP to close..." time.sleep(3) pb.stop() pb["value"] = 0 pb["mode"] = "determinate" lb["text"] = "Extracting update." + ext[platform.system()] + "..." globals()["extract" + ext[platform.system()]](pb) # call the extract function according to OS lb["text"] = "Done!\nYou can now start AO2XP." os.remove("update." + ext[platform.system()]) time.sleep(4) window.destroy() thread.start_new_thread(extractThread, ()) window.mainloop() else: print "This program will be automatically run by AO2XP to apply updates.\nYou do not need to run this yourself." raw_input("Press enter to exit.\n")