自动配置脚本 For UEngine 运行器初步
This commit is contained in:
parent
c95112ab09
commit
413a32b453
|
@ -0,0 +1,592 @@
|
|||
#!/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 req as 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
|
||||
|
||||
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"<img src='{programPath}/Icon/BadStar.svg' width=25>")
|
||||
return
|
||||
for i in range(ProgramRunStatusUpload.fen.currentIndex()):
|
||||
ProgramRunStatusUpload.starList[i].setText(f"<img src='{programPath}/Icon/Star.svg' width=25>")
|
||||
head = ProgramRunStatusUpload.fen.currentIndex()
|
||||
end = len(ProgramRunStatusUpload.starList)
|
||||
for i in range(head, end):
|
||||
ProgramRunStatusUpload.starList[i].setText(f"<img src='{programPath}/Icon/UnStar.svg' width=25>")
|
||||
|
||||
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"<img src='{programPath}/Icon/{['Un', ''][i]}Star.svg' width=25>"))
|
||||
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"<p>{i}</p>\n"
|
||||
#about = f"<pre>{about}</pre>"
|
||||
about = f"<h1>关于“{choose}”的介绍</h1>\n{about}"
|
||||
except:
|
||||
traceback.print_exc()
|
||||
about = f"<h1>关于“{choose}”的介绍</h1>\n<p>暂无此程序的介绍</p>"
|
||||
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"<img src='https://code.gitlink.org.cn/gfdgd_xi/deep-wine-runner/raw/branch/main/Icon/BadStar.svg' width=50>\n"
|
||||
else:
|
||||
starHtml += f"<img src='{programPath}/Icon/BadStar.svg' width=50>\n"
|
||||
else:
|
||||
for i in range(maxHead):
|
||||
if webeng:
|
||||
starHtml += f"<img src='https://code.gitlink.org.cn/gfdgd_xi/deep-wine-runner/raw/branch/main/Icon/Star.svg' width=50>\n"
|
||||
else:
|
||||
starHtml += f"<img src='{programPath}/Icon/Star.svg' width=50>\n"
|
||||
head = maxHead
|
||||
for i in range(head, end):
|
||||
if webeng:
|
||||
starHtml += f"<img src='https://code.gitlink.org.cn/gfdgd_xi/deep-wine-runner/raw/branch/main/Icon/UnStar.svg' width=50>"
|
||||
else:
|
||||
starHtml += f"<img src='{programPath}/Icon/UnStar.svg' width=50>"
|
||||
about += f"\n<hr/><h1>评分情况</h1>\n<p align='center'>{starHtml}</p>\n<p align='center'>{tipsInfo}</p>"
|
||||
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("<hr>"), 0, 0, 1, 3)
|
||||
inLayout.addWidget(QtWidgets.QLabel(f"<b>{i[0]}</b>"), 1, 0)
|
||||
inLayout.addWidget(QtWidgets.QLabel(f"<p align='right'><b>第{i[1]}层</b></p>"), 1, 2)
|
||||
inLayout.addWidget(QtWidgets.QLabel(i[2]), 2, 0, 1, 3)
|
||||
widget.setLayout(inLayout)
|
||||
pinLunLayout1.addWidget(widget)
|
||||
#pinLunLayout.addWidget(QtWidgets.QLabel("<hr/>"))
|
||||
# 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"<img src='{programPath}/Icon/BadStar.svg' width=50>"))
|
||||
else:
|
||||
for i in range(maxHead):
|
||||
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/Star.svg' width=50>"))
|
||||
head = maxHead
|
||||
for i in range(head, end):
|
||||
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/UnStar.svg' width=50>"))
|
||||
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}/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_()
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
# 加入路径
|
||||
import os
|
||||
import sys
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
sys.path.append(f"{programPath}/../../")
|
||||
import ConfigLanguareRunner
|
||||
# 符号转移
|
||||
argv = []
|
||||
for i in sys.argv[1:]:
|
||||
argv.append(i.replace(" ", "\\ "))
|
||||
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import json
|
||||
import platform
|
||||
|
||||
# 读取文本文档
|
||||
def readtxt(path):
|
||||
f = open(path, "r") # 设置文件对象
|
||||
str = f.read() # 获取内容
|
||||
f.close() # 关闭文本对象
|
||||
return str # 返回结果
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
information = json.loads(readtxt(f"{programPath}/../information.json"))
|
||||
version = information["Version"]
|
||||
thankText = ""
|
||||
for i in information["Thank"]:
|
||||
thankText += f"{i}\n"
|
||||
programEnv = [
|
||||
["WINEPREFIX", f"{os.path.expanduser('~')}/.wine"],
|
||||
["WINE", "deepin-wine6-stable"],
|
||||
["DANGER", "0"],
|
||||
["PROGRAMPATH", programPath],
|
||||
["VERSION", version],
|
||||
["THANK", thankText.replace("\n", "\\n")],
|
||||
["MAKER", "gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||
["COPYRIGHT", f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||
["PLATFORM", platform.system()],
|
||||
["DEBUG", str(int("--debug" in sys.argv))]
|
||||
]
|
||||
'''programEnv = [
|
||||
["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"],
|
||||
["($WINE)", "deepin-wine6-stable"],
|
||||
["($DANGER)", "0"],
|
||||
["($HOME)", os.path.expanduser('~')],
|
||||
["($PROGRAMPATH)", programPath],
|
||||
["($VERSION)", version],
|
||||
["($THANK)", thankText],
|
||||
["($MAKER)", "gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||
["?", "0"],
|
||||
["PLATFORM)", platform.system()],
|
||||
["DEBUG)", str(int("--debug" in sys.argv))]
|
||||
]'''
|
||||
optionAll = 0
|
||||
if "--debug" in sys.argv:
|
||||
optionAll += 1
|
||||
if "--system" in sys.argv:
|
||||
programEnv.append(["DANGER", "1"])
|
||||
optionAll += 1
|
||||
if os.getenv("WINE") != None:
|
||||
programEnv.append(["WINE", os.getenv("WINE")])
|
||||
if os.getenv("WINEPREFIX") != None:
|
||||
programEnv.append(["WINEPREFIX", os.getenv("WINEPREFIX")])
|
||||
# 生成可以使用的参数
|
||||
commandEnv = ""
|
||||
for i in programEnv:
|
||||
commandEnv += f"{i[0]}=\"{i[1]}\" "
|
||||
commandEnv += f"PATH=\"{programPath}/command:$PATH\" "
|
||||
if len(sys.argv) - optionAll < 2:
|
||||
print("Wine 运行器自动配置文件解析器交互环境(基于 Bash)")
|
||||
print(f"版本:{version}")
|
||||
print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||
print("--------------------------------------------------------------")
|
||||
os.system(f"{commandEnv} bash ")
|
||||
exit()
|
||||
command = ""
|
||||
for i in sys.argv[1:]:
|
||||
command += f"\"{i}\" "
|
||||
print("Wine 运行器自动配置文件解析器(基于 Bash)")
|
||||
print(f"版本:{version}")
|
||||
print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||
print("--------------------------------------------------------------")
|
||||
os.system(f"{commandEnv} bash {command}")
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"installdll": "安装指定 dll 在指定容器\n参数数量:1\n参数介绍:dll名称或在从互联网获取DLL工具的编号,如 7012 xolehlp.dll 平台:2003 架构:64 的 7012",
|
||||
"stopdll": "不允许指定 dll/exe 运行\n参数数量:1\n参数介绍:dll/exe 名称,如 example.exe",
|
||||
"installfont": "安装指定字体到指定容器\n参数数量:1\n在字体商店的编号,如 5 msyhbd.ttc 的 5",
|
||||
"installsparkcorefont": "安装星火应用商店的“微软核心字体”\n参数数量:0\n参数介绍:无",
|
||||
"installmono": "安装最新版本的 mono 到指定容器\n参数数量:0\n参数介绍:无",
|
||||
"installgecko": "安装最新版本的 gecko 到指定容器\n参数数量:0\n参数介绍:无",
|
||||
"installvcpp": "安装指定的 VCPP 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Studio C++ 工具的编号,如 10 Visual Studio C++ 2015、2017、2019 和 2022 X64 的 10",
|
||||
"installnet": "安装指定的 .net framework 运行库到指定容器\n参数数量:1\n参数介绍:在安装 .net framework 工具的编号,如 3 .net framework 4.5.1 Offline Installer 的 3",
|
||||
"installmsxml": "安装指定的 MSXML 运行库到指定容器\n参数数量:1\n参数介绍:在安装 MSXML 工具的编号,如 1、MSXML 4.0 SP3 的 1",
|
||||
"echo": "显示内容\n参数数量:≥1\n参数介绍:接要显示的内容",
|
||||
"info": "显示提示对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||
"error": "显示错误对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||
"warning": "显示警告对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||
"exit": "退出程序\n参数数量:0\n参数介绍:无",
|
||||
"bat": "执行 cmd 命令在 Wine 容器内(在 Windows 将在系统执行命令)\n参数数量:≥1\n参数介绍:接要执行的命令",
|
||||
"bash": "执行 bash 命令(在 Windows 系统将执行 cmd 命令)\n参数数量:≥1\n参数介绍:接要执行的命令",
|
||||
"version": "显示解释器版本(Wine 运行器版本)\n参数数量:0\n参数介绍:无",
|
||||
"thank": "显示谢明列表\n参数数量:0\n参数介绍:无",
|
||||
"pause": "按回车键后继续\n参数数量:0\n参数介绍:无",
|
||||
"download": "使用 aria2 下载文件\n参数数量:≥1 && ≤3\n参数介绍:下载URL+保存在的文件夹+保存的文件名",
|
||||
"installdxvk": "安装 dxvk 到指定容器\n参数数量:0\n参数介绍:无",
|
||||
"createbotton": "在指定目录创建容器\n参数数量:0\n参数介绍:无",
|
||||
"reg": "导入 .reg 文件\n参数数量:0\n参数介绍:reg 文件路径",
|
||||
"enabledopengl": "开启 OpenGL\n参数数量:0\n参数介绍:无",
|
||||
"disbledopengl": "关闭 OpenGL\n参数数量:0\n参数介绍:无",
|
||||
"winecfg": "显示“Wine 设置”\n参数数量:0\n参数介绍:无",
|
||||
"winver": "显示“关于 Wine”\n参数数量:0\n参数介绍:无",
|
||||
"changeversion": "更改 Wine 容器系统版本(未实现)\n参数数量:无\n参数介绍:无",
|
||||
"cat": "显示指定文件(只支持显示编码为UTF-8的文件)\n参数数量:1\n参数介绍:无",
|
||||
"enabledhttpproxy": "设置指定容器代理\n参数数量:2\n参数介绍:代理服务器地址+端口",
|
||||
"disbledhttpproxy": "禁用指定容器代理\n参数数量:0\n参数介绍:无",
|
||||
"enabledwinecrashdialog": "启用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无",
|
||||
"disbledwinecrashdialog": "禁用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无",
|
||||
"disbledWinebottlecreatelink": "禁止 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无",
|
||||
"enabledWinebottlecreatelink": "允许 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无",
|
||||
"killall": "杀死指定进程\n参数数量:1\n参数介绍:进程名",
|
||||
"control": "打开控制面板\n参数数量:0\n参数介绍:无",
|
||||
"taskmgr": "打开任务管理器\n参数数量:0\n参数介绍:无",
|
||||
"killallwineserver": "杀死所有 Wine 程序\n参数数量:0\n参数介绍:无",
|
||||
"installvb": "安装指定的 VB 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Basic Runtime 工具的编号,如 4 Visual Basic Runtime Visual Basic 6",
|
||||
"installother": "安装未归类的运行库到指定容器\n参数数量:1\n参数介绍:在安装其它运行库工具的编号,如 2 MFC运行库",
|
||||
"decompressionbottle": "解压用 wine 打包的 deb 包内的容器到指定路径\n参数数量:2\n参数介绍:deb 包路径+要解压到的路径",
|
||||
"programforum": "打开程序论坛\n参数数量:0\n参数介绍:无",
|
||||
"installmsi": "安装 MSI 文件到指定容器\n参数数量:1\n参数介绍:msi 文件路径"
|
||||
}
|
|
@ -0,0 +1,673 @@
|
|||
#!/usr/bin/env python3
|
||||
# 使用系统默认的 python3 运行
|
||||
###########################################################################################
|
||||
# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢
|
||||
# 版本:3.0.1
|
||||
# 更新时间:2022年10月05日
|
||||
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
|
||||
# 基于 Python3 构建
|
||||
###########################################################################################
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import json
|
||||
import random
|
||||
import api as uengineapi
|
||||
import platform
|
||||
import traceback
|
||||
import webbrowser
|
||||
import subprocess
|
||||
import PyQt5.QtWidgets as QtWidgets
|
||||
# 读取文本文档
|
||||
def readtxt(path):
|
||||
f = open(path, "r") # 设置文件对象
|
||||
str = f.read() # 获取内容
|
||||
f.close() # 关闭文本对象
|
||||
return str # 返回结果
|
||||
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
information = json.loads(readtxt(f"{programPath}/information.json"))
|
||||
version = information["Version"]
|
||||
thankText = ""
|
||||
helpList = json.loads(readtxt(f"{programPath}/ConfigLanguareRunner-help.json"))
|
||||
for i in information["Contribute"]:
|
||||
thankText += f"{i}\n"
|
||||
programEnv = [
|
||||
["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"],
|
||||
["($WINE)", "deepin-wine6-stable"],
|
||||
#["($DANGER)", "0"],
|
||||
["($DANGER)", "1"],
|
||||
["($HOME)", os.path.expanduser('~')],
|
||||
["($PROGRAMPATH)", programPath],
|
||||
["($VERSION)", version],
|
||||
["($THANK)", thankText],
|
||||
["($MAKER)", "RacoonGX 团队,By gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||
["($?)", "0"],
|
||||
["($PLATFORM)", platform.system()],
|
||||
["($DEBUG)", "1"]
|
||||
#["($DEBUG)", str(int("--debug" in sys.argv))]
|
||||
]
|
||||
readOnlyEnv = [
|
||||
"($DANGER)",
|
||||
"($HOME)",
|
||||
"($PROGRAMPATH)",
|
||||
"($VERSION)",
|
||||
"($THANK)",
|
||||
"($MAKER)",
|
||||
"($COPYRIGHT)",
|
||||
"($?)",
|
||||
"($SYSTEM)",
|
||||
"($DEBUG)"
|
||||
]
|
||||
|
||||
def FindFile(file, name):
|
||||
for i in os.listdir(file):
|
||||
path = f"{file}/{i}"
|
||||
if os.path.isdir(path):
|
||||
returnPath = FindFile(path, name)
|
||||
if returnPath != None:
|
||||
return returnPath.replace("//", "/")
|
||||
if os.path.isfile(path):
|
||||
if i == name:
|
||||
return path
|
||||
return None
|
||||
|
||||
def Debug():
|
||||
if "--debug" in sys.argv:
|
||||
traceback.print_exc()
|
||||
|
||||
class Command():
|
||||
# 有风险的命令
|
||||
dangerCommand = [
|
||||
"bash",
|
||||
"bat",
|
||||
"download",
|
||||
"reg"
|
||||
]
|
||||
# 可以被使用的命令
|
||||
commandList = [
|
||||
"installdll",
|
||||
"installfont",
|
||||
"installsparkcorefont",
|
||||
"installmono",
|
||||
"installgecko",
|
||||
"installvcpp",
|
||||
"installnet",
|
||||
"installmsxml",
|
||||
"echo",
|
||||
"info",
|
||||
"error",
|
||||
"warning",
|
||||
"exit",
|
||||
"bash",
|
||||
"bat",
|
||||
"version",
|
||||
"thank",
|
||||
"pause",
|
||||
"download",
|
||||
"installdxvk",
|
||||
"createbotton",
|
||||
"reg",
|
||||
"enabledopengl",
|
||||
"disbledopengl",
|
||||
"winecfg",
|
||||
"winver",
|
||||
"changeversion",
|
||||
"stopdll",
|
||||
"cat",
|
||||
"taskmgr",
|
||||
"control",
|
||||
"killall",
|
||||
"killallwineserver",
|
||||
"enabledhttpproxy",
|
||||
"disbledhttpproxy",
|
||||
"enabledwinecrashdialog",
|
||||
"disbledwinecrashdialog",
|
||||
"disbledWinebottlecreatelink",
|
||||
"enabledWinebottlecreatelink",
|
||||
"installvb",
|
||||
"installother",
|
||||
"decompressionbottle",
|
||||
"programforum",
|
||||
"installmsi",
|
||||
"installapk"
|
||||
]
|
||||
|
||||
def __init__(self, commandString: str) -> None:
|
||||
self.commandString = commandString
|
||||
|
||||
# 解析器
|
||||
# 命令字符串转可供解析的列表
|
||||
def GetCommandList(self) -> list:
|
||||
shellList = []
|
||||
shellFirstShell = self.commandString.split("\n")
|
||||
# 转换成可以执行的数组
|
||||
for l in range(0, len(shellFirstShell)):
|
||||
i = shellFirstShell[l]
|
||||
# 判断有没有注释
|
||||
if "#" in i:
|
||||
# 忽略注释
|
||||
i = i[:i.index("#")]
|
||||
# 删除前后空格
|
||||
i = i.strip()
|
||||
# 如果是空行
|
||||
if i == "":
|
||||
# 忽略此行,此行不做处理
|
||||
continue
|
||||
# 空格转义
|
||||
i = i.replace("\\ ", "@Space@")
|
||||
# 解析
|
||||
i = i.split()
|
||||
# 判断是否为合法的参数,否则提示并忽略
|
||||
if not i[0] in self.commandList and i[0][0] != "(":
|
||||
print(f"行{l + 1}命令{i[0]}不存在,忽略")
|
||||
programEnv[9][1] = "-2"
|
||||
continue
|
||||
if programEnv[2][1] == "0" and i[0] in self.dangerCommand:
|
||||
print(f"行{l + 1}命令{i[0]}目前解析器不允许运行,忽略")
|
||||
print("如果需要运行,可以在配置面板开启“允许修改系统”选项(针对GUI用户)")
|
||||
print("或添加参数 --system(终端调用运行用户)")
|
||||
programEnv[9][1] = "-1"
|
||||
continue
|
||||
rightList = []
|
||||
for k in i:
|
||||
# 处理符号转义
|
||||
rightList.append(k.replace("@Space@", " ").replace("\\n", "\n").replace("\\r", "\r"))
|
||||
shellList.append(rightList)
|
||||
return shellList
|
||||
|
||||
# 运行器
|
||||
class Run():
|
||||
close = False
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
def Exit(self):
|
||||
self.close = True
|
||||
return 0
|
||||
|
||||
def InstallDll(self) -> int:
|
||||
import InstallDll
|
||||
# 如果是数字
|
||||
number = False
|
||||
try:
|
||||
int(self.command[1])
|
||||
number = True
|
||||
except:
|
||||
pass
|
||||
if number:
|
||||
return InstallDll.Download(self.wineBottonPath, InstallDll.GetNameByNumber(int(self.command[1])), InstallDll.GetUrlByNumber(int(self.command[1])), self.wine)
|
||||
return InstallDll.Download(self.wineBottonPath, self.command[1], InstallDll.GetUrlByName(self.command[1]), self.wine)
|
||||
|
||||
def InstallDxvk(self):
|
||||
if not os.path.exists(f"{programPath}/dxvk"):
|
||||
if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""):
|
||||
print("错误:无法解压资源")
|
||||
return 1
|
||||
os.remove(f"{programPath}/dxvk.7z")
|
||||
return os.system(f"env 'WINE={self.wine}' 'WINE64={self.wine}' 'WINEPREFIX={self.wineBottonPath}' bash '{programPath}/dxvk/auto.sh' install")
|
||||
|
||||
def Thank(self) -> int:
|
||||
for i in information["Contribute"]:
|
||||
print(i)
|
||||
return 0
|
||||
|
||||
def InstallFont(self) -> int:
|
||||
import InstallFont
|
||||
return InstallFont.Download(self.wineBottonPath, int(self.command[1]))
|
||||
|
||||
def InstallMono(self) -> int:
|
||||
return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' mono")
|
||||
|
||||
def InstallGecko(self) -> int:
|
||||
return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' gecko")
|
||||
|
||||
def InstallVCPP(self) -> int:
|
||||
import InstallVisualCPlusPlus
|
||||
return InstallVisualCPlusPlus.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||
|
||||
def InstallNet(self) -> int:
|
||||
import InstallNetFramework
|
||||
return InstallNetFramework.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||
|
||||
def InstallMsxml(self) -> int:
|
||||
import InstallMsxml
|
||||
return InstallMsxml.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||
|
||||
def Info(self) -> int:
|
||||
QtWidgets.QMessageBox.information(None, self.command[1], self.command[2])
|
||||
return 0
|
||||
|
||||
def StopDll(self) -> int:
|
||||
return os.system(f"WINEPREFIX='{self.wineBottonPath}' '{self.wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(self.command[1])[0]} /f")
|
||||
|
||||
def CreateBotton(self):
|
||||
self.command = ["bat", "exit"]
|
||||
self.Bat()
|
||||
return 0
|
||||
|
||||
def InstallSparkCoreFont(self):
|
||||
if not os.system("which aptss"):
|
||||
# 最新版本星火应用商店处理
|
||||
os.system("pkexec bash aptss ssupdate")
|
||||
return os.system("pkexec bash aptss install ms-core-fonts")
|
||||
if not os.system("which ss-apt-fast"):
|
||||
# 稍久的版本
|
||||
os.system("pkexec ss-apt-fast update")
|
||||
return os.system("pkexec bash ss-apt-fast install ms-core-fonts")
|
||||
# 不知道什么版本的处理方法
|
||||
if not os.system("which apt-fast"):
|
||||
# 稍久的版本
|
||||
os.system("pkexec apt-fast update")
|
||||
return os.system("pkexec apt-fast install ms-core-fonts")
|
||||
os.system("pkexec apt update")
|
||||
return os.system("pkexec apt install ms-core-fonts")
|
||||
|
||||
def Echo(self) -> int:
|
||||
del self.command[0]
|
||||
print(" ".join(self.command))
|
||||
return 0
|
||||
|
||||
def Warning(self):
|
||||
QtWidgets.QMessageBox.warning(None, self.command[1], self.command[2])
|
||||
return 0
|
||||
|
||||
def Error(self):
|
||||
QtWidgets.QMessageBox.critical(None, self.command[1], self.command[2])
|
||||
return 0
|
||||
|
||||
def Bash(self):
|
||||
command = ""
|
||||
for i in self.command[1:]:
|
||||
command += f"'{i}' "
|
||||
return os.system(command)
|
||||
|
||||
def Bat(self) -> int:
|
||||
# Windows 直接转换为以 cmd 运行
|
||||
if platform.system() == "Windows":
|
||||
# 直接调用 Bash 函数
|
||||
return self.Bash()
|
||||
command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)"]
|
||||
for i in programEnv:
|
||||
for k in range(len(command)):
|
||||
command[k] = command[k].replace(i[0], i[1])
|
||||
for i in self.command[1:]:
|
||||
command.append(i)
|
||||
commandStr = command[0] + " "
|
||||
for i in command[1:]:
|
||||
commandStr += f"'{i}' "
|
||||
return os.system(commandStr)
|
||||
|
||||
def Version(self):
|
||||
print(f"版本:{version}")
|
||||
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||
return 0
|
||||
|
||||
def Pause(self) -> int:
|
||||
input("按回车键继续……")
|
||||
return 0
|
||||
|
||||
def Download(self) -> int:
|
||||
command = f"aria2c -x 16 -s 16 -c '{self.command[1]}' "
|
||||
try:
|
||||
command += f"-d '{self.command[2]}' "
|
||||
command += f"-o '{self.command[3]}' "
|
||||
except:
|
||||
pass
|
||||
return os.system(command)
|
||||
|
||||
def Reg(self) -> int:
|
||||
self.command = ["bat", "regedit", "/s", self.command[1]]
|
||||
return self.Bat()
|
||||
|
||||
def EnabledOpenGl(self) -> int:
|
||||
self.command = ["reg", f"z:{programPath}/EnabledOpengl.reg"]
|
||||
return self.Reg()
|
||||
|
||||
def DisbledOpenGl(self) -> int:
|
||||
self.command = ["reg", f"z:{programPath}/DisabledOpengl.reg"]
|
||||
return self.Reg()
|
||||
|
||||
def Winver(self):
|
||||
self.command = ["bat", "winver"]
|
||||
return self.Bat()
|
||||
|
||||
def Winecfg(self):
|
||||
self.command = ["bat", "winecfg"]
|
||||
return self.Bat()
|
||||
|
||||
def ChangeVersion(self):
|
||||
# 判断是否为正确的版本
|
||||
if not os.path.exists(f"{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"):
|
||||
print("错误:您选择的版本错误,目前只支持以下版本")
|
||||
for i in os.listdir(f"{programPath}/ChangeWineBottonVersion"):
|
||||
print(i.replace(".reg", ""), end=" ")
|
||||
print()
|
||||
return 1
|
||||
self.command = ["reg", f"z:/{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"]
|
||||
return self.Reg()
|
||||
|
||||
def Cat(self):
|
||||
try:
|
||||
file = open(self.command[1], "r")
|
||||
print(file.read())
|
||||
file.close()
|
||||
return 0
|
||||
except:
|
||||
print("文件读取错误")
|
||||
Debug()
|
||||
return 1
|
||||
|
||||
def Taskmgr(self):
|
||||
self.command = ["bat", "taskmgr"]
|
||||
return self.Bat()
|
||||
|
||||
def Control(self):
|
||||
self.command = ["bat", "control"]
|
||||
return self.Bat()
|
||||
|
||||
def Killall(self):
|
||||
return os.system(f"killall -9 {self.command[1]}")
|
||||
|
||||
def KillallWineServer(self):
|
||||
command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)", "-k"]
|
||||
for i in programEnv:
|
||||
for k in range(len(command)):
|
||||
command[k] = command[k].replace(i[0], i[1])
|
||||
if "box86" in command[1] or "exagear" in command[1] or "box64" in command[1]:
|
||||
print("不支持此 Wine")
|
||||
return 1
|
||||
if os.path.exists(command[1]):
|
||||
# 文件存在
|
||||
command[1] = f"{os.path.dirname(command[1])}/wineserver"
|
||||
else:
|
||||
# 读 which
|
||||
command[1] = f"{os.path.dirname(subprocess.getoutput(f'which {command[1]}').strip())}/wineserver"
|
||||
commandStr = command[0] + " "
|
||||
for i in command[1:]:
|
||||
commandStr += f"'{i}' "
|
||||
return os.system(commandStr)
|
||||
|
||||
def EnabledWineBottleCreateLink(self):
|
||||
self.command = ["bat", "reg", "delete", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"]
|
||||
return self.Bat()
|
||||
|
||||
def DisbledWineBottleCreateLink(self):
|
||||
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"]
|
||||
return self.Bat()
|
||||
|
||||
def DisbledWineCrashDialog(self):
|
||||
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000000", "/f"]
|
||||
return self.Bat()
|
||||
|
||||
def EnabledWineCrashDialog(self):
|
||||
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000001", "/f"]
|
||||
return self.Bat()
|
||||
|
||||
def EnabledHttpProxy(self):
|
||||
proxyServerAddress = self.command[1]
|
||||
port = self.command[2]
|
||||
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000001", "/f"]
|
||||
self.Bat()
|
||||
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyServer", "/d", f"{proxyServerAddress}:{port}", "/f"]
|
||||
return self.Bat()
|
||||
|
||||
def DecompressionBottle(self):
|
||||
tempDebDir = f"/tmp/wine-runner-unpack-deb-{random.randint(0, 1000)}"
|
||||
if os.system(f"dpkg -x '{self.command[1]}' '{tempDebDir}'"):
|
||||
return 1
|
||||
zippath = FindFile(tempDebDir, "files.7z")
|
||||
if zippath == None:
|
||||
return 2
|
||||
# 解压文件
|
||||
os.system(f"mkdir -p '{self.command[2]}'")
|
||||
fi = os.system(f"7z x -y '{zippath}' -o'{self.command[2]}'")
|
||||
os.system(f"rm -rfv '{tempDebDir}'")
|
||||
return fi
|
||||
|
||||
|
||||
def DisbledHttpProxy(self):
|
||||
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000000", "/f"]
|
||||
return self.Bat()
|
||||
|
||||
def InstallVB(self):
|
||||
import InstallVisualBasicRuntime
|
||||
return InstallVisualBasicRuntime.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||
|
||||
def InstallOther(self):
|
||||
import InstallOther
|
||||
return InstallOther.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||
|
||||
def ProgramForum(self):
|
||||
webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/")
|
||||
return
|
||||
|
||||
def InstallMSI(self):
|
||||
self.command = ["bat", "msiexec", "/i", self.command[1]]
|
||||
return self.Bat()
|
||||
|
||||
def InstallApk(self):
|
||||
if os.system("which uengine > /dev/null"):
|
||||
print("未安装 UEngine,无法使用该命令")
|
||||
return 1
|
||||
apk = uengineapi.APK(self.command[1])
|
||||
result = apk.install()
|
||||
homePath = os.getenv("HOME")
|
||||
if not os.path.exists(f"{homePath}/.local/share/applications/uengine"):
|
||||
os.makedirs(f"{homePath}/.local/share/applications/uengine")
|
||||
if not os.path.exists(f"{homePath}/.local/share/icons/hicolor/apps"):
|
||||
os.makedirs(f"{homePath}/.local/share/icons/hicolor/apps")
|
||||
package = apk.packageName()
|
||||
apk.saveApkIcon(f"{homePath}/.local/share/icons/hicolor/apps/{package}.png")
|
||||
apk.saveDesktopFile(f"{homePath}/.local/share/applications/uengine/{package}.desktop", f"{homePath}/.local/share/icons/hicolor/apps/{package}.png")
|
||||
return result
|
||||
|
||||
# 可以运行的命令的映射关系
|
||||
# 可以被使用的命令的映射
|
||||
commandList = {
|
||||
"installdll": InstallDll,
|
||||
"installfont": InstallFont,
|
||||
"installsparkcorefont": InstallSparkCoreFont,
|
||||
"installmono": InstallMono,
|
||||
"installgecko": InstallGecko,
|
||||
"installvcpp": InstallVCPP,
|
||||
"installnet": InstallNet,
|
||||
"installmsxml": InstallMsxml,
|
||||
"echo": Echo,
|
||||
"info": Info,
|
||||
"warning": Warning,
|
||||
"error": Error,
|
||||
"exit": Exit,
|
||||
"bash": Bash,
|
||||
"bat": Bat,
|
||||
"version": Version,
|
||||
"thank": Thank,
|
||||
"pause": Pause,
|
||||
"download": Download,
|
||||
"installdxvk": InstallDxvk,
|
||||
"createbotton": CreateBotton,
|
||||
"reg": Reg,
|
||||
"enabledopengl": EnabledOpenGl,
|
||||
"disbledopengl": DisbledOpenGl,
|
||||
"winecfg": Winecfg,
|
||||
"winver": Winver,
|
||||
"changeversion": ChangeVersion,
|
||||
"stopdll": StopDll,
|
||||
"cat": Cat,
|
||||
"taskmgr": Taskmgr,
|
||||
"control": Control,
|
||||
"killallwineserver": KillallWineServer,
|
||||
"enabledhttpproxy": EnabledHttpProxy,
|
||||
"disbledhttpproxy": DisbledHttpProxy,
|
||||
"enabledwinecrashdialog": EnabledWineCrashDialog,
|
||||
"disbledwinecrashdialog": DisbledWineCrashDialog,
|
||||
"disbledWinebottlecreatelink": DisbledWineBottleCreateLink,
|
||||
"enabledWinebottlecreatelink": EnabledWineBottleCreateLink,
|
||||
"installvb": InstallVB,
|
||||
"installother": InstallOther,
|
||||
"decompressionbottle": DecompressionBottle,
|
||||
"programforum": ProgramForum,
|
||||
"installmsi": InstallMSI,
|
||||
"installapk": InstallApk
|
||||
}
|
||||
|
||||
# 参数数列表
|
||||
commandInfo = {
|
||||
"killall": [1],
|
||||
"installdll": [1],
|
||||
"installfont": [1],
|
||||
"installsparkcorefont": [0],
|
||||
"installmono": [0],
|
||||
"installgecko": [0],
|
||||
"installvcpp": [1],
|
||||
"installnet": [1],
|
||||
"installmsxml": [1],
|
||||
"echo": [1],
|
||||
"info": [2],
|
||||
"warning": [2],
|
||||
"error": [2],
|
||||
"exit": [0],
|
||||
"bash": [1],
|
||||
"bat": [1],
|
||||
"version": [0],
|
||||
"thank": [0],
|
||||
"pause": [0],
|
||||
"download": [1],
|
||||
"installdxvk": [0],
|
||||
"createbotton": [0],
|
||||
"reg": [1],
|
||||
"enabledopengl": [0],
|
||||
"disbledopengl": [0],
|
||||
"winecfg": [0],
|
||||
"winver": [0],
|
||||
"changeversion": [1],
|
||||
"stopdll": [1],
|
||||
"cat": [1],
|
||||
"taskmgr": [0],
|
||||
"control": [0],
|
||||
"killallwineserver": [0],
|
||||
"enabledhttpproxy": [2],
|
||||
"disbledhttpproxy": [0],
|
||||
"enabledwinecrashdialog": [0],
|
||||
"disbledwinecrashdialog": [0],
|
||||
"disbledWinebottlecreatelink": [0],
|
||||
"enabledWinebottlecreatelink": [0],
|
||||
"installvb": [1],
|
||||
"installother": [1],
|
||||
"decompressionbottle": [2],
|
||||
"programforum": [0],
|
||||
"installmsi": [1],
|
||||
"installapk": [1]
|
||||
}
|
||||
windowsUnrun = [
|
||||
"createbotton",
|
||||
"installdll",
|
||||
"installmono",
|
||||
"installgecko",
|
||||
"winecfg",
|
||||
"stopdll",
|
||||
"changeversion",
|
||||
"enabledopengl",
|
||||
"disbledopengl",
|
||||
"installdxvk",
|
||||
"installfont",
|
||||
"installsparkcorefont",
|
||||
"decompressionbottle",
|
||||
"installapk"
|
||||
]
|
||||
# 解析
|
||||
def __init__(self, command: list, wineBottonPath: str, wine: str) -> int:
|
||||
self.wineBottonPath = wineBottonPath
|
||||
self.wine = wine
|
||||
for i in command:
|
||||
self.command = i
|
||||
# 变量解析
|
||||
if self.command[0][0] == "(" and "=" in self.command[0]:
|
||||
env = i[0][: i[0].index("=")]
|
||||
value = i[0][i[0].index("=") + 1:]
|
||||
# 判断是不是只读变量
|
||||
if env in readOnlyEnv:
|
||||
print(f"运行命令{' '.join(self.command)}出现错误")
|
||||
print(f"变量 {env} 只读,无法修改,忽略")
|
||||
continue
|
||||
change = False
|
||||
for k in range(len(programEnv)):
|
||||
# 修改变量
|
||||
if env == programEnv[k][0]:
|
||||
programEnv[k][1] = value
|
||||
change = True
|
||||
break
|
||||
if not change:
|
||||
# 添加变量
|
||||
programEnv.append([f"{env}", value])
|
||||
continue
|
||||
# 解析命令是否可以在 Windows 使用(只限在 Windows 系统时)
|
||||
if platform.system() == "Windows" and i[0] in self.windowsUnrun:
|
||||
print("此命令不支持在 Windows 上运行")
|
||||
programEnv[9][1] = "-5"
|
||||
continue
|
||||
# 获取程序帮助信息
|
||||
try:
|
||||
if i[1] == "--help":
|
||||
print(helpList[i[0]].replace("\\n", "\n"))
|
||||
continue
|
||||
except:
|
||||
pass
|
||||
# 正常命令解析
|
||||
if len(i) -1 < self.commandInfo[i[0]][0]:
|
||||
print("参数不足")
|
||||
programEnv[9][1] = "-3"
|
||||
continue
|
||||
# 替换环境变量
|
||||
for a in range(1, len(i)):
|
||||
for b in programEnv:
|
||||
if b[0] in i[a]:
|
||||
i[a] = i[a].replace(b[0], b[1])
|
||||
try:
|
||||
commandReturn = self.commandList[i[0]](self)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
commandReturn = 1
|
||||
if commandReturn:
|
||||
print(f"运行命令{' '.join(self.command)}出现错误,返回值:", commandReturn)
|
||||
programEnv[9][1] = str(commandReturn)
|
||||
if self.close:
|
||||
break
|
||||
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
if os.getenv("WINE") != None:
|
||||
programEnv[1][1] = os.getenv("WINE")
|
||||
if os.getenv("WINEPREFIX") != None:
|
||||
programEnv[0][1] = os.getenv("WINEPREFIX")
|
||||
if __name__ == "__main__":
|
||||
optionAll = 0
|
||||
if "--debug" in sys.argv:
|
||||
optionAll += 1
|
||||
if "--system" in sys.argv:
|
||||
programEnv[2][1] = "1"
|
||||
optionAll += 1
|
||||
if len(sys.argv) - optionAll < 2:
|
||||
print("Wine 运行器自动配置文件解析器交互环境")
|
||||
print(f"版本:{version}")
|
||||
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||
print("--------------------------------------------------------------")
|
||||
while True:
|
||||
commandLine = input(">")
|
||||
if commandLine == "exit":
|
||||
break
|
||||
com = Command(commandLine)
|
||||
com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1])
|
||||
sys.exit(int(programEnv[9][1]))
|
||||
# 读取文件
|
||||
try:
|
||||
file = open(sys.argv[1], "r")
|
||||
com = Command(file.read())
|
||||
file.close()
|
||||
except:
|
||||
print("错误:无法读取该文件,无法继续")
|
||||
sys.exit(1)
|
||||
print("Wine 运行器自动配置文件解析器")
|
||||
print(f"版本:{version}")
|
||||
print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||
print("--------------------------------------------------------------")
|
||||
com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1])
|
||||
sys.exit(int(programEnv[9][1]))
|
|
@ -0,0 +1,37 @@
|
|||
import os
|
||||
import sys
|
||||
import PyQt5.QtWidgets as QtWidgets
|
||||
def OpenTerminal(command):
|
||||
if terminalEnd[terminal][1]:
|
||||
os.system(f"\"{terminal}\" \"{terminalEnd[terminal][0]}\" \"{command}\"")
|
||||
return
|
||||
os.system(f"\"{terminal}\" \"{terminalEnd[terminal][0]}\" {command}")
|
||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||
# 对终端的获取
|
||||
# 为什么 openkylin 只有 mate-terminal
|
||||
# 优先为深度终端
|
||||
terminal = ""
|
||||
terminalList = [
|
||||
"deepin-terminal",
|
||||
"mate-terminal",
|
||||
"gnome-terminal",
|
||||
"xfce4-terminal"
|
||||
]
|
||||
terminalEnd = {
|
||||
f"{programPath}/../launch.sh\" \"deepin-terminal": ["-e", 0],
|
||||
"mate-terminal": ["-e", 1],
|
||||
"gnome-terminal": ["--", 0],
|
||||
"xfce4-terminal": ["-e", 1]
|
||||
}
|
||||
for i in terminalList:
|
||||
if not os.system(f"which {i}"):
|
||||
if i == "deepin-terminal":
|
||||
i = f"{programPath}/../launch.sh\" \"deepin-terminal"
|
||||
terminal = i
|
||||
break
|
||||
if terminal == "":
|
||||
print("无法识别到以下的任意一个终端")
|
||||
print(" ".join(terminalList))
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
QtWidgets.QMessageBox.critical(None, "错误", "无法识别到以下的任意一个终端\n" + " ".join(terminalList))
|
||||
exit()
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,125 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'AutoConfig.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.11.3
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(800, 600)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget)
|
||||
self.verticalLayout_3.setObjectName("verticalLayout_3")
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.searchTips = QtWidgets.QLabel(self.centralwidget)
|
||||
self.searchTips.setObjectName("searchTips")
|
||||
self.horizontalLayout.addWidget(self.searchTips)
|
||||
self.searchThings = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.searchThings.setObjectName("searchThings")
|
||||
self.horizontalLayout.addWidget(self.searchThings)
|
||||
self.saerchBotton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.saerchBotton.setObjectName("saerchBotton")
|
||||
self.horizontalLayout.addWidget(self.saerchBotton)
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout)
|
||||
self.searchList = QtWidgets.QListView(self.centralwidget)
|
||||
self.searchList.setObjectName("searchList")
|
||||
self.verticalLayout_3.addWidget(self.searchList)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_2.addItem(spacerItem)
|
||||
self.getInfoButton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.getInfoButton.setObjectName("getInfoButton")
|
||||
self.horizontalLayout_2.addWidget(self.getInfoButton)
|
||||
self.getFen = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.getFen.setObjectName("getFen")
|
||||
self.horizontalLayout_2.addWidget(self.getFen)
|
||||
self.runBotton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.runBotton.setObjectName("runBotton")
|
||||
self.horizontalLayout_2.addWidget(self.runBotton)
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 36))
|
||||
self.menubar.setObjectName("menubar")
|
||||
self.menu = QtWidgets.QMenu(self.menubar)
|
||||
self.menu.setObjectName("menu")
|
||||
self.menu_2 = QtWidgets.QMenu(self.menubar)
|
||||
self.menu_2.setObjectName("menu_2")
|
||||
MainWindow.setMenuBar(self.menubar)
|
||||
self.about = QtWidgets.QAction(MainWindow)
|
||||
self.about.setObjectName("about")
|
||||
self.exitProgram = QtWidgets.QAction(MainWindow)
|
||||
self.exitProgram.setObjectName("exitProgram")
|
||||
self.help = QtWidgets.QAction(MainWindow)
|
||||
self.help.setObjectName("help")
|
||||
self.openFile = QtWidgets.QAction(MainWindow)
|
||||
self.openFile.setObjectName("openFile")
|
||||
self.actionGitlink = QtWidgets.QAction(MainWindow)
|
||||
self.actionGitlink.setCheckable(True)
|
||||
self.actionGitlink.setChecked(True)
|
||||
self.actionGitlink.setObjectName("actionGitlink")
|
||||
self.actionGitee = QtWidgets.QAction(MainWindow)
|
||||
self.actionGitee.setCheckable(True)
|
||||
self.actionGitee.setObjectName("actionGitee")
|
||||
self.actionGithub = QtWidgets.QAction(MainWindow)
|
||||
self.actionGithub.setCheckable(True)
|
||||
self.actionGithub.setObjectName("actionGithub")
|
||||
self.action_IPv6 = QtWidgets.QAction(MainWindow)
|
||||
self.action_IPv6.setCheckable(True)
|
||||
self.action_IPv6.setObjectName("action_IPv6")
|
||||
self.action = QtWidgets.QAction(MainWindow)
|
||||
self.action.setCheckable(True)
|
||||
self.action.setObjectName("action")
|
||||
self.action_2 = QtWidgets.QAction(MainWindow)
|
||||
self.action_2.setCheckable(True)
|
||||
self.action_2.setChecked(False)
|
||||
self.action_2.setObjectName("action_2")
|
||||
self.action_3 = QtWidgets.QAction(MainWindow)
|
||||
self.action_3.setCheckable(True)
|
||||
self.action_3.setObjectName("action_3")
|
||||
self.menu.addAction(self.openFile)
|
||||
self.menu.addSeparator()
|
||||
self.menu.addAction(self.exitProgram)
|
||||
self.menu_2.addAction(self.actionGitlink)
|
||||
self.menu_2.addAction(self.actionGitee)
|
||||
self.menu_2.addAction(self.actionGithub)
|
||||
self.menu_2.addAction(self.action_IPv6)
|
||||
self.menu_2.addAction(self.action_2)
|
||||
self.menu_2.addAction(self.action_3)
|
||||
self.menu_2.addAction(self.action)
|
||||
self.menubar.addAction(self.menu.menuAction())
|
||||
self.menubar.addAction(self.menu_2.menuAction())
|
||||
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "自动部署脚本"))
|
||||
self.searchTips.setText(_translate("MainWindow", "搜索内容(为空代表显示所有内容):"))
|
||||
self.saerchBotton.setText(_translate("MainWindow", "搜索"))
|
||||
self.getInfoButton.setText(_translate("MainWindow", "获取选中项介绍"))
|
||||
self.getFen.setText(_translate("MainWindow", "获取/提交选中项的评分和评论"))
|
||||
self.runBotton.setText(_translate("MainWindow", "部署此方案"))
|
||||
self.menu.setTitle(_translate("MainWindow", "程序"))
|
||||
self.menu_2.setTitle(_translate("MainWindow", "切换源"))
|
||||
self.about.setText(_translate("MainWindow", "关于"))
|
||||
self.exitProgram.setText(_translate("MainWindow", "退出程序"))
|
||||
self.help.setText(_translate("MainWindow", "帮助"))
|
||||
self.openFile.setText(_translate("MainWindow", "打开本地部署脚本"))
|
||||
self.actionGitlink.setText(_translate("MainWindow", "Gitlink 源(推荐)"))
|
||||
self.actionGitee.setText(_translate("MainWindow", "Gitee 源"))
|
||||
self.actionGithub.setText(_translate("MainWindow", "Github 源(国外用户推荐)"))
|
||||
self.action_IPv6.setText(_translate("MainWindow", "备用源1(只限IPv6用户)"))
|
||||
self.action.setText(_translate("MainWindow", "本地测试源(127.0.0.1)"))
|
||||
self.action_2.setText(_translate("MainWindow", "备用源2"))
|
||||
self.action_3.setText(_translate("MainWindow", "备用源3"))
|
||||
|
|
@ -0,0 +1,199 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>自动部署脚本</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="searchTips">
|
||||
<property name="text">
|
||||
<string>搜索内容(为空代表显示所有内容):</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="searchThings"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="saerchBotton">
|
||||
<property name="text">
|
||||
<string>搜索</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListView" name="searchList"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="getInfoButton">
|
||||
<property name="text">
|
||||
<string>获取选中项介绍</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="getFen">
|
||||
<property name="text">
|
||||
<string>获取/提交选中项的评分和评论</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="runBotton">
|
||||
<property name="text">
|
||||
<string>部署此方案</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>36</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menu">
|
||||
<property name="title">
|
||||
<string>程序</string>
|
||||
</property>
|
||||
<addaction name="openFile"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="exitProgram"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_2">
|
||||
<property name="title">
|
||||
<string>切换源</string>
|
||||
</property>
|
||||
<addaction name="actionGitlink"/>
|
||||
<addaction name="actionGitee"/>
|
||||
<addaction name="actionGithub"/>
|
||||
<addaction name="action_IPv6"/>
|
||||
<addaction name="action_2"/>
|
||||
<addaction name="action_3"/>
|
||||
<addaction name="action"/>
|
||||
</widget>
|
||||
<addaction name="menu"/>
|
||||
<addaction name="menu_2"/>
|
||||
</widget>
|
||||
<action name="about">
|
||||
<property name="text">
|
||||
<string>关于</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="exitProgram">
|
||||
<property name="text">
|
||||
<string>退出程序</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="help">
|
||||
<property name="text">
|
||||
<string>帮助</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="openFile">
|
||||
<property name="text">
|
||||
<string>打开本地部署脚本</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionGitlink">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Gitlink 源(推荐)</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionGitee">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Gitee 源</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionGithub">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Github 源(国外用户推荐)</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_IPv6">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>备用源1(只限IPv6用户)</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>本地测试源(127.0.0.1)</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_2">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>备用源2</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_3">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>备用源3</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,85 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'KeyAddGui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.11.3
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(692, 314)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.tips = QtWidgets.QLabel(self.centralwidget)
|
||||
self.tips.setObjectName("tips")
|
||||
self.verticalLayout.addWidget(self.tips)
|
||||
self.keyBoardList = QtWidgets.QListView(self.centralwidget)
|
||||
self.keyBoardList.setObjectName("keyBoardList")
|
||||
self.verticalLayout.addWidget(self.keyBoardList)
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.addButton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.addButton.setObjectName("addButton")
|
||||
self.horizontalLayout.addWidget(self.addButton)
|
||||
self.editButton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.editButton.setObjectName("editButton")
|
||||
self.horizontalLayout.addWidget(self.editButton)
|
||||
self.delectButton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.delectButton.setObjectName("delectButton")
|
||||
self.horizontalLayout.addWidget(self.delectButton)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menuBar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menuBar.setGeometry(QtCore.QRect(0, 0, 692, 33))
|
||||
self.menuBar.setObjectName("menuBar")
|
||||
self.menu = QtWidgets.QMenu(self.menuBar)
|
||||
self.menu.setObjectName("menu")
|
||||
MainWindow.setMenuBar(self.menuBar)
|
||||
self.action = QtWidgets.QAction(MainWindow)
|
||||
self.action.setObjectName("action")
|
||||
self.serverTips = QtWidgets.QAction(MainWindow)
|
||||
self.serverTips.setEnabled(False)
|
||||
self.serverTips.setObjectName("serverTips")
|
||||
self.startServer = QtWidgets.QAction(MainWindow)
|
||||
self.startServer.setObjectName("startServer")
|
||||
self.stopServer = QtWidgets.QAction(MainWindow)
|
||||
self.stopServer.setObjectName("stopServer")
|
||||
self.setAutoStart = QtWidgets.QAction(MainWindow)
|
||||
self.setAutoStart.setObjectName("setAutoStart")
|
||||
self.setUnautoStart = QtWidgets.QAction(MainWindow)
|
||||
self.setUnautoStart.setObjectName("setUnautoStart")
|
||||
self.menu.addAction(self.serverTips)
|
||||
self.menu.addSeparator()
|
||||
self.menu.addAction(self.startServer)
|
||||
self.menu.addAction(self.stopServer)
|
||||
self.menu.addSeparator()
|
||||
self.menu.addAction(self.setAutoStart)
|
||||
self.menu.addAction(self.setUnautoStart)
|
||||
self.menuBar.addAction(self.menu.menuAction())
|
||||
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "编辑快捷键"))
|
||||
self.tips.setText(_translate("MainWindow", "<html><head/><body><p>此工具可以用于设置快捷键到 Wine 容器的映射,以便 Wine 程序可以正常的使用快捷键<br/>Deepin/UOS将会使用默认的快捷键服务,其它发行版将使用此运行器提供的快捷键服务<br>Deepin/UOS将只会提供快捷键添加功能,请在控制中心进行快捷键的修改管理</p></body></html>"))
|
||||
self.addButton.setText(_translate("MainWindow", "添加"))
|
||||
self.editButton.setText(_translate("MainWindow", "编辑"))
|
||||
self.delectButton.setText(_translate("MainWindow", "删除"))
|
||||
self.menu.setTitle(_translate("MainWindow", "设置快捷键服务"))
|
||||
self.action.setText(_translate("MainWindow", "关于"))
|
||||
self.serverTips.setText(_translate("MainWindow", "此内容只支持非Deepin/UOS发行版"))
|
||||
self.startServer.setText(_translate("MainWindow", "启动服务"))
|
||||
self.stopServer.setText(_translate("MainWindow", "停止服务"))
|
||||
self.setAutoStart.setText(_translate("MainWindow", "设置开机自启"))
|
||||
self.setUnautoStart.setText(_translate("MainWindow", "关闭开机自启动"))
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>692</width>
|
||||
<height>314</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>编辑快捷键</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="tips">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>此工具可以用于设置快捷键到 Wine 容器的映射,以便 Wine 程序可以正常的使用快捷键<br/>Deepin/UOS将会使用默认的快捷键服务,其它发行版将使用此运行器提供的快捷键服务<br>Deepin/UOS将只会提供快捷键添加功能,请在控制中心进行快捷键的修改管理</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListView" name="keyBoardList"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="addButton">
|
||||
<property name="text">
|
||||
<string>添加</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="editButton">
|
||||
<property name="text">
|
||||
<string>编辑</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="delectButton">
|
||||
<property name="text">
|
||||
<string>删除</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>692</width>
|
||||
<height>33</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menu">
|
||||
<property name="title">
|
||||
<string>设置快捷键服务</string>
|
||||
</property>
|
||||
<addaction name="serverTips"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="startServer"/>
|
||||
<addaction name="stopServer"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="setAutoStart"/>
|
||||
<addaction name="setUnautoStart"/>
|
||||
</widget>
|
||||
<addaction name="menu"/>
|
||||
</widget>
|
||||
<action name="action">
|
||||
<property name="text">
|
||||
<string>关于</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="serverTips">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>此内容只支持非Deepin/UOS发行版</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="startServer">
|
||||
<property name="text">
|
||||
<string>启动服务</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="stopServer">
|
||||
<property name="text">
|
||||
<string>停止服务</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="setAutoStart">
|
||||
<property name="text">
|
||||
<string>设置开机自启</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="setUnautoStart">
|
||||
<property name="text">
|
||||
<string>关闭开机自启动</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,86 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'KeyAddKeyboardGui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.11.3
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(800, 195)
|
||||
icon = QtGui.QIcon.fromTheme("..")
|
||||
MainWindow.setWindowIcon(icon)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.addTips = QtWidgets.QLabel(self.centralwidget)
|
||||
self.addTips.setObjectName("addTips")
|
||||
self.verticalLayout.addWidget(self.addTips)
|
||||
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||
self.exeNameTips = QtWidgets.QLabel(self.centralwidget)
|
||||
self.exeNameTips.setObjectName("exeNameTips")
|
||||
self.horizontalLayout_3.addWidget(self.exeNameTips)
|
||||
self.exeName = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.exeName.setObjectName("exeName")
|
||||
self.horizontalLayout_3.addWidget(self.exeName)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout_3)
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.localTips = QtWidgets.QLabel(self.centralwidget)
|
||||
self.localTips.setObjectName("localTips")
|
||||
self.horizontalLayout.addWidget(self.localTips)
|
||||
self.localKeyboardChoose = QtWidgets.QComboBox(self.centralwidget)
|
||||
self.localKeyboardChoose.setObjectName("localKeyboardChoose")
|
||||
self.horizontalLayout.addWidget(self.localKeyboardChoose)
|
||||
self.addTips_2 = QtWidgets.QLabel(self.centralwidget)
|
||||
self.addTips_2.setObjectName("addTips_2")
|
||||
self.horizontalLayout.addWidget(self.addTips_2)
|
||||
self.localKey = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.localKey.setObjectName("localKey")
|
||||
self.horizontalLayout.addWidget(self.localKey)
|
||||
self.wineTips = QtWidgets.QLabel(self.centralwidget)
|
||||
self.wineTips.setObjectName("wineTips")
|
||||
self.horizontalLayout.addWidget(self.wineTips)
|
||||
self.wineKeyboardChoose = QtWidgets.QComboBox(self.centralwidget)
|
||||
self.wineKeyboardChoose.setObjectName("wineKeyboardChoose")
|
||||
self.horizontalLayout.addWidget(self.wineKeyboardChoose)
|
||||
self.addTipsWine = QtWidgets.QLabel(self.centralwidget)
|
||||
self.addTipsWine.setObjectName("addTipsWine")
|
||||
self.horizontalLayout.addWidget(self.addTipsWine)
|
||||
self.wineKey = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.wineKey.setObjectName("wineKey")
|
||||
self.horizontalLayout.addWidget(self.wineKey)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.verticalLayout.addItem(spacerItem)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_2.addItem(spacerItem1)
|
||||
self.addButton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.addButton.setObjectName("addButton")
|
||||
self.horizontalLayout_2.addWidget(self.addButton)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout_2)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "添加快捷键"))
|
||||
self.addTips.setText(_translate("MainWindow", "暂时只支持特定组合\n"
|
||||
"文本框内的只能输入单字母"))
|
||||
self.exeNameTips.setText(_translate("MainWindow", "可这执行文件名称:"))
|
||||
self.localTips.setText(_translate("MainWindow", "本地映射:"))
|
||||
self.addTips_2.setText(_translate("MainWindow", "+"))
|
||||
self.wineTips.setText(_translate("MainWindow", "Wine 容器映射内容:"))
|
||||
self.addTipsWine.setText(_translate("MainWindow", "+"))
|
||||
self.addButton.setText(_translate("MainWindow", "添加快捷键"))
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>195</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>添加快捷键</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset theme="..">
|
||||
<normaloff>../../../.designer/backup</normaloff>../../../.designer/backup</iconset>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="addTips">
|
||||
<property name="text">
|
||||
<string>暂时只支持特定组合
|
||||
文本框内的只能输入单字母</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="exeNameTips">
|
||||
<property name="text">
|
||||
<string>可这执行文件名称:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="exeName"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="localTips">
|
||||
<property name="text">
|
||||
<string>本地映射:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="localKeyboardChoose"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="addTips_2">
|
||||
<property name="text">
|
||||
<string>+</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="localKey"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="wineTips">
|
||||
<property name="text">
|
||||
<string>Wine 容器映射内容:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="wineKeyboardChoose"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="addTipsWine">
|
||||
<property name="text">
|
||||
<string>+</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="wineKey"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="addButton">
|
||||
<property name="text">
|
||||
<string>添加快捷键</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,27 @@
|
|||
# 此库用于实现 52 版不连接程序服务器
|
||||
import requests
|
||||
|
||||
unConnect = False
|
||||
with open("/var/lib/dpkg/status", "r") as i:
|
||||
unConnect = "Package: spark-deepin-wine-runner-52" in open("/var/lib/dpkg/status", "r").read()
|
||||
if unConnect:
|
||||
print("52专版,将会无法连接服务器")
|
||||
|
||||
class Respon:
|
||||
text = ""
|
||||
|
||||
def get(url, timeout=None): # -> requests.Response:
|
||||
if unConnect:
|
||||
# 全部 Url 都拦截
|
||||
raise Exception("52专版不支持连接服务器")
|
||||
if timeout == None:
|
||||
return requests.get(url)
|
||||
return requests.get(url, timeout=timeout)
|
||||
|
||||
def post(url, data, timeout=None):
|
||||
if unConnect:
|
||||
# 全部 Url 都拦截
|
||||
raise Exception("52专版不支持连接服务器")
|
||||
if timeout == None:
|
||||
return requests.post(url, data)
|
||||
return requests.post(url, data, timeout=timeout)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue