From 07685f61cf5e15bcb3c461afe59a85d88cdd5190 Mon Sep 17 00:00:00 2001 From: MXS-Jun Date: Wed, 27 Nov 2024 16:45:39 +0800 Subject: [PATCH] Rewrite --- src/build.sh | 186 ---------------------- src/main.py | 409 ++++++++++++++++++------------------------------ src/make-deb.sh | 76 +++++++++ 3 files changed, 231 insertions(+), 440 deletions(-) delete mode 100644 src/build.sh create mode 100644 src/make-deb.sh diff --git a/src/build.sh b/src/build.sh deleted file mode 100644 index 165ff9b..0000000 --- a/src/build.sh +++ /dev/null @@ -1,186 +0,0 @@ -#!/bin/bash - - -CURRENT_DIR=$1 -APPIMAGE_LOCATION=$2 -ICON_LOCATION=$3 -PACKAGE_NAME=$4 -SOFTWARE_NAME=$5 -VERSION=$6 -DEVELOPER=$7 -DEVELOPER_MAIL=$8 -MAINTAINER=$9 -MAINTAINER_MAIL=${10} -CATEGORY=${11} -SIMPLE_DESCRIPTION=${12} -DETAILED_DESCRIPTION=${13} -HOMEPAGE=${14} -PERMISSION_BITS=${15} - - -echo -e "\nLoading Information..." -echo ${CURRENT_DIR} -echo ${APPIMAGE_LOCATION} -echo ${ICON_LOCATION} -echo ${PACKAGE_NAME} -echo ${SOFTWARE_NAME} -echo ${VERSION} -echo ${DEVELOPER} -echo ${DEVELOPER_MAIL} -echo ${MAINTAINER} -echo ${MAINTAINER_MAIL} -echo ${CATEGORY} -echo ${SIMPLE_DESCRIPTION} -echo ${DETAILED_DESCRIPTION} -echo ${HOMEPAGE} -echo ${PERMISSION_BITS} && echo "Finish!" - - -echo -e "\nCreate Directories..." -PACKAGE_DIR=${CURRENT_DIR}/.appimage2deb_tmp/${PACKAGE_NAME} -APP_DIR=${PACKAGE_DIR}/opt/apps/${PACKAGE_NAME} -mkdir -p ${PACKAGE_DIR} -mkdir ${PACKAGE_DIR}/DEBIAN -mkdir -p ${APP_DIR}/entries/applications -if [ "${ICON_LOCATION##*.}" == "svg" ]; then - mkdir -p ${APP_DIR}/entries/icons/hicolor/scalable/apps -else - mkdir -p ${APP_DIR}/entries/icons/hicolor/512x512/apps -fi -mkdir -p ${APP_DIR}/files/bin && echo "Finish!" - - -echo -e "\nCreate info file..." -touch ${APP_DIR}/info -echo -e "{" > ${APP_DIR}/info -echo -e "\t\"appid\": \"${PACKAGE_NAME}\"," >> ${APP_DIR}/info -echo -e "\t\"name\": \"${SOFTWARE_NAME}\"," >> ${APP_DIR}/info -echo -e "\t\"version\": \"${VERSION}\"," >> ${APP_DIR}/info -echo -e "\t\"arch\": [\"amd64\"]," >> ${APP_DIR}/info -echo -e "\t\"permissions\": {" >> ${APP_DIR}/info -if [ "${PERMISSION_BITS:0:1}" == "1" ];then - echo -e "\t\t\"autostart\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"autostart\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:1:1}" == "1" ];then - echo -e "\t\t\"notification\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"notification\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:2:1}" == "1" ];then - echo -e "\t\t\"trayicon\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"trayicon\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:3:1}" == "1" ];then - echo -e "\t\t\"clipboard\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"clipboard\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:4:1}" == "1" ];then - echo -e "\t\t\"account\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"account\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:5:1}" == "1" ];then - echo -e "\t\t\"bluetooth\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"bluetooth\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:6:1}" == "1" ];then - echo -e "\t\t\"camera\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"camera\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:7:1}" == "1" ];then - echo -e "\t\t\"audio_record\": true," >> ${APP_DIR}/info -else - echo -e "\t\t\"audio_record\": false," >> ${APP_DIR}/info -fi -if [ "${PERMISSION_BITS:8:1}" == "1" ];then - echo -e "\t\t\"installed_apps\": true" >> ${APP_DIR}/info -else - echo -e "\t\t\"installed_apps\": false" >> ${APP_DIR}/info -fi -echo -e "\t}" >> ${APP_DIR}/info -echo "}">> ${APP_DIR}/info && echo "Finish!" - - -echo -e "\nCreate desktop file..." -touch ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "[Desktop Entry]" > ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Type=Application" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Version=1.0" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Name=${SOFTWARE_NAME}" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Comment=${SIMPLE_DESCRIPTION}" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Exec=/opt/apps/${PACKAGE_NAME}/files/bin/${PACKAGE_NAME}" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Icon=${PACKAGE_NAME}" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Categories=${CATEGORY};" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "Terminal=false" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop -echo "StartupNotify=true" >> ${APP_DIR}/entries/applications/${PACKAGE_NAME}.desktop && echo "Finish!" - - -echo -e "\nMove Appimage..." -cp ${APPIMAGE_LOCATION} ${APP_DIR}/files/bin -mv ${APP_DIR}/files/bin/*.AppImage ${APP_DIR}/files/bin/${PACKAGE_NAME} && echo "Finish!" - - -echo -e "\nMove Icon..." -if [ "${ICON_LOCATION##*.}" == "svg" ]; then - cp ${ICON_LOCATION} ${APP_DIR}/entries/icons/hicolor/scalable/apps - mv ${APP_DIR}/entries/icons/hicolor/scalable/apps/*.svg ${APP_DIR}/entries/icons/hicolor/scalable/apps/${PACKAGE_NAME}.svg -else - cp ${ICON_LOCATION} ${APP_DIR}/entries/icons/hicolor/512x512/apps - mv ${APP_DIR}/entries/icons/hicolor/512x512/apps/*.png ${APP_DIR}/entries/icons/hicolor/512x512/apps/${PACKAGE_NAME}.png -fi && echo "Finish!" - - -echo -e "\nCreate control..." -touch ${PACKAGE_DIR}/DEBIAN/control -echo "Package: ${PACKAGE_NAME}" > ${PACKAGE_DIR}/DEBIAN/control -echo "Version: ${VERSION}" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Section: utils" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Homepage: ${HOMEPAGE}" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Architecture: amd64" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Priority: optional" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Depends: fuse3" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Maintainer: ${MAINTAINER} <${MAINTAINER_MAIL}>" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Developer: ${DEVELOPER} <$DEVELOPER_MAIL>" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Installed-Size: $(du -sk ${PACKAGE_DIR}/opt/apps/${PACKAGE_NAME} | cut -f1)" >> ${PACKAGE_DIR}/DEBIAN/control -echo "Description: ${SIMPLE_DESCRIPTION}" >> ${PACKAGE_DIR}/DEBIAN/control -echo " ${DETAILED_DESCRIPTION}" >> ${PACKAGE_DIR}/DEBIAN/control && echo "Finish!" - - -echo -e "\nCreate postinst..." -touch ${PACKAGE_DIR}/DEBIAN/postinst -echo "#!/bin/bash" > ${PACKAGE_DIR}/DEBIAN/postinst -if [ "${ICON_LOCATION##*.}" == "svg" ]; then - echo "ln -s /opt/apps/${PACKAGE_NAME}/entries/icons/hicolor/scalable/apps/${PACKAGE_NAME}.svg /usr/share/icons/hicolor/scalable/apps/${PACKAGE_NAME}.svg" >> ${PACKAGE_DIR}/DEBIAN/postinst -else - echo "ln -s /opt/apps/${PACKAGE_NAME}/entries/icons/hicolor/512x512/apps/${PACKAGE_NAME}.png /usr/share/icons/hicolor/512x512/apps/${PACKAGE_NAME}.png" >> ${PACKAGE_DIR}/DEBIAN/postinst -fi -echo "chmod 777 /opt/apps/${PACKAGE_NAME}/files/bin/${PACKAGE_NAME}" >> ${PACKAGE_DIR}/DEBIAN/postinst -echo "chmod 777 /opt/apps/${PACKAGE_NAME}/entries/applications/${PACKAGE_NAME}.desktop" >> ${PACKAGE_DIR}/DEBIAN/postinst && echo "Finish!" - - -echo -e "\nCreate postrm..." -touch ${PACKAGE_DIR}/DEBIAN/postrm -echo "#!/bin/bash" > ${PACKAGE_DIR}/DEBIAN/postrm -echo "if [ -e "/usr/share/icons/hicolor/scalable/apps/${PACKAGE_NAME}.svg" ]; then" >> ${PACKAGE_DIR}/DEBIAN/postrm -echo " rm /usr/share/icons/hicolor/scalable/apps/${PACKAGE_NAME}.svg" >> ${PACKAGE_DIR}/DEBIAN/postrm -echo "fi" >> ${PACKAGE_DIR}/DEBIAN/postrm -echo "if [ -e "/usr/share/icons/hicolor/512x512/apps/${PACKAGE_NAME}.png" ]; then" >> ${PACKAGE_DIR}/DEBIAN/postrm -echo " rm /usr/share/icons/hicolor/512x512/apps/${PACKAGE_NAME}.png" >> ${PACKAGE_DIR}/DEBIAN/postrm -echo "fi" >> ${PACKAGE_DIR}/DEBIAN/postrm && echo "Finish!" - - -echo -e "\nEmpower DEBIAN..." -fakeroot chmod 755 ${PACKAGE_DIR}/DEBIAN -fakeroot chmod 644 ${PACKAGE_DIR}/DEBIAN/control -fakeroot chmod 755 ${PACKAGE_DIR}/DEBIAN/postrm -fakeroot chmod 755 ${PACKAGE_DIR}/DEBIAN/postinst && echo "Finish!" - - -echo -e "\nMake Deb..." -fakeroot dpkg -b ${PACKAGE_DIR} ${CURRENT_DIR} && echo "Finish!" && rm -rf ${CURRENT_DIR}/.appimage2deb_tmp diff --git a/src/main.py b/src/main.py index 380313c..9603a6e 100644 --- a/src/main.py +++ b/src/main.py @@ -1,5 +1,5 @@ -#Developer: MXS-Jun -#Developer Mail: bjtuzj0328@gmail.com +# Developer: MXS-Jun +# Developer Mail: bjtuzj0328@gmail.com import os import sys @@ -11,9 +11,9 @@ from PyQt5.QtCore import * class Window(QWidget): appimage_location = "" - icon_location = "" package_name = "" software_name = "" + architecture = "" version = "" developer = "" developer_mail = "" @@ -24,6 +24,8 @@ class Window(QWidget): detailed_description = "" homepage = "" + architectures = ["amd64", "arm64"] + categories = [ "Others", "Network", @@ -38,41 +40,37 @@ class Window(QWidget): "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.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.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("应用主页:") + 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.icon_location_label, self.package_name_label, self.software_name_label, + self.architecture_label, self.version_label, self.developer_label, self.developer_mail_label, @@ -88,14 +86,11 @@ class Window(QWidget): 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.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( [ @@ -112,23 +107,20 @@ class Window(QWidget): "系统管理", ] ) + + 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.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.detailed_description_plain_text = QPlainTextEdit() + self.architecture = self.architectures[0] self.category = self.categories[0] self.init_UI() self.init_signals() @@ -137,9 +129,9 @@ class Window(QWidget): 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.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) @@ -149,10 +141,11 @@ class Window(QWidget): 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.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) @@ -165,22 +158,8 @@ class Window(QWidget): 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) @@ -194,7 +173,9 @@ class Window(QWidget): def init_signals(self): self.appimage_location_button.clicked.connect(self.select_appimage) - self.icon_location_button.clicked.connect(self.select_icon) + 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) @@ -202,39 +183,113 @@ class Window(QWidget): 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.homepage_line.textChanged.connect(self.save_homepage) 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) + 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 - self.appimage_location_button.setText(os.path.basename(file_path)) - def select_icon(self): - file_path, _ = QFileDialog.getOpenFileName( - self, "选择Icon文件", "./", "Icon Files (*.svg *.png)" + 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 ) - self.icon_location = file_path - self.icon_location_button.setText(os.path.basename(file_path)) + 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() @@ -257,177 +312,23 @@ class Window(QWidget): 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 save_detailed_description(self): + self.detailed_description = self.detailed_description_plain_text.toPlainText() - def set_notification(self): - if self.notification_check_box.isChecked(): - self.permissions["notification"] = True - else: - self.permissions["notification"] = False + 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 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) + def save_category(self): + self.category = self.categories[self.category_combo_box.currentIndex()] if __name__ == "__main__": diff --git a/src/make-deb.sh b/src/make-deb.sh new file mode 100644 index 0000000..e6190c6 --- /dev/null +++ b/src/make-deb.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +WORKING_DIR=$1 +APPIMAGE_LOCATION=$2 +PACKAGE_NAME=$3 +SOFTWARE_NAME=$4 +ARCHITECTURE=$5 +VERSION=$6 +DEVELOPER=$7 +DEVELOPER_MAIL=$8 +MAINTAINER=$9 +MAINTAINER_MAIL=${10} +CATEGORY=${11} +SIMPLE_DESCRIPTION=${12} +DETAILED_DESCRIPTION=${13} +HOMEPAGE=${14} + +cp "$APPIMAGE_LOCATION" "$WORKING_DIR" +cd "$WORKING_DIR" || exit + +APPIMAGE_NAME="${APPIMAGE_LOCATION##*/}" +fakeroot chmod +x ./"$APPIMAGE_NAME" +./"$APPIMAGE_NAME" --appimage-extract >/dev/null +echo "Extract AppImage Successfully!" + +ICON_SIZE=$(identify -format "%w" ./squashfs-root/*.png) +mkdir -p ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/icons/hicolor/"$ICON_SIZE"x"$ICON_SIZE"/apps +cp ./squashfs-root/*.png ./"$PACKAGE_NAME".png +mv ./"$PACKAGE_NAME".png ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/icons/hicolor/"$ICON_SIZE"x"$ICON_SIZE"/apps + +mkdir ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/applications +cp ./squashfs-root/*.desktop ./"$PACKAGE_NAME".desktop +mv ./"$PACKAGE_NAME".desktop ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/applications +sed -i "s|^Name=.*|Name=$SOFTWARE_NAME|" ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/applications/"$PACKAGE_NAME".desktop +sed -i "s|^Exec=.*|Exec=/opt/apps/$PACKAGE_NAME/files/AppRun|" ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/applications/"$PACKAGE_NAME".desktop +sed -i "s|^Icon=.*|Icon=$PACKAGE_NAME|" ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/applications/"$PACKAGE_NAME".desktop +sed -i "s|^Categories=.*|Categories=$CATEGORY;|" ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/entries/applications/"$PACKAGE_NAME".desktop + +mkdir ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/files +mv ./squashfs-root/* ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/files +mv ./squashfs-root/.[!.]* ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/files +rmdir ./squashfs-root + +touch ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/info +{ + echo "{" + echo -e "\t\"appid\": \"$PACKAGE_NAME\"" + echo "}" +} >>./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME"/info + +mkdir ./"$PACKAGE_NAME"/DEBIAN +touch ./"$PACKAGE_NAME"/DEBIAN/control + +INSTALLED_SIZE=$(du -sk ./"$PACKAGE_NAME"/opt/apps/"$PACKAGE_NAME" | cut -f1) +{ + echo "Package: ""$PACKAGE_NAME" + echo "Version: ""$VERSION" + echo "Architecture: ""$ARCHITECTURE" + echo "Section: utils" + echo "Priority: Optional" + echo "Installed-Size: ""$INSTALLED_SIZE" + echo "Developer: ""$DEVELOPER"" <""$DEVELOPER_MAIL"">" + echo "Maintainer: ""$MAINTAINER"" <""$MAINTAINER_MAIL"">" + echo "Homepage: ""$HOMEPAGE" + echo "Description: ""$SIMPLE_DESCRIPTION" + echo " ""$DETAILED_DESCRIPTION" +} >>./"$PACKAGE_NAME"/DEBIAN/control + +fakeroot chmod 755 ./"$PACKAGE_NAME"/DEBIAN +fakeroot chmod 644 ./"$PACKAGE_NAME"/DEBIAN/control +echo "Construct Package Successfully!" + +fakeroot dpkg -b ./"$PACKAGE_NAME" . >/dev/null && echo "Make deb Successfully" + +rm ./"$APPIMAGE_NAME" +rm -rf ./"$PACKAGE_NAME"