diff --git a/Makefile b/Makefile index 3bda443..50c601b 100755 --- a/Makefile +++ b/Makefile @@ -35,6 +35,7 @@ build: cp -rv updatekiller.py new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ cp -rv pkexec/* new-deb-build/usr/share/polkit-1/actions cp -rv AutoShell new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ + cp -rv AutoConfig.py new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ cp -rv UI new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ cp -rv ConfigLanguareRunner-help.json new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ cp -rv ConfigLanguareRunner.py new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ diff --git a/information.json b/information.json index 52f0cd7..b6ce66f 100755 --- a/information.json +++ b/information.json @@ -36,12 +36,12 @@ "※10、修复 UEngine 打包器在部分系统无法打开的问题", "※11、新增程序公告功能", "※12、修复了程序更新功能从高版本降级到低版本的问题", - "13、更改程序论坛网址;", - "14、新增程序评分功能;", - "15、修复 UEngine 打包器在打包时无法正确禁用所有选项", - "16、UEngine 打包器打包的 deb 不再指定 deepin-elf-verify 依赖版本", - "17、“更多帮助”功能支持访问云端的帮助内容", - "18、……", + "※13、不强制依赖 Deepin 终端", + "14、更改程序论坛网址;", + "15、新增程序评分功能;", + "16、修复 UEngine 打包器在打包时无法正确禁用所有选项", + "17、UEngine 打包器打包的 deb 不再指定 deepin-elf-verify 依赖版本", + "18、“更多帮助”功能支持访问云端的帮助内容", "", "V1.8.3:", "※1、修复安装/打包程序时出现找不到图标的问题;", diff --git a/new-deb-build/DEBIAN/postinst b/new-deb-build/DEBIAN/postinst index 9650244..0e988d2 100755 --- a/new-deb-build/DEBIAN/postinst +++ b/new-deb-build/DEBIAN/postinst @@ -24,4 +24,4 @@ ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-laun # 因为 Ubuntu 的问题,省略 gtk-update-icon-cache /usr/share/icons/bloom > /dev/null | true # 向服务器返回安装数加1(不显示内容且忽略错误) -python3 /opt/apps/com.gitee.uengine.runner.spark/files/Download.py 1.8.3 > /dev/null | true +python3 /opt/apps/com.gitee.uengine.runner.spark/files/Download.py 2.0.0 > /dev/null | true diff --git a/new-deb-build/DEBIAN/postrm b/new-deb-build/DEBIAN/postrm index 3738e06..00679ce 100755 --- a/new-deb-build/DEBIAN/postrm +++ b/new-deb-build/DEBIAN/postrm @@ -37,6 +37,7 @@ if [ "$1" = "purge" ]; then echo /home/$username if [ -d "/home/$username/.config/uengine-runner/" ]; then rm -rf "/home/$username/.config/uengine-runner/" + rm -rf "/home/$username/.local/share/uengine-runner" fi done # 清理 root 用户的配置文件 diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/AutoConfig.py b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/AutoConfig.py new file mode 100755 index 0000000..406ceb8 --- /dev/null +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/AutoConfig.py @@ -0,0 +1,599 @@ +#!/usr/bin/env python3 +# 使用系统默认的 python3 运行 +########################################################################################### +# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 +# 版本:2.4.0 +# 更新时间:2022年10月25日 +# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 +# 基于 Python3 构建 +########################################################################################### +################# +# 引入所需的库 +################# +import os +import sys +import base64 +import json +import traceback +import urllib.request +import requests +import PyQt5.QtWidgets as QtWidgets +from UI.AutoConfig import * +from Model import * +try: + import PyQt5.QtWebEngineWidgets as QtWebEngineWidgets + webeng = True +except: + print("未安装此依赖库") + webeng = False +print("""太常引·建康中秋夜为吕叔潜赋 +一轮秋影转金波,飞镜又重磨。把酒问姮娥:被白发、欺人奈何? +乘风好去,长空万里,直下看山河。斫去桂婆娑,人道是、清光更多。""") +print("") +print("""译文:一轮缓缓移动的秋月洒下万里金波,就像那刚磨亮的铜镜又飞上了天廓。我举起酒杯问那月中的嫦娥:怎么办呢?白发日增,好像故意欺负我。 +我要乘风飞上万里长空,俯视祖国的大好山河。还要砍去月中摇曳的桂树枝柯,人们说,这将使月亮洒下人间的光辉更多。""") +print("================================") +urlSourcesList = [ + "https://code.gitlink.org.cn/gfdgd_xi/uengine-runner-list/raw/branch/master/auto", # Gitlink 源 + "https://gitee.com/gfdgd-xi/uengine-wine-runner-auto-configuration-script/raw/master/", # Gitee 源 + "https://gfdgd-xi.github.io/uengine-wine-runner-auto-configuration-script/", # Github 源 + "http://gfdgdxi.msns.cn/uengine-runner-list/auto/", # 备用源1,纯 IPv6 源 + "http://gfdgdxi.free.idcfengye.com/uengine-runner-auto-configuration-script/", # 备用源2 + "http://gfdgdxi.free.idcfengye.com/uengine-runner-list/auto/", # 备用源 3 + "http://127.0.0.1/uengine-runner-list/auto/" # 本地测试源 +] +urlSources = urlSourcesList[0] +lists = [] + +class ProgramRunStatusUpload(): + msgWindow = None + starLayout = None + fen = None + starList = [] + sha1Value = "" + programName = None + def ChangeStar(): + if ProgramRunStatusUpload.fen.currentIndex() > 5: + for i in ProgramRunStatusUpload.starList: + i.setText(f"") + return + for i in range(ProgramRunStatusUpload.fen.currentIndex()): + ProgramRunStatusUpload.starList[i].setText(f"") + head = ProgramRunStatusUpload.fen.currentIndex() + end = len(ProgramRunStatusUpload.starList) + for i in range(head, end): + ProgramRunStatusUpload.starList[i].setText(f"") + + def ShowWindow(sha="", title=""): + ProgramRunStatusUpload.starList = [] + ProgramRunStatusUpload.sha1Value = sha + ProgramRunStatusUpload.msgWindow = QtWidgets.QMainWindow() + msgWidget = QtWidgets.QWidget() + msgWidgetLayout = QtWidgets.QGridLayout() + ProgramRunStatusUpload.programName = QtWidgets.QLineEdit() + ProgramRunStatusUpload.fen = QtWidgets.QComboBox() + ProgramRunStatusUpload.starLayout = QtWidgets.QHBoxLayout() + upload = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "上传")) + upload.clicked.connect(ProgramRunStatusUpload.Upload) + if title != "": + ProgramRunStatusUpload.programName.setText(title) + ProgramRunStatusUpload.programName.setDisabled(True) + # 生成星星列表 + for i in [1, 1, 1, 1, 0]: + ProgramRunStatusUpload.starList.append(QtWidgets.QLabel(f"")) + ProgramRunStatusUpload.starLayout.addWidget(ProgramRunStatusUpload.starList[-1]) + ProgramRunStatusUpload.starLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)) + ProgramRunStatusUpload.programName.setPlaceholderText(QtCore.QCoreApplication.translate("U", "如果这个程序和程序名确实是合法还是检测到敏感词,改为“NULL”即可")) + ProgramRunStatusUpload.fen.addItems(["0分", "1分", "2分", "3分", "4分", "5分"]) + ProgramRunStatusUpload.fen.setCurrentIndex(4) + ProgramRunStatusUpload.fen.currentIndexChanged.connect(ProgramRunStatusUpload.ChangeStar) + msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "程序名:")), 0, 0) + msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "评分:")), 1, 0) + msgWidgetLayout.addWidget(ProgramRunStatusUpload.programName, 0, 1) + msgWidgetLayout.addWidget(ProgramRunStatusUpload.fen, 1, 1) + msgWidgetLayout.addLayout(ProgramRunStatusUpload.starLayout, 2, 1) + msgWidgetLayout.addWidget(upload, 3, 1) + msgWidget.setLayout(msgWidgetLayout) + ProgramRunStatusUpload.msgWindow.setCentralWidget(msgWidget) + ProgramRunStatusUpload.msgWindow.setWindowTitle(QtCore.QCoreApplication.translate("U", "上传程序运行情况")) + ProgramRunStatusUpload.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) + ProgramRunStatusUpload.msgWindow.show() + + def Upload(): + try: + #if ProgramRunStatusUpload.sha1Value == "": + #ProgramRunStatusUpload.sha1Value = ProgramRunStatusUpload.GetSHA1(e2.currentText()) + QtWidgets.QMessageBox.information(None, QtCore.QCoreApplication.translate("U", "提示"), requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL2Jhc2g=").decode("utf-8"), { + "BashName": ProgramRunStatusUpload.sha1Value, + "Fen": ProgramRunStatusUpload.fen.currentIndex() + }).json()["Error"]) + except: + traceback.print_exc() + QtWidgets.QMessageBox.critical(None, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "数据上传失败!")) + +class InformationWindow(): + def ShowWindow(): + #webeng = False + # 获取选中项 + try: + choose = ui.searchList.selectionModel().selectedIndexes()[0].data() + except: + QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") + return + fileName = "" + for i in lists: + print(i) + if i[0] == choose: + fileName = i[1] + break + aboutHtml = "" + try: + get = requests.get(f"{urlSources}/information/{fileName}.txt") + if get.status_code / 100 != 2 and get.status_code / 100 != 3: + int("Bad") + about = get.text + aboutHtml = str(about) + if not "<" in about: + # 非 Html 标签 + for i in about.splitlines(): + about += f"

{i}

\n" + #about = f"
{about}
" + about = f"

关于“{choose}”的介绍

\n{about}" + except: + traceback.print_exc() + about = f"

关于“{choose}”的介绍

\n

暂无此程序的介绍

" + try: + import requests as r + fenlists = requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Jhc2hBcHBGZW4v").decode("utf-8") + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8"), timeout=1000).json() + tipsInfo = "" + except: + fenlists = [0, 0, 0, 0, 0] + tipsInfo = "暂时无人提交此脚本运行情况,是否立即提交?" + maxHead = fenlists.index(max(fenlists)) + allNumber = 0 + for i in fenlists: + allNumber += i + try: + maxNumber = max(fenlists) / allNumber * 100 + if tipsInfo == "": + tipsInfo = f"有{maxNumber}%的用户选择了这个评分" + except: + pass + end = 5 + starHtml = "" + if maxHead > 5: + for i in range(end): + if webeng: + starHtml += f"\n" + else: + starHtml += f"\n" + else: + for i in range(maxHead): + if webeng: + starHtml += f"\n" + else: + starHtml += f"\n" + head = maxHead + for i in range(head, end): + if webeng: + starHtml += f"" + else: + starHtml += f"" + about += f"\n

评分情况

\n

{starHtml}

\n

{tipsInfo}

" + message = QtWidgets.QDialog() + messageLayout = QtWidgets.QVBoxLayout() + if webeng: + informationText = QtWebEngineWidgets.QWebEngineView() + print(aboutHtml) + if aboutHtml[:7] == "Visit: ": + url = aboutHtml[7:].splitlines()[0] + print(url) + informationText.setUrl(QtCore.QUrl(url.strip())) + else: + #informationText.linkClicked.connect(lambda: print("a")) + try: + with open("/tmp/deepin-wine-runner-information.html", "w") as file: + file.write(about) + informationText.setUrl(QtCore.QUrl("file:///tmp/deepin-wine-runner-information.html")) + except: + traceback.print_exc() + informationText.setHtml(about) + #informationText.urlChanged.connect(lambda: informationText.setUrl(QtCore.QUrl("https://gfdgd-xi.github.io"))) + else: + informationText = QtWidgets.QTextBrowser() + informationText.setHtml(about) + uploadFen = QtWidgets.QPushButton("提交评分") + uploadFen.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(fileName, choose)) + + #informationText.setUrl(QtCore.QUrl("https://gfdgd-xi.github.io")) + messageLayout.addWidget(informationText) + messageLayout.addWidget(uploadFen) + message.setWindowTitle(f"关于“{choose}”的介绍") + message.resize(int(message.frameSize().width() * 1.5), int(message.frameSize().height())) + message.setLayout(messageLayout) + #message.setWindowModality(ApplicationModal); + message.show() + message.exec_() + +def Add(lists: list): + global pinLunLayout + pinLunLayout1 = QtWidgets.QVBoxLayout() + pinLunLayout = QtWidgets.QWidget() + pinLunLayout.setLayout(pinLunLayout1) + for i in range(pinLunLayout1.count()): + pinLunLayout1.removeItem(pinLunLayout1.itemAt(i)) + for i in lists: + widget = QtWidgets.QWidget() + inLayout = QtWidgets.QGridLayout() + inLayout.addWidget(QtWidgets.QLabel("
"), 0, 0, 1, 3) + inLayout.addWidget(QtWidgets.QLabel(f"{i[0]}"), 1, 0) + inLayout.addWidget(QtWidgets.QLabel(f"

第{i[1]}层

"), 1, 2) + inLayout.addWidget(QtWidgets.QLabel(i[2]), 2, 0, 1, 3) + widget.setLayout(inLayout) + pinLunLayout1.addWidget(widget) + #pinLunLayout.addWidget(QtWidgets.QLabel("
")) +# pinLunLayout = widget + +all = 0 +now = 0 +class ProgramRunStatusShow(): + msgWindow = None + pingLunLayout = None + def ShowWindow(): + global lists + global all + global now + global leftButton + global rightButton + # 获取选中项 + try: + choose = ui.searchList.selectionModel().selectedIndexes()[0].data() + except: + QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") + return + fileName = "" + for i in lists: + print(i) + if i[0] == choose: + fileName = i[1] + break + try: + fenlists = requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Jhc2hBcHBGZW4v").decode("utf-8") + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).json() + tipsInfo = "" + except: + #traceback.print_exc() + fenlists = [0, 0, 0, 0, 0] + tipsInfo = "暂时无人提交此脚本评分,是否立即提交?" + + maxHead = fenlists.index(max(fenlists)) + allNumber = 0 + for i in fenlists: + allNumber += i + try: + maxNumber = max(fenlists) / allNumber * 100 + if tipsInfo == "": + tipsInfo = f"有{maxNumber}%的用户选择了这个评分" + except: + pass + ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow() + msgWidget = QtWidgets.QWidget() + msgWidgetLayout = QtWidgets.QGridLayout() + starLayout = QtWidgets.QHBoxLayout() + uploadButton = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "点此提交评分")) + uploadButton.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(fileName, choose)) + msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "综合评价:")), 0, 0, 2, 1) + msgWidgetLayout.addLayout(starLayout, 0, 1, 2, 1) + msgWidgetLayout.addWidget(QtWidgets.QLabel(tipsInfo), 0, 2) + #msgWidgetLayout.addWidget(QtWidgets.QLabel("" if dateVersion == "" else f"数据版本:{dateVersion}"), 2, 0, 1, 2) + msgWidgetLayout.addWidget(uploadButton, 1, 2) + end = 5 + if maxHead > 5: + for i in range(end): + starLayout.addWidget(QtWidgets.QLabel(f"")) + else: + for i in range(maxHead): + starLayout.addWidget(QtWidgets.QLabel(f"")) + head = maxHead + for i in range(head, end): + starLayout.addWidget(QtWidgets.QLabel(f"")) + pingLun = QtWidgets.QWidget() + msgWidgetLayout.addWidget(pingLun, 4, 0, 1, 3) + pingLunLayout = QtWidgets.QGridLayout() + pingLunInfo = QtWidgets.QTextEdit() + #pingLunInfo.document().setMaximumBlockCount(5) + uploadButton = QtWidgets.QPushButton("评论") + pingLunLayout.addWidget(pingLunInfo, 0, 0, 1, 3) + pingLunLayout.addWidget(uploadButton, 1, 2) + pingLunInfo.setPlaceholderText("""在此输入评论,须知: +※1、不得含有色情、暴力、侮辱等违法内容以及不得有广告推广等内容 +※2、字数至少 15 字,但不得超过 250 字,评论内容最多 5 行,且评论内容将会进行审核,意味着评论不会实时生效显示 +※3、如果审核不通过将会被屏蔽并拉入黑名单,以及公开发布 IP 地址,评论前请三思!""") + leftButton = QtWidgets.QPushButton("上一页") + rightButton = QtWidgets.QPushButton("下一页") + if maxHead == 0: + #pingLun.setDisabled(True) + pass + else: + # 显示最新的3条评论 + try: + all = int(requests.get(f"{base64.b64decode('aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy9iYXNocGlubHVuL3Jhdy9icmFuY2gvbWFzdGVyLw==').decode('utf-8')}{urllib.request.quote(fileName)}/data.txt").text) + now = all - 3 + print(all) + if all < 3: + start = 0 + rightButton.setDisabled(True) + else: + start = all - 3 + uploadList = [] + for i in range(all - 1, start - 1, -1): + print(f"第 {i + 1} 条评论:") + info = requests.get(f"{base64.b64decode('aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy9iYXNocGlubHVuL3Jhdy9icmFuY2gvbWFzdGVyLw==').decode('utf-8')}{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip() + print(info) + uploadList.append([f"用户{i + 1}", i + 1, info]) + Add(uploadList) + except: + traceback.print_exc() + try: + ProgramRunStatusShow.pingLunLayout = pingLunLayout + pingLunLayout.addWidget(pinLunLayout, 2, 0, 1, 3) + except: + leftButton.setDisabled(True) + rightButton.setDisabled(True) + leftButton.clicked.connect(Left) + rightButton.clicked.connect(Right) + pingLunLayout.addWidget(leftButton, 3, 0) + pingLunLayout.addWidget(rightButton, 3, 2) + leftButton.setDisabled(True) + pingLun.setLayout(pingLunLayout) + msgWidget.setLayout(msgWidgetLayout) + uploadButton.clicked.connect(lambda: ProgramRunStatusShow.Upload(pingLunInfo.toPlainText(), fileName)) + ProgramRunStatusShow.msgWindow.setCentralWidget(msgWidget) + ProgramRunStatusShow.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) + ProgramRunStatusShow.msgWindow.setWindowTitle(f"脚本“{choose}”运行情况") + ProgramRunStatusShow.msgWindow.show() + + def Upload(info, name): + print(f"脚本:{name}") + print(f"评论:{info}") + try: + res = requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL1BpbmdMdW4=").decode("utf-8"), {"PinLun": info, "Version": name}).json() + print(res) + if res["ExitCode"]: + QtWidgets.QMessageBox.critical(ProgramRunStatusShow.msgWindow, "错误", res["Error"]) + return + QtWidgets.QMessageBox.information(ProgramRunStatusShow.msgWindow, "提示", res["Error"]) + except: + traceback.print_exc() + QtWidgets.QMessageBox.critical(ProgramRunStatusShow.msgWindow, "错误", "提交失败") + + +def UpdateFen(): + global now + fileName = "" + # 获取选中项 + try: + choose = ui.searchList.selectionModel().selectedIndexes()[0].data() + except: + QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") + return + for i in lists: + print(i) + if i[0] == choose: + fileName = i[1] + break + uploadList = [] + for i in range(now + 2, now - 1, -1): + print(f"第 {i + 1} 条评论:") + info = requests.get(f"https://code.gitlink.org.cn/gfdgd-xi-org/bashpinlun/raw/branch/master/{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip() + print(info) + uploadList.append([f"用户{i + 1}", i + 1, info]) + #ProgramRunStatusShow.pingLunLayout.removeItem(ProgramRunStatusShow.pingLunLayout.itemAt(2)) + ProgramRunStatusShow.pingLunLayout.removeWidget(pinLunLayout) + pinLunLayout.hide() + #pinLunLayout. + Add(uploadList) + #l = QtWidgets.QGridLayout() + #l.removeWidget(pinLunLayout) + ProgramRunStatusShow.pingLunLayout.addWidget(pinLunLayout, 2, 0, 1, 3) + +def Left(): + global now + global all + + if now + 6 >= all: + now = all - 3 + leftButton.setDisabled(True) + rightButton.setEnabled(True) + else: + now += 3 + leftButton.setEnabled(True) + rightButton.setEnabled(True) + UpdateFen() + print(all) + print(now) + +def Right(): + global now + if now - 3 < 0: + now = 0 + rightButton.setDisabled(True) + leftButton.setEnabled(True) + else: + now -= 3 + leftButton.setEnabled(True) + rightButton.setEnabled(True) + UpdateFen() + +def UploadFen(): + global lists + # 获取选中项 + try: + choose = ui.searchList.selectionModel().selectedIndexes()[0].data() + except: + QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") + return + fileName = "" + for i in lists: + print(i) + if i[0] == choose: + fileName = i[1] + break + ProgramRunStatusUpload.ShowWindow(fileName, choose) + +class Connect: + def SearchBotton_Clicked(): + nmodel = QtGui.QStandardItemModel(window) + if ui.searchThings.text() == "": + # 显示全部内容 + for i in lists: + nmodel.appendRow(QtGui.QStandardItem(i[0])) + ui.searchList.setModel(nmodel) + return + for i in lists: + # 显示筛选的内容 + if ui.searchThings.text().upper() in i[0].upper(): + nmodel.appendRow(QtGui.QStandardItem(i[0])) + ui.searchList.setModel(nmodel) + + def RunBotton_Clicked(): + # 获取选中项 + try: + choose = ui.searchList.selectionModel().selectedIndexes()[0].data() + except: + QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") + return + fileName = "" + for i in lists: + print(i) + if i[0] == choose: + fileName = i[1] + break + # 下载脚本 + things = "" + try: + print(f"{urlSources}/{fileName}") + file = open("/tmp/wine-runner-auto-config.wsh", "w") + things = requests.get(f"{urlSources}/{fileName}").text + file.write(things) + file.close() + except: + traceback.print_exc() + QtWidgets.QMessageBox.critical(window, "错误", "无法获取配置文件") + return + # 判断版本以启动对应的解释器 + # 做到新旧兼容 + if "($" in things: + print("a") + OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '/tmp/wine-runner-auto-config.wsh' --system") + print(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '/tmp/wine-runner-auto-config.wsh' --system") + # 执行脚本 + print(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '/tmp/wine-runner-auto-config.wsh'") + OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '/tmp/wine-runner-auto-config.wsh'") + #process = QtCore.QProcess() + #process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", "/tmp/wine-runner-auto-config.wsh", "--system"]) + #process.waitForFinished() + + def OpenFile_Triggered(): + path = QtWidgets.QFileDialog.getOpenFileName(window, "提示", homePath, "配置文件(*.sh *.wsh);;全部文件(*.*)") + if path[0] == "": + return + try: + things = "" + with open(path) as file: + things = file.read() + except: + traceback.print_exc() + # 判断版本以启动对应的解释器 + # 做到新旧兼容 + if "($" in things: + OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '{path[0]}' --system") + # 执行脚本 + OpenTerminal(f"env WINEARCH='{os.getenv('WINEARCH')}' WINEDEBUG='{os.getenv('WINEDEBUG')}' WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '{path[0]}'") + #process = QtCore.QProcess() + #process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", path[0], "--system"]) + #process.waitForFinished() + +# 读取文本文档 +def readtxt(path): + f = open(path, "r") # 设置文件对象 + str = f.read() # 获取内容 + f.close() # 关闭文本对象 + return str # 返回结果 + +def ChangeSources(): + global urlSources + sources = [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action_2, ui.action_3, ui.action] + for i in range(0, len(sources)): + if sources[i].isChecked(): + urlSources = urlSourcesList[i] + # 解析云列表 + try: + # 获取列表 + lists = json.loads(requests.get(f"{urlSources}/list.json").text) + # 解释列表并显示在 GUI 上 + nmodel = QtGui.QStandardItemModel(window) + for i in lists: + nmodel.appendRow(QtGui.QStandardItem(i[0])) + ui.searchList.setModel(nmodel) + except: + traceback.print_exc() + QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器") + break + +if __name__ == "__main__": + homePath = os.path.expanduser('~') + programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string + information = json.loads(readtxt(f"{programPath}/information.json")) + version = information["Version"] + wine = "deepin-wine6-stable" + wineprefix = f"{homePath}/.wine" + try: + wine = sys.argv[1] + wineprefix = sys.argv[2] + except: + pass + app = QtWidgets.QApplication(sys.argv) + window = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + pinLunLayout = QtWidgets.QHBoxLayout() + ui.setupUi(window) + window.setWindowTitle(f"UEngine 运行器 {version}——微型应用商店") + window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) + iconPath = "{}/runner.svg".format(programPath) + window.show() + #ui.actionGitlink.setExclusive(True) + sourcesGroup = QtWidgets.QActionGroup(window) + sourcesGroup.addAction(ui.actionGitlink) + sourcesGroup.addAction(ui.actionGitee) + sourcesGroup.addAction(ui.actionGithub) + sourcesGroup.addAction(ui.action_IPv6) + sourcesGroup.addAction(ui.action_2) + sourcesGroup.addAction(ui.action_3) + sourcesGroup.addAction(ui.action) + sourcesGroup.triggered.connect(ChangeSources) + sourcesGroup.setExclusive(True) + #for i in [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action]: + #i.triggered.connect(ChangeSources) + #pass + # 连接信号和槽 + ui.saerchBotton.clicked.connect(Connect.SearchBotton_Clicked) + #ui.uploadFen.clicked.connect(UploadFen) + ui.getInfoButton.clicked.connect(InformationWindow.ShowWindow) + ui.runBotton.clicked.connect(Connect.RunBotton_Clicked) + ui.openFile.triggered.connect(Connect.OpenFile_Triggered) + ui.exitProgram.triggered.connect(window.close) + ui.getFen.clicked.connect(ProgramRunStatusShow.ShowWindow) + # 解析云列表 + try: + # 获取列表 + lists = json.loads(requests.get(f"{urlSources}/list.json").text) + # 解释列表并显示在 GUI 上 + nmodel = QtGui.QStandardItemModel(window) + for i in lists: + nmodel.appendRow(QtGui.QStandardItem(i[0])) + ui.searchList.setModel(nmodel) + except: + traceback.print_exc() + QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器") + + app.exec_() \ No newline at end of file diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Download.py b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Download.py index 5e27126..fb6da69 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Download.py +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Download.py @@ -2,4 +2,10 @@ import sys import base64 import requests +print("""浣溪沙 +一曲新词酒一杯,去年天气旧亭台。夕阳西下几时回? +无可奈何花落去,似曾相识燕归来。小园香径独徘徊。""") +print("") +print("听一支新曲喝一杯美酒,还是去年的天气旧日的亭台,西落的夕阳何时再回来?那花儿落去我也无可奈何,那归来的燕子似曾相识,在小园的花径上独自徘徊。") +print("================================") print(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3VlbmdpbmUtcnVubmVyL0luc3RhbGwucGhwP1ZlcnNpb249").decode("utf-8") + sys.argv[1]).text) \ No newline at end of file diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/BadStar.svg b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/BadStar.svg new file mode 100755 index 0000000..7b6cfe4 --- /dev/null +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/BadStar.svg @@ -0,0 +1,81 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/Star.svg b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/Star.svg new file mode 100755 index 0000000..03c1185 --- /dev/null +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/Star.svg @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/UnStar.svg b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/UnStar.svg new file mode 100755 index 0000000..dc4c6fd --- /dev/null +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/UnStar.svg @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/doge.png b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/doge.png new file mode 100644 index 0000000..0292729 Binary files /dev/null and b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/Icon/doge.png differ diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ProgramFen.py b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ProgramFen.py index 33d95b0..f69cbfe 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ProgramFen.py +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/ProgramFen.py @@ -8,6 +8,15 @@ import PyQt5.QtGui as QtGui import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets +print("""十五从军征 +十五从军征,八十始得归。道逢乡里人:家中有阿谁? +遥看是君家,松柏冢累累。兔从狗窦入,雉从梁上飞。 +中庭生旅谷,井上生旅葵。舂谷持作饭,采葵持作羹。 +羹饭一时熟,不知饴阿谁!出门东向看,泪落沾我衣。""") +print("") +print("""译文:刚满十五岁的少年就出去打仗,到了八十岁才回来。路遇一个乡下的邻居,问:“我家里还有什么人?”你家那个地方,现在已是松树柏树林中的一片坟墓。走到家门前看见野兔从狗洞里出进,野鸡在屋脊上飞来飞去。院子里长着野生的谷子,野生的葵菜环绕着井台。用捣掉壳的野谷来做饭,摘下葵叶来煮汤。汤和饭一会儿都做好了,却不知赠送给谁吃。走出大门向着东方张望,老泪纵横,洒落在征衣上。""") +print("================================") + class ProgramRunStatusShow(): msgWindow = None def ShowWindow(): diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/information.json b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/information.json index a287b4a..b6ce66f 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/information.json +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/information.json @@ -28,10 +28,20 @@ "※2、修复 UEngine 安装器在 Wayland 下无法正常运行的问题;", "※3、更新 UEngine 安装器安装的 UEngine 版本;", "※4、修复 UEngine 安装器安装后的 UEngine 无法正常安装 APK 的问题(包括从运行器和 deb 包安装);", - "※5、UEngine 安装器安装后的 UEngine 支持开机后自动加载运行环境,无需人手动打开终端运行;", - "6、更改程序论坛网址;", - "7、新增程序评分功能;", - "8、……", + "※5、UEngine 安装器支持安装使用 SuperSU Root 的镜像", + "※6、UEngine 安装器安装后的 UEngine 支持开机后自动加载运行环境,无需人手动打开终端运行;", + "※7、放开原先程序内的程序安装量查询功能,并新增打开量查询功能(在程序的关于窗口里打开)", + "※8、程序更新时不需要关闭所有 Python3 程序,只会关闭自己", + "※9、新增彩蛋(只在2023年1月22日生效)", + "※10、修复 UEngine 打包器在部分系统无法打开的问题", + "※11、新增程序公告功能", + "※12、修复了程序更新功能从高版本降级到低版本的问题", + "※13、不强制依赖 Deepin 终端", + "14、更改程序论坛网址;", + "15、新增程序评分功能;", + "16、修复 UEngine 打包器在打包时无法正确禁用所有选项", + "17、UEngine 打包器打包的 deb 不再指定 deepin-elf-verify 依赖版本", + "18、“更多帮助”功能支持访问云端的帮助内容", "", "V1.8.3:", "※1、修复安装/打包程序时出现找不到图标的问题;", diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-apk-builder b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-apk-builder index a9c4d9f..a543fca 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-apk-builder +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-apk-builder @@ -24,6 +24,14 @@ import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets from getxmlimg import getsavexml +print("""渔家傲·秋思 +塞下秋来风景异,衡阳雁去无留意。四面边声连角起。千嶂里,长烟落日孤城闭。 +浊酒一杯家万里,燕然未勒归无计。羌管悠悠霜满地。人不寐,将军白发征夫泪。""") +print("") +print("""译文:眼看秋天到了,西北边塞的风光和江南风光自然大不相同。头顶的大雁又飞回南方衡阳去了,一点也没有停留意思。此情此景,不禁又勾起戍边人思乡的情绪。黄昏时分,军中号角催吹,周围的边声也随之而起。层峦叠嶂里,暮霭沉沉,山衔落日,孤零零的城门紧闭。 +饮一杯浊酒,我不由得想起万里之外的亲人。可是,眼下外患未平,功不成名不就,又怎能半途而废。远方传来羌笛的悠悠之声,天气寒冷,军营里早已结满寒霜。夜深了,我还不能安睡,为操持军计,我的须发都变白了。戍边人思念亲人,也久久难以成眠,多少次梦里流下眼泪。""") +print("================================") + def FindApk(): path = QtWidgets.QFileDialog.getOpenFileName(widget, "选择 APK", json.loads(readtxt(get_home() + "/.config/uengine-runner/FindApkBuild.json"))["path"], "APK 可执行文件(*.apk);;所有文件(*.*)") if path != "" and path != "()": @@ -107,7 +115,7 @@ class BuildApkDeb(QtCore.QThread): Version: {} Architecture: all Maintainer: {} -Depends: deepin-elf-verify (>= 0.0.16.7-1), uengine (>= 1.0.1) +Depends: deepin-elf-verify, uengine (>= 1.0.1) Section: utils Priority: optional Description: {}\n'''.format(apkPackageNameNew, apkPackageVersion, apkChineseLabel, apkChineseLabel) @@ -227,6 +235,7 @@ def DisabledAndEnbled(choose): check.setDisabled(choose) button2.setDisabled(choose) button3.setDisabled(choose) + sizes.setDisabled(choose) # 重启本应用程序 def ReStartProgram(): diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer index 4b68c3b..134a26e 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer @@ -9,7 +9,7 @@ rm -rf /tmp/uengine #read tar_path mkdir -p /tmp/uengine # 区分是下载 Root 镜像还是普通镜像 -if[[ $1 == "SuperSU" ]]; then +if [[ $1 == "SuperSU" ]]; then aria2c -x 16 -s 16 -d /tmp/uengine -o uenginetar.xz https://code.gitlink.org.cn/gfdgd_xi/uengine-installer/raw/branch/master/uengine2.1.2.2007-supersu.tar.xz else aria2c -x 16 -s 16 -d /tmp/uengine -o uenginetar.xz https://code.gitlink.org.cn/gfdgd_xi/uengine-installer/raw/branch/master/uengine2.1.2.2007.tar.xz diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-keyboard b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-keyboard index 9cb4d80..7e3612c 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-keyboard +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-keyboard @@ -19,6 +19,12 @@ import tkinter as tk import tkinter.ttk as ttk import tkinter.messagebox as messagebox import tkinter.filedialog as filedialog +print("山坡羊·潼关怀古") +print("""峰峦如聚,波涛如怒,山河表里潼关路。望西都,意踌躇。 +伤心秦汉经行处,宫阙万间都做了土。兴,百姓苦;亡,百姓苦。 + +译文:(华山的)山峰从四面八方汇聚,(黄河的)波涛像发怒似的汹涌。潼关外有黄河,内有华山,山河雄伟,地势险要。遥望古都长安,陷于思索之中。从秦汉宫遗址经过,引发无限伤感,万间宫殿早已化作了尘土,一朝兴盛,百姓受苦;一朝灭亡,百姓依旧受苦。""") + ######################## # ######################## diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner index 9e8b173..b7a923e 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner @@ -2,7 +2,7 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi<3025613752@qq.com> -# 版本:1.8.0 +# 版本:2.0.0 # 更新时间:2022年07月25日 # 感谢:anbox、deepin 和 UOS # 基于 Python3 的 PyQt5 构建 @@ -18,7 +18,9 @@ import time import json import numpy import base64 +import socket import shutil +import datetime import zipfile import platform import requests @@ -37,6 +39,12 @@ import PyQt5.QtGui as QtGui import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets from getxmlimg import getsavexml +try: + import PyQt5.QtWebEngineWidgets as QtWebEngineWidgets + bad = False +except: + bad = True +from Model import * def PythonLower(): app = QtWidgets.QApplication(sys.argv) @@ -50,6 +58,18 @@ if sys.version_info[0] < 3: if sys.version_info[1] < 6: PythonLower() +print("""观沧海 曹操 +东临碣石,以观沧海。水何澹澹,山岛竦峙。 +树木丛生,百草丰茂。秋风萧瑟,洪波涌起。 +日月之行,若出其中;星汉灿烂,若出其里。 +幸甚至哉,歌以咏志。""") +print("") +print("""译文:东行登上碣石山,来观赏那苍茫的海。海水多么宽阔浩荡,山岛高高地挺立在海边。 +树木和百草丛生,十分繁茂。秋风吹动树木发出悲凉的声音,海中涌着巨大的海浪。 +太阳和月亮的运行,好像是从这浩瀚的海洋中发出的。银河星光灿烂,好像是从这浩瀚的海洋中产生出来的。 +我很幸运,就用这首诗歌来表达自己内心的志向。""") +print("================================") + class UninstallProgram(QtCore.QThread): info = QtCore.pyqtSignal(str) error = QtCore.pyqtSignal(str) @@ -435,19 +455,25 @@ def InstallRootUengineImage(): if not os.path.exists: os.mkdir("/tmp/uengine-runner") write_txt("/tmp/uengine-runner/install.sh", "sudo dpkg -i /tmp/uengine-runner/u*.deb\nsudo apt install -f") - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"wget -P '/tmp/uengine-runner' 'https://hub.fastgit.xyz/gfdgd-xi/uengine-runner/releases/download/U1.2.15/uengine-android-image_1.2.15_amd64.deb' && pkexec bash '/tmp/uengine-runner/install.sh'\""]).start() + #threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"wget -P '/tmp/uengine-runner' 'https://hub.fastgit.xyz/gfdgd-xi/uengine-runner/releases/download/U1.2.15/uengine-android-image_1.2.15_amd64.deb' && pkexec bash '/tmp/uengine-runner/install.sh'\""]).start() + threading.Thread(target=OpenTerminal, args=[f"wget -P '/tmp/uengine-runner' 'https://hub.fastgit.xyz/gfdgd-xi/uengine-runner/releases/download/U1.2.15/uengine-android-image_1.2.15_amd64.deb' && pkexec bash '/tmp/uengine-runner/install.sh'"]).start() + def UengineUbuntuInstall(): - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath + '/uengine-installer'}'"]).start() + threading.Thread(target=OpenTerminal, args=[f"bash '{programPath + '/uengine-installer'}'"]).start() + +def UengineUbuntuInstallRoot(): + # 加 SuperSU 参数 + threading.Thread(target=OpenTerminal, args=[f"bash '{programPath + '/uengine-installer'}' SuperSU"]).start() def UbuntuInstallUengine(): - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath + '/uengine-installer'}'"]).start() + threading.Thread(target=OpenTerminal, args=[f"bash '{programPath + '/uengine-installer'}'"]).start() def BuildRootUengineImage(): - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e bash '{programPath}/root-uengine.sh'"]).start() + threading.Thread(target=OpenTerminal, args=[f"bash '{programPath}/root-uengine.sh'"]).start() def ReinstallUengineImage(): - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e pkexec apt reinstall uengine-android-image -y"]).start() + threading.Thread(target=OpenTerminal, args=[f"pkexec apt reinstall uengine-android-image -y"]).start() # 生成 uengine 启动文件到桌面 @@ -565,7 +591,7 @@ def BackUengineClean()->"清空 uengine 数据": except: traceback.print_exc() QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc()) - os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"pkexec rm -rfv /data/uengine\"") + OpenTerminal(f"pkexec rm -rfv /data/uengine") return print("Choose False") @@ -628,7 +654,7 @@ def ScrcpyConnectUengine(): sudo apt install snapd -y sudo snap refresh sudo snap install scrcpy''') - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C \"chmod 777 /tmp/uengine-runner/InstallScrcpy.sh -Rv && pkexec /tmp/uengine-runner/InstallScrcpy.sh\""]).start() + threading.Thread(target=OpenTerminal, args=[f"chmod 777 /tmp/uengine-runner/InstallScrcpy.sh -Rv && pkexec /tmp/uengine-runner/InstallScrcpy.sh"]).start() return # 获取用户桌面目录 @@ -701,12 +727,12 @@ def OpenUengineUserData(): # 终端显示 adb 命令行 def AdbShellShowInTer(): os.system("adb connect 192.168.250.2:5555") - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -w ~ -e 'adb -s 192.168.250.2:5555 shell'"]).start() + threading.Thread(target=OpenTerminal, args=[f"adb -s 192.168.250.2:5555 shell"]).start() # 终端显示 adb top def AdbCPUAndRAWShowInTer(): os.system("adb connect 192.168.250.2:5555") - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -w ~ -e 'adb -s 192.168.250.2:5555 shell top'"]).start() + threading.Thread(target=OpenTerminal, args=[f"adb -s 192.168.250.2:5555 shell top"]).start() def UengineSettingShow(): threading.Thread(target=os.system, args=["/usr/bin/uengine launch --action=android.intent.action.MAIN --package=com.android.settings --component=com.android.settings.Settings"]).start() @@ -727,14 +753,14 @@ def AdbStartServer(): QtWidgets.QMessageBox.information(widget, "提示", "完成!") def ReinstallUengine(): - threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec apt reinstall uengine uengine-android-image uengine-modules-dkms -y && notify-send -i uengine \"安装完毕!\"'"]).start() + threading.Thread(target=OpenTerminal, args=[f"pkexec apt reinstall uengine uengine-android-image uengine-modules-dkms -y && notify-send -i uengine \"安装完毕!\""]).start() def DelUengineCheck(): if not os.path.exists("/usr/share/uengine/uengine-check-runnable.sh"): QtWidgets.QMessageBox.information(widget, "提示", "本功能已经被删除,无法重复删除!") return if QtWidgets.QMessageBox.warning(widget, "警告", "删除后将无法使用本软件恢复\n如果需要恢复本功能,请重新安装 UEngine!", QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Ok) == QtWidgets.QMessageBox.Ok: - threading.Thread(target=os.system, args=["'{programPath}/launch.sh' deepin-terminal -C 'pkexec rm -v /usr/share/uengine/uengine-check-runnable.sh'"]).start() + threading.Thread(target=OpenTerminal, args=[f"pkexec rm -v /usr/share/uengine/uengine-check-runnable.sh"]).start() # 使用 adb 连接 uengine def UengineConnectAdb(): @@ -789,7 +815,27 @@ def VersionCheck(version1, version2): return version1 == version2 def ShowHelp(): - webbrowser.open_new_tab(programPath + "/Help/index.html") + global webHelp + # 先判断是否能连接服务器,如果能则访问线上版本,否则访问本地的帮助文件 + sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + sk.settimeout(1) + url = "file://" + programPath + "/Help/index.html" + try: + sk.connect(("uengine-runner.racoongx.cn", 80)) + url = f"http://uengine-runner.racoongx.cn" + except: + traceback.print_exc() + if bad: + # 如果没有安装 QWebEngine,则直接用浏览器打开 + webbrowser.open_new_tab(url) + return + # 否则用 QWebEngine 打开 + webHelp = QtWebEngineWidgets.QWebEngineView() + webHelp.setWindowTitle("获取程序帮助") + webHelp.setUrl(QtCore.QUrl(url)) + webHelp.setWindowIcon(QtGui.QIcon(iconPath)) + webHelp.resize(int(webHelp.frameGeometry().width() * 1.3), int(webHelp.frameGeometry().height() * 1.1)) + webHelp.show() def AllowOrDisallowUpdateAndroidApp(): if not os.path.exists("/data/uengine/data/data/misc/adb/adb_keys"): @@ -1104,14 +1150,36 @@ class UpdateWindow(): ok.clicked.connect(UpdateWindow.Update) cancel = QtWidgets.QPushButton("取消") cancel.clicked.connect(UpdateWindow.update.close) + ok.setDisabled(True) try: - UpdateWindow.data = json.loads(requests.get("https://304626p927.goho.co/uengine-runner/update.json").text) + UpdateWindow.data = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd-xi-org/wine-runner-update-information/raw/branch/master/uengine-runner/update.json").text) versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:{UpdateWindow.data['Version']}\n更新内容:") if UpdateWindow.data["Version"] == version: updateText.setText("此为最新版本,无需更新") ok.setDisabled(True) else: - updateText.setText(UpdateWindow.data["New"].replace("\\n", "\n")) + # 版本号读取(防止出现高版本号提示要“升级”到低版本号的问题) + localVersionList = version.split(".") + webVersionList = UpdateWindow.data['Version'].split(".") + for i in range(len(localVersionList)): + local = int(localVersionList[i]) + web = int(webVersionList[i]) + if web < local: + updateText.setHtml(f"""

此为最新版本,无需更新,但似乎您当前使用的程序版本比云端版本还要高。

+

出现这个问题可能会有如下几种情况:

+

1、使用编译或者内测版本

+

2、自己修改了程序版本

+

3、作者忘记更新云端上的更新信息了

+

如果是第三种情况,请反馈到此:https://gitee.com/gfdgd-xi-org/uengine-runner/issues/I6B091

+

或者是这里:https://bbs.racoongx.cn/t/bugs

+

""") + ok.setDisabled(True) + break + if web > local: + updateText.setText(UpdateWindow.data["New"].replace("\\n", "\n")) + ok.setEnabled(True) + break + except: traceback.print_exc() QtWidgets.QMessageBox.critical(updateWidget, "错误", "无法连接服务器!") @@ -1121,7 +1189,7 @@ class UpdateWindow(): updateWidgetLayout.addWidget(cancel, 2, 1, 1, 1) updateWidget.setLayout(updateWidgetLayout) UpdateWindow.update.setCentralWidget(updateWidget) - UpdateWindow.update.setWindowTitle("检查更新") + UpdateWindow.update.setWindowTitle("检查 UEngine 运行器更新") UpdateWindow.update.setWindowIcon(QtGui.QIcon(iconPath)) UpdateWindow.update.resize(updateWidget.frameGeometry().width(), int(updateWidget.frameGeometry().height() * 1.5)) UpdateWindow.update.show() @@ -1149,7 +1217,7 @@ zenity --info --text=\"更新完毕!\" --ellipsize except: traceback.print_exc() QtWidgets.QMessageBox.critical(widget, "错误,无法继续更新", traceback.format_exc()) - os.system(f"'{programPath}/launch.sh' deepin-terminal -e pkexec bash /tmp/uengine-runner/update.sh") + OpenTerminal(f"pkexec bash /tmp/uengine-runner/update.sh") image = None class ApkInformation(): @@ -1244,7 +1312,7 @@ class ApkInformation(): if choose == None or choose == 7: return try: - QtWidgets.QMessageBox.information(widget, "提示", requests.post("https://304626p927.goho.co/uengine-runner/app/check/add.php", {"Package": GetApkPackageName(path), "Type": choose}).text) + QtWidgets.QMessageBox.information(widget, "提示", requests.post("http://120.25.153.144/uengine-runner/app/check/add.php", {"Package": GetApkPackageName(path), "Type": choose}).text) except: traceback.print_exc() QtWidgets.QMessageBox.critical(widget, "错误", langFile[lang]["Main"]["MainWindow"]["Error"]["ConnectServerStarError"]) @@ -1256,7 +1324,7 @@ class ApkInformation(): QtWidgets.QMessageBox.critical(widget, "错误", langFile[lang]["Main"]["MainWindow"]["Error"]["ApkFileError"]) return try: - data = json.loads(requests.get("https://304626p927.goho.co/uengine-runner/app/check/" + package +"/data.json").text) + data = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd-xi-org/wine-runner-downloads-of-runner/raw/branch/master/uengineapp/" + package +"/data.json").text) print(data) except: QtWidgets.QMessageBox.information(widget, "提示", "此程序暂时没有评分,欢迎您贡献第一个评分!") @@ -1454,6 +1522,28 @@ class AddNewUengineDesktopLink(): activityName.setText(str(GetApkActivityName(path))) write_txt(get_home() + "/.config/uengine-runner/FindApkName.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件 +def GetNewInformation(): + try: + text = requests.get("https://code.gitlink.org.cn/gfdgd_xi/uengine-runner-list/raw/branch/master/information/index.html").text + except: + traceback.print_exc() + text = """

无法连接到服务器

+
+

你可以尝试:

+

1. 判断是否能正常连接网络

+

2. 网络配置是否有误

""" + global webInformation + if bad: + webInformation = QtWidgets.QTextBrowser() + else: + webInformation = QtWebEngineWidgets.QWebEngineView() + webInformation.setHtml(text) + webInformation.setWindowTitle("获取程序公告") + webInformation.setWindowIcon(QtGui.QIcon(iconPath)) + webInformation.resize(int(webInformation.frameGeometry().width() * 1.3), int(webInformation.frameGeometry().height() * 1.1)) + webInformation.show() + + def UseProgram(): global useProgram useProgram = '''

1、UEngine:{}

@@ -1496,6 +1586,7 @@ SystemVersion = GetSystemVersion() iconPath = "{}/runner.svg".format(os.path.split(os.path.realpath(__file__))[0]) about = f'''

介绍:一个基于 Python3 的 PyQt5 制作的 UEngine 运行器,在新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。

+

程序开源许可证:GPLV3

版本:{version}

适用平台:{goodRunSystem}

Qt 版本:{QtCore.qVersion()}

@@ -1603,12 +1694,32 @@ except: # add sub window #添加窗口开启关闭开关,防止重复开启 windowflag = "close" -def Egg(): +def Open(): try: - lists = json.loads(requests.get("https://304626p927.goho.co/uengine-runner/VersionList.json").text) + lists = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd-xi-org/wine-runner-downloads-of-runner/raw/branch/master/Open-UEngine/lists.json").text) data = [] for i in lists: - data.append(int(requests.get("https://304626p927.goho.co/uengine-runner/{}/data.txt".format(i)).text)) + data.append(int(requests.get("https://code.gitlink.org.cn/gfdgd-xi-org/wine-runner-downloads-of-runner/raw/branch/master/Open-UEngine/{}.txt".format(i)).text)) + except: + QtWidgets.QMessageBox.critical(widget, "错误", "服务器出错!数据获取失败!") + return + fig = matplotlib.pylab.figure() + fig.canvas.set_window_title("“UEngine 运行器”打开数(数据只供参考)") + matplotlib.pylab.plot(lists, data) + index = numpy.arange(len(lists)) + fonts = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc') # 用于支持中文显示,需要依赖fonts-noto-cjk + matplotlib.pylab.xlabel("版本号", fontproperties=fonts) + matplotlib.pylab.ylabel("打开数", fontproperties=fonts) + + matplotlib.pylab.title("“UEngine 运行器”打开数(数据只供参考)", fontproperties=fonts) + matplotlib.pylab.show() + +def Download(): + try: + lists = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd-xi-org/wine-runner-downloads-of-runner/raw/branch/master/Install-UEngine/lists.json").text) + data = [] + for i in lists: + data.append(int(requests.get("https://code.gitlink.org.cn/gfdgd-xi-org/wine-runner-downloads-of-runner/raw/branch/master/Install-UEngine/{}.txt".format(i)).text)) except: QtWidgets.QMessageBox.critical(widget, "错误", "服务器出错!数据获取失败!") return @@ -1650,14 +1761,17 @@ def showhelp(): BtnGongxian = QtWidgets.QPushButton("谢明列表") BtnAbout = QtWidgets.QPushButton("关于") BtnDownN = QtWidgets.QPushButton("程序下载量") + BtnOpenN = QtWidgets.QPushButton("程序打开量") HelpStr = QtWidgets.QTextBrowser() - BtnDownN.setEnabled("--彩蛋" in sys.argv) + # 此功能从 2.0.0 后不再隐藏 + #BtnDownN.setEnabled("--彩蛋" in sys.argv) BtnReadme.clicked.connect(ChgTips) BtnLog.clicked.connect(ChgLog) BtnZujian.clicked.connect(ChgDep) BtnGongxian.clicked.connect(ChgCon) BtnAbout.clicked.connect(ChgAbout) - BtnDownN.clicked.connect(Egg) + BtnDownN.clicked.connect(Download) + BtnOpenN.clicked.connect(Open) ChgTips() @@ -1665,9 +1779,10 @@ def showhelp(): helpLayout.addWidget(BtnLog, 1, 0, 1, 1) helpLayout.addWidget(BtnZujian, 2, 0, 1, 1) helpLayout.addWidget(BtnGongxian, 3, 0, 1, 1) - helpLayout.addWidget(BtnAbout, 5, 0, 1, 1) helpLayout.addWidget(BtnDownN, 4, 0, 1, 1) - helpLayout.addWidget(HelpStr, 0, 1, 7, 1) + helpLayout.addWidget(BtnOpenN, 5, 0, 1, 1) + helpLayout.addWidget(BtnAbout, 6, 0, 1, 1) + helpLayout.addWidget(HelpStr, 0, 1, 8, 1) helpWidget.setLayout(helpLayout) helpWindow.setCentralWidget(helpWidget) @@ -1684,7 +1799,7 @@ if not os.path.exists("/usr/bin/uengine"): # Deepin/UOS 用户 if "deepin" in SystemVersion.lower() or "uos" in SystemVersion.lower(): if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine,是否安装 UEngine 以便更好的使用\n安装完后重新启动该程序即可") == QtWidgets.QMessageBox.Yes: - os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"pkexec apt install uengine -y\"") + OpenTerminal(f"'pkexec apt install uengine -y") sys.exit(0) # 非 Deepin/UOS 用户 # 因为安装器出现问题,所以废弃 @@ -1693,7 +1808,8 @@ if not os.path.exists("/usr/bin/uengine"): #sys.exit(0) #if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine,是否安装 UEngine 以便更好的使用\n这里将会使用 shenmo 提供的脚本进行安装\n安装完后重新启动该程序即可\n提示:无法保证此安装脚本安装的 UEngine 可以使用") == QtWidgets.QMessageBox.Yes: if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine,是否安装 UEngine 以便更好的使用\n这里将会安装移植版本(之前由 Shenmo 编写)\n安装完后重新启动该程序即可\n提示:需要在 Ubuntu 22.04 及以上版本才能正常安装") == QtWidgets.QMessageBox.Yes: - os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/uengine-installer'\"") + #os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/uengine-installer'\"") + OpenTerminal(f"bash '{programPath}/uengine-installer'") sys.exit(0) ########################### @@ -1833,26 +1949,35 @@ uengineDoNotUseAdb.triggered.connect(UengineDoNotUseAdb) uengineAllowOrDisallowUpdateAndroidApp = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][13]) uengineSetHttpProxy = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][15]) -uengineOpenDebBuilder = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][1]) -uengineKeyboardToMouse = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][7]) -uengineCheckCpu = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][8]) -uengineUbuntuInstall = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][12]) +uengineOpenDebBuilder = QtWidgets.QAction(QtGui.QIcon.fromTheme("deb"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][1]) +uengineKeyboardToMouse = QtWidgets.QAction(QtGui.QIcon.fromTheme("keyboard"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][7]) +uengineCheckCpu = QtWidgets.QAction(QtGui.QIcon.fromTheme("cpu"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][8]) +#uengineUbuntuInstall = QtWidgets.QAction(QtGui.QIcon.fromTheme("ubuntu-logo-icon"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][12]) uengineDeleteUengineCheck = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][9]) uengineReinstall = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][10]) -uengineUbuntuInstall = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][14]) +uengineUbuntuInstall = QtWidgets.QAction(QtGui.QIcon.fromTheme("ubuntu-logo-icon"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][14]) +uengineUbuntuInstallRoot = QtWidgets.QAction(QtGui.QIcon.fromTheme("ubuntu-logo-icon"), "在 Ubuntu 上安装 UEngine(SuperSU 镜像)") uengineWindowSizeSetting = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][16]) -uengine.addAction(uengineAllowOrDisallowUpdateAndroidApp) -uengine.addAction(uengineSetHttpProxy) uengine.addAction(uengineOpenDebBuilder) uengine.addAction(uengineKeyboardToMouse) uengine.addAction(uengineCheckCpu) +uengine.addSeparator() uengine.addAction(uengineUbuntuInstall) +uengine.addAction(uengineUbuntuInstallRoot) +uengine.addSeparator() uengine.addAction(uengineWindowSizeSetting) -uengineService = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Name"]) -uengineInternet = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Name"]) +uengine.addSeparator() +uengine.addAction(uengineAllowOrDisallowUpdateAndroidApp) +uengine.addAction(uengineSetHttpProxy) +uengine.addSeparator() +uengineService = uengine.addMenu(QtGui.QIcon.fromTheme("services"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Name"]) +uengineInternet = uengine.addMenu(QtGui.QIcon.fromTheme("internet"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Name"]) +uengine.addSeparator() uengineIcon = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][4]["Name"]) +uengine.addSeparator() uengine.addMenu(uengineUseAdbm) -uengineData = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Name"]) +uengineData = uengine.addMenu(QtGui.QIcon.fromTheme("fileopen"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Name"]) +uengine.addSeparator() uengine.addAction(uengineDeleteUengineCheck) uengine.addAction(uengineReinstall) uengineRoot = uengine.addMenu(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"]) @@ -1864,13 +1989,14 @@ uengineOpenDebBuilder.triggered.connect(OpenUengineDebBuilder) uengineKeyboardToMouse.triggered.connect(KeyboardToMouse) uengineCheckCpu.triggered.connect(UengineCheckCpu) uengineUbuntuInstall.triggered.connect(UengineUbuntuInstall) +uengineUbuntuInstallRoot.triggered.connect(UengineUbuntuInstallRoot) uengineDeleteUengineCheck.triggered.connect(DelUengineCheck) uengineReinstall.triggered.connect(ReinstallUengine) uengineWindowSizeSetting.triggered.connect(UengineWindowSizeSetting.ShowWindow) -uengineStart = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][0]) -uengineStop = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][1]) -uengineRestart = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][2]) +uengineStart = QtWidgets.QAction(QtGui.QIcon.fromTheme("services"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][0]) +uengineStop = QtWidgets.QAction(QtGui.QIcon.fromTheme("services"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][1]) +uengineRestart = QtWidgets.QAction(QtGui.QIcon.fromTheme("services"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][2]) uengineService.addAction(uengineStart) uengineService.addAction(uengineStop) uengineService.addAction(uengineRestart) @@ -1879,14 +2005,14 @@ uengineStart.triggered.connect(StartUengine) uengineStop.triggered.connect(StopUengine) uengineRestart.triggered.connect(UengineRestart) -uengineBridgeStart = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][0]) -uengineBridgeStop = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][1]) -uengineBridgeRestart = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][2]) -uengineBridgeReload = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][3]) -uengineBridgeForceReload = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][4]) +uengineBridgeStart = QtWidgets.QAction(QtGui.QIcon.fromTheme("internet"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][0]) +uengineBridgeStop = QtWidgets.QAction(QtGui.QIcon.fromTheme("internet"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][1]) +uengineBridgeRestart = QtWidgets.QAction(QtGui.QIcon.fromTheme("internet"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][2]) +uengineBridgeReload = QtWidgets.QAction(QtGui.QIcon.fromTheme("internet"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][3]) +uengineBridgeForceReload = QtWidgets.QAction(QtGui.QIcon.fromTheme("internet"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][3]["Menu"][4]) uengineInternet.addAction(uengineBridgeStart) uengineInternet.addAction(uengineBridgeStop) -uengineInternet.addAction(uengineReinstall) +#uengineInternet.addAction(uengineReinstall) uengineInternet.addAction(uengineBridgeReload) uengineInternet.addAction(uengineBridgeForceReload) # 绑定信号 @@ -1913,9 +2039,9 @@ uengineAddNewUengineDesktopLink.triggered.connect(AddNewUengineDesktopLink.ShowW uengineCleanAllUengineDesktopLink.triggered.connect(CleanAllUengineDesktopLink) #uengineData -uengineOpenRootData = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Menu"][0]) -uengineOpenUserData = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Menu"][1]) -uengineBackClean = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Menu"][2]) +uengineOpenRootData = QtWidgets.QAction(QtGui.QIcon.fromTheme("fileopen"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Menu"][0]) +uengineOpenUserData = QtWidgets.QAction(QtGui.QIcon.fromTheme("fileopen"), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Menu"][1]) +uengineBackClean = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][6]["Menu"][2]) uengineData.addAction(uengineOpenRootData) uengineData.addAction(uengineOpenUserData) uengineData.addSeparator() @@ -1946,8 +2072,9 @@ helpUengineRunnerBugUpload = QtWidgets.QAction(langFile[lang]["Main"]["MainWindo helpShowHelp = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4]) helpRunnerUpdate = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3]) helpFen = QtWidgets.QAction("程序评分") -helpAbout = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1]) -helpAboutQt = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][5]) +helpWebInformation = QtWidgets.QAction("程序公告") +helpAbout = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1]) +helpAboutQt = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][5]) help.addAction(helpOpenProgramUrl) help.addAction(uengineRunnerSearch) help.addAction(makerWebsize) @@ -1958,6 +2085,7 @@ help.addSeparator() help.addAction(helpShowHelp) help.addAction(helpRunnerUpdate) help.addAction(helpFen) +help.addAction(helpWebInformation) help.addSeparator() help.addAction(helpAbout) help.addAction(helpAboutQt) @@ -1975,6 +2103,7 @@ helpUengineRunnerBugUpload.triggered.connect(UengineRunnerBugUpload) helpShowHelp.triggered.connect(ShowHelp) helpRunnerUpdate.triggered.connect(UpdateWindow.ShowWindow) helpFen.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/ProgramFen.py'"]).start()) +helpWebInformation.triggered.connect(GetNewInformation) helpAbout.triggered.connect(showhelp) helpAboutQt.triggered.connect(lambda: QtWidgets.QMessageBox.aboutQt(widget)) # 设置窗口 @@ -1985,4 +2114,12 @@ window.setWindowTitle(title) window.show() window.setWindowIcon(QtGui.QIcon(iconPath)) window.setFixedSize(window.frameSize().width(), window.frameSize().height()) +# 癸卯年正月初一彩蛋(只显示一次,错过就没了) +# (2023年1月22日) +if datetime.datetime.now().year == 2023 and datetime.datetime.now().month == 1 and datetime.datetime.now().day == 22 and not os.path.exists(f"{get_home()}/.config/uengine-runner/2023-sf.lock"): + os.system(f"touch '{get_home()}/.config/uengine-runner/2023-sf.lock'") + QtWidgets.QMessageBox.information(window, "新年祝福", "今天是癸卯年正月初一,这里代表 RacoonGX 团队祝您在新的一年里万事顺意、幸福美满、官运亨通、美梦连连、吉祥如意、万事顺利、荣华富贵、一帆风顺、金玉满堂、五福临门、龙凤呈祥、龙门精神、百业兴旺、六畜兴旺、五谷丰登、喜上眉梢!") +if version == "2.0.0": + title += " 新春版" + window.setWindowTitle(title) sys.exit(app.exec_()) diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-launch.sh b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-launch.sh index 20255aa..18a10f8 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-launch.sh +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-launch.sh @@ -20,10 +20,10 @@ else else # 因为安装器出现问题,所以废弃 zenity --error --text="请安装 UEngine 后继续" --no-wrap - #echo "非 Deepin/UOS 系统,使用 shenmo 提供的脚本安装\n暂未保证此安装脚本一定安装成功" - #zenity --question --text="您还未安装 UEngine,是否现在安装?\n将会使用 shenmo 提供的脚本进行安装\n暂未保证此安装脚本一定安装成功" --no-wrap - #if [[ $? = 0 ]]; then - # deepin-terminal -C "bash /opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer" - #fi + echo "非 Deepin/UOS 系统,使用 shenmo 提供的脚本安装\n暂未保证此安装脚本一定安装成功" + zenity --question --text="您还未安装 UEngine,是否现在安装?" --no-wrap + if [[ $? = 0 ]]; then + deepin-terminal -C "bash /opt/apps/com.gitee.uengine.runner.spark/files/uengine-installer" + fi fi fi diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-update-bug b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-update-bug index a975ab9..a6bec0e 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-update-bug +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-update-bug @@ -10,7 +10,12 @@ import updatekiller import urllib.parse as parse import PyQt5.QtGui as QtGui import PyQt5.QtWidgets as QtWidgets - +print("""过零丁洋 +辛苦遭逢起一经,干戈寥落四周星。山河破碎风飘絮,身世浮沉雨打萍。 +惶恐滩头说惶恐,零丁洋里叹零丁。人生自古谁无死?留取丹心照汗青。""") +print("") +print("译文:回想我早年由科举入仕历尽辛苦,如今战火消歇已熬过了四个年头。国家危在旦夕恰如狂风中的柳絮,个人又哪堪言说似骤雨里的浮萍。惶恐滩的惨败让我至今依然惶恐,零丁洋身陷元虏可叹我孤苦零丁。人生自古以来有谁能够长生不死?我要留一片爱国的丹心映照史册。") +print("================================") # 读取文本文档 def readtxt(path: "路径")->"读取文本文档": f = open(path, "r") # 设置文件对象 diff --git a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-useadb b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-useadb index e0eaf6b..e407923 100755 --- a/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-useadb +++ b/new-deb-build/opt/apps/com.gitee.uengine.runner.spark/files/uengine-useadb @@ -8,6 +8,16 @@ import sys import traceback import updatekiller import PyQt5.QtWidgets as QtWidgets +print("""白雪歌送武判官归京 +北风卷地白草折,胡天八月即飞雪。忽如一夜春风来,千树万树梨花开。 +散入珠帘湿罗幕,狐裘不暖锦衾薄。将军角弓不得控,都护铁衣冷难着。 +瀚海阑干百丈冰,愁云惨淡万里凝。中军置酒饮归客,胡琴琵琶与羌笛。 +纷纷暮雪下辕门,风掣红旗冻不翻。轮台东门送君去,去时雪满天山路。 +山回路转不见君,雪上空留马行处。""") +print("") +print("北风席卷大地把白草吹折,胡地天气八月就纷扬落雪。忽然间宛如一夜春风吹来,好像是千树万树梨花盛开。雪花散入珠帘打湿了罗幕,狐裘穿不暖锦被也嫌单薄。将军都护手冻得拉不开弓,铁甲冰冷得让人难以穿着。沙漠结冰百丈纵横有裂纹,万里长空凝聚着惨淡愁云。主帅帐中摆酒为归客饯行,胡琴琵琶羌笛合奏来助兴。傍晚辕门前大雪落个不停,红旗冻僵了风也无法牵引。轮台东门外欢送你回京去,你去时大雪盖满了天山路。山路迂回曲折已看不见你,雪上只留下一行马蹄印迹。") +print("================================") + ######################## # ######################## diff --git a/uengine-apk-builder b/uengine-apk-builder index 342ca2b..a543fca 100755 --- a/uengine-apk-builder +++ b/uengine-apk-builder @@ -28,7 +28,7 @@ print("""渔家傲·秋思 塞下秋来风景异,衡阳雁去无留意。四面边声连角起。千嶂里,长烟落日孤城闭。 浊酒一杯家万里,燕然未勒归无计。羌管悠悠霜满地。人不寐,将军白发征夫泪。""") print("") -print("""眼看秋天到了,西北边塞的风光和江南风光自然大不相同。头顶的大雁又飞回南方衡阳去了,一点也没有停留意思。此情此景,不禁又勾起戍边人思乡的情绪。黄昏时分,军中号角催吹,周围的边声也随之而起。层峦叠嶂里,暮霭沉沉,山衔落日,孤零零的城门紧闭。 +print("""译文:眼看秋天到了,西北边塞的风光和江南风光自然大不相同。头顶的大雁又飞回南方衡阳去了,一点也没有停留意思。此情此景,不禁又勾起戍边人思乡的情绪。黄昏时分,军中号角催吹,周围的边声也随之而起。层峦叠嶂里,暮霭沉沉,山衔落日,孤零零的城门紧闭。 饮一杯浊酒,我不由得想起万里之外的亲人。可是,眼下外患未平,功不成名不就,又怎能半途而废。远方传来羌笛的悠悠之声,天气寒冷,军营里早已结满寒霜。夜深了,我还不能安睡,为操持军计,我的须发都变白了。戍边人思念亲人,也久久难以成眠,多少次梦里流下眼泪。""") print("================================")