339 lines
13 KiB
Python
339 lines
13 KiB
Python
# Developer: MXS-Jun
|
|
# Developer Mail: bjtuzj0328@gmail.com
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
|
|
from PyQt5.QtWidgets import *
|
|
from PyQt5.QtCore import *
|
|
|
|
|
|
class Window(QWidget):
|
|
appimage_location = ""
|
|
package_name = ""
|
|
software_name = ""
|
|
architecture = ""
|
|
version = ""
|
|
developer = ""
|
|
developer_mail = ""
|
|
maintainer = ""
|
|
maintainer_mail = ""
|
|
category = ""
|
|
simple_description = ""
|
|
detailed_description = ""
|
|
homepage = ""
|
|
|
|
architectures = ["amd64", "arm64"]
|
|
|
|
categories = [
|
|
"Others",
|
|
"Network",
|
|
"Chat",
|
|
"Audio",
|
|
"AudioVideo",
|
|
"Graphics",
|
|
"Game",
|
|
"Office",
|
|
"Reading",
|
|
"Development",
|
|
"System",
|
|
]
|
|
|
|
def __init__(self):
|
|
super(Window, self).__init__()
|
|
|
|
self.resize(480, 640)
|
|
screen_resolution = QApplication.desktop()
|
|
windows_resolution = self.frameSize()
|
|
x = screen_resolution.width() // 2 - windows_resolution.width() // 2
|
|
y = screen_resolution.height() // 2 - windows_resolution.height() // 2
|
|
self.move(x, y)
|
|
|
|
self.setWindowTitle("AppImage转Deb(Deepin规范)")
|
|
|
|
self.appimage_location_label = QLabel("AppImage文件:")
|
|
self.package_name_label = QLabel("Deb包名:")
|
|
self.software_name_label = QLabel("软件名:")
|
|
self.architecture_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.package_name_label,
|
|
self.software_name_label,
|
|
self.architecture_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.clear_button = QPushButton("清空数据")
|
|
self.start_button = QPushButton("开始转化")
|
|
|
|
self.architecture_combo_box = QComboBox()
|
|
self.architecture_combo_box.addItems(["amd64", "arm64"])
|
|
self.category_combo_box = QComboBox()
|
|
self.category_combo_box.addItems(
|
|
[
|
|
"其他应用",
|
|
"网络应用",
|
|
"社交沟通",
|
|
"音乐欣赏",
|
|
"视频播放",
|
|
"图形图像",
|
|
"游戏娱乐",
|
|
"办公学习",
|
|
"阅读翻译",
|
|
"编程开发",
|
|
"系统管理",
|
|
]
|
|
)
|
|
|
|
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.simple_description_line = QLineEdit()
|
|
self.homepage_line = QLineEdit()
|
|
|
|
self.detailed_description_plain_text = QPlainTextEdit()
|
|
|
|
self.architecture = self.architectures[0]
|
|
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.package_name_label, 1, 0)
|
|
info_grid_layout.addWidget(self.software_name_label, 2, 0)
|
|
info_grid_layout.addWidget(self.architecture_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.package_name_line, 1, 1)
|
|
info_grid_layout.addWidget(self.software_name_line, 2, 1)
|
|
info_grid_layout.addWidget(self.architecture_combo_box, 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)
|
|
|
|
sub1_hbox_layout = QHBoxLayout()
|
|
sub1_hbox_layout.addWidget(info_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.clear_button.clicked.connect(self.clear)
|
|
self.start_button.clicked.connect(self.start)
|
|
|
|
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.simple_description_line.textChanged.connect(self.save_simple_description)
|
|
self.homepage_line.textChanged.connect(self.save_homepage)
|
|
self.detailed_description_plain_text.textChanged.connect(
|
|
self.save_detailed_description
|
|
)
|
|
|
|
self.architecture_combo_box.currentIndexChanged.connect(self.save_architecture)
|
|
self.category_combo_box.currentIndexChanged.connect(self.save_category)
|
|
|
|
def select_appimage(self):
|
|
file_path, _ = QFileDialog.getOpenFileName(
|
|
self, "选择AppImage文件", "./", "AppImage Files (*.AppImage)"
|
|
)
|
|
self.appimage_location = file_path
|
|
|
|
if not file_path:
|
|
self.appimage_location_button.setText("选择文件")
|
|
else:
|
|
self.appimage_location_button.setText(os.path.basename(file_path))
|
|
|
|
def clear(self):
|
|
choice = QMessageBox.warning(
|
|
self, "警告", "确认清空所有数据?", QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
if choice == QMessageBox.Yes:
|
|
self.appimage_location = ""
|
|
self.package_name = ""
|
|
self.software_name = ""
|
|
self.architecture = self.architectures[0]
|
|
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 = ""
|
|
|
|
self.appimage_location_button.setText("选择文件")
|
|
|
|
self.architecture_combo_box.setCurrentIndex(0)
|
|
self.category_combo_box.setCurrentIndex(0)
|
|
|
|
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.simple_description_line.clear()
|
|
self.homepage_line.clear()
|
|
|
|
self.detailed_description_plain_text.clear()
|
|
|
|
def start(self):
|
|
info = ""
|
|
info = info + "AppImage文件路径: " + self.appimage_location + "\n"
|
|
info = info + "包名: " + self.package_name + "\n"
|
|
info = info + "软件名: " + self.software_name + "\n"
|
|
info = info + "软件架构:" + self.architecture + "\n"
|
|
info = info + "版本: " + self.version + "\n"
|
|
info = info + "开发者: " + self.developer + "\n"
|
|
info = info + "开发者邮箱: " + self.developer_mail + "\n"
|
|
info = info + "维护者: " + self.maintainer + "\n"
|
|
info = info + "维护者邮箱: " + self.maintainer_mail + "\n"
|
|
info = info + "分类: " + self.category + "\n"
|
|
info = info + "一句话介绍: " + self.simple_description + "\n"
|
|
info = info + "详细介绍: " + self.detailed_description + "\n"
|
|
info = info + "主页: " + self.homepage + "\n"
|
|
|
|
choice = QMessageBox.information(
|
|
self, "确认配置文件", info, QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
if choice == QMessageBox.Yes:
|
|
current_dir = os.getcwd()
|
|
|
|
arguments = [
|
|
current_dir,
|
|
self.appimage_location,
|
|
self.package_name,
|
|
self.software_name,
|
|
self.architecture,
|
|
self.version,
|
|
self.developer,
|
|
self.developer_mail,
|
|
self.maintainer,
|
|
self.maintainer_mail,
|
|
self.category,
|
|
self.simple_description,
|
|
self.detailed_description,
|
|
self.homepage,
|
|
]
|
|
|
|
script_path = current_dir + "/make-deb.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)
|
|
|
|
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_simple_description(self):
|
|
self.simple_description = self.simple_description_line.text()
|
|
|
|
def save_homepage(self):
|
|
self.homepage = self.homepage_line.text()
|
|
|
|
def save_detailed_description(self):
|
|
self.detailed_description = self.detailed_description_plain_text.toPlainText()
|
|
|
|
def save_architecture(self):
|
|
if self.architecture_combo_box.currentIndex() == 0:
|
|
self.architecture = "amd64"
|
|
elif self.architecture_combo_box.currentIndex() == 1:
|
|
self.architecture = "arm64"
|
|
|
|
def save_category(self):
|
|
self.category = self.categories[self.category_combo_box.currentIndex()]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app = QApplication([])
|
|
windows = Window()
|
|
windows.show()
|
|
sys.exit(app.exec())
|