diff --git a/help/index.html b/Help/index.html
similarity index 100%
rename from help/index.html
rename to Help/index.html
diff --git a/Language.json b/Language.json
index 16129a4..6cbff77 100644
--- a/Language.json
+++ b/Language.json
@@ -18,7 +18,8 @@
"Name": "程序",
"Menu": [
"清空软件历史记录",
- "退出程序"
+ "退出程序",
+ "程序设置"
]
},
{
@@ -112,7 +113,9 @@
"Menu": [
"程序官网",
"关于",
- "反馈程序问题和建议"
+ "反馈程序问题和建议",
+ "检查更新",
+ "更多帮助"
]
}
]
@@ -152,7 +155,8 @@
"Name": "Program",
"Menu": [
"Clean Program History",
- "Exit The Program"
+ "Exit The Program",
+ "Program Setting"
]
},
{
@@ -246,7 +250,9 @@
"Menu": [
"Program WebSize",
"Program Help",
- "Upload Problem And Advice"
+ "Upload Problem And Advice",
+ "ABout This Program",
+ "More Help"
]
}
]
diff --git a/README.md b/README.md
index 3a371c9..be2cf48 100755
--- a/README.md
+++ b/README.md
@@ -17,7 +17,10 @@
##### 目前更新内容
**※1、更换了新的图标(暂未全部更新完成!)**
**※2、支持程序的评分和查看分数详情的功能(如果炸了我的服务器,这个就作废了)**
-**※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化**
+**※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化**
+**※4、添加更新功能,可以自行升级到最新版本(如果炸了我的服务器,这个就作废了)**
+**※5、新增程序帮助**
+6、新填彩蛋(在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)
#### V1.5.3(2021-12-12,DDUC11版):
##### 更新内容
diff --git a/information.json b/information.json
index ab6a395..7cad6cb 100755
--- a/information.json
+++ b/information.json
@@ -1,4 +1,5 @@
{
+ "Package": "spark-uengine-runner",
"Url": [
"https://gitee.com/gfdgd-xi/uengine-runner",
"https://github.com/gfdgd-xi/uengine-runner"
@@ -21,6 +22,13 @@
"5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
],
"Update": [
+ "V1.6.0:",
+ "※1、更换了新的图标(暂未全部更新完成!)",
+ "※2、支持程序的评分和查看分数详情的功能(如果炸了我的服务器,这个就作废了)",
+ "※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化",
+ "※4、添加更新功能,可以自行升级到最新版本(如果炸了我的服务器,这个就作废了)",
+ "※5、新增程序帮助",
+ "6、新填彩蛋(在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)",
"V1.5.3:",
"※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题",
"※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应,参考报错",
diff --git a/main.py b/main.py
index 505ca2a..da2ea10 100755
--- a/main.py
+++ b/main.py
@@ -38,6 +38,7 @@ import tkinter.filedialog as filedialog
import tkinter.simpledialog as simpledialog
from getxmlimg import getsavexml
+win = tk.Tk() # 创建窗口
# 卸载程序
def UninstallProgram(package: "apk 包名")->"卸载程序":
@@ -45,8 +46,8 @@ def UninstallProgram(package: "apk 包名")->"卸载程序":
global fineUninstallApkHistory
Return = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(package))
print(Return)
- if os.path.exists("{}/.local/share/applications/{}.desktop".format(get_home(), package)):
- os.remove("{}/.local/share/applications/{}.desktop".format(get_home(), package))
+ if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package)):
+ os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package))
if os.path.exists("{}/{}.desktop".format(get_desktop_path(), package)):
os.remove("{}/{}.desktop".format(get_desktop_path(), package))
findApkHistory.append(ComboInstallPath.get())
@@ -70,6 +71,7 @@ def ButtonClick8():
path = GetApkPackageName(ComboInstallPath.get())
else:
path = ComboInstallPath.get()
+ print(path)
threading.Thread(target=UninstallProgram, args=[path]).start()
# 浏览窗口
@@ -97,9 +99,14 @@ def Button3Install():
# 安装应用
def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
try:
+ if not os.path.exists("/tmp/uengine-runner"):
+ os.makedirs("/tmp/uengine-runner")
if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
print("Mkdir")
os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
+ # 读取设置
+ setting = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
+ # 安装应用
print("start install apk")
global findApkHistory
print("start install apk12")
@@ -110,6 +117,14 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
if not os.path.exists(iconSaveDir):
os.makedirs(iconSaveDir,exist_ok=True)
SaveApkIcon(path, iconSavePath)
+ try:
+ if setting["SaveApk"]:
+ shutil.copy(path, "/tmp/uengine-runner/bak.apk")
+ except:
+ if not messagebox.askyesno(title="错误", message="无法备份安装包,是否不备份安装包继续安装?\n提示:新版UEngine安装后会自动删除安装包"):
+ DisabledAndEnbled(False)
+ return
+ setting["SaveApk"] = False
print("start install apk2")
BuildUengineDesktop(GetApkPackageName(path), GetApkActivityName(path), GetApkChineseLabel(path), iconSavePath,
"{}/{}.desktop".format(get_desktop_path(), GetApkPackageName(path)))
@@ -118,6 +133,11 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
"{}/.local/share/applications/uengine/{}.desktop".format(get_home(), GetApkPackageName(path)))
commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
print(commandReturn)
+ try:
+ if setting["SaveApk"]:
+ shutil.copy("/tmp/uengine-runner/bak.apk", path)
+ except:
+ messagebox.showerror(title="错误", message="无法还原安装包\n提示:新版UEngine安装后会自动删除安装包,备份的Apk在/tmp/uengine-runner/bak.apk,电脑重启后就会丢失!")
print("\nprint install complete")
if quit:
print(commandReturn)
@@ -349,6 +369,8 @@ def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
# 保存apk图标
def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
try:
+ if os.path.exists(iconSavePath):
+ os.remove(iconSavePath)
info = GetApkInformation(apkFilePath)
for line in info.split('\n'):
if "application:" in line:
@@ -633,24 +655,61 @@ def GetApkVersion(apkFilePath):
def VersionCheck(version1, version2):
return version1 == version2
-
+
+def ShowHelp():
+ webbrowser.open_new_tab(programPath + "/Help/index.html")
+
+class SettingWindow():
+ saveApkOption = tk.IntVar()
+ def ShowWindow():
+ setting = tk.Toplevel()
+ setting.resizable(0, 0)
+ setting.iconphoto(False, tk.PhotoImage(file=iconPath))
+ setting.title("设置 UEngine 运行器" + version)
+ saveApkFrame = ttk.LabelFrame(setting, text="Apk 安装设置")
+ try:
+ data = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
+ except:
+ messagebox.showerror(title="错误", message="读取设置错误!无法打开设置窗口!")
+ setting.destroy()
+ SettingWindow.saveApkOption = tk.IntVar()
+ SettingWindow.saveApkOption.set(int(data["SaveApk"]))
+ ttk.Radiobutton(saveApkFrame, text="不备份Apk包直接安装", value=0, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
+ ttk.Radiobutton(saveApkFrame, text="备份Apk包然后在安装后自动拷贝原先目录", value=1, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
+ controlFrame = ttk.Frame(setting)
+ ttk.Button(controlFrame, text="取消", command=setting.destroy).grid(row=0, column=0)
+ ttk.Button(controlFrame, text="保存", command=SettingWindow.SaveSetting).grid(row=0, column=1)
+ saveApkFrame.pack()
+ controlFrame.pack(anchor=tk.E)
+ def SaveSetting():
+ try:
+ write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": bool(SettingWindow.saveApkOption.get())}))
+ except:
+ traceback.print_exc()
+ messagebox.showerror(title="错误", message="保存设置错误!")
+ return
+ messagebox.showinfo(title="提示", message="设置保存完毕!")
+
class UpdateWindow():
+ data = {}
def ShowWindow():
update = tk.Toplevel()
update.title("检查更新")
+ update.resizable(0, 0)
+ update.iconphoto(False, tk.PhotoImage(file=iconPath))
versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:未知\n更新内容:".format(version))
updateText = tk.Text(update)
controlFrame = ttk.Frame(update)
- ok = ttk.Button(controlFrame, text="更新", command=UpdateWindow.Update)
+ ok = ttk.Button(controlFrame, text="更新(更新过程中会关闭所有Python应用,包括这个应用)", command=UpdateWindow.Update)
cancel = ttk.Button(controlFrame, text="取消", command=update.destroy)
try:
- data = json.loads(requests.get("http://120.25.153.144/uengine-runner/update.json").text)
- versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:{}\n更新内容:".format(version, data["Version"]))
- if data["Version"] == version:
+ UpdateWindow.data = json.loads(requests.get("http://120.25.153.144/uengine-runner/update.json").text)
+ versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:{}\n更新内容:".format(version, UpdateWindow.data["Version"]))
+ if UpdateWindow.data["Version"] == version:
updateText.insert("0.0", "此为最新版本,无需更新")
ok.configure(state=tk.DISABLED)
else:
- updateText.insert("0.0", data["New"])
+ updateText.insert("0.0", UpdateWindow.data["New"].replace("\\n", "\n"))
except:
traceback.print_exc()
messagebox.showerror(title="错误", message="无法连接服务器!")
@@ -663,9 +722,29 @@ class UpdateWindow():
ok.grid(row=0, column=1)
update.mainloop()
def Update():
- os.system("")
+ if not os.path.exists("/tmp/uengine-runner/update"):
+ os.makedirs("/tmp/uengine-runner/update")
+ try:
+ write_txt("/tmp/uengine-runner/update.sh", """#!/bin/bash
+echo 删除多余的安装包
+rm -rfv /tmp/uengine-runner/update/*
+echo 关闭“UEngine 运行器”以及其它“Python 应用”
+killall python3
+echo 下载安装包
+wget -P /tmp/uengine-runner/update {}
+echo 安装安装包
+dpkg -i /tmp/uengine-runner/update/*.deb
+echo 修复依赖关系
+apt install -f -y
+notify-send -i uengine "更新完毕!"
+zenity --info --text=\"更新完毕!\" --ellipsize
+""".format(UpdateWindow.data["Url"][int(information["Package"] == "com.gitee.uengine.runner.spark")], iconPath))
+ except:
+ traceback.print_exc()
+ easygui.textbox(title="错误", msg="更新出现错误,无法继续更新!", text=traceback.format_exc())
+ os.system("deepin-terminal -e pkexec bash /tmp/uengine-runner/update.sh")
-
+image = None
class ApkInformation():
def ShowWindows():
global fullInformation
@@ -677,6 +756,7 @@ class ApkInformation():
messagebox.showerror(title="错误", message="该应用安装包异常,无法查询相关数据!")
return
message = tk.Toplevel()
+ message.title("“{}“的Apk信息".format(GetApkChineseLabel(path)))
message.iconphoto(False, tk.PhotoImage(file=iconPath))
tab = ttk.Notebook(message)
@@ -705,11 +785,13 @@ class ApkInformation():
# 获取图标
SaveApkIcon(path, "/tmp/uengine-runner-android-app-icon.png")
# 读取图标
+ global image
image = Image.open("/tmp/uengine-runner-android-app-icon.png")
if image.size[0] + image.size[1] <= 512:
- ttk.Label(tab1, image=ImageTk.PhotoImage(image)).pack()
+ ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png"))).pack()
else:
- ttk.Label(tab1, image=ImageTk.PhotoImage(image.resize((256, 256), Image.ANTIALIAS))).pack()
+ ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png").resize((256, 256), Image.ANTIALIAS))).pack()
+ image.close()
info = '''包名:{}
中文名:{}
Activity:{}
@@ -1096,6 +1178,24 @@ if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApkIcon.json"):
write_txt(get_home() + "/.config/uengine-runner/SaveApkIcon.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件
if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApk.json"): # 如果没有配置文件
write_txt(get_home() + "/.config/uengine-runner/SaveApk.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件
+if not os.path.exists(get_home() + "/.config/uengine-runner/setting.json"):
+ choose = None
+ choose = easygui.indexbox(msg="""在使用本程序前,请选择安装Apk包的设置以便更好的运行,下列选项的详细介绍:
+
+不备份Apk包直接安装:适用于Deepin(旧版UEngine),安装较快,不受/tmp大小所限,但Deepin23和UOS(新版UEngine)不推荐此选项,因为安装后会自动删除Apk安装包;
+备份Apk包然后在安装后自动拷贝原先目录:适用于Deepin23和UOS(新版UEngine),安装较慢,受/tmp大小所限,安装后不会丢失Apk,Deepin(旧版UEngine)不推荐使用该选项;
+
+
+后期可以在程序主界面的菜单栏的“程序”=>“设置”里进行修改,
+如果不知道正在使用的系统是什么版本可以打开系统设置查看。
+""", title="设置", choices=["不备份Apk包直接安装", "备份Apk包然后在安装后自动拷贝原先目录"])
+ if choose == None:
+ root = tk.Tk()
+ root.withdraw()
+ messagebox.showinfo(title="提示", message="必须选择一个选项!否则无法进入程序!")
+ sys.exit()
+ write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": int(choose)}))
+
###########################
# 设置变量
@@ -1219,7 +1319,7 @@ def showhelp():
###########################
# 窗口创建
###########################
-win = tk.Tk() # 创建窗口
+
# 设置窗口
style = ttkthemes.ThemedStyle(win)
@@ -1275,6 +1375,7 @@ menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Name"],
menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Name"], menu=help)
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][0], command=CleanProgramHistory)
+programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][2], command=SettingWindow.ShowWindow)
programmenu.add_separator() # 设置分界线
programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][1], command=window.quit) # 设置“退出程序”
@@ -1308,8 +1409,9 @@ uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"
uengine.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"], menu=uengineRoot)
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0], command=OpenProgramURL) # 设置“程序官网”项
-help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload) # 设置“程序官网”项
-help.add_command(label="检查更新", command=UpdateWindow.ShowWindow)
+help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload) # 设置“传bug”项
+help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4], command=ShowHelp) # 设置“更多帮助”项
+help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3], command=UpdateWindow.ShowWindow)
help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1], command=showhelp) # 设置“关于这个程序”项
uengineService.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][0], command=StartUengine)