Files
AppImage2Deb-For-Deepin/main.py
2024-11-25 14:08:42 +08:00

435 lines
17 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 subprocess
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Window(QWidget):
appimage_location = ""
icon_location = ""
package_name = ""
software_name = ""
version = ""
developer = ""
developer_mail = ""
maintainer = ""
maintainer_mail = ""
category = ""
simple_description = ""
detailed_description = ""
homepage = ""
categories = [
"Others",
"Network",
"Chat",
"Audio",
"AudioVideo",
"Graphics",
"Game",
"Office",
"Reading",
"Development",
"System",
]
permissions = {
"autostart": False,
"notification": False,
"trayicon": False,
"clipboard": False,
"account": False,
"bluetooth": False,
"camera": False,
"audio_record": False,
"installed_apps": False,
}
def __init__(self):
super(Window, self).__init__()
self.setWindowTitle("AppImage转Deb(Deepin规范)")
self.appimage_location_label = QLabel("AppImage文件")
self.icon_location_label = QLabel("Icon文件")
self.package_name_label = QLabel("Deb包名")
self.software_name_label = QLabel("软件名:")
self.version_label = QLabel("软件版本:")
self.developer_label = QLabel("开发者姓名:")
self.developer_mail_label = QLabel("开发者邮箱:")
self.maintainer_label = QLabel("维护者姓名:")
self.maintainer_mail_label = QLabel("维护者邮箱:")
self.category_label = QLabel("应用分类:")
self.simple_description_label = QLabel("一句话介绍:")
self.detailed_description_label = QLabel("详细介绍:")
self.homepage_label = QLabel("应用主页:")
labels = [
self.appimage_location_label,
self.icon_location_label,
self.package_name_label,
self.software_name_label,
self.version_label,
self.developer_label,
self.developer_mail_label,
self.maintainer_label,
self.maintainer_mail_label,
self.category_label,
self.simple_description_label,
self.detailed_description_label,
self.homepage_label,
]
for label in labels:
label.setAlignment(Qt.AlignmentFlag.AlignRight)
self.appimage_location_button = QPushButton("选择文件")
self.icon_location_button = QPushButton("选择文件")
self.package_name_line = QLineEdit()
self.software_name_line = QLineEdit()
self.version_line = QLineEdit()
self.developer_line = QLineEdit()
self.developer_mail_line = QLineEdit()
self.maintainer_line = QLineEdit()
self.maintainer_mail_line = QLineEdit()
self.category_combo_box = QComboBox()
self.category_combo_box.addItems(
[
"其他应用",
"网络应用",
"社交沟通",
"音乐欣赏",
"视频播放",
"图形图像",
"游戏娱乐",
"办公学习",
"阅读翻译",
"编程开发",
"系统管理",
]
)
self.simple_description_line = QLineEdit()
self.detailed_description_plain_text = QPlainTextEdit()
self.homepage_line = QLineEdit()
self.autostart_check_box = QCheckBox("自启动")
self.notification_check_box = QCheckBox("使用通知")
self.trayicon_check_box = QCheckBox("显示托盘图标")
self.clipboard_check_box = QCheckBox("使用剪切板")
self.account_check_box = QCheckBox("读取登录用户信息")
self.bluetooth_check_box = QCheckBox("使用蓝牙设备")
self.camera_check_box = QCheckBox("使用视频设备")
self.audio_record_check_box = QCheckBox("进行录音")
self.installed_apps_check_box = QCheckBox("读取安装软件列表")
self.clear_button = QPushButton("清空数据")
self.start_button = QPushButton("开始转化")
self.category = self.categories[0]
self.init_UI()
self.init_signals()
def init_UI(self):
info_group_box = QGroupBox("软件信息")
info_grid_layout = QGridLayout()
info_grid_layout.addWidget(self.appimage_location_label, 0, 0)
info_grid_layout.addWidget(self.icon_location_label, 1, 0)
info_grid_layout.addWidget(self.package_name_label, 2, 0)
info_grid_layout.addWidget(self.software_name_label, 3, 0)
info_grid_layout.addWidget(self.version_label, 4, 0)
info_grid_layout.addWidget(self.developer_label, 5, 0)
info_grid_layout.addWidget(self.developer_mail_label, 6, 0)
info_grid_layout.addWidget(self.maintainer_label, 7, 0)
info_grid_layout.addWidget(self.maintainer_mail_label, 8, 0)
info_grid_layout.addWidget(self.category_label, 9, 0)
info_grid_layout.addWidget(self.simple_description_label, 10, 0)
info_grid_layout.addWidget(self.detailed_description_label, 11, 0)
info_grid_layout.addWidget(self.homepage_label, 12, 0)
info_grid_layout.addWidget(self.appimage_location_button, 0, 1)
info_grid_layout.addWidget(self.icon_location_button, 1, 1)
info_grid_layout.addWidget(self.package_name_line, 2, 1)
info_grid_layout.addWidget(self.software_name_line, 3, 1)
info_grid_layout.addWidget(self.version_line, 4, 1)
info_grid_layout.addWidget(self.developer_line, 5, 1)
info_grid_layout.addWidget(self.developer_mail_line, 6, 1)
info_grid_layout.addWidget(self.maintainer_line, 7, 1)
info_grid_layout.addWidget(self.maintainer_mail_line, 8, 1)
info_grid_layout.addWidget(self.category_combo_box, 9, 1)
info_grid_layout.addWidget(self.simple_description_line, 10, 1)
info_grid_layout.addWidget(self.detailed_description_plain_text, 11, 1)
info_grid_layout.addWidget(self.homepage_line, 12, 1)
info_grid_layout.setAlignment(Qt.AlignmentFlag.AlignLeft)
info_group_box.setLayout(info_grid_layout)
permission_group_box = QGroupBox("软件权限")
permission_vbox_layout = QVBoxLayout()
permission_vbox_layout.addWidget(self.autostart_check_box)
permission_vbox_layout.addWidget(self.notification_check_box)
permission_vbox_layout.addWidget(self.trayicon_check_box)
permission_vbox_layout.addWidget(self.clipboard_check_box)
permission_vbox_layout.addWidget(self.account_check_box)
permission_vbox_layout.addWidget(self.bluetooth_check_box)
permission_vbox_layout.addWidget(self.camera_check_box)
permission_vbox_layout.addWidget(self.audio_record_check_box)
permission_vbox_layout.addWidget(self.installed_apps_check_box)
permission_group_box.setLayout(permission_vbox_layout)
sub1_hbox_layout = QHBoxLayout()
sub1_hbox_layout.addWidget(info_group_box)
sub1_hbox_layout.addWidget(permission_group_box)
sub2_hbox_layout = QHBoxLayout()
sub2_hbox_layout.addWidget(self.clear_button)
sub2_hbox_layout.addWidget(self.start_button)
main_vbox_layout = QVBoxLayout()
main_vbox_layout.addLayout(sub1_hbox_layout)
main_vbox_layout.addLayout(sub2_hbox_layout)
self.setLayout(main_vbox_layout)
def init_signals(self):
self.appimage_location_button.clicked.connect(self.select_appimage)
self.icon_location_button.clicked.connect(self.select_icon)
self.package_name_line.textChanged.connect(self.save_package_name)
self.software_name_line.textChanged.connect(self.save_software_name)
self.version_line.textChanged.connect(self.save_version)
self.developer_line.textChanged.connect(self.save_developer)
self.developer_mail_line.textChanged.connect(self.save_developer_mail)
self.maintainer_line.textChanged.connect(self.save_maintainer)
self.maintainer_mail_line.textChanged.connect(self.save_maintainer_mail)
self.category_combo_box.currentIndexChanged.connect(self.save_category)
self.simple_description_line.textChanged.connect(self.save_simple_description)
self.detailed_description_plain_text.textChanged.connect(
self.save_detailed_description
)
self.homepage_line.textChanged.connect(self.save_homepage)
self.autostart_check_box.stateChanged.connect(self.set_autostart)
self.notification_check_box.stateChanged.connect(self.set_notification)
self.trayicon_check_box.stateChanged.connect(self.set_trayicon)
self.clipboard_check_box.stateChanged.connect(self.set_clipboard)
self.account_check_box.stateChanged.connect(self.set_account)
self.bluetooth_check_box.stateChanged.connect(self.set_bluetooth)
self.camera_check_box.stateChanged.connect(self.set_camera)
self.audio_record_check_box.stateChanged.connect(self.set_audio_record)
self.installed_apps_check_box.stateChanged.connect(self.set_installed_apps)
self.clear_button.clicked.connect(self.clear)
self.start_button.clicked.connect(self.start)
def select_appimage(self):
file_path, _ = QFileDialog.getOpenFileName(
self, "选择AppImage文件", "./", "AppImage Files (*.AppImage)"
)
self.appimage_location = file_path
self.appimage_location_button.setText(os.path.basename(file_path))
def select_icon(self):
file_path, _ = QFileDialog.getOpenFileName(
self, "选择Icon文件", "./", "Icon Files (*.svg *.png)"
)
self.icon_location = file_path
self.icon_location_button.setText(os.path.basename(file_path))
def save_package_name(self):
self.package_name = self.package_name_line.text()
def save_software_name(self):
self.software_name = self.software_name_line.text()
def save_version(self):
self.version = self.version_line.text()
def save_developer(self):
self.developer = self.developer_line.text()
def save_developer_mail(self):
self.developer_mail = self.developer_mail_line.text()
def save_maintainer(self):
self.maintainer = self.maintainer_line.text()
def save_maintainer_mail(self):
self.maintainer_mail = self.maintainer_mail_line.text()
def save_category(self):
self.category = self.categories[self.category_combo_box.currentIndex()]
def save_simple_description(self):
self.simple_description = self.simple_description_line.text()
def save_detailed_description(self):
self.detailed_description = self.detailed_description_plain_text.toPlainText()
def save_homepage(self):
self.homepage = self.homepage_line.text()
def set_autostart(self):
if self.autostart_check_box.isChecked():
self.permissions["autostart"] = True
else:
self.permissions["autostart"] = False
def set_notification(self):
if self.notification_check_box.isChecked():
self.permissions["notification"] = True
else:
self.permissions["notification"] = False
def set_trayicon(self):
if self.trayicon_check_box.isChecked():
self.permissions["trayicon"] = True
else:
self.permissions["trayicon"] = False
def set_clipboard(self):
if self.clipboard_check_box.isChecked():
self.permissions["clipboard"] = True
else:
self.permissions["clipboard"] = False
def set_account(self):
if self.account_check_box.isChecked():
self.permissions["account"] = True
else:
self.permissions["account"] = False
def set_bluetooth(self):
if self.bluetooth_check_box.isChecked():
self.permissions["bluetooth"] = True
else:
self.permissions["bluetooth"] = False
def set_camera(self):
if self.camera_check_box.isChecked():
self.permissions["camera"] = True
else:
self.permissions["camera"] = False
def set_audio_record(self):
if self.audio_record_check_box.isChecked():
self.permissions["audio_record"] = True
else:
self.permissions["audio_record"] = False
def set_installed_apps(self):
if self.installed_apps_check_box.isChecked():
self.permissions["installed_apps"] = True
else:
self.permissions["installed_apps"] = False
def clear(self):
self.appimage_location = ""
self.icon_location = ""
self.package_name = ""
self.software_name = ""
self.version = ""
self.developer = ""
self.developer_mail = ""
self.maintainer = ""
self.maintainer_mail = ""
self.category = self.categories[0]
self.simple_description = ""
self.detailed_description = ""
self.homepage = ""
for key in self.permissions.keys():
self.permissions[key] = False
self.appimage_location_button.setText("选择文件")
self.icon_location_button.setText("选择文件")
self.package_name_line.clear()
self.software_name_line.clear()
self.version_line.clear()
self.developer_line.clear()
self.developer_mail_line.clear()
self.maintainer_line.clear()
self.maintainer_mail_line.clear()
self.category_combo_box.setCurrentIndex(0)
self.simple_description_line.clear()
self.detailed_description_plain_text.clear()
self.homepage_line.clear()
self.autostart_check_box.setChecked(False)
self.notification_check_box.setChecked(False)
self.trayicon_check_box.setChecked(False)
self.clipboard_check_box.setChecked(False)
self.account_check_box.setChecked(False)
self.bluetooth_check_box.setChecked(False)
self.camera_check_box.setChecked(False)
self.audio_record_check_box.setChecked(False)
self.installed_apps_check_box.setChecked(False)
def start(self):
info = ""
info = info + "AppImage Location: " + self.appimage_location + "\n"
info = info + "Icon Location: " + self.icon_location + "\n"
info = info + "Package Name: " + self.package_name + "\n"
info = info + "Software Name: " + self.software_name + "\n"
info = info + "Version: " + self.version + "\n"
info = info + "Developer: " + self.developer + "\n"
info = info + "Developer Mail: " + self.developer_mail + "\n"
info = info + "Maintainer: " + self.maintainer + "\n"
info = info + "Maintainer Mail: " + self.maintainer_mail + "\n"
info = info + "Developer: " + self.developer + "\n"
info = info + "Category: " + self.category + "\n"
info = info + "Simple Descrition: " + self.simple_description + "\n"
info = info + "Detailed Description: " + self.detailed_description + "\n"
info = info + "Homepage: " + self.homepage + "\n"
for key in self.permissions.keys():
info = info + key + ": " + str(self.permissions[key]) + "\n"
choice = QMessageBox.question(
self, "确认配置文件", info, QMessageBox.Yes | QMessageBox.No
)
if choice == QMessageBox.Yes:
current_dir = os.getcwd()
permission_bits = ""
for key in self.permissions.keys():
if self.permissions[key] == True:
permission_bits = permission_bits + "1"
else:
permission_bits = permission_bits + "0"
arguments = [
current_dir,
self.appimage_location,
self.icon_location,
self.package_name,
self.software_name,
self.version,
self.developer,
self.developer_mail,
self.maintainer,
self.maintainer_mail,
self.category,
self.simple_description,
self.detailed_description,
self.homepage,
permission_bits,
]
script_path = current_dir + "/build.sh"
result = subprocess.run(
["bash", script_path] + arguments, capture_output=True, text=True
)
print("Script output:")
print(result.stdout)
print("Script exit code:", result.returncode)
if result.returncode == 0:
QMessageBox.information(self,"提醒","转化成功",QMessageBox.Yes)
else:
QMessageBox.information(self,"提醒","转化失败",QMessageBox.Yes)
if __name__ == "__main__":
app = QApplication([])
windows = Window()
windows.show()
sys.exit(app.exec())