mirror of
https://gitee.com/gfdgd-xi/deep-wine-runner
synced 2025-01-13 01:58:27 +08:00
打包器deb内容读取完成
This commit is contained in:
parent
c443796f85
commit
b5dda7fc67
@ -1080,6 +1080,7 @@ def ReadDeb(unzip = False):
|
|||||||
# 读取 control 文件
|
# 读取 control 文件
|
||||||
file = open(f"{path}/DEBIAN/control", "r")
|
file = open(f"{path}/DEBIAN/control", "r")
|
||||||
lists = file.read().splitlines()
|
lists = file.read().splitlines()
|
||||||
|
|
||||||
# 控件映射表
|
# 控件映射表
|
||||||
lnkMap = {
|
lnkMap = {
|
||||||
"Package": e1_text,
|
"Package": e1_text,
|
||||||
@ -1089,21 +1090,146 @@ def ReadDeb(unzip = False):
|
|||||||
"Recommends": debRecommend,
|
"Recommends": debRecommend,
|
||||||
"Depends": debDepends
|
"Depends": debDepends
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in lists:
|
for i in lists:
|
||||||
# 遍历文件
|
# 遍历文件
|
||||||
items = i.strip()
|
items = i.strip()
|
||||||
try:
|
try:
|
||||||
lnkMap[items[:items.index(":")]].setText(items[items.index(":") + 1:].strip())
|
lnkMap[items[:items.index(":")]].setText(items[items.index(":") + 1:].strip())
|
||||||
|
if unzip:
|
||||||
|
# 解压全部文件将不在 control 分析 wine 版本以提升运行效率
|
||||||
|
continue
|
||||||
|
print(items[:items.index(":")])
|
||||||
|
if items[:items.index(":")] == "Depends":
|
||||||
|
# 以下可以通过依赖判断使用什么 wine
|
||||||
|
depends = items[items.index(":") + 1:].strip().split(",")
|
||||||
|
for i in depends:
|
||||||
|
print(i)
|
||||||
|
# 读取
|
||||||
|
if "(" in i:
|
||||||
|
# 如果有括号(即版本号限制的情况)
|
||||||
|
temp = i.strip()
|
||||||
|
dependsItem = temp[:temp.index("(")]
|
||||||
|
else:
|
||||||
|
dependsItem = i.strip()
|
||||||
|
try:
|
||||||
|
# 这个 wine 是理论上用于运行的 wine
|
||||||
|
print(wineValue[dependsItem])
|
||||||
|
wineVersion.setCurrentText(wineValue[dependsItem])
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
print("此 Wine 不存在")
|
||||||
except:
|
except:
|
||||||
# 报错忽略
|
# 报错忽略
|
||||||
print(f"“{items}”项忽略")
|
print(f"“{items}”项忽略")
|
||||||
|
|
||||||
# 判断 postrm 文件是不是自动移除脚本
|
# 判断 postrm 文件是不是自动移除脚本
|
||||||
|
# postrm 文件不存在就不需要考虑
|
||||||
|
# 三个特征:
|
||||||
|
# 1、/home/$username/.deepinwine
|
||||||
|
# 2、非卸载,跳过清理
|
||||||
|
# 3、清理卸载残留
|
||||||
|
# 都符合才算
|
||||||
|
rmBash.setChecked(False)
|
||||||
|
if os.path.exists(f"{path}/DEBIAN/postrm"):
|
||||||
|
# 读取文件进行特征筛查
|
||||||
|
file = open(f"{path}/DEBIAN/postrm", "r")
|
||||||
|
postrm = file.read()
|
||||||
|
if "/home/$username/.deepinwine" in postrm and "非卸载,跳过清理" in postrm and "清理卸载残留" in postrm:
|
||||||
|
rmBash.setChecked(True)
|
||||||
|
file.close()
|
||||||
# 解包主文件
|
# 解包主文件
|
||||||
if not unzip:
|
if not unzip:
|
||||||
# 只解压 control 文件的话,结束
|
# 只解压 control 文件的话,结束
|
||||||
|
# 顺便删除临时文件
|
||||||
|
os.system(f"rm -rfv '{path}'")
|
||||||
return
|
return
|
||||||
os.system(f"dpkg -x '{debPath}' '{path}'")
|
os.system(f"dpkg -x '{debPath}' '{path}'")
|
||||||
# 读取文件
|
# 读取文件
|
||||||
|
# 目前只能实现读取 Wine 运行器(生态适配脚本的也可以读取)打包的 deb
|
||||||
|
# opt/apps/XXX/files/run.sh 的文件读取识别
|
||||||
|
if not os.path.exists(f"{path}/opt/apps/"):
|
||||||
|
return
|
||||||
|
# 取默认第一个
|
||||||
|
package = os.listdir(f"{path}/opt/apps/")[0]
|
||||||
|
# 读 7z(基本不读取)
|
||||||
|
if os.path.exists(f"{path}/opt/apps/{package}/files/files.7z"):
|
||||||
|
e6_text.setText(f"{path}/opt/apps/{package}/files/files.7z")
|
||||||
|
lnkMap = {
|
||||||
|
"Icon": e9_text,
|
||||||
|
"Name": e8_text,
|
||||||
|
"MimeType": e10_text
|
||||||
|
}
|
||||||
|
# 读 desktop 文件
|
||||||
|
if os.path.exists(f"{path}/opt/apps/{package}/entries/applications"):
|
||||||
|
filePath = f"{path}/opt/apps/{package}/entries/applications/{os.listdir(f'{path}/opt/apps/{package}/entries/applications')[0]}"
|
||||||
|
file = open(filePath, "r")
|
||||||
|
items = file.read().splitlines()
|
||||||
|
file.close()
|
||||||
|
for i in items:
|
||||||
|
# 按行解析
|
||||||
|
if i.replace(" ", "").replace("\n", "") == "":
|
||||||
|
# 空行,忽略
|
||||||
|
continue
|
||||||
|
# 忽略注释
|
||||||
|
line = i
|
||||||
|
if "#" in line:
|
||||||
|
line = line[:line.index("#")]
|
||||||
|
# 判断是否合法
|
||||||
|
try:
|
||||||
|
name = line[:line.index("=")].strip()
|
||||||
|
value = line[line.index("=") + 1:]#.replace("\"", "").strip()
|
||||||
|
if name in lnkMap:
|
||||||
|
lnkMap[name].setText(value)
|
||||||
|
continue
|
||||||
|
# 其它的特殊情况判断
|
||||||
|
if name == "Exec":
|
||||||
|
value = value[value.index(".sh") + 3:].strip()
|
||||||
|
if value[0] == "\"":
|
||||||
|
value = value[1:].strip()
|
||||||
|
# helper
|
||||||
|
e15_text.setText(value)
|
||||||
|
if name == "Categories":
|
||||||
|
option1_text.setCurrentText(value)
|
||||||
|
except:
|
||||||
|
print(f"忽略行:{i}")
|
||||||
|
lnkMap = {
|
||||||
|
"BOTTLENAME": e5_text,
|
||||||
|
"EXEC_PATH": e7_text
|
||||||
|
#"APPRUN_CMD"
|
||||||
|
}
|
||||||
|
# 读 run.sh
|
||||||
|
if os.path.exists(f"{path}/opt/apps/{package}/files/run.sh"):
|
||||||
|
file = open(f"{path}/opt/apps/{package}/files/run.sh", "r")
|
||||||
|
items = file.read().splitlines()
|
||||||
|
file.close()
|
||||||
|
for i in items:
|
||||||
|
# 按行解析
|
||||||
|
if i.replace(" ", "").replace("\n", "") == "":
|
||||||
|
# 空行,忽略
|
||||||
|
continue
|
||||||
|
# 忽略 export
|
||||||
|
line = i.replace("export ", "")
|
||||||
|
# 忽略注释
|
||||||
|
if "#" in line:
|
||||||
|
line = line[:line.index("#")]
|
||||||
|
# 判断是否合法
|
||||||
|
try:
|
||||||
|
name = line[:line.index("=")].strip()
|
||||||
|
value = line[line.index("=") + 1:].replace("\"", "").strip()
|
||||||
|
#lnkMap[name].setText(value)
|
||||||
|
if name in lnkMap:
|
||||||
|
lnkMap[name].setText(value)
|
||||||
|
continue
|
||||||
|
# 其它的特殊情况判断
|
||||||
|
if name == "START_SHELL_PATH" and value == "/opt/deepinwine/tools/spark_run_v4.sh":
|
||||||
|
# helper
|
||||||
|
chooseWineHelperValue.setChecked(True)
|
||||||
|
if name == "APPRUN_CMD" and value in wineValue:
|
||||||
|
wineVersion.setCurrentText(wineValue[dependsItem])
|
||||||
|
except:
|
||||||
|
print(f"忽略行:{i}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
@ -1112,6 +1238,7 @@ def ReadDeb(unzip = False):
|
|||||||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
# 如果要添加其他 wine,请在字典添加其名称和执行路径
|
# 如果要添加其他 wine,请在字典添加其名称和执行路径
|
||||||
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
|
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
|
||||||
|
wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
|
||||||
# 读取 wine 本地列表
|
# 读取 wine 本地列表
|
||||||
for i in ["/opt/wine-staging", "/opt/wine-dev", "/opt/wine-stable", "/opt/spark-wine7-devel"]:
|
for i in ["/opt/wine-staging", "/opt/wine-dev", "/opt/wine-stable", "/opt/spark-wine7-devel"]:
|
||||||
if os.path.exists(i):
|
if os.path.exists(i):
|
||||||
@ -1279,6 +1406,7 @@ programmenu.addAction(exit)
|
|||||||
debMenu.addAction(debE)
|
debMenu.addAction(debE)
|
||||||
debMenu.addAction(debX)
|
debMenu.addAction(debX)
|
||||||
debE.triggered.connect(lambda: ReadDeb(False))
|
debE.triggered.connect(lambda: ReadDeb(False))
|
||||||
|
debX.triggered.connect(lambda: ReadDeb(True))
|
||||||
help.addAction(tip)
|
help.addAction(tip)
|
||||||
# 控件配置
|
# 控件配置
|
||||||
try:
|
try:
|
||||||
|
@ -168,12 +168,12 @@ class Runexebutton_threading(QtCore.QThread):
|
|||||||
wineUsingOption = ""
|
wineUsingOption = ""
|
||||||
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
|
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
|
||||||
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
|
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
|
||||||
#if not os.path.exists(f"{programPath}/exagear"):
|
if not os.path.exists(f"{programPath}/exagear"):
|
||||||
#self.run_command(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o \"exagear.7z\" https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/exagear.7z")
|
self.run_command(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o \"exagear.7z\" https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/exagear.7z")
|
||||||
#if os.system(f"7z x \"{programPath}/exagear.7z\" -o\"{programPath}\""):
|
if os.system(f"7z x \"{programPath}/exagear.7z\" -o\"{programPath}\""):
|
||||||
# QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
|
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
|
||||||
# return
|
return
|
||||||
#os.remove(f"{programPath}/exagear.7z")
|
os.remove(f"{programPath}/exagear.7z")
|
||||||
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
|
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
|
||||||
if not os.path.exists(f"{programPath}/dlls-arm"):
|
if not os.path.exists(f"{programPath}/dlls-arm"):
|
||||||
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
|
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
|
||||||
|
Loading…
Reference in New Issue
Block a user