refactor(update): 重构更新模块并添加新功能
- 移除了不必要的导入和冗余代码- 新增了从文件读取版本号和路径的功能 - 实现了将新版本复制到指定路径的逻辑 - 添加了重命名旧版本和删除源文件的功能 - 新增了运行新版本的函数
This commit is contained in:
185
update.py
185
update.py
@ -1,162 +1,39 @@
|
||||
import requests
|
||||
import time
|
||||
import tkinter.messagebox
|
||||
import subprocess
|
||||
import os
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
def update(labelframe_settings, check_update_button, root, version, resource_path, appdata, datalist, version_json, screen_height, screen_width, update_path, data_resp, latest_version, download_page, update_progressbar, app_progressbar, update_url, app_url):
|
||||
global downloaded, total_length
|
||||
appdata = os.getenv("APPDATA")
|
||||
update_path = appdata + "/.NFLmusic/update/"
|
||||
|
||||
def f_update_progressbar():
|
||||
while True:
|
||||
progress = int((downloaded / total_length) * 100)
|
||||
update_progressbar['value'] = progress
|
||||
if downloaded == total_length:
|
||||
break
|
||||
time.sleep(0.05)
|
||||
with open(f"{update_path}file_path", "r") as f:
|
||||
data = f.read()
|
||||
version = data.split("\n")[0]
|
||||
path = data.split("\n")[1]
|
||||
|
||||
def f_app_progressbar():
|
||||
while True:
|
||||
progress = int((downloaded / total_length) * 100)
|
||||
app_progressbar['value'] = progress
|
||||
if downloaded == total_length:
|
||||
break
|
||||
time.sleep(0.05)
|
||||
source_file = f"{update_path}NFLmusicv{version}.exe"
|
||||
|
||||
def prevent_closing():
|
||||
pass
|
||||
new_path = path.rsplit("\\", 1)[0]
|
||||
|
||||
def run_update():
|
||||
subprocess.Popen(update_path + "update.exe")
|
||||
|
||||
if not os.path.exists(appdata + "/.NFLmusic/update"):
|
||||
os.mkdir(appdata + "/.NFLmusic/update")
|
||||
if not have_checked:
|
||||
data_url = "http://git.nanfengling.cn/NFL_jiancx/NFLmusic/raw/branch/master/version_info/data"
|
||||
data_resp = requests.get(data_url)
|
||||
data_resp.close()
|
||||
datalist = data_resp.text.replace("\r", "").split("\n")
|
||||
update_path = appdata + "/.NFLmusic/update/"
|
||||
data_url = "http://git.nanfengling.cn/NFL_jiancx/NFLmusic/raw/branch/master/version_info/latest_update_log"
|
||||
data_resp = requests.get(data_url).text
|
||||
latest_version = datalist[0]
|
||||
if latest_version != version:
|
||||
if not jsondata["auto_update"]:
|
||||
response = tkinter.messagebox.askquestion(
|
||||
lang.get(la, "mbox.title.update_reminding", {"_version_": latest_version}),
|
||||
lang.get(la, "mbox.text.update_reminding", {"_update_": data_resp}))
|
||||
if response == "yes":
|
||||
check_update_button["state"] = "disabled"
|
||||
# 将root隐藏
|
||||
root.withdraw()
|
||||
download_page = download_page
|
||||
download_page.geometry(f"360x200+{x_dl}+{y_dl}")
|
||||
download_page.title(lang.get(la, "mbox.title.update_start", {"_version_": latest_version}))
|
||||
download_page.protocol("WM_DELETE_WINDOW", prevent_closing)
|
||||
download_page.resizable(False, False)
|
||||
download_page.iconbitmap(resource_path + "/.NFLmusic/resource/icon.ico")
|
||||
update_progressbar = update_progressbar
|
||||
app_progressbar = app_progressbar
|
||||
Label(download_page, text=lang.get(la, "ui.update.text.download_update")).pack()
|
||||
update_progressbar.pack()
|
||||
Label(download_page, text=f"\n\n{lang.get(la, 'ui.update.text.download_app')}").pack()
|
||||
app_progressbar.pack()
|
||||
update_url = datalist[1]
|
||||
app_url = datalist[2]
|
||||
try:
|
||||
update_resp = requests.get(update_url, stream=True)
|
||||
app_resp = requests.get(app_url, stream=True)
|
||||
with open(update_path + "file_path", "w") as f:
|
||||
f.write(latest_version + "\n" + os.path.abspath(sys.executable))
|
||||
with open(update_path + "update.exe", "wb") as f:
|
||||
total_length = int(update_resp.headers.get('content-length'))
|
||||
downloaded = 0
|
||||
utils.run(f_update_progressbar)
|
||||
for data in update_resp.iter_content(chunk_size=1024):
|
||||
downloaded += len(data)
|
||||
f.write(data)
|
||||
time.sleep(0.1)
|
||||
with open(update_path + f"NFLmusicv{latest_version}.exe", "wb") as f:
|
||||
total_length = int(app_resp.headers.get('content-length'))
|
||||
downloaded = 0
|
||||
utils.run(f_app_progressbar)
|
||||
for data in app_resp.iter_content(chunk_size=1024):
|
||||
downloaded += len(data)
|
||||
f.write(data)
|
||||
run_update()
|
||||
download_page.destroy()
|
||||
root.destroy()
|
||||
except:
|
||||
download_page.destroy()
|
||||
tkinter.messagebox.showerror(title=lang.get(la, "mbox.title.update_fail"),
|
||||
message=lang.get(la, "mbox.text.update_fail", ))
|
||||
else:
|
||||
check_update_button["state"] = "normal"
|
||||
else:
|
||||
tkinter.messagebox.showinfo(lang.get(la, "mbox.title.update_start", {"_version_": latest_version}),
|
||||
lang.get(la, "mbox.text.update_start_auto", {"_update_": data_resp}))
|
||||
check_update_button["state"] = "disabled"
|
||||
# 将root隐藏
|
||||
root.withdraw()
|
||||
download_page = download_page
|
||||
download_page.geometry(f"360x200+{x_dl}+{y_dl}")
|
||||
download_page.title(lang.get(la, "mbox.title.update_start", {"_version_": latest_version}))
|
||||
download_page.protocol("WM_DELETE_WINDOW", prevent_closing)
|
||||
download_page.resizable(False, False)
|
||||
download_page.iconbitmap(resource_path + "/.NFLmusic/resource/icon.ico")
|
||||
update_progressbar = update_progressbar
|
||||
app_progressbar = app_progressbar
|
||||
Label(download_page, text=lang.get(la, "ui.update.text.download_update")).pack()
|
||||
update_progressbar.pack()
|
||||
Label(download_page, text=f"\n\n{lang.get(la, 'ui.update.text.download_app')}").pack()
|
||||
app_progressbar.pack()
|
||||
update_url = datalist[1]
|
||||
app_url = datalist[2]
|
||||
try:
|
||||
update_resp = requests.get(update_url, stream=True)
|
||||
app_resp = requests.get(app_url, stream=True)
|
||||
with open(update_path + "file_path", "w") as f:
|
||||
f.write(latest_version + "\n" + os.path.abspath(sys.executable))
|
||||
with open(update_path + "update.exe", "wb") as f:
|
||||
total_length = int(update_resp.headers.get('content-length'))
|
||||
downloaded = 0
|
||||
utils.run(f_update_progressbar)
|
||||
for data in update_resp.iter_content(chunk_size=1024):
|
||||
downloaded += len(data)
|
||||
f.write(data)
|
||||
time.sleep(0.1)
|
||||
with open(update_path + f"NFLmusicv{latest_version}.exe", "wb") as f:
|
||||
total_length = int(app_resp.headers.get('content-length'))
|
||||
downloaded = 0
|
||||
utils.run(f_app_progressbar)
|
||||
for data in app_resp.iter_content(chunk_size=1024):
|
||||
downloaded += len(data)
|
||||
f.write(data)
|
||||
run_update()
|
||||
download_page.destroy()
|
||||
root.destroy()
|
||||
except Exception as e:
|
||||
# 重新显示窗口
|
||||
root.deiconify()
|
||||
print(e)
|
||||
download_page.destroy()
|
||||
tkinter.messagebox.showerror(title=lang.get(la, "mbox.title.update_fail"),
|
||||
message=lang.get(la, "mbox.text.update_fail", ))
|
||||
|
||||
def check_update(labelframe_settings, check_update_button, version, datalist, have_checked):
|
||||
check_update_button["state"] = "disabled"
|
||||
while True:
|
||||
try:
|
||||
data_url = "http://git.nanfengling.cn/NFL_jiancx/NFLmusic/raw/branch/master/version_info/data"
|
||||
data_resp = requests.get(data_url)
|
||||
datalist = data_resp.text.replace("\r", "").split("\n")
|
||||
latest_version = datalist[0]
|
||||
data_resp.close()
|
||||
if version == latest_version:
|
||||
tkinter.messagebox.showinfo(lang.get(la, "mbox.title.update_reminding", {"- v_version_": ""}),
|
||||
lang.get(la, "mbox.text.update_latest"))
|
||||
check_update_button["state"] = "normal"
|
||||
else:
|
||||
update(labelframe_settings, check_update_button, root, version, resource_path, appdata, datalist, version_json, screen_height, screen_width, update_path, data_resp, latest_version, download_page, update_progressbar, app_progressbar, update_url, app_url)
|
||||
with open(source_file, "rb") as f:
|
||||
content = f.read()
|
||||
with open(path, "wb") as f:
|
||||
f.write(content)
|
||||
break
|
||||
except:
|
||||
check_update_button["state"] = "normal"
|
||||
have_checked = True
|
||||
pass
|
||||
time.sleep(0.05)
|
||||
|
||||
try:
|
||||
os.rename(path, f"NFLmusicv{version}.exe")
|
||||
except:
|
||||
pass
|
||||
os.remove(source_file)
|
||||
|
||||
|
||||
def run_NFLmusic():
|
||||
subprocess.Popen(new_path + f"/NFLmusicv{version}.exe")
|
||||
|
||||
|
||||
run_NFLmusic()
|
Reference in New Issue
Block a user