deep-wine-runner/CheckDLL/main.py
2022-11-18 22:02:56 +08:00

137 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
# 加入路径
import os
import sys
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
sys.path.append(f"{programPath}/../")
from Model import *
finding = False
def ReadNeedDll(lists):
nmodel = QtGui.QStandardItemModel(window)
if not len(lists):
item = QtGui.QStandardItem("")
nmodel.appendRow(item)
for i in lists:
item = QtGui.QStandardItem(i)
nmodel.appendRow(item)
needDllList.setModel(nmodel)
def ReadBadNeedDll(lists):
global finding
nmodel = QtGui.QStandardItemModel(window)
if not len(lists):
item = QtGui.QStandardItem("")
nmodel.appendRow(item)
for i in lists:
item = QtGui.QStandardItem(i)
nmodel.appendRow(item)
badDllList.setModel(nmodel)
finding = True
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)
read.error.connect(ErrorMsg)
read.start()
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)
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget()
layout = QtWidgets.QGridLayout()
badDllList = QtWidgets.QListView()
needDllList = QtWidgets.QListView()
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)
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)
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)
widget.setLayout(layout)
window.setCentralWidget(widget)
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
window.setWindowTitle(f"查看程序“{os.path.basename(sys.argv[1])}”缺少的 DLL")
window.resize(int(window.frameGeometry().width() * 1.2), int(window.frameGeometry().height() * 1.1))
GetDll()
window.show()
app.exec_()