mirror of
https://gitee.com/gfdgd-xi/deep-wine-runner
synced 2025-01-13 01:58:27 +08:00
修复问题
This commit is contained in:
parent
249a98c915
commit
dc660bb1f1
2
Makefile
2
Makefile
@ -51,7 +51,7 @@ build:
|
||||
cp -rv deepin.list deb/opt/apps/deepin-wine-runner
|
||||
cp -rv sparkstore.list deb/opt/apps/deepin-wine-runner
|
||||
cp -rv arm-package.7z deb/opt/apps/deepin-wine-runner
|
||||
cp -rv exa.7z deb/opt/apps/deepin-wine-runner
|
||||
#cp -rv exa.7z deb/opt/apps/deepin-wine-runner
|
||||
cp -rv clean-unuse-program.py deb/opt/apps/deepin-wine-runner
|
||||
cp -rv InstallNewWineHQ.sh deb/opt/apps/deepin-wine-runner
|
||||
cp -rv cleanbottle.sh deb/opt/apps/deepin-wine-runner
|
||||
|
@ -19,13 +19,20 @@ 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/wine-runner-list/raw/branch/master/auto", # Gitlink 源
|
||||
"https://gitee.com/gfdgd-xi/deep-wine-runner-auto-configuration-script/raw/master/", # Gitee 源
|
||||
"https://gfdgd-xi.github.io/deep-wine-runner-auto-configuration-script/", # Github 源
|
||||
"http://gfdgdxi.msns.cn/wine-runner-list/auto/", # 备用源1,纯 IPv6 源
|
||||
"http://120.25.153.144/deep-wine-runner-auto-configuration-script/", # 备用源2,纯 IPv6 源
|
||||
"http://120.25.153.144/deep-wine-runner-auto-configuration-script/", # 备用源2
|
||||
"http://gfdgdxi.free.idcfengye.com/wine-runner-list/auto/", # 备用源 3
|
||||
"http://127.0.0.1/wine-runner-list/auto/" # 本地测试源
|
||||
]
|
||||
urlSources = urlSourcesList[0]
|
||||
@ -98,6 +105,7 @@ class ProgramRunStatusUpload():
|
||||
|
||||
class InformationWindow():
|
||||
def ShowWindow():
|
||||
#webeng = False
|
||||
# 获取选中项
|
||||
try:
|
||||
choose = ui.searchList.selectionModel().selectedIndexes()[0].data()
|
||||
@ -110,11 +118,13 @@ class InformationWindow():
|
||||
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():
|
||||
@ -145,20 +155,49 @@ class InformationWindow():
|
||||
starHtml = ""
|
||||
if maxHead > 5:
|
||||
for i in range(end):
|
||||
starHtml += f"<img src='{programPath}/Icon/BadStar.svg' width=50>\n"
|
||||
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):
|
||||
starHtml += f"<img src='{programPath}/Icon/Star.svg' width=50>\n"
|
||||
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):
|
||||
starHtml += f"<img src='{programPath}/Icon/UnStar.svg' width=50>"
|
||||
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()
|
||||
informationText = QtWidgets.QTextBrowser()
|
||||
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.setHtml(about)
|
||||
|
||||
#informationText.setUrl(QtCore.QUrl("https://gfdgd-xi.github.io"))
|
||||
messageLayout.addWidget(informationText)
|
||||
messageLayout.addWidget(uploadFen)
|
||||
message.setWindowTitle(f"关于“{choose}”的介绍")
|
||||
@ -329,7 +368,7 @@ def readtxt(path):
|
||||
|
||||
def ChangeSources():
|
||||
global urlSources
|
||||
sources = [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action_2, ui.action]
|
||||
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]
|
||||
@ -372,7 +411,9 @@ if __name__ == "__main__":
|
||||
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)
|
||||
|
326
deb/opt/apps/deepin-wine-runner/Icon/Internet Explorer.svg
Executable file
326
deb/opt/apps/deepin-wine-runner/Icon/Internet Explorer.svg
Executable file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 17 KiB |
245
deb/opt/apps/deepin-wine-runner/Icon/PhotoShop.svg
Normal file
245
deb/opt/apps/deepin-wine-runner/Icon/PhotoShop.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 16 KiB |
409
deb/opt/apps/deepin-wine-runner/Icon/腾讯会议.svg
Normal file
409
deb/opt/apps/deepin-wine-runner/Icon/腾讯会议.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 19 KiB |
237
deb/opt/apps/deepin-wine-runner/Icon/腾讯课堂.svg
Normal file
237
deb/opt/apps/deepin-wine-runner/Icon/腾讯课堂.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 16 KiB |
@ -70,6 +70,8 @@ m m "
|
||||
["deepin-wine5-stable", "deepin-wine5-stable"],
|
||||
["deepin-wine6-stable", "deepin-wine6-stable"]
|
||||
]:
|
||||
if not os.system(f"which {i[1]} > /dev/null"):
|
||||
continue
|
||||
choose = input(f"安装{i[0]}?(添加深度源)[Y/N]").upper()
|
||||
if choose == "Y":
|
||||
print("安装中……")
|
||||
@ -80,6 +82,10 @@ m m "
|
||||
["deepin-wine", "deepin-wine"],
|
||||
["spark-wine7-devel", "spark-wine7-devel"]
|
||||
]:
|
||||
if not os.system(f"which {i[1]} > /dev/null"):
|
||||
continue
|
||||
choose = input(f"安装{i[0]}?(添加深度、星火源)[Y/N]").upper()
|
||||
if choose == "Y":
|
||||
InstallWithSparkStoreSource(i[1])
|
||||
InstallWithSparkStoreSource(i[1])
|
||||
input("按回车键后退出……")
|
||||
exit()
|
Binary file not shown.
@ -85,6 +85,9 @@ class Ui_MainWindow(object):
|
||||
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)
|
||||
@ -93,6 +96,7 @@ class Ui_MainWindow(object):
|
||||
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())
|
||||
@ -121,4 +125,5 @@ class Ui_MainWindow(object):
|
||||
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"))
|
||||
|
||||
|
@ -112,6 +112,7 @@
|
||||
<addaction name="actionGithub"/>
|
||||
<addaction name="action_IPv6"/>
|
||||
<addaction name="action_2"/>
|
||||
<addaction name="action_3"/>
|
||||
<addaction name="action"/>
|
||||
</widget>
|
||||
<addaction name="menu"/>
|
||||
@ -191,6 +192,14 @@
|
||||
<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/>
|
||||
|
Binary file not shown.
Binary file not shown.
@ -33,10 +33,10 @@ def button1_cl():
|
||||
if path != "":
|
||||
e6_text.setText(path)
|
||||
|
||||
def button2_cl():
|
||||
def button2_cl(number):
|
||||
path = QtWidgets.QFileDialog.getOpenFileName(widget, QtCore.QCoreApplication.translate("U", "选择图标文件"), get_home(), "PNG图标(*.png);;SVG图标(*.svg);;全部文件(*.*)")[0]
|
||||
if path != "":
|
||||
e9_text.setText(path)
|
||||
mapLink[number].setText(path)
|
||||
|
||||
def button4_cl():
|
||||
path = QtWidgets.QFileDialog.getSaveFileName(widget, QtCore.QCoreApplication.translate("U", "保存 deb 包"), get_home(), "deb 文件(*.deb);;所有文件(*.*)", "{}_{}_i386.deb".format(e1_text.text(), e2_text.text()))[0]
|
||||
@ -237,6 +237,11 @@ def make_deb(build=False):
|
||||
def label13_text_change(thing):
|
||||
label13_text.setText(f"<p align='center'>当前 deb 打包情况:{thing}</p>")
|
||||
|
||||
def ReplaceText(string: str, lists: list):
|
||||
for i in lists:
|
||||
string = string.replace(i[0], i[1])
|
||||
return string
|
||||
|
||||
class make_deb_threading(QtCore.QThread):
|
||||
|
||||
signal = QtCore.pyqtSignal(str)
|
||||
@ -296,19 +301,36 @@ class make_deb_threading(QtCore.QThread):
|
||||
b = e6_text.text()[:-1]
|
||||
else:
|
||||
b = e6_text.text()
|
||||
if e9_text.text() != "":
|
||||
# 获取图片格式(不太准)
|
||||
try:
|
||||
im = Image.open(e9_text.text())
|
||||
imms = im.format.lower()
|
||||
except: # 未知(就直接设置为 svg 后缀)
|
||||
imms = ".svg"
|
||||
a = "/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(e1_text.text(), e1_text.text(), imms)
|
||||
if not os.path.exists(e9_text.text()):
|
||||
self.errorMsg.emit("图标的路径填写错误,无法进行构建 deb 包")
|
||||
self.disabled_or_NORMAL_all.emit(True)
|
||||
self.label.emit("图标的路径填写错误,无法进行构建 deb 包")
|
||||
return
|
||||
if desktopIconTab.count() <= 1:
|
||||
if e9_text.text() != "":
|
||||
# 获取图片格式(不太准)
|
||||
try:
|
||||
im = Image.open(e9_text.text())
|
||||
imms = im.format.lower()
|
||||
except: # 未知(就直接设置为 svg 后缀)
|
||||
imms = "svg"
|
||||
a = "/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(e1_text.text(), e1_text.text(), imms)
|
||||
if not os.path.exists(e9_text.text()):
|
||||
self.errorMsg.emit("图标的路径填写错误,无法进行构建 deb 包")
|
||||
self.disabled_or_NORMAL_all.emit(True)
|
||||
self.label.emit("图标的路径填写错误,无法进行构建 deb 包")
|
||||
return
|
||||
else:
|
||||
a = []
|
||||
for i in iconUiList:
|
||||
if i[4].text != "":
|
||||
# 获取图片格式(不太准)
|
||||
try:
|
||||
im = Image.open(e9_text.text())
|
||||
imms = im.format.lower()
|
||||
except:
|
||||
imms = ".svg"
|
||||
a.append("/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}-{}.{}".format(e1_text.text(), e1_text.text(), os.path.splitext(os.path.basename(i[0].text().replace("\\", "/")))[0], imms))
|
||||
if not os.path.exists(i[4].text()):
|
||||
self.errorMsg.emit("图标的路径填写错误,无法进行构建 deb 包")
|
||||
self.disabled_or_NORMAL_all.emit(True)
|
||||
self.label.emit("图标的路径填写错误,无法进行构建 deb 包")
|
||||
return
|
||||
if not os.path.exists(e6_text.text()):
|
||||
print("aa")
|
||||
self.errorMsg.emit("路径填写错误,无法继续构建 deb 包")
|
||||
@ -362,13 +384,13 @@ fi"""][int(rmBash.isChecked())],
|
||||
|
||||
version_gt() {{ test "$(echo "$@" | tr " " "\\n" | sort -V | head -n 1)" != "$1"; }}
|
||||
|
||||
BOTTLENAME="{e5_text.text()}"
|
||||
APPVER="{e2_text.text()}"
|
||||
EXEC_PATH="{e7_text.text()}"
|
||||
BOTTLENAME="@@@BOTTLENAME@@@"
|
||||
APPVER="@@@APPVER@@@"
|
||||
EXEC_PATH="@@@EXEC_PATH@@@"
|
||||
START_SHELL_PATH="/opt/deepinwine/tools/run_v4.sh"
|
||||
export MIME_TYPE=""
|
||||
export DEB_PACKAGE_NAME="{e1_text.text()}"
|
||||
export APPRUN_CMD="{wine[wineVersion.currentText()]}"
|
||||
export DEB_PACKAGE_NAME="@@@DEB_PACKAGE_NAME@@@"
|
||||
export APPRUN_CMD="@@@APPRUN_CMD@@@"
|
||||
DISABLE_ATTACH_FILE_DIALOG=""
|
||||
EXPORT_ENVS=""
|
||||
|
||||
@ -433,16 +455,16 @@ Get_Dist_Name()
|
||||
|
||||
version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }}
|
||||
####用于比较版本?未实装
|
||||
BOTTLENAME="{e5_text.text()}"
|
||||
APPVER="{e2_text.text()}"
|
||||
EXEC_PATH="{e7_text.text()}"
|
||||
BOTTLENAME="@@@BOTTLENAME@@@"
|
||||
APPVER="@@@APPVER@@@"
|
||||
EXEC_PATH="@@@EXEC_PATH@@@"
|
||||
##### 软件在wine中的启动路径
|
||||
START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh"
|
||||
export MIME_TYPE=""
|
||||
#####没什么用
|
||||
export DEB_PACKAGE_NAME="{e1_text.text()}"
|
||||
export DEB_PACKAGE_NAME="@@@DEB_PACKAGE_NAME@@@"
|
||||
####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关
|
||||
export APPRUN_CMD="{wine[wineVersion.currentText()]}"
|
||||
export APPRUN_CMD="@@@APPRUN_CMD@@@"
|
||||
#####wine启动指令,建议
|
||||
EXPORT_ENVS=""
|
||||
|
||||
@ -527,60 +549,25 @@ fi"""
|
||||
# ARM64 通用 wine 打包配置文件
|
||||
"Wine": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ",
|
||||
"Architecture": "arm64",
|
||||
"Depends": "zenity, com.deepin-wine6-stable.deepin(>=6.0deepin31), deepin-wine-exagear-images(>=10deepin4), com.deepin-box86.deepin(>=0.2.3deepin21), deepin-elf-verify (>= 1.1.1-1), p7zip-full, fonts-wqy-microhei, fonts-noto-cjk",
|
||||
"postinst": f"""#!/bin/bash
|
||||
"Depends": "com.deepin-wine6-stable.deepin (>= 6.0deepin31), com.wine-helper.deepin (>= 0.0.8), com.deepin-box86.deepin (>= 0.2.6deepin3), deepin-elf-verify (>= 1.1.1-1)",
|
||||
"postinst": f"""#!/bin/sh
|
||||
|
||||
DEB_PATH=/opt/apps/{e1_text.text()}
|
||||
if [ -f $DEB_PATH/files/wined3d.dll.so ] && [ -d "/usr/lib/nvidia" ];then
|
||||
mv $DEB_PATH/files/wined3d.dll.so $DEB_PATH/files/dlls
|
||||
ACTIVEX_NAME=""
|
||||
|
||||
if [ -f "/opt/apps/{e1_text.text()}/files/install.sh" ];then
|
||||
/opt/apps/{e1_text.text()}/files/install.sh -i
|
||||
fi
|
||||
|
||||
KUNPENG="0x48"
|
||||
cpu_vendor=$(lscpu | grep Vendor | awk '{{print $3}}')
|
||||
KIRIN=`cat /proc/cpuinfo | grep Kirin`
|
||||
if [ ! -z "$KIRIN" ];then
|
||||
mv $DEB_PATH/files/*.so $DEB_PATH/files/dlls
|
||||
fi
|
||||
|
||||
## check if the cpu support arm32 instruction or not, 126 means unsupported
|
||||
/opt/deepin-box86/box86 -v
|
||||
CHECK_ARM32=$?
|
||||
|
||||
IMAGE_VER=10deepin3
|
||||
IMAGE_DIR=/opt/deepin-wine-exagear-images/debian-buster
|
||||
ARCHIVE_FILE=files.7z
|
||||
|
||||
download_image() {{
|
||||
pushd /var/cache/apt/archives >/dev/null
|
||||
apt download deepin-wine-exagear-images
|
||||
dpkg -x deepin-wine-exagear-images*.deb /
|
||||
rm deepin-wine-exagear-images*.deb
|
||||
echo $IMAGE_VER > $IMAGE_DIR/VERSION
|
||||
popd >/dev/null
|
||||
}}
|
||||
|
||||
if [[ "$KUNPENG" == "$cpu_vendor" ]] || [[ $CHECK_ARM32 != 0 ]];then
|
||||
echo "use exagear as emulator..."
|
||||
if [ ! -d /opt/exagear/bin ];then
|
||||
mkdir /opt/exagear/bin -p
|
||||
fi
|
||||
|
||||
if [ ! -e /opt/exagear/bin/ubt_x32a64_al ];then
|
||||
cp $DEB_PATH/files/exa/ubt_x32a64_al /opt/exagear/bin/ubt_x32a64_al
|
||||
fi
|
||||
|
||||
if [ ! -e /opt/exagear/bin/ubt_x64a64_al ];then
|
||||
cp $DEB_PATH/files/exa/ubt_x64a64_al /opt/exagear/bin/ubt_x64a64_al
|
||||
fi
|
||||
mv $DEB_PATH/files/run_with_exagear.sh $DEB_PATH/files/run.sh
|
||||
mv $DEB_PATH/files/exa/wineserver /opt/deepin-wine6-stable/bin/wineserver
|
||||
else
|
||||
echo "use box86 as emulator..."
|
||||
mv $DEB_PATH/files/run_with_box86.sh $DEB_PATH/files/run.sh
|
||||
if [ -n "$ACTIVEX_NAME" ]; then
|
||||
if [ ! -d "/usr/lib/mozilla/plugins" ];then
|
||||
mkdir -p /usr/lib/mozilla/plugins
|
||||
fi
|
||||
cp /usr/lib/pipelight/libpipelight.so /usr/lib/mozilla/plugins/libpipelight-${{ACTIVEX_NAME}}.so
|
||||
glib-compile-schemas /usr/share/glib-2.0/schemas/
|
||||
fi
|
||||
|
||||
# Make sure the script returns 0
|
||||
true
|
||||
|
||||
""",
|
||||
# 因为 arm 不依赖 helper,所以要自带 kill.sh
|
||||
"kill.sh": """#!/bin/bash
|
||||
@ -862,7 +849,37 @@ else
|
||||
kill_app $APP_NAME
|
||||
fi
|
||||
""",
|
||||
"postrm": f"""#!/bin/bash
|
||||
"postrm": [f"""#!/bin/sh
|
||||
|
||||
ACTIVEX_NAME=""
|
||||
|
||||
if [ -f "/opt/apps/{e1_text.text()}/files/install.sh" ];then
|
||||
/opt/apps/{e1_text.text()}/files/install.sh -r
|
||||
fi
|
||||
|
||||
if [ -n "$ACTIVEX_NAME" ]; then
|
||||
rm /usr/lib/mozilla/plugins/libpipelight-${{ACTIVEX_NAME}}.so
|
||||
glib-compile-schemas /usr/share/glib-2.0/schemas/
|
||||
fi
|
||||
|
||||
# Make sure the script returns 0
|
||||
true
|
||||
""", f"""#!/bin/sh
|
||||
|
||||
ACTIVEX_NAME=""
|
||||
|
||||
if [ -f "/opt/apps/{e1_text.text()}/files/install.sh" ];then
|
||||
/opt/apps/{e1_text.text()}/files/install.sh -r
|
||||
fi
|
||||
|
||||
if [ -n "$ACTIVEX_NAME" ]; then
|
||||
rm /usr/lib/mozilla/plugins/libpipelight-${{ACTIVEX_NAME}}.so
|
||||
glib-compile-schemas /usr/share/glib-2.0/schemas/
|
||||
fi
|
||||
|
||||
# Make sure the script returns 0
|
||||
true
|
||||
# Clean Botton
|
||||
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
|
||||
|
||||
echo "清理卸载残留"
|
||||
@ -887,224 +904,95 @@ for username in $(ls /home)
|
||||
else
|
||||
echo "非卸载,跳过清理"
|
||||
fi
|
||||
""",
|
||||
"run_with_box86.sh": f"""#!/bin/bash
|
||||
DEB_PATH="/opt/apps/{e1_text.text()}"
|
||||
WINE="/opt/deepin-wine6-stable/bin/wine"
|
||||
WINESERVER="/opt/deepin-wine6-stable/bin/wineserver"
|
||||
EMU="/opt/deepin-box86/box86"
|
||||
EMU_ARGS=
|
||||
EXE="{e7_text.text()}"
|
||||
NEW_VERSION="{e2_text.text()}"
|
||||
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
|
||||
"""][int(rmBash.isChecked())],
|
||||
|
||||
if command -v zenity >/dev/null 2>&1; then
|
||||
progressbar()
|
||||
{{
|
||||
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close --no-cancel ||
|
||||
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close
|
||||
}}
|
||||
# 又又又改
|
||||
"run.sh": f"""#!/bin/bash
|
||||
|
||||
# Copyright (C) 2016 Deepin, Inc.
|
||||
#
|
||||
# Author: Li LongYu <lilongyu@linuxdeepin.com>
|
||||
# Peng Hao <penghao@linuxdeepin.com>
|
||||
|
||||
version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }}
|
||||
|
||||
ACTIVEX_NAME=""
|
||||
BOTTLENAME="@@@BOTTLENAME@@@"
|
||||
APPVER="@@@APPVER@@@"
|
||||
EXEC_PATH="@@@EXEC_PATH@@@"
|
||||
START_SHELL_PATH="/opt/deepinwine/tools/run_v4.sh"
|
||||
export MIME_TYPE=""
|
||||
export MIME_EXEC=""
|
||||
export DEB_PACKAGE_NAME="{e1_text.text()}"
|
||||
export APPRUN_CMD="deepin-wine6-stable"
|
||||
DISABLE_ATTACH_FILE_DIALOG=""
|
||||
EXPORT_ENVS=""
|
||||
EXEC_NAME="@@@EXEC_NAME@@@"
|
||||
INSTALL_SETUP=""
|
||||
export BOX86_EMU_CMD="/opt/deepin-box86/stable/box86"
|
||||
|
||||
export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH`
|
||||
|
||||
ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files"
|
||||
|
||||
if [ -z "$APPRUN_CMD" ];then
|
||||
export APPRUN_CMD="/opt/deepin-wine6-stable/bin/wine"
|
||||
fi
|
||||
if [ -f "$APPRUN_CMD" ];then
|
||||
wine_path=$(dirname $APPRUN_CMD)
|
||||
wine_path=$(realpath "$wine_path/../")
|
||||
export WINEDLLPATH=$wine_path/lib:$wine_path/lib64
|
||||
else
|
||||
progressbar()
|
||||
{{
|
||||
cat -
|
||||
}}
|
||||
export WINEDLLPATH=/opt/$APPRUN_CMD/lib:/opt/$APPRUN_CMD/lib64
|
||||
fi
|
||||
|
||||
reconstruct_bottle_symlink() {{
|
||||
export WINEPREDLL="$ARCHIVE_FILE_DIR/dlls"
|
||||
|
||||
if [ -L $BOTTLE/drive_c/users/$USER/Desktop ]; then
|
||||
rm -f $BOTTLE/drive_c/users/$USER/Desktop
|
||||
ln -s $HOME/Desktop $BOTTLE/drive_c/users/$USER/Desktop
|
||||
fi
|
||||
if [ -L $BOTTLE/drive_c/users/$USER/Documents ]; then
|
||||
rm -f $BOTTLE/drive_c/users/$USER/Documents
|
||||
ln -s $HOME/Documents $BOTTLE/drive_c/users/$USER/Documents
|
||||
fi
|
||||
if [ -L $BOTTLE/drive_c/users/$USER/Downloads ]; then
|
||||
rm -f $BOTTLE/drive_c/users/$USER/Downloads
|
||||
ln -s $HOME/Downloads $BOTTLE/drive_c/users/$USER/Downloads
|
||||
fi
|
||||
|
||||
if [ -L "$BOTTLE/drive_c/users/$USER/My Documents" ]; then
|
||||
rm -f "$BOTTLE/drive_c/users/$USER/My Documents"
|
||||
ln -s $HOME/Documents "$BOTTLE/drive_c/users/$USER/My Documents"
|
||||
fi
|
||||
|
||||
if [ -L "$BOTTLE/drive_c/users/$USER/My Music" ]; then
|
||||
rm -f "$BOTTLE/drive_c/users/$USER/My Music"
|
||||
ln -s $HOME/Music "$BOTTLE/drive_c/users/$USER/My Music"
|
||||
fi
|
||||
if [ -L "$BOTTLE/drive_c/users/$USER/My Videos" ]; then
|
||||
rm -f "$BOTTLE/drive_c/users/$USER/My Videos"
|
||||
ln -s $HOME/Videos "$BOTTLE/drive_c/users/$USER/My Videos"
|
||||
fi
|
||||
_SetRegistryValue()
|
||||
{{
|
||||
env WINEPREFIX="$BOTTLEPATH" $APPRUN_CMD reg ADD "$1" /v "$2" /t "$3" /d "$4" /f
|
||||
}}
|
||||
|
||||
if [ ! -d "$HOME/.deepinwine" ];then
|
||||
mkdir -p "$HOME/.deepinwine"
|
||||
if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then
|
||||
export ATTACH_FILE_DIALOG=1
|
||||
fi
|
||||
|
||||
if [ -f $BOTTLE/VERSION ];then
|
||||
old_version=`cat $BOTTLE/VERSION`
|
||||
if [ "$old_version" != "$NEW_VERSION" ];then
|
||||
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINESERVER -k
|
||||
rm -rf $BOTTLE
|
||||
if [ -n "$EXPORT_ENVS" ];then
|
||||
export $EXPORT_ENVS
|
||||
fi
|
||||
|
||||
# 打包安装程序的情况
|
||||
if [[ -z "$EXEC_PATH" ]] && [[ -n "$INSTALL_SETUP" ]];then
|
||||
$START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" -c
|
||||
BOTTLEPATH="$HOME/.deepinwine/$BOTTLENAME"
|
||||
EXEC_PATH=$(find "$BOTTLEPATH" -name $EXEC_NAME | head -1)
|
||||
if [ -z "$EXEC_PATH" ];then
|
||||
_SetRegistryValue "HKCU\\Software\\Wine\\DllOverrides" winemenubuilder.exe REG_SZ
|
||||
WINEPREFIX="$BOTTLEPATH" $APPRUN_CMD "$ARCHIVE_FILE_DIR/$INSTALL_SETUP"
|
||||
EXEC_PATH=$(find "$BOTTLEPATH" -name $EXEC_NAME | head -1)
|
||||
|
||||
cp "$ARCHIVE_FILE_DIR/setup.md5sum" "$BOTTLEPATH"
|
||||
fi
|
||||
|
||||
if [ -z "$EXEC_PATH" ];then
|
||||
echo "安装失败退出"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d $BOTTLE ];then
|
||||
|
||||
7z x "$DEB_PATH/files/files.7z" -o"$BOTTLE" -aoa
|
||||
mv "$BOTTLE/drive_c/users/@current_user@" "$BOTTLE/drive_c/users/$USER"
|
||||
sed -i "s#@current_user@#$USER#" $BOTTLE/*.reg
|
||||
reconstruct_bottle_symlink
|
||||
echo $NEW_VERSION > $BOTTLE/VERSION
|
||||
fi
|
||||
|
||||
export WINEPREDLL=$DEB_PATH/files/dlls
|
||||
export ATTACH_FILE_DIALOG=1
|
||||
export WINEDLLPATH=/opt/deepin-wine6-stable/lib
|
||||
ulimit -s 8192
|
||||
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE "$EXE" & #--disable-gpu &
|
||||
""",
|
||||
"run_with_exagear.sh": f"""#!/bin/bash
|
||||
DEB_PATH="/opt/apps/{e1_text.text()}"
|
||||
WINE="/opt/deepin-wine6-stable/bin/wine"
|
||||
WINESERVER="/opt/deepin-wine6-stable/bin/wineserver"
|
||||
EMU="/opt/exagear/bin/ubt_x64a64_al"
|
||||
IMAGE_PATH=$HOME/.deepinwine/debian-buster
|
||||
EMU_ARGS="--path-prefix $IMAGE_PATH --utmp-paths-list $IMAGE_PATH/.exagear/utmp-list --vpaths-list $IMAGE_PATH/.exagear/vpaths-list --opaths-list $IMAGE_PATH/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- "
|
||||
EXE="{e7_text.text()}"
|
||||
NEW_VERSION="{e2_text.text()}"
|
||||
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
|
||||
IMG_ARCHIVE_DIR=/opt/deepin-wine-exagear-images/debian-buster
|
||||
IMAGE_VER="10deepin4"
|
||||
LOCALTIME=`readlink -f /etc/localtime`
|
||||
|
||||
export LC_ALL=$LANG
|
||||
export XMODIFIERS=$XMODIFIERS
|
||||
export DESKTOP_SESSION=deepin
|
||||
|
||||
if command -v zenity >/dev/null 2>&1; then
|
||||
progressbar()
|
||||
{{
|
||||
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close --no-cancel ||
|
||||
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close
|
||||
}}
|
||||
|
||||
if [ -n "$EXEC_PATH" ];then
|
||||
if [ -z "${{EXEC_PATH##*.lnk*}}" ];then
|
||||
$START_SHELL_PATH $BOTTLENAME $APPVER "C:/windows/command/start.exe" "/Unix" "$EXEC_PATH" "$@"
|
||||
elif [ -z "${{EXEC_PATH##*.bat}}" ];then
|
||||
$START_SHELL_PATH $BOTTLENAME $APPVER "cmd" -f /c "$EXEC_PATH" "${{@:2}}"
|
||||
else
|
||||
$START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@"
|
||||
fi
|
||||
elif [ -n "$ACTIVEX_NAME" ] && [ $# -gt 1 ];then
|
||||
$START_SHELL_PATH $BOTTLENAME $APPVER "$1" -f "${{@:2}}"
|
||||
else
|
||||
progressbar()
|
||||
{{
|
||||
cat -
|
||||
}}
|
||||
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
|
||||
fi
|
||||
|
||||
reconstruct_bottle_symlink() {{
|
||||
|
||||
if [ -L $BOTTLE/drive_c/users/$USER/Desktop ]; then
|
||||
rm -f $BOTTLE/drive_c/users/$USER/Desktop
|
||||
ln -s $HOME/Desktop $BOTTLE/drive_c/users/$USER/Desktop
|
||||
fi
|
||||
if [ -L $BOTTLE/drive_c/users/$USER/Documents ]; then
|
||||
rm -f $BOTTLE/drive_c/users/$USER/Documents
|
||||
ln -s $HOME/Documents $BOTTLE/drive_c/users/$USER/Documents
|
||||
fi
|
||||
if [ -L $BOTTLE/drive_c/users/$USER/Downloads ]; then
|
||||
rm -f $BOTTLE/drive_c/users/$USER/Downloads
|
||||
ln -s $HOME/Downloads $BOTTLE/drive_c/users/$USER/Downloads
|
||||
fi
|
||||
|
||||
if [ -L "$BOTTLE/drive_c/users/$USER/My Documents" ]; then
|
||||
rm -f "$BOTTLE/drive_c/users/$USER/My Documents"
|
||||
ln -s $HOME/Documents "$BOTTLE/drive_c/users/$USER/My Documents"
|
||||
fi
|
||||
|
||||
if [ -L "$BOTTLE/drive_c/users/$USER/My Music" ]; then
|
||||
rm -f "$BOTTLE/drive_c/users/$USER/My Music"
|
||||
ln -s $HOME/Music "$BOTTLE/drive_c/users/$USER/My Music"
|
||||
fi
|
||||
if [ -L "$BOTTLE/drive_c/users/$USER/My Videos" ]; then
|
||||
rm -f "$BOTTLE/drive_c/users/$USER/My Videos"
|
||||
ln -s $HOME/Videos "$BOTTLE/drive_c/users/$USER/My Videos"
|
||||
fi
|
||||
}}
|
||||
|
||||
extract_image() {{
|
||||
|
||||
progpid=$(ps -ef | grep "zenity --progress --title=${{BOTTLE}}" | grep -v grep)
|
||||
if [ -n "$progpid" ];then
|
||||
echo "one $BOTTLE app is extracting runtime images too."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
7z x "$IMG_ARCHIVE_DIR/files.7z" -o"$IMAGE_PATH" -aoa | progressbar "$BOTTLE" "正在释放环境..."
|
||||
cp /usr/bin/dde-file-manager $IMAGE_PATH/usr/bin/dde-file-manager
|
||||
rm $IMAGE_PATH/etc/localtime
|
||||
ln -s $LOCALTIME $IMAGE_PATH/etc/localtime
|
||||
if [ -d $IMAGE_PATH/etc/resolvconf ];then
|
||||
rm $IMAGE_PATH/etc/resolvconf
|
||||
fi
|
||||
if [ -d /etc/resolvconf ];then
|
||||
cp /etc/resolvconf $IMAGE_PATH/etc/ -rf
|
||||
fi
|
||||
cp /etc/resolv.conf $IMAGE_PATH/etc/
|
||||
cp /etc/hosts $IMAGE_PATH/etc/
|
||||
echo $IMAGE_VER > $IMAGE_PATH/VERSION
|
||||
}}
|
||||
|
||||
get_link_err_nums() {{
|
||||
|
||||
find $IMAGE_PATH -type l ! -exec test -e {{}} \; -print | wc -l
|
||||
}}
|
||||
|
||||
if [ ! -d "$HOME/.deepinwine" ];then
|
||||
mkdir -p "$HOME/.deepinwine"
|
||||
fi
|
||||
|
||||
if [ -f $BOTTLE/VERSION ];then
|
||||
old_version=`cat $BOTTLE/VERSION`
|
||||
if [ "$old_version" != "$NEW_VERSION" ];then
|
||||
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINESERVER -k
|
||||
rm -rf $BOTTLE
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d $BOTTLE ];then
|
||||
|
||||
7z x "$DEB_PATH/files/files.7z" -o"$BOTTLE" -aoa
|
||||
mv "$BOTTLE/drive_c/users/@current_user@" "$BOTTLE/drive_c/users/$USER"
|
||||
sed -i "s#@current_user@#$USER#" $BOTTLE/*.reg
|
||||
reconstruct_bottle_symlink
|
||||
echo $NEW_VERSION > $BOTTLE/VERSION
|
||||
fi
|
||||
|
||||
## 解压文件
|
||||
if [ ! -e $IMAGE_PATH/VERSION ];then
|
||||
extract_image
|
||||
fi
|
||||
|
||||
OLD_IMAGE_VER=`cat $IMAGE_PATH/VERSION`
|
||||
if [ "$OLD_IMAGE_VER" != "$IMAGE_VER" ];then
|
||||
extract_image
|
||||
fi
|
||||
|
||||
echo "======$(get_link_err_nums)===="
|
||||
if [ "$(get_link_err_nums)" -gt "120" ];then
|
||||
extract_image
|
||||
fi
|
||||
|
||||
## mount /data/ dir to geust
|
||||
if [ -d $IMAGE_PATH ] && [ ! -d $IMAGE_PATH/data ];then
|
||||
mkdir $IMAGE_PATH/data
|
||||
cp $DEB_PATH/files/exa/vpaths-list $IMAGE_PATH/.exagear
|
||||
fi
|
||||
|
||||
export WINEPREDLL=$DEB_PATH/files/dlls
|
||||
export ATTACH_FILE_DIALOG=1
|
||||
export WINEDLLPATH=/opt/deepin-wine6-stable/lib
|
||||
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE "$EXE" & #--disable-gpu &
|
||||
""",
|
||||
"info": f'''{{
|
||||
"appid": "{e1_text.text()}",
|
||||
@ -1166,7 +1054,7 @@ extract_archive()
|
||||
|
||||
BOTTLENAME="{e5_text.text()}"
|
||||
APPVER="{e2_text.text()}"
|
||||
EXEC_PATH="{e7_text.text()}"
|
||||
EXEC_PATH="@@@EXEC_PATH@@@"
|
||||
START_SHELL_PATH="{["/opt/deepinwine/tools/run_v4.sh", "/opt/deepinwine/tools/spark_run_v4.sh"][int(chooseWineHelperValue.isChecked())]}"
|
||||
export MIME_TYPE=""
|
||||
export DEB_PACKAGE_NAME="{e1_text.text()}"
|
||||
@ -1245,7 +1133,7 @@ fi
|
||||
###############
|
||||
self.label.emit("正在创建文件……")
|
||||
os.mknod("{}/DEBIAN/control".format(debPackagePath))
|
||||
os.mknod("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
|
||||
#os.mknod("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
|
||||
#os.mknod("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
|
||||
os.mknod("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
|
||||
#########!!!!!!!
|
||||
@ -1289,9 +1177,10 @@ fi
|
||||
if not os.path.exists(f"{programPath}/dlls-arm"):
|
||||
self.run_command(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\"")
|
||||
os.remove(f"{programPath}/dlls-arm.7z")
|
||||
if not os.path.exists(f"{programPath}/exa"):
|
||||
self.run_command(f"7z x \"{programPath}/exa.7z\" -o\"{programPath}\"")
|
||||
os.remove(f"{programPath}/exa.7z")
|
||||
# 已废弃
|
||||
#if not os.path.exists(f"{programPath}/exa"):
|
||||
# self.run_command(f"7z x \"{programPath}/exa.7z\" -o\"{programPath}\"")
|
||||
# os.remove(f"{programPath}/exa.7z")
|
||||
if not os.path.exists(f"{programPath}/arm-package"):
|
||||
self.run_command(f"7z x \"{programPath}/arm-package.7z\" -o\"{programPath}\"")
|
||||
os.remove(f"{programPath}/arm-package.7z")
|
||||
@ -1303,8 +1192,12 @@ fi
|
||||
self.run_command(f"cp -rv '{programPath}/arm-package/'* {debPackagePath}/opt/apps/{e1_text.text()}/files/")
|
||||
#self.run_command(f"cp -rv '{programPath}/wined3d.dll.so' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
|
||||
pass
|
||||
if e9_text.text() != "":
|
||||
shutil.copy(e9_text.text(), "{}/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(debPackagePath, e1_text.text(), e1_text.text(), imms))
|
||||
if desktopIconTab.count() <= 1:
|
||||
if e9_text.text() != "":
|
||||
shutil.copy(e9_text.text(), "{}/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(debPackagePath, e1_text.text(), e1_text.text(), imms))
|
||||
else:
|
||||
for i in range(len(a)):
|
||||
shutil.copy(iconUiList[i][4].text(), "{}/{}".format(debPackagePath, a[i]))
|
||||
################
|
||||
# 获取文件大小
|
||||
################
|
||||
@ -1343,14 +1236,67 @@ Description: {e3_text.text()}
|
||||
write_txt(f"{debPackagePath}/DEBIAN/postinst", debInformation[debArch.currentIndex()]["postinst"])
|
||||
if debInformation[debArch.currentIndex()]["postrm"] != "":
|
||||
write_txt(f"{debPackagePath}/DEBIAN/postrm", debInformation[debArch.currentIndex()]["postrm"])
|
||||
write_txt("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()), '#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nType=Application\nX-Created-By={}\nCategories={};\nIcon={}\nExec="/opt/apps/{}/files/run.sh" --uri {}\nName={}\nComment={}\nMimeType={}\nGenericName={}\nTerminal=false\nStartupNotify=false\n'.format(e4_text.text(), option1_text.currentText(), a, e1_text.text(), e15_text.text(), e8_text.text(), e3_text.text(), e10_text.text(), e1_text.text()))
|
||||
replaceMap = [
|
||||
["@@@BOTTLENAME@@@", e5_text.text()],
|
||||
["@@@APPVER@@@", e2_text.text()],
|
||||
["@@@EXEC_PATH@@@", e7_text.text()],
|
||||
["@@@DEB_PACKAGE_NAME@@@", e1_text.text()],
|
||||
["@@@APPRUN_CMD@@@", wine[wineVersion.currentText()]],
|
||||
["@@@EXEC_NAME@@@", os.path.basename(e7_text.text().replace("\\", "/"))]
|
||||
]
|
||||
if desktopIconTab.count() <= 1:
|
||||
write_txt("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()), '#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nType=Application\nX-Created-By={}\nCategories={};\nIcon={}\nExec="/opt/apps/{}/files/run.sh" --uri {}\nName={}\nComment={}\nMimeType={}\nGenericName={}\nTerminal=false\nStartupNotify=false\n'.format(e4_text.text(), option1_text.currentText(), a, e1_text.text(), e15_text.text(), e8_text.text(), e3_text.text(), e10_text.text(), e1_text.text()))
|
||||
else:
|
||||
for i in range(len(iconUiList)):
|
||||
write_txt("{}/opt/apps/{}/entries/applications/{}-{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text(), os.path.splitext(os.path.basename(iconUiList[i][0].text().replace("\\", "/")))[0]), f'''#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Type=Application
|
||||
X-Created-By={e4_text.text()}
|
||||
Categories={iconUiList[i][1].currentText()};
|
||||
Icon={a[i]}
|
||||
Exec="/opt/apps/{e1_text.text()}/files/run.sh" --uri {iconUiList[i][2].text()}
|
||||
Name={iconUiList[i][3].text()}
|
||||
Comment={e3_text.text()}
|
||||
MimeType={e10_text.text()}
|
||||
GenericName={e1_text.text()}
|
||||
Terminal=false
|
||||
StartupNotify=false
|
||||
''')
|
||||
# 要开始分类讨论了
|
||||
if debArch.currentIndex() == 0:
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run.sh", debInformation[debArch.currentIndex()]["run.sh"])
|
||||
if debArch.currentIndex() == 1:
|
||||
if debArch.currentIndex() == 0 or debArch.currentIndex() == 1:
|
||||
if desktopIconTab.count() <= 1:
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run.sh", ReplaceText(debInformation[debArch.currentIndex()]["run.sh"], replaceMap))
|
||||
else:
|
||||
for i in iconUiList:
|
||||
replaceMap = [
|
||||
["@@@BOTTLENAME@@@", e5_text.text()],
|
||||
["@@@APPVER@@@", e2_text.text()],
|
||||
["@@@EXEC_PATH@@@", i[0].text()],
|
||||
["@@@DEB_PACKAGE_NAME@@@", e1_text.text()],
|
||||
["@@@APPRUN_CMD@@@", wine[wineVersion.currentText()]],
|
||||
["@@@EXEC_NAME@@@", os.path.basename(i[0].text().replace("\\", "/"))]
|
||||
]
|
||||
line = "\\"
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}.sh", ReplaceText(debInformation[debArch.currentIndex()]["run.sh"], replaceMap))
|
||||
if debArch.currentIndex() == 1 and False:
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/kill.sh", debInformation[debArch.currentIndex()]["kill.sh"])
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_box86.sh", debInformation[debArch.currentIndex()]["run_with_box86.sh"])
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_exagear.sh", debInformation[debArch.currentIndex()]["run_with_exagear.sh"])
|
||||
if desktopIconTab.count() <= 1:
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_box86.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_box86.sh"], replaceMap))
|
||||
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_exagear.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_exagear.sh"], replaceMap))
|
||||
else:
|
||||
# Flag:postrm和postinst均需要改,所以先写一下防止自己忘了
|
||||
for i in iconUiList:
|
||||
replaceMap = [
|
||||
["@@@BOTTLENAME@@@", e5_text.text()],
|
||||
["@@@APPVER@@@", e2_text.text()],
|
||||
["@@@EXEC_PATH@@@", i[0].text()],
|
||||
["@@@DEB_PACKAGE_NAME@@@", e1_text.text()],
|
||||
["@@@APPRUN_CMD@@@", wine[wineVersion.currentText()]],
|
||||
["@@@EXEC_NAME@@@", os.path.basename(i[0].text().replace("\\", "/"))]
|
||||
]
|
||||
#write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}_with_box86.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_box86.sh"], replaceMap))
|
||||
#write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}_with_exagear.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_exagear.sh"], replaceMap))
|
||||
write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), debInformation[debArch.currentIndex()]["info"])
|
||||
################
|
||||
# 修改文件权限
|
||||
@ -1359,11 +1305,11 @@ Description: {e3_text.text()}
|
||||
self.run_command("chmod -Rv 644 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
|
||||
self.run_command("chmod -Rv 644 {}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
|
||||
self.run_command("chmod -Rv 0755 {}/DEBIAN".format(debPackagePath))
|
||||
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
|
||||
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/kill.sh".format(debPackagePath, e1_text.text()))
|
||||
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run_with_box86.sh".format(debPackagePath, e1_text.text()))
|
||||
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run_with_exagear.sh".format(debPackagePath, e1_text.text()))
|
||||
self.run_command("chmod -Rv 755 {}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
|
||||
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/*.sh".format(debPackagePath, e1_text.text()))
|
||||
#self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/kill.sh".format(debPackagePath, e1_text.text()))
|
||||
#self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/*_with_box86.sh".format(debPackagePath, e1_text.text()))
|
||||
#self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/*_with_exagear.sh".format(debPackagePath, e1_text.text()))
|
||||
self.run_command("chmod -Rv 755 {}/opt/apps/{}/entries/applications/*.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
|
||||
################
|
||||
# 构建 deb 包
|
||||
################
|
||||
@ -1447,7 +1393,7 @@ def ChangeArchCombobox():
|
||||
if debArch.currentIndex() == 0:
|
||||
ChangeWine()
|
||||
else:
|
||||
debDepends.setText("zenity, com.deepin-wine6-stable.deepin(>=6.0deepin31), deepin-wine-exagear-images(>=10deepin4), com.deepin-box86.deepin(>=0.2.3deepin21), deepin-elf-verify (>= 1.1.1-1), p7zip-full, fonts-wqy-microhei, fonts-noto-cjk")
|
||||
debDepends.setText("com.deepin-wine6-stable.deepin (>= 6.0deepin31), com.wine-helper.deepin (>= 0.0.8), com.deepin-box86.deepin (>= 0.2.6deepin3), deepin-elf-verify (>= 1.1.1-1)")
|
||||
|
||||
def InstallDeb():
|
||||
os.system(f"xdg-open '{e12_text.text()}'")
|
||||
@ -1723,7 +1669,54 @@ def ReadDeb(unzip = False):
|
||||
except:
|
||||
print(f"忽略行:{i}")
|
||||
|
||||
def ChangeTapTitle():
|
||||
if desktopIconTab.count() <= 1:
|
||||
desktopIconTab.setTabText(0, "run.sh")
|
||||
return
|
||||
title = os.path.basename(iconUiList[desktopIconTab.currentIndex()][0].text().replace("\\", "/"))
|
||||
desktopIconTab.setTabText(desktopIconTab.currentIndex(), title)
|
||||
|
||||
mapLink = []
|
||||
|
||||
def AddTab():
|
||||
global mapLink
|
||||
button2 = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "浏览……"))
|
||||
e7_text = QtWidgets.QLineEdit()
|
||||
e8_text = QtWidgets.QLineEdit()
|
||||
e9_text = QtWidgets.QLineEdit()
|
||||
e15_text = QtWidgets.QLineEdit()
|
||||
iconTab1 = QtWidgets.QWidget()
|
||||
option1_text = QtWidgets.QComboBox()
|
||||
option1_text.addItems(["Network", "Chat", "Audio", "Video", "Graphics", "Office", "Translation", "Development", "Utility"])
|
||||
option1_text.setCurrentText("Network")
|
||||
number = int(str(len(mapLink)))
|
||||
button2.clicked.connect(lambda: button2_cl(number))
|
||||
mapLink.append(e9_text)
|
||||
#desktopIconTabLayout = QtWidgets.QGridLayout()
|
||||
desktopIconTabLayout = QtWidgets.QGridLayout()
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "wine 容器里需要运行的可执行文件路径(※必填):")), 6, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的分类(※必填):")), 7, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "wine 容器里需要运行的可执行文件的参数(选填):")), 8, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的图标(选填):")), 10, 0, 1, 1)
|
||||
iconTab1.setLayout(desktopIconTabLayout)
|
||||
desktopIconTab.addTab(iconTab1, f"图标{desktopIconTab.count() + 1}")
|
||||
desktopIconTabLayout.addWidget(e7_text, 6, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(option1_text, 7, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(e15_text, 8, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1)
|
||||
e7_text.textChanged.connect(ChangeTapTitle)
|
||||
iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text])
|
||||
print(iconUiList)
|
||||
|
||||
def DelTab():
|
||||
print(desktopIconTab.count())
|
||||
if desktopIconTab.count() <= 1:
|
||||
return
|
||||
del iconUiList[desktopIconTab.currentIndex()]
|
||||
desktopIconTab.removeTab(desktopIconTab.currentIndex())
|
||||
|
||||
###############
|
||||
# 程序信息
|
||||
@ -1752,6 +1745,7 @@ try:
|
||||
except:
|
||||
pass
|
||||
os.chdir("/")
|
||||
iconUiList = []
|
||||
iconPath = "{}/deepin-wine-runner.svg".format(programPath)
|
||||
information = json.loads(readtxt(f"{programPath}/information.json"))
|
||||
version = information["Version"]
|
||||
@ -1809,13 +1803,15 @@ option1_text.setCurrentText("Network")
|
||||
wineFrame = QtWidgets.QHBoxLayout()
|
||||
chooseWineHelperValue = QtWidgets.QCheckBox(QtCore.QCoreApplication.translate("U", "使用星火wine helper\n(如不勾选默认为deepin-wine-helper)"))
|
||||
button1.clicked.connect(button1_cl)
|
||||
button2.clicked.connect(button2_cl)
|
||||
button2.clicked.connect(lambda: button2_cl(0))
|
||||
mapLink.append(e9_text)
|
||||
button4.clicked.connect(button4_cl)
|
||||
button5.clicked.connect(make_deb)
|
||||
buildDebDir.clicked.connect(lambda: make_deb(True))
|
||||
build7z.clicked.connect(Build7zButton_Clicked)
|
||||
installDeb.clicked.connect(InstallDeb)
|
||||
wineFrame.addWidget(wineVersion)
|
||||
e7_text.textChanged.connect(ChangeTapTitle)
|
||||
# 创建控件
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要打包的 deb 包的包名(※必填):")), 0, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要打包的 deb 包的版本号(※必填):")), 1, 0, 1, 1)
|
||||
@ -1823,13 +1819,30 @@ widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要打包的 deb 包的维护者(※必填):")), 3, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要解压的 wine 容器的容器名(※必填):")), 4, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要解压的 wine 容器(※必填):")), 5, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "wine 容器里需要运行的可执行文件路径(※必填):")), 6, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的分类(※必填):")), 7, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "wine 容器里需要运行的可执行文件的参数(选填):")), 8, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的图标(选填):")), 10, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "选择打包的 wine 版本(※必选):")), 12, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "打包 deb 的保存路径(※必填):")), 13, 0, 1, 1)
|
||||
desktopIconTab = QtWidgets.QTabWidget()
|
||||
controlWidget = QtWidgets.QWidget()
|
||||
controlWidgetLayout = QtWidgets.QHBoxLayout()
|
||||
desktopIconTabAdd = QtWidgets.QPushButton("+")
|
||||
desktopIconTabDel = QtWidgets.QPushButton("-")
|
||||
controlWidgetLayout.addWidget(desktopIconTabAdd)
|
||||
controlWidgetLayout.addWidget(desktopIconTabDel)
|
||||
controlWidget.setLayout(controlWidgetLayout)
|
||||
desktopIconTabAdd.clicked.connect(AddTab)
|
||||
desktopIconTabDel.clicked.connect(DelTab)
|
||||
iconTab1 = QtWidgets.QWidget()
|
||||
desktopIconTabLayout = QtWidgets.QGridLayout()
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "wine 容器里需要运行的可执行文件路径(※必填):")), 6, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的分类(※必填):")), 7, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "wine 容器里需要运行的可执行文件的参数(选填):")), 8, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1)
|
||||
desktopIconTabLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要显示的 .desktop 文件的图标(选填):")), 10, 0, 1, 1)
|
||||
iconTab1.setLayout(desktopIconTabLayout)
|
||||
#desktopIconTab.setTabPosition(QtWidgets.QTabWidget.East)
|
||||
desktopIconTab.addTab(iconTab1, "Defult")
|
||||
desktopIconTab.setCornerWidget(controlWidget)
|
||||
widgetLayout.addWidget(desktopIconTab, 8, 0, 6, 3)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "选择打包的 wine 版本(※必选):")), 6, 0, 1, 1)
|
||||
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "打包 deb 的保存路径(※必填):")), 7, 0, 1, 1)
|
||||
widgetLayout.addWidget(e1_text, 0, 1, 1, 1)
|
||||
widgetLayout.addWidget(e2_text, 1, 1, 1, 1)
|
||||
widgetLayout.addWidget(e3_text, 2, 1, 1, 1)
|
||||
@ -1837,15 +1850,17 @@ widgetLayout.addWidget(e4_text, 3, 1, 1, 1)
|
||||
widgetLayout.addWidget(e5_text, 4, 1, 1, 1)
|
||||
widgetLayout.addWidget(e6_text, 5, 1, 1, 1)
|
||||
widgetLayout.addWidget(button1, 5, 2, 1, 1)
|
||||
widgetLayout.addWidget(e7_text, 6, 1, 1, 1)
|
||||
widgetLayout.addWidget(option1_text, 7, 1, 1, 1)
|
||||
widgetLayout.addWidget(e15_text, 8, 1, 1, 1)
|
||||
widgetLayout.addWidget(e8_text, 9, 1, 1, 1)
|
||||
widgetLayout.addWidget(e9_text, 10, 1, 1, 1)
|
||||
widgetLayout.addWidget(button2, 10, 2, 1, 1)
|
||||
widgetLayout.addLayout(wineFrame, 12, 1, 1, 1)
|
||||
widgetLayout.addWidget(e12_text, 13, 1, 1, 1)
|
||||
widgetLayout.addWidget(button4, 13, 2, 1, 1)
|
||||
desktopIconTabLayout.addWidget(e7_text, 6, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(option1_text, 7, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(e15_text, 8, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1)
|
||||
desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1)
|
||||
iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text])
|
||||
print(iconUiList)
|
||||
widgetLayout.addLayout(wineFrame, 6, 1, 1, 1)
|
||||
widgetLayout.addWidget(e12_text, 7, 1, 1, 1)
|
||||
widgetLayout.addWidget(button4, 7, 2, 1, 1)
|
||||
widgetLayout.addLayout(debControlFrame, 16, 1, 1, 1)
|
||||
widgetLayout.addWidget(label13_text, 17, 0, 1, 3)
|
||||
widgetLayout.addWidget(textbox1, 18, 0, 1, 3)
|
||||
|
@ -27,6 +27,11 @@ import urllib.parse as parse
|
||||
import PyQt5.QtGui as QtGui
|
||||
import PyQt5.QtCore as QtCore
|
||||
import PyQt5.QtWidgets as QtWidgets
|
||||
try:
|
||||
import PyQt5.QtWebEngineWidgets as QtWebEngineWidgets
|
||||
bad = False
|
||||
except:
|
||||
bad = True
|
||||
from Model import *
|
||||
|
||||
def PythonLower():
|
||||
@ -226,7 +231,25 @@ StartupNotify=true''')
|
||||
# 写入不进去就别写入了,当什么事情都没发生就行
|
||||
traceback.print_exc()
|
||||
DisableButton(False)
|
||||
|
||||
|
||||
class Temp:
|
||||
webWindow = None
|
||||
|
||||
def OpenUrl(url):
|
||||
print(url.url())
|
||||
# 判断是否可以使用小窗打开
|
||||
if not bad:
|
||||
Temp.webWindow = QtWidgets.QMainWindow()
|
||||
web = QtWebEngineWidgets.QWebEngineView()
|
||||
web.setUrl(url)
|
||||
Temp.webWindow.setWindowTitle("浏览页面")
|
||||
Temp.webWindow.setCentralWidget(web)
|
||||
Temp.webWindow.setWindowIcon(QtGui.QIcon(iconPath))
|
||||
Temp.webWindow.show()
|
||||
return
|
||||
webbrowser.open_new_tab(url.url())
|
||||
|
||||
#QtCore.QUrl().url()
|
||||
|
||||
# 显示“关于这个程序”窗口
|
||||
def about_this_program()->"显示“关于这个程序”窗口":
|
||||
@ -240,7 +263,12 @@ def about_this_program()->"显示“关于这个程序”窗口":
|
||||
messageLayout = QtWidgets.QGridLayout()
|
||||
messageLayout.addWidget(QtWidgets.QLabel(f"<img width=256 src='{iconPath}'>"), 0, 0, 1, 1, QtCore.Qt.AlignTop)
|
||||
aboutInfo = QtWidgets.QTextBrowser(messageWidget)
|
||||
aboutInfo.setFocusPolicy(QtCore.Qt.NoFocus)
|
||||
#aboutInfo.copyAvailable.connect(lambda: print("b"))
|
||||
aboutInfo.anchorClicked.connect(OpenUrl)
|
||||
aboutInfo.setOpenLinks(False)
|
||||
aboutInfo.setHtml(about)
|
||||
aboutInfo.setOpenExternalLinks(False)
|
||||
messageLayout.addWidget(aboutInfo, 0, 1, 1, 1)
|
||||
ok = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "确定"))
|
||||
ok.clicked.connect(QT.message.close)
|
||||
@ -438,6 +466,9 @@ def InstallWine():
|
||||
def InstallWineOnDeepin23():
|
||||
threading.Thread(target=OpenTerminal, args=[f"'{programPath}/InstallWineOnDeepin23.py'"]).start()
|
||||
|
||||
def InstallWineOnDeepin23Alpha():
|
||||
threading.Thread(target=OpenTerminal, args=[f"'{programPath}/InstallWineOnDeepin23Alpha.py'"]).start()
|
||||
|
||||
def InstallWineHQ():
|
||||
threading.Thread(target=OpenTerminal, args=[f"{programPath}/InstallNewWineHQ.sh"]).start()
|
||||
|
||||
@ -1845,24 +1876,21 @@ exe路径\' 参数 \'
|
||||
<b>千万不要中断后不删除源的情况下 apt upgrade !!!</b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine(会自动执行恢复操作)即可
|
||||
以及此脚本安装的 Wine 无法保证 100% 能使用,以及副作用是会提示
|
||||
<code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。</code>'''
|
||||
updateThingsString = '''※1、不基于生态适配活动脚本的打包器支持只生成制作容器的 7z 包
|
||||
※2、两个打包器的容器自动删除脚本添加 kill.sh
|
||||
※3、Wine 运行器支持杀死对应容器进程
|
||||
※4、容器自动配置脚本和 Wine 安装器支持切换源
|
||||
5、非生态适配脚本打包器追加运行参数改为 --uri XXX 而非直接 XXX
|
||||
6、两个打包器新增星火应用商店投稿入口
|
||||
7、优化开启 Windows 虚拟机功能在未安装 VirtualBox 时的提示
|
||||
8、Reg Shot 版本从 1.8.3-beta1V5 升级到 1.9.0
|
||||
9、Geek Uninstaller 版本从 1.5.1.161 升级到 1.5.1.163
|
||||
10、容器自动配置脚本添加 installother 命令、修复返回值传递问题
|
||||
11、不显示 pip 安装库的提示信息(因为不是很核心的库)
|
||||
12、非基于生态适配活动脚本的打包器默认勾选卸载该 deb 后自动删除容器、使用统信活动容器清理脚本、使用星火 wine helper
|
||||
13、优化文案
|
||||
updateThingsString = '''※1、容器自动配置脚本 GUI 查看介绍使用 QWebEngineWidget,支持图片(非强制依赖,只做推荐)
|
||||
※2、不基于生态适配活动脚本打包器跟进 arm 架构 2022年11月11日的 Wine 微信打包方式
|
||||
※3、支持多图标的程序打包
|
||||
※4、修复了安装更多 Wine 换源换了个寂寞的问题
|
||||
5、修复了不基于生态适配活动脚本打包器在选择 arm 打包架构下容器自动删除脚本取消勾选无用的问题
|
||||
'''
|
||||
for i in information["Thank"]:
|
||||
thankText += f"{i}\n"
|
||||
updateTime = "2022年11月06日"
|
||||
about = f'''<h1>关于</h1>
|
||||
updateTime = "2022年11月15日"
|
||||
about = f'''<style>
|
||||
a:link, a:active {{
|
||||
text-decoration: none;
|
||||
}}
|
||||
</style>
|
||||
<h1>关于</h1>
|
||||
<p>一个能让Linux用户更加方便运行Windows应用的程序,内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等</p>
|
||||
<p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具,可以做到只需要用户下载系统镜像并点击安装即可,无需顾及虚拟机安装、创建、虚拟机的分区等等</p>
|
||||
<p>本程序依照 GPLV3 协议开源</p>
|
||||
@ -1894,7 +1922,7 @@ Qt 版本:{QtCore.qVersion()}
|
||||
Deepin 官网:https://www.deepin.org
|
||||
Deepin 论坛:https://bbs.deepin.org</pre>
|
||||
<hr>
|
||||
<h1>©2020~{time.strftime("%Y")} gfdgd xi、为什么您不喜欢熊出没和阿布呢</h1>'''
|
||||
<h1>©2020~{time.strftime("%Y")} <a href="https://gitee.com/gfdgd-xi">gfdgd xi、</a><a href="https://weibo.com/u/7755040136">为什么您不喜欢</a><a href="https://gfdgd-xi.github.io">熊出没</a><a href="https://weibo.com/u/7755040136">和阿布呢</a></h1>'''
|
||||
title = "Wine 运行器 {}".format(version)
|
||||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||||
try:
|
||||
@ -1908,6 +1936,13 @@ iconListUnBuild = [
|
||||
["TIM", "wineBottonPath/drive_c/Program Files (x86)/Tencent/TIM/Bin/TIM.exe"]
|
||||
]
|
||||
iconList = [
|
||||
["cmd", "cmd"],
|
||||
["cmd", "cmd.exe"],
|
||||
["cmd", "wineBottonPath/drive_c/windows/system32/cmd.exe"],
|
||||
["Internet Explorer", "iexplore"],
|
||||
["Internet Explorer", "iexplore.exe"],
|
||||
["Internet Explorer", "wineBottonPath/drive_c/Program Files/Internet Explorer/iexplore.exe"],
|
||||
["Internet Explorer", "wineBottonPath/drive_c/Program Files (x86)/Internet Explorer/iexplore.exe"],
|
||||
["微信", "wineBottonPath/drive_c/Program Files/Tencent/WeChat/WeChat.exe"],
|
||||
["微信", "wineBottonPath/drive_c/Program Files (x86)/Tencent/WeChat/WeChat.exe"],
|
||||
["UltraISO", "wineBottonPath/drive_c/Program Files/UltraISO/UltraISO.exe"],
|
||||
@ -1915,7 +1950,11 @@ iconList = [
|
||||
["迅雷", "wineBottonPath/drive_c/Program Files/Thunder Network/MiniThunder/Bin/ThunderMini.exe"],
|
||||
["迅雷", "wineBottonPath/drive_c/Program Files (x86)/Thunder Network/MiniThunder/Bin/ThunderMini.exe"],
|
||||
["Microsoft Office Word", "wineBottonPath/drive_c/Program Files/Microsoft Office/Office12/WINWORD.EXE"],
|
||||
["Microsoft Office Word", "wineBottonPath/drive_c/Program Files (x86)/Microsoft Office/Office12/WINWORD.EXE"]
|
||||
["Microsoft Office Word", "wineBottonPath/drive_c/Program Files (x86)/Microsoft Office/Office12/WINWORD.EXE"],
|
||||
["腾讯会议", "wineBottonPath/drive_c/Program Files/Tencent/WeMeet/wemeetapp.exe"],
|
||||
["腾讯会议", "wineBottonPath/drive_c/Program Files (x86)/Tencent/WeMeet/wemeetapp.exe"],
|
||||
["腾讯课堂", "wineBottonPath/drive_c/Program Files/Tencent/EDU/bin/TXEDU.exe"],
|
||||
["腾讯课堂", "wineBottonPath/drive_c/Program Files (x86)/Tencent/EDU/bin/TXEDU.exe"]
|
||||
]
|
||||
for i in iconListUnBuild:
|
||||
iconList.append(i)
|
||||
@ -2085,7 +2124,8 @@ mainLayout.addWidget(programRun, 2, 1, 1, 1)
|
||||
menu = window.menuBar()
|
||||
programmenu = menu.addMenu(QtCore.QCoreApplication.translate("U", "程序(&P)"))
|
||||
p1 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "安装 wine(&I)"))
|
||||
installWineOnDeepin23 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "安装 wine(只限Deepin23)"))
|
||||
installWineOnDeepin23 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "安装 wine(只限Deepin23 Preview)"))
|
||||
installWineOnDeepin23Alpha = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "安装 wine(只限Deepin23 Alpha)"))
|
||||
installWineHQ = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "安装 WineHQ"))
|
||||
installMoreWine = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "安装更多 Wine"))
|
||||
p2 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "设置程序(&S)"))
|
||||
@ -2095,6 +2135,7 @@ cleanProgramUnuse = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "
|
||||
p4 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "退出程序(&E)"))
|
||||
programmenu.addAction(p1)
|
||||
programmenu.addAction(installWineOnDeepin23)
|
||||
programmenu.addAction(installWineOnDeepin23Alpha)
|
||||
programmenu.addAction(installWineHQ)
|
||||
programmenu.addAction(installMoreWine)
|
||||
programmenu.addSeparator()
|
||||
@ -2107,6 +2148,7 @@ programmenu.addSeparator()
|
||||
programmenu.addAction(p4)
|
||||
p1.triggered.connect(InstallWine)
|
||||
installWineOnDeepin23.triggered.connect(InstallWineOnDeepin23)
|
||||
installWineOnDeepin23Alpha.triggered.connect(InstallWineOnDeepin23Alpha)
|
||||
installWineHQ.triggered.connect(InstallWineHQ)
|
||||
installMoreWine.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/wine/installwine'"]).start())
|
||||
p2.triggered.connect(ProgramSetting.ShowWindow)
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -147,14 +147,17 @@ def InstallOtherWine():
|
||||
|
||||
def ChangeSources():
|
||||
global urlSources
|
||||
global internetWineSource
|
||||
sources = [ui.gitlinkAction, ui.ipv6Action, ui.localAction]
|
||||
for i in range(0, len(sources)):
|
||||
if sources[i].isChecked():
|
||||
urlSources = internetWineSourceList[i]
|
||||
internetWineSource = internetWineSourceList[i]
|
||||
# 读取信息
|
||||
ReadLocalInformation()
|
||||
ReadInternetInformation()
|
||||
break
|
||||
print(urlSources)
|
||||
|
||||
# 下面内容均翻译自 C++ 版本
|
||||
def ReadInternetInformation():
|
||||
|
@ -1 +0,0 @@
|
||||
[]
|
@ -1879,7 +1879,9 @@ exe路径\' 参数 \'
|
||||
updateThingsString = '''※1、容器自动配置脚本 GUI 查看介绍使用 QWebEngineWidget,支持图片(非强制依赖,只做推荐)
|
||||
※2、不基于生态适配活动脚本打包器跟进 arm 架构 2022年11月11日的 Wine 微信打包方式
|
||||
※3、支持多图标的程序打包
|
||||
4、修复了不基于生态适配活动脚本打包器在选择 arm 打包架构下容器自动删除脚本取消勾选无用的问题
|
||||
※4、修复了安装更多 Wine 换源换了个寂寞的问题
|
||||
※5、修复安装更多 Wine 重新安装后列表丢失的问题
|
||||
5、修复了不基于生态适配活动脚本打包器在选择 arm 打包架构下容器自动删除脚本取消勾选无用的问题
|
||||
'''
|
||||
for i in information["Thank"]:
|
||||
thankText += f"{i}\n"
|
||||
|
Binary file not shown.
@ -115,8 +115,13 @@ def ReadLocalInformation():
|
||||
ui.localWineList.setModel(nmodel)
|
||||
file.close()
|
||||
except:
|
||||
traceback.print_exc()
|
||||
QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
|
||||
print("新建空列表")
|
||||
try:
|
||||
with open(f"{programPath}/winelist.json", "w") as file:
|
||||
file.write("[]")
|
||||
except:
|
||||
traceback.print_exc()
|
||||
QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
|
||||
|
||||
def InstallOtherWine():
|
||||
path = QtWidgets.QFileDialog.getOpenFileName(window, "选择 Wine", os.getenv("~"), "wine(wine);;wine64(wine64);;全部文件(*.*)")
|
||||
|
@ -1 +0,0 @@
|
||||
[]
|
Loading…
Reference in New Issue
Block a user