deep-wine-runner/CheckDLL/main.py

137 lines
4.8 KiB
Python
Raw Normal View History

2022-11-18 17:18:24 +08:00
import os
import sys
import json
import traceback
import subprocess
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets
2022-11-18 22:02:56 +08:00
# 加入路径
import os
import sys
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
sys.path.append(f"{programPath}/../")
from Model import *
finding = False
2022-11-18 17:18:24 +08:00
def ReadNeedDll(lists):
nmodel = QtGui.QStandardItemModel(window)
2022-11-18 22:02:56 +08:00
if not len(lists):
item = QtGui.QStandardItem("")
nmodel.appendRow(item)
2022-11-18 17:18:24 +08:00
for i in lists:
item = QtGui.QStandardItem(i)
nmodel.appendRow(item)
needDllList.setModel(nmodel)
def ReadBadNeedDll(lists):
2022-11-18 22:02:56 +08:00
global finding
2022-11-18 17:18:24 +08:00
nmodel = QtGui.QStandardItemModel(window)
2022-11-18 22:02:56 +08:00
if not len(lists):
item = QtGui.QStandardItem("")
nmodel.appendRow(item)
2022-11-18 17:18:24 +08:00
for i in lists:
item = QtGui.QStandardItem(i)
nmodel.appendRow(item)
badDllList.setModel(nmodel)
2022-11-18 22:02:56 +08:00
finding = True
2022-11-18 17:18:24 +08:00
def ErrorMsg(message):
QtWidgets.QMessageBox.critical(window, "错误", message)
class ReadDll(QtCore.QThread):
readNeed = QtCore.pyqtSignal(list)
readBad = QtCore.pyqtSignal(list)
error = QtCore.pyqtSignal(str)
def __init__(self) -> None:
super().__init__()
def run(self):
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
try:
output = subprocess.getoutput(f"python3 '{programPath}/CheckCommand.py' '{sys.argv[1]}' --json")
print(output)
self.readNeed.emit(json.loads(output))
except:
traceback.print_exc()
self.error.emit(traceback.format_exc())
try:
badoutput = subprocess.getoutput(f"python3 '{programPath}/CheckCommand.py' '{sys.argv[1]}' --json -w '{sys.argv[2]}' '{sys.argv[3]}'")
print(badoutput)
self.readBad.emit(json.loads(badoutput))
except:
traceback.print_exc()
self.error.emit(traceback.format_exc())
def GetDll():
global read
read = ReadDll()
read.readNeed.connect(ReadNeedDll)
read.readBad.connect(ReadBadNeedDll)
2022-11-18 22:02:56 +08:00
read.error.connect(ErrorMsg)
2022-11-18 17:18:24 +08:00
read.start()
2022-11-18 22:02:56 +08:00
def Change():
if not finding:
return
things = badDllList.selectionModel().selectedIndexes()[0].data().lower()
repairButton.setEnabled(os.path.exists(f"{programPath}/bash/{things}.sh"))
findButton.setEnabled(True)
def FindDll():
global dllMap
things = badDllList.selectionModel().selectedIndexes()[0].data().lower()
try:
dllMap["check"]
except:
try:
with open(f"{programPath}/lists.json", "r") as file:
dllMap = json.loads(file.read())
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
return
try:
QtWidgets.QMessageBox.information(window, f"关于“{things}", dllMap[things])
except:
QtWidgets.QMessageBox.information(window, f"关于“{things}", "无此 Dll 的信息")
def RepairDll():
things = badDllList.selectionModel().selectedIndexes()[0].data().lower()
OpenTerminal(f"'{programPath}/../AutoShell/main.py' '{programPath}/bash/{things}.sh'")
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
iconPath = "{}/../deepin-wine-runner.svg".format(programPath)
2022-11-18 17:18:24 +08:00
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget()
layout = QtWidgets.QGridLayout()
badDllList = QtWidgets.QListView()
needDllList = QtWidgets.QListView()
2022-11-18 22:02:56 +08:00
badDllList.clicked.connect(Change)
findButton = QtWidgets.QPushButton("查询此 Dll 信息")
repairButton = QtWidgets.QPushButton("修复此 Dll")
findButton.setDisabled(True)
repairButton.setDisabled(True)
findButton.clicked.connect(FindDll)
repairButton.clicked.connect(RepairDll)
2022-11-18 17:18:24 +08:00
badDllList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
needDllList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
loadingTips = QtGui.QStandardItemModel(window)
loadingTipsItem = QtGui.QStandardItem("正在读取……")
loadingTips.appendRow(loadingTipsItem)
badDllList.setModel(loadingTips)
needDllList.setModel(loadingTips)
2022-11-18 22:02:56 +08:00
layout.addWidget(QtWidgets.QLabel("程序需要的 Dll(不太准)"), 0, 0, 1, 1)
layout.addWidget(QtWidgets.QLabel("程序缺失的 Dll(不太准)"), 0, 1, 1, 2)
layout.addWidget(needDllList, 1, 0)
layout.addWidget(badDllList, 1, 1, 1, 2)
layout.addWidget(findButton, 2, 1)
layout.addWidget(repairButton, 2, 2)
2022-11-18 17:18:24 +08:00
widget.setLayout(layout)
window.setCentralWidget(widget)
2022-11-18 22:02:56 +08:00
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
window.setWindowTitle(f"查看程序“{os.path.basename(sys.argv[1])}”缺少的 DLL")
2022-11-18 17:18:24 +08:00
window.resize(int(window.frameGeometry().width() * 1.2), int(window.frameGeometry().height() * 1.1))
GetDll()
window.show()
app.exec_()