TG-PlatformPlus/createInstructionDlg.py

93 lines
17 KiB
Python
Raw Normal View History

2026-03-02 14:29:58 +08:00
import re
import os
import base64
import json
from PyQt6 import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *
from show_editor import CodeDialog
from common import common
from ui.Ui_createInstructionDlg import Ui_createInstructionDlg
from instructionModel.instructionManager import instructionManager
class CreateInstructionDlg(QDialog):
createFinished = pyqtSignal()
editFinished = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_createInstructionDlg()
self.ui.setupUi(self)
self.dev_model_id = ""
self.supportedTypes = {}
self.codeDialog = CodeDialog("指令脚本编辑")
self.default_general = "aW1wb3J0IHRpbWUNCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lDQoNCnJlY3ZEYXRhID0gYnl0ZWFycmF5KCkgI+aOpeaUtueahOaVsOaNruWtmOaUvuatpOaVsOe7hA0Kc3RhcnRUaW1lID0gdGltZS50aW1lKCkgDQoNCiMg5bCGYnl0ZWFycmF55Lul5a2X5Li65Y2V5L2N6L2s5o2i5oiQMTbov5vliLblrZfnrKbkuLLvvIzmlrnkvr/mmL7npLoNCmRlZiB3b3JkRGF0YTJIZXhTdHIoZGF0YSk6DQogICAgcmV0ID0gJyAnLmpvaW4oZGF0YVtpOmkrMl0uaGV4KCkgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCAyKSkNCiAgICByZXR1cm4gcmV0LnVwcGVyKCkNCg0KIyDojrflj5blvZPliY3ml7bpl7TlrZfnrKbkuLINCmRlZiBub3dTdHIoKToNCiAgICBub3cgPSBkYXRldGltZS5ub3coKQ0KICAgIHJldCA9IG5vdy5zdHJmdGltZSgnJUg6JU06JVMuJykgKyBmIntub3cubWljcm9zZWNvbmQgLy8gMTAwMDowM2R9Ig0KICAgIHJldHVybiByZXQNCiAgICANCmRlZiBjaGVja1ZhbHVlKGRhdGE6IGJ5dGVzKSAtPiBpbnQ6DQogICAgIyDliJ3lp4vljJZjcmPkuLoweEZGRkYNCiAgICBjcmMgPSAweEZGRkYNCg0KICAgIGxlbmd0aCA9IGxlbihkYXRhKQ0KICAgIGlmIGxlbmd0aCAlIDIgIT0gMDoNCiAgICAgICAgcmV0dXJuIDANCiAgICANCiAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW5ndGgsIDIpOg0KICAgICAgICB2YWwgPSBkYXRhW2ldICogMjU2ICsgZGF0YVtpICsgMV0NCiAgICAgICAgY3JjID0gY3JjIF4gdmFsDQoNCiAgICAjIOi/lOWbnuacgOe7iOeahGNyY+WAvA0KICAgIHJldHVybiBjcmMNCg0KIyDlkK/liqjlh73mlbDvvIzlkb3ku6TlvIDlp4vkvJrosIPnlKjmraTlh73mlbANCmRlZiBzdGFydCgpOg0KDQogICAgbG9nX2koJy0tLS0tLS0tLS0tLS0tLS0tICcgKyBjbWRJbmZvWyduYW1lJ10gKyAnIC0tLS0tLS0tLS0tLS0tLS0nKQ0KICAgICNsb2coZiJbe2RldkluZm9bJ25hbWUnXX1de2NtZEluZm9bJ25hbWUnXX0iKQ0KICAgIA0KICAgIHN0YXJ0VGltZSA9IHRpbWUudGltZSgpICPorrDlvZXlkK/liqjml7bpl7QNCiAgICANCiAgICByZWN2RGF0YSA9IGJ5dGVhcnJheSgpICPmuIXnqbrmjqXmlLbmlbDnu4QNCg0KICAgIGF0dHIgPSBjbWRJbmZvWydhdHRyJ10NCiAgICBjbWRTdHIgPSBhdHRyWydkYXRhJ10gI+e7hOWQiOimgeWPkemAgeeahOaKpeaWh++8jOWNgeWFrei/m+WItuWtl+espuS4sg0KICAgICAgICAgICAgDQogICAgZGF0YSA9IGJ5dGVhcnJheSgpLmZyb21oZXgoY21kU3RyKSAj5bCG5Y2B5YWt6L+b5Yi25a2X56ym5Liy6L2s5oiQ5a2X6IqC5pWw5o2u5Y+R6YCBDQogICAgDQogICAgaWYgYXR0clsncmVxX2lzX2hleCddID09IFRydWU6DQogICAgICAgIHBhc3MNCiAgICANCiAgICBpZiBhdHRyWydyZXFfaXNfY2hlY2snXSA9PSBUcnVlOg0KICAgICAgICBjcmMgPSBjaGVja1ZhbHVlKGRhdGEpDQogICAgICAgIGRhdGEgPSBkYXRhICsgYnl0ZWFycmF5KGNyYy50b19ieXRlcygyLCAnYmlnJykpDQogICAgc2VuZChkYXRhKQ0KDQogICAgbG9nX2QoZiJbe25vd1N0cigpfV0gU2VudDp7d29yZERhdGEySGV4U3RyKGRhdGEpfSIpDQogICAgICAgIA0KICAgIHJldHVybiBUcnVlDQoNCiMg5o6l5pS25pWw5o2u5aSE55CG5Ye95pWw77yM5b2T5pS25Yiw5pWw5o2u5Lya6LCD55So5q2k5Ye95pWwDQpkZWYgcmVjdkRhdGFIYW5kbGVyKGRhdGEpOg0KICAgIGdsb2JhbCByZWN2RGF0YQ0KICAgIHJlY3ZEYXRhID0gcmVjdkRhdGEgKyBkYXRhDQogICAgYXR0ciA9IGNtZEluZm9bJ2F0dHInXQ0KICAgIHJzcF9sZW4gPSBpbnQoYXR0clsncnNwX2xlbiddKSAqIDINCiAgICBpZiBsZW4ocmVjdkRhdGEpID49IHJzcF9sZW46ICNUQlVT5oyH5LukcnNwX2xlbuS7peWtl+S4uuWNleS9jSAgICAgICAgDQogICAgICAgIGxvZ19kKGYiW3tub3dTdHIoKX1dIEVjaG86e3dvcmREYXRhMkhleFN0cihyZWN2RGF0YSl9IikNCiAgICAgICAgaWYgYXR0clsncnNwX2lzX2NoZWNrJ10gPT0gVHJ1ZToNCiAgICAgICAgICAgICMg5qCh6aqM5pWw5o2u5q2j56Gu5oCnDQogICAgICAgICAgICBjcmMgPSBpbnQuZnJvbV9ieXRlcyhyZWN2RGF0YVtyc3BfbGVuIC0gMjpyc3BfbGVuXSwgYnl0ZW9yZGVyPSdiaWcnKQ0KICAgICAgICAgICAgY2FsY192YWx1ZSA9IGNoZWNrVmFsdWUocmVjdkRhdGFbMDpyc3BfbGVuIC0gMl0pDQogICAgICAgICAgICBpZiBjcmMgIT0gY2FsY192YWx1ZToNCiAgICAgICAgICAgICAgICBsb2dfdygiQ1JDIGVycm9yOiIgKw0KICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlICIgKyAnezowNFh9Jy5mb3JtYXQoY2FsY192YWx1ZSkgKyANCiAgICAgICAgICAgICAgICAgICAgIixnb3QgIiArICd7OjA0WH0nLmZvcm1hdChjcmMpKQ0KICAgICAgICAgICAgICAgIGZpbmlzaCgpDQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAgICAgIGxvZ19pKCJzdWNjZXNzIikgICAgDQogICAgICAgIGZpbmlzaCgpDQogICAgICAgIA0KIyDmraTlh73mlbDkvJrooqvph43lpI3osIPnlKjvvIzpl7TpmpQxMOavq+enku+8jOebtOWIsGZpbmlzaCgpICAgICAgICANCmRlZiBsb29wKCk6DQogICAgZ2xvYmFsIHJlY3ZEYXRhDQogICAgaWYgdGltZS50aW1lKCkgPiBzdGFydFRpbWUgKyBpbnQoY21kSW5mb1snYXR0ciddWydyc3BfdGltZW91dCddKSAvIDEwMDAuMDoNCiAgICAgICAgaWYgbGVuKHJlY3ZEYXRhKSA+IDA6DQogICAgICAgICAgICBsb2dfdyhmIlt7bm93U3RyKCl9XVJYIHRpbWVvdXQ6e3dvcmREYXRhMkhleFN0cihyZWN2RGF0YSl9IikNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGxvZ193KGYiW3tub3dTdHIoKX1dUlggdGltZW91dCIpDQogICAgICAgIGxvZ19lKGYiW3tkZXZJbmZvWyduYW1lJ119XXtjbWRJbmZvWyduYW1lJ119IGZhaWwuIikNCiAgICAgICAgZmluaXNoKCkNCg=="
self.default_cosl = "aW1wb3J0IHRpbWUNCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lDQoNCnJlY3ZEYXRhID0gYnl0ZWFycmF5KCkgI+aOpeaUtueahOaVsOaNruWtmOaUvuatpOaVsOe7hA0Kc3RhcnRUaW1lID0gdGltZS50aW1lKCkgDQoNCiMg5bCGYnl0ZWFycmF55Lul5a2X5Li65Y2V5L2N6L2s5o2i5oiQMTbov5vliLblrZfnrKbkuLLvvIzmlrnkvr/mmL7npLoNCmRlZiB3b3JkRGF0YTJIZXhTdHIoZGF0YSk6DQogICAgcmV0ID0gJyAnLmpvaW4oZGF0YVtpOmkrMl0uaGV4KCkgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCAyKSkNCiAgICByZXR1cm4gcmV0LnVwcGVyKCkNCg0KIyDojrflj5blvZPliY3ml7bpl7TlrZfnrKbkuLINCmRlZiBub3dTdHIoKToNCiAgICBub3cgPSBkYXRldGltZS5ub3coKQ0KICAgIHJldCA9IG5vdy5zdHJmdGltZSgnJUg6JU06JVMuJykgKyBmIntub3cubWljcm9zZWNvbmQgLy8gMTAwMDowM2R9Ig0KICAgIHJldHVybiByZXQNCiAgICANCmRlZiBjaGVja1ZhbHVlKGRhdGE6IGJ5dGVzKSAtPiBpbnQ6DQogICAgIyDliJ3lp4vljJZjcmPkuLoweEZGRkYNCiAgICBjcmMgPSAweEZGRkYNCg0KICAgIGxlbmd0aCA9IGxlbihkYXRhKQ0KICAgIGlmIGxlbmd0aCAlIDIgIT0gMDoNCiAgICAgICAgcmV0dXJuIDANCiAgICANCiAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW5ndGgsIDIpOg0KICAgICAgICB2YWwgPSBkYXRhW2ldICogMjU2ICsgZGF0YVtpICsgMV0NCiAgICAgICAgY3JjID0gY3JjIF4gdmFsDQoNCiAgICAjIOi/lOWbnuacgOe7iOeahGNyY+WAvA0KICAgIHJldHVybiBjcmMNCg0KIyDlkK/liqjlh73mlbDvvIzlkb3ku6TlvIDlp4vkvJrosIPnlKjmraTlh73mlbANCmRlZiBzdGFydCgpOg0KDQogICAgbG9nX2koJy0tLS0tLS0tLS0tLS0tLS0tICcgKyBjbWRJbmZvWyduYW1lJ10gKyAnIC0tLS0tLS0tLS0tLS0tLS0nKQ0KICAgICNsb2coZiJbe2RldkluZm9bJ25hbWUnXX1de2NtZEluZm9bJ25hbWUnXX0iKQ0KICAgIA0KICAgIHN0YXJ0VGltZSA9IHRpbWUudGltZSgpICPorrDlvZXlkK/liqjml7bpl7QNCiAgICANCiAgICByZWN2RGF0YSA9IGJ5dGVhcnJheSgpICPmuIXnqbrmjqXmlLbmlbDnu4QNCg0KICAgIGF0dHIgPSBjbWRJbmZvWydhdHRyJ10NCiAgICBjbWRTdHIgPSBhdHRyWydjbWQnXSArIGF0dHJbJ2RhdGEnXSAj57uE5ZCI6KaB5Y+R6YCB55qE5oql5paH77yM5Y2B5YWt6L+b5Yi25a2X56ym5LiyDQogICAgICAgICAgICANCiAgICBkYXRhID0gYnl0ZWFycmF5KCkuZnJvbWhleChjbWRTdHIpICPlsIbljYHlha3ov5vliLblrZfnrKbkuLLovazmiJDlrZfoioLmlbDmja7lj5HpgIENCiAgICANCiAgICBpZiBhdHRyWydyZXFfaXNfY2hlY2snXSA9PSBUcnVlOg0KICAgICAgICBjcmMgPSBjaGVja1ZhbHVlKGRhdGEpDQogICAgICAgIGRhdGEgPSBkYXRhICsgYnl0ZWFycmF5KGNyYy50b19ieXRlcygyLCAnYmlnJykpDQogICAgc2VuZChkYXRhKQ0KDQogICAgbG9nX2QoZiJbe25vd1N0cigpfV0gU2VudDp7d29yZERhdGEySGV4U3RyKGRhdGEpfSIpDQogICAgICAgIA0KICAgIHJldHVybiBUcnVlDQoNCiMg5o6l5pS25pWw5o2u5aSE55CG5Ye95pWw77yM5b2T5pS25Yiw5pWw5o2u5Lya6LCD55So5q2k5Ye95pWwDQpkZWYgcmVjdkRhdGFIYW5kbGVyKGRhdGEpOg0KICAgIGdsb2JhbCByZWN2RGF0YQ0KICAgIHJlY3ZEYXRhID0gcmVjdkRhdGEgKyBkYXRhDQogICAgYXR0ciA9IGNtZEluZm9bJ2F0dHInXQ0KICAgIHJzcF9sZW4gPSBpbnQoYXR0clsncnNwX2xlbiddKSAqIDINCiAgICBpZiBsZW4ocmVjdkRhdGEpID49IHJzcF9sZW46ICNUQlVT5oyH5LukcnNwX2xlbuS7peWtl+S4uuWNleS9jSAgICAgICAgDQogICAgICAgIGxvZ19kKGYiW3tub3dTdHIoKX1dIEVjaG86e3dvcmREYXRhMkhleFN0cihyZWN2RGF0YSl9IikNCiAgICAgICAgaWYgYXR0clsncnNwX2lzX2NoZWNrJ10gPT0gVHJ1ZToNCiAgICAgICAgICAgICMg5qCh6aqM5pWw5o2u5q2j56Gu5oCnDQogICAgICAgICAgICBjcmMgPSBpbnQuZnJvbV9ieXRlcyhyZWN2RGF0YVtyc3BfbGVuIC0gMjpyc3BfbGVuXSwgYnl0ZW9yZGVyPSdiaWcnKQ0KICAgICAgICAgICAgY2FsY192YWx1ZSA9IGNoZWNrVmFsdWUocmVjdkRhdGFbMDpyc3BfbGVuIC0gMl0pDQogICAgICAgICAgICBpZiBjcmMgIT0gY2FsY192YWx1ZToNCiAgICAgICAgICAgICAgICBsb2dfdygiQ1JDIGVycm9yOiIgKw0KICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlICIgKyAnezowNFh9Jy5mb3JtYXQoY2FsY192YWx1ZSkgKyANCiAgICAgICAgICAgICAgICAgICAgIixnb3QgIiArICd7OjA0WH0nLmZvcm1hdChjcmMpKQ0KICAgICAgICAgICAgICAgIGZpbmlzaCgpDQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAgICAgIGxvZ19pKCJzdWNjZXNzIikgICAgDQogICAgICAgIGZpbmlzaCgpDQogICAgICAgIA0KIyDmraTlh73mlbDkvJrooqvph43lpI3osIPnlKjvvIzpl7TpmpQxMOavq+enku+8jOebtOWIsGZpbmlzaCgpICAgICAgICANCmRlZiBsb29wKCk6DQogICAgZ2xvYmFsIHJlY3ZEYXRhDQogICAgaWYgdGltZS50aW1lKCkgPiBzdGFydFRpbWUgKyBpbnQoY21kSW5mb1snYXR0ciddWydyc3BfdGltZW91dCddKSAvIDEwMDAuMDoNCiAgICAgICAgaWYgbGVuKHJlY3ZEYXRhKSA+IDA6DQogICAgICAgICAgICBsb2dfdyhmIlt7bm93U3RyKCl9XVJYIHRpbWVvdXQ6e3dvcmREYXRhMkhleFN0cihyZWN2RGF0YSl9IikNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGxvZ193KGYiW3tub3dTdHIoKX1dUlggdGltZW91dCIpDQogICAgICAgIGxvZ19lKGYiW3tkZXZJbmZvWyduYW1lJ119XXtjbWRJbmZvWyduYW1lJ119IGZhaWwuIikNCiAgICAgICAgZmluaXNoKCkNCg=="
self.default_scpi = "aW1wb3J0IHRpbWUNCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lDQoNCnJlY3ZEYXRhID0gYnl0ZWFycmF5KCkgI+aOpeaUtueahOaVsOaNruWtmOaUvuatpOaVsOe7hA0Kc3RhcnRUaW1lID0gdGltZS50aW1lKCkgDQoNCiMg5bCGYnl0ZWFycmF55Lul5a2X5Li65Y2V5L2N6L2s5o2i5oiQMTbov5vliLblrZfnrKbkuLLvvIzmlrnkvr/mmL7npLoNCmRlZiB3b3JkRGF0YTJIZXhTdHIoZGF0YSk6DQogICAgcmV0ID0gJyAnLmpvaW4oZGF0YVtpOmkrMl0uaGV4KCkgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCAyKSkNCiAgICByZXR1cm4gcmV0LnVwcGVyKCkNCg0KIyDojrflj5blvZPliY3ml7bpl7TlrZfnrKbkuLINCmRlZiBub3dTdHIoKToNCiAgICBub3cgPSBkYXRldGltZS5ub3coKQ0KICAgIHJldCA9IG5vdy5zdHJmdGltZSgnJUg6JU06JVMuJykgKyBmIntub3cubWljcm9zZWNvbmQgLy8gMTAwMDowM2R9Ig0KICAgIHJldHVybiByZXQNCg0KIyDlkK/liqjlh73mlbDvvIzlkb3ku6TlvIDlp4vkvJrosIPnlKjmraTlh73mlbANCmRlZiBzdGFydCgpOg0KICAgIGdsb2JhbCB0c2RiDQogICAgbG9nX2koJy0tLS0tLS0tLS0tLS0tLS0tICcgKyBjbWRJbmZvWyduYW1lJ10gKyAnIC0tLS0tLS0tLS0tLS0tLS0nKQ0KICAgIA0KICAgIHN0YXJ0VGltZSA9IHRpbWUudGltZSgpICPorrDlvZXlkK/liqjml7bpl7QNCiAgICANCiAgICByZWN2RGF0YSA9IGJ5dGVhcnJheSgpICPmuIXnqbrmjqXmlLbmlbDnu4QNCg0KICAgIGF0dHIgPSBjbWRJbmZvWydhdHRyJ10NCiAgICBjbWRTdHIgPSBhdHRyWydkYXRhJ10gKyAiXG4iICPnu4TlkIjopoHlj5HpgIHnmoTmiqXmlofvvIzljYHlha3ov5vliLblrZfnrKbkuLINCiAgICAgICAgICAgIA0KICAgIHNlbmQoYnl0ZWFycmF5KGNtZFN0ciwgZW5jb2Rpbmc9J3V0Zi04JykpDQogICAgDQogICAgbG9nX2QoZiJbe25vd1N0cigpfV1UWDp7Y21kU3RyfSIpDQogICAgICAgIA0KICAgIHJldHVybiBUcnVlDQoNCiMg5o6l5pS25pWw5o2u5aSE55CG5Ye95pWw77yM5b2T5pS25Yiw5pWw5o2u5Lya6LCD55So5q2k5Ye95pWwDQpkZWYgcmVjdkRhdGFIYW5kbGVyKGRhdGEpOg0KICAgIGdsb2JhbCByZWN2RGF0YQ0KICAgIGdsb2JhbCB0c2RiLF9HDQogICAgcmVjdkRhdGEgPSByZWN2RGF0YSArIGJ5dGVhcnJheShkYXRhKSANCiAgICB0bXBEYXRhID0gYnl0ZXMocmVjdkRhdGEpLmRlY29kZSgndXRmLTgnKQ0KICAgIA0KIyDmraTlh73mlbDkvJrooqvph43lpI3osIPnlKjvvIzpl7TpmpQxMOavq+enku+8jOebtOWIsGZpbmlzaCgpICAgICAgICANCmRlZiBsb29wKCk6DQogICAgZ2xvYmFsIHJlY3ZEYXRhDQogICAgaWYgdGltZS50aW1lKCkgPiBzdGFydFRpbWUgKyBpbnQoY21kSW5mb1snYXR0ciddWydyc3BfdGltZW91dCddKSAvIDEwMDAuMDoNCiAgICAgICAgaWYgbGVuKHJlY3ZEYXRhKSA+IDA6DQogICAgICAgICAgICBsb2dfdyhmIlt7bm93U3RyKCl9XVJYIHRpbWVvdXQ6e3dvcmREYXRhMkhleFN0cihyZWN2RGF0YSl9IikNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGxvZ193KGYiW3tub3dTdHIoKX1dUlggdGltZW91dCIpDQogICAgICAgIGxvZ19lKGYiW3tkZXZJbmZvWyduYW1lJ119XXtjbWRJbmZvWyduYW1lJ119IGZhaWwuIikNCiAgICAgICAgZmluaXNoKCk="
self.default_http = "aW1wb3J0IHRpbWUNCmltcG9ydCBqc29uDQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQ0KDQpyZWN2RGF0YSA9IGJ5dGVhcnJheSgpICPmjqXmlLbnmoTmlbDmja7lrZjmlL7mraTmlbDnu4QNCnN0YXJ0VGltZSA9IHRpbWUudGltZSgpIA0KDQojIOWwhmJ5dGVhcnJheeS7peWtl+S4uuWNleS9jei9rOaNouaIkDE26L+b5Yi25a2X56ym5Liy77yM5pa55L6/5pi+56S6DQpkZWYgd29yZERhdGEySGV4U3RyKGRhdGEpOg0KICAgIHJldCA9ICcgJy5qb2luKGRhdGFbaTppKzJdLmhleCgpIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgMikpDQogICAgcmV0dXJuIHJldC51cHBlcigpDQoNCiMg6I635Y+W5b2T5YmN5pe26Ze05a2X56ym5LiyDQpkZWYgbm93U3RyKCk6DQogICAgbm93ID0gZGF0ZXRpbWUubm93KCkNCiAgICByZXQgPSBub3cuc3RyZnRpbWUoJyVIOiVNOiVTLicpICsgZiJ7bm93Lm1pY3Jvc2Vjb25kIC8vIDEwMDA6MDNkfSINCiAgICByZXR1cm4gcmV0DQoNCiMg5ZCv5Yqo5Ye95pWw77yM5ZG95Luk5byA5aeL5Lya6LCD55So5q2k5Ye95pWwDQpkZWYgc3RhcnQoKToNCiAgICBnbG9iYWwgdHNkYg0KICAgIGxvZ19pKCctLS0tLS0tLS0tLS0tLS0tLSAnICsgY21kSW5mb1snbmFtZSddICsgJyAtLS0tLS0tLS0tLS0tLS0tJykNCiAgICANCiAgICBzdGFydFRpbWUgPSB0aW1lLnRpbWUoKSAj6K6w5b2V5ZCv5Yqo5pe26Ze0DQogICAgDQogICAgcmVjdkRhdGEgPSBieXRlYXJyYXkoKSAj5riF56m65o6l5pS25pWw57uEDQoNCiAgICBhdHRyID0gY21kSW5mb1snYXR0ciddDQoNCiAgICB1cmwgPSBhdHRyWyd1cmwnXSANCiAgICByc3BfcGFyYW1zID0gYXR0clsncnNwX3BhcmFtcyddDQogICAgcnNwX2hlYWRlcnMgPSBhdHRyWydyc3BfaGVhZGVycyddDQogICAgcnNwX2JvZHlzID0gYXR0clsncnNwX2JvZHlzJ10NCiAgICB0eXBlID0gYXR0clsndHlwZSddDQoNCiAgICBjbWQgPSB7DQogICAgICAgICd1cmwnOiB1cmwsDQogICAgICAgICd0eXBlJzogdHlwZSwNCiAgICAgICAgJ3JzcF9wYXJhbXMnOiByc3BfcGFyYW1zLA0KICAgICAgICAncnNwX2hlYWRlcnMnOiByc3BfaGVhZGVycywNCiAgICAgICAgJ3JzcF9ib2R5cyc6IHJzcF9ib2R5cw0KICAgIH0NCiAgICBjbWRTdHIgPSBqc29uLmR1bXBzKGNtZCkNCiAgICBzZW5kKGJ5dGVhcnJheShjbWRTdHIsIGVuY29kaW5nPSd1dGYtOCcpKQ0KICAgIA0KICAgIGxvZ19kKGYiW3tub3dTdHIoKX1dVFg6e2NtZFN0cn0iKQ0KICAgICAgICANCiAgICByZXR1cm4gVHJ1ZQ0KDQojIOaOpeaUtuaVsOaNruWkhOeQhuWHveaVsO+8jOW9k+aUtuWIsOaVsOaNruS8muiwg+eUqOatpOWHveaVsA0KZGVmIHJlY3ZEYXRhSGFuZGxlcihkYXRhKToNCiAgICBnbG9iYWwgcmVjdkRhdGENCiAgICBnbG9iYWwgdHNkYixfRw0KICAgIHJlY3ZEYXRhID0gcmVjdkRhdGEgKyBieXRlYXJyYXkoZGF0YSkgDQogICAgdG1wRGF0YSA9IGJ5dGVzKHJlY3ZEYXRhKS5kZWNvZGUoJ3V0Zi04JykNCiAgICANCiMg5q2k5Ye95pWw5Lya6KKr6YeN5aSN6LCD55So77yM6Ze06ZqUMTDmr6vnp5LvvIznm7TliLBmaW5pc2goKSAgICAgICAgDQpkZWYgbG9vcCgpOg0KICAgIGdsb2JhbCByZWN2RGF0YQ0KICAgIGlmIHRpbWUudGltZSgpID4gc3RhcnRUaW1lICsgaW50KGNtZEluZm9bJ2F0dHInXVsncnNwX3RpbWVvdXQnXSkgLyAxMDAwLjA6DQogICAgICAgIGlmIGxlbihyZWN2RGF0YSkgPiAwOg0KICAgICAgICAgICAgbG9nX3coZiJbe25vd1N0cigpfV1SWCB0aW1lb3V0Ont3b3JkRGF0YTJIZXhTdHIocmVjdkRhdGEpfSIpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBsb2dfdyhmIlt7bm93U3RyKCl9XVJYIHRpbWVvdXQiKQ0KICAgICAgICBsb2dfZShmIlt7ZGV2SW5mb1snbmFtZSddfV17Y21kSW5mb1snbmFtZSddfSBmYWlsLiIpDQogICAgICAgIGZpbmlzaCgp"
with open(os.path.join(os.path.dirname(__file__),"default_general.py"), "r", encoding="utf-8") as f:
self.default_general = base64.b64encode(f.read().encode("utf-8")).decode("utf-8")
with open(os.path.join(os.path.dirname(__file__),"default_cosl.py"), "r", encoding="utf-8") as f:
self.default_cosl = base64.b64encode(f.read().encode("utf-8")).decode("utf-8")
with open(os.path.join(os.path.dirname(__file__),"default_scpi.py"), "r", encoding="utf-8") as f:
self.default_scpi = base64.b64encode(f.read().encode("utf-8")).decode("utf-8")
with open(os.path.join(os.path.dirname(__file__),"default_http.py"), "r", encoding="utf-8") as f:
self.default_http = base64.b64encode(f.read().encode("utf-8")).decode("utf-8")
self.ui.quickInstruction.rootContext().setContextProperty('httpJs', self.default_http)
self.ui.quickInstruction.rootContext().setContextProperty('coslJs', self.default_cosl)
self.ui.quickInstruction.rootContext().setContextProperty('scpiJs', self.default_scpi)
self.ui.quickInstruction.rootContext().setContextProperty('generalJs', self.default_general)
self.ui.quickInstruction.rootContext().setContextProperty('common', common)
self.ui.quickInstruction.rootContext().setContextProperty('codeDialog', self.codeDialog)
self.ui.quickInstruction.rootContext().setContextProperty('instructionManager', instructionManager)
self.ui.quickInstruction.setSource(QUrl(common.firstPath()+"/Instruction/Loader.qml"))
self.ui.cbType.activated.connect(self.handleTypeChanged)
self.ui.pbOk.clicked.connect(self.handleAccept)
self.ui.pbCancel.clicked.connect(self.reject)
def loadSupportedTypes(self):
self.supportedTypes = instructionManager.getSupportedType()
self.ui.cbType.clear()
for type in self.supportedTypes:
self.supportedTypes[type]['type'] = type
self.ui.cbType.addItem(self.supportedTypes[type]['name'],self.supportedTypes[type])
def handleTypeChanged(self):
instructionManager.typeChange.emit(self.ui.cbType.currentData())
def showCreateDlg(self, devmodelid):
self.setWindowTitle('创建指令')
self.dev_model_id = devmodelid
self.ui.leName.setText('')
self.loadSupportedTypes()
self.ui.cbType.setEnabled(True)
self.ui.cbType.setCurrentIndex(0)
instructionManager.typeChange.emit(self.ui.cbType.currentData())
self.exec()
def showEditDlg(self, devmodelid, data):
self.setWindowTitle('编辑指令')
self.dev_model_id = devmodelid
self.instructionId = data['id']
self.ui.leName.setText(data['name'])
self.loadSupportedTypes()
self.ui.cbType.setEnabled(False)
if data['type'] is not None and data['type'] in self.supportedTypes:
self.ui.cbType.setCurrentIndex(self.ui.cbType.findText(self.supportedTypes[data['type']]['name']))
instructionManager.typeChange.emit(self.ui.cbType.currentData())
instructionManager.attrChange.emit(data['attr_str'])
self.exec()
def handleAccept(self):
if self.windowTitle() == '创建指令':
instructionManager.createData.emit(str(self.dev_model_id), self.ui.leName.text())
self.createFinished.emit()
self.accept()
elif self.windowTitle() == '编辑指令':
instructionManager.updateData.emit(str(self.instructionId), self.ui.leName.text())
self.editFinished.emit()
self.accept()