MqttMonitor/MqttConnectionProfilesDialog.py

branch
eric7
changeset 97
21f9c010dc42
parent 95
d830314cca87
child 103
5fe4f179975f
--- a/MqttMonitor/MqttConnectionProfilesDialog.py	Mon Jun 28 17:44:07 2021 +0200
+++ b/MqttMonitor/MqttConnectionProfilesDialog.py	Sun Jul 18 18:30:15 2021 +0200
@@ -20,6 +20,8 @@
 
 from .Ui_MqttConnectionProfilesDialog import Ui_MqttConnectionProfilesDialog
 
+from .MqttClient import MqttClient, MqttProtocols
+
 import UI.PixmapCache
 from Utilities.crypto import pwConvert
 
@@ -28,18 +30,16 @@
     """
     Class implementing a dialog to edit the MQTT connection profiles.
     """
-    def __init__(self, client, profiles, parent=None):
+    def __init__(self, profiles, parent=None):
         """
         Constructor
         
-        @param client reference to the MQTT client object
-        @type MqttClient
         @param profiles dictionary containing dictionaries containing the
             connection parameters. Each entry must have the keys
-            "BrokerAddress", "BrokerPort", "ClientId",
-            "Keepalive", "CleanSession", "Username", "Password", "WillTopic",
-            "WillMessage", "WillQos", "WillRetain", "TlsEnable", "TlsCaCert",
-            "TlsClientCert", "TlsClientKey", "ConnectionTimeout".
+            "BrokerAddress", "BrokerPort", "ClientId", "Protocol",
+            "ConnectionTimeout", "Keepalive", "CleanSession", "Username",
+            "Password", "WillTopic", "WillMessage", "WillQos", "WillRetain",
+            "TlsEnable", "TlsCaCert", "TlsClientCert", "TlsClientKey".
         @type dict
         @param parent reference to the parent widget
         @type QWidget
@@ -47,8 +47,6 @@
         super().__init__(parent)
         self.setupUi(self)
         
-        self.__client = client
-        
         self.__profiles = collections.defaultdict(self.__defaultProfile)
         self.__profiles.update(profiles)
         self.__profilesChanged = False
@@ -239,10 +237,10 @@
         
         @return dictionary containing dictionaries containing the defined
             connection profiles. Each entry have the keys "BrokerAddress",
-            "BrokerPort", "ClientId", "Keepalive", "CleanSession", "Username",
-            "Password", "WillTopic", "WillMessage", "WillQos", "WillRetain",
-            "TlsEnable", "TlsCaCert", "TlsClientCert", "TlsClientKey",
-            "ConnectionTimeout".
+            "BrokerPort", "ClientId", "Protocol", "ConnectionTimeout",
+            "Keepalive", "CleanSession", "Username", "Password", "WillTopic",
+            "WillMessage", "WillQos", "WillRetain", "TlsEnable", "TlsCaCert",
+            "TlsClientCert", "TlsClientKey".
         @rtype dict
         """
         profilesDict = {}
@@ -256,11 +254,21 @@
         @return name of the applied profile
         @rtype str
         """
+        if self.mqttv31Button.isChecked():
+            protocol = MqttProtocols.MQTTv31
+        elif self.mqttv311Button.isChecked():
+            protocol = MqttProtocols.MQTTv311
+        elif self.mqttv5Button.isChecked():
+            protocol = MqttProtocols.MQTTv5
+        else:
+            protocol = MqttProtocols.MQTTv311
+        
         profileName = self.profileEdit.text()
-        profile = {
+        connectionProfile = {
             "BrokerAddress": self.brokerAddressEdit.text(),
             "BrokerPort": self.brokerPortSpinBox.value(),
             "ClientId": self.clientIdEdit.text(),
+            "Protocol": protocol,
             "ConnectionTimeout": self.connectionTimeoutSpinBox.value(),
             "Keepalive": self.keepaliveSpinBox.value(),
             "CleanSession": self.cleanSessionCheckBox.isChecked(),
@@ -275,18 +283,18 @@
             "TlsClientCert": "",
             "TlsClientKey": "",
         }
-        if profile["TlsEnable"]:
+        if connectionProfile["TlsEnable"]:
             if self.tlsCertsFileButton.isChecked():
-                profile["TlsCaCert"] = self.tlsCertsFilePicker.text()
+                connectionProfile["TlsCaCert"] = self.tlsCertsFilePicker.text()
             elif self.tlsSelfSignedCertsButton.isChecked():
-                profile["TlsCaCert"] = (
+                connectionProfile["TlsCaCert"] = (
                     self.tlsSelfSignedCertsFilePicker.text())
-                profile["TlsClientCert"] = (
+                connectionProfile["TlsClientCert"] = (
                     self.tlsSelfSignedClientCertFilePicker.text())
-                profile["TlsClientKey"] = (
+                connectionProfile["TlsClientKey"] = (
                     self.tlsSelfSignedClientKeyFilePicker.text())
         
-        self.__profiles[profileName] = profile
+        self.__profiles[profileName] = connectionProfile
         self.__profilesChanged = True
         
         return profileName
@@ -298,7 +306,7 @@
         @return default dictionary entry
         @rtype dict
         """
-        defaultProfile = self.__client.defaultConnectionOptions()
+        defaultProfile = MqttClient.defaultConnectionOptions()
         defaultProfile["BrokerAddress"] = ""
         if defaultProfile["TlsEnable"]:
             defaultProfile["BrokerPort"] = 8883
@@ -338,36 +346,48 @@
         @param profileName name of the profile to get data from
         @type str
         """
-        profile = self.__defaultProfile()
+        connectionProfile = self.__defaultProfile()
         if profileName:
-            profile.update(self.__profiles[profileName])
+            connectionProfile.update(self.__profiles[profileName])
         
         self.__populatingProfile = True
         if profileName is not None:
             self.profileEdit.setText(profileName)
-        self.brokerAddressEdit.setText(profile["BrokerAddress"])
-        self.brokerPortSpinBox.setValue(profile["BrokerPort"])
-        self.clientIdEdit.setText(profile["ClientId"])
-        self.connectionTimeoutSpinBox.setValue(profile["ConnectionTimeout"])
-        self.keepaliveSpinBox.setValue(profile["Keepalive"])
-        self.cleanSessionCheckBox.setChecked(profile["CleanSession"])
-        self.usernameEdit.setText(profile["Username"])
-        self.passwordEdit.setText(pwConvert(profile["Password"], encode=False))
-        self.willTopicEdit.setText(profile["WillTopic"])
-        self.willMessageEdit.setPlainText(profile["WillMessage"])
-        self.willQosSpinBox.setValue(profile["WillQos"])
-        self.willRetainCheckBox.setChecked(profile["WillRetain"])
-        self.tlsGroupBox.setChecked(profile["TlsEnable"])
-        if profile["TlsCaCert"] and profile["TlsClientCert"]:
+        self.brokerAddressEdit.setText(connectionProfile["BrokerAddress"])
+        self.brokerPortSpinBox.setValue(connectionProfile["BrokerPort"])
+        self.clientIdEdit.setText(connectionProfile["ClientId"])
+        self.mqttv31Button.setChecked(
+            connectionProfile["Protocol"] == MqttProtocols.MQTTv31)
+        self.mqttv311Button.setChecked(
+            connectionProfile["Protocol"] == MqttProtocols.MQTTv311)
+        self.mqttv5Button.setChecked(
+            connectionProfile["Protocol"] == MqttProtocols.MQTTv5)
+        self.connectionTimeoutSpinBox.setValue(
+            connectionProfile["ConnectionTimeout"])
+        self.keepaliveSpinBox.setValue(connectionProfile["Keepalive"])
+        self.cleanSessionCheckBox.setChecked(connectionProfile["CleanSession"])
+        self.usernameEdit.setText(connectionProfile["Username"])
+        self.passwordEdit.setText(
+            pwConvert(connectionProfile["Password"], encode=False))
+        self.willTopicEdit.setText(connectionProfile["WillTopic"])
+        self.willMessageEdit.setPlainText(connectionProfile["WillMessage"])
+        self.willQosSpinBox.setValue(connectionProfile["WillQos"])
+        self.willRetainCheckBox.setChecked(connectionProfile["WillRetain"])
+        self.tlsGroupBox.setChecked(connectionProfile["TlsEnable"])
+        if (
+            connectionProfile["TlsCaCert"] and
+            connectionProfile["TlsClientCert"]
+        ):
             self.tlsSelfSignedCertsButton.setChecked(True)
-            self.tlsSelfSignedCertsFilePicker.setText(profile["TlsCaCert"])
+            self.tlsSelfSignedCertsFilePicker.setText(
+                connectionProfile["TlsCaCert"])
             self.tlsSelfSignedClientCertFilePicker.setText(
-                profile["TlsClientCert"])
+                connectionProfile["TlsClientCert"])
             self.tlsSelfSignedClientKeyFilePicker.setText(
-                profile["TlsClientKey"])
-        elif profile["TlsCaCert"]:
+                connectionProfile["TlsClientKey"])
+        elif connectionProfile["TlsCaCert"]:
             self.tlsCertsFileButton.setChecked(True)
-            self.tlsCertsFilePicker.setText(profile["TlsCaCert"])
+            self.tlsCertsFilePicker.setText(connectionProfile["TlsCaCert"])
         else:
             self.tlsDefaultCertsButton.setChecked(True)
         self.__populatingProfile = False
@@ -385,6 +405,7 @@
         self.brokerAddressEdit.setText("")
         self.brokerPortSpinBox.setValue(1883)
         self.clientIdEdit.setText("")
+        self.mqttv311Button.setChecked(True)
         self.keepaliveSpinBox.setValue(60)
         self.cleanSessionCheckBox.setChecked(True)
         self.usernameEdit.setText("")
@@ -436,40 +457,56 @@
             return False
         
         elif profileName in self.__profiles:
-            profile = self.__defaultProfile()
-            profile.update(self.__profiles[profileName])
+            if self.mqttv31Button.isChecked():
+                protocol = MqttProtocols.MQTTv31
+            elif self.mqttv311Button.isChecked():
+                protocol = MqttProtocols.MQTTv311
+            elif self.mqttv5Button.isChecked():
+                protocol = MqttProtocols.MQTTv5
+            else:
+                protocol = MqttProtocols.MQTTv311
+            
+            connectionProfile = self.__defaultProfile()
+            connectionProfile.update(self.__profiles[profileName])
             changed = (
-                self.brokerAddressEdit.text() != profile["BrokerAddress"] or
-                self.brokerPortSpinBox.value() != profile["BrokerPort"] or
-                self.clientIdEdit.text() != profile["ClientId"] or
+                self.brokerAddressEdit.text() !=
+                connectionProfile["BrokerAddress"] or
+                self.brokerPortSpinBox.value() !=
+                connectionProfile["BrokerPort"] or
+                self.clientIdEdit.text() != connectionProfile["ClientId"] or
+                protocol != connectionProfile["Protocol"] or
                 self.connectionTimeoutSpinBox.value() !=
-                profile["ConnectionTimeout"] or
-                self.keepaliveSpinBox.value() != profile["Keepalive"] or
+                connectionProfile["ConnectionTimeout"] or
+                self.keepaliveSpinBox.value() !=
+                connectionProfile["Keepalive"] or
                 self.cleanSessionCheckBox.isChecked() !=
-                profile["CleanSession"] or
-                self.usernameEdit.text() != profile["Username"] or
+                connectionProfile["CleanSession"] or
+                self.usernameEdit.text() != connectionProfile["Username"] or
                 self.passwordEdit.text() !=
-                pwConvert(profile["Password"], encode=False) or
-                self.willTopicEdit.text() != profile["WillTopic"] or
-                self.willMessageEdit.toPlainText() != profile["WillMessage"] or
-                self.willQosSpinBox.value() != profile["WillQos"] or
-                self.willRetainCheckBox.isChecked() != profile["WillRetain"] or
-                self.tlsGroupBox.isChecked() != profile["TlsEnable"]
+                pwConvert(connectionProfile["Password"], encode=False) or
+                self.willTopicEdit.text() != connectionProfile["WillTopic"] or
+                self.willMessageEdit.toPlainText() !=
+                connectionProfile["WillMessage"] or
+                self.willQosSpinBox.value() != connectionProfile["WillQos"] or
+                self.willRetainCheckBox.isChecked() !=
+                connectionProfile["WillRetain"] or
+                self.tlsGroupBox.isChecked() != connectionProfile["TlsEnable"]
             )
             # check TLS stuff only, if not yet changed
             if not changed:
                 if self.tlsCertsFileButton.isChecked():
                     changed |= (
-                        self.tlsCertsFilePicker.text() != profile["TlsCaCert"]
+                        self.tlsCertsFilePicker.text() !=
+                        connectionProfile["TlsCaCert"]
                     )
                 elif self.tlsSelfSignedCertsButton.isChecked():
                     changed |= (
                         self.tlsSelfSignedCertsFilePicker.text() !=
-                        profile["TlsCaCert"] or
+                        connectionProfile["TlsCaCert"] or
                         self.tlsSelfSignedClientCertFilePicker.text() !=
-                        profile["TlsClientCert"] or
+                        connectionProfile["TlsClientCert"] or
                         self.tlsSelfSignedClientKeyFilePicker.text() !=
-                        profile["TlsClientKey"]
+                        connectionProfile["TlsClientKey"]
                     )
             return changed
         

eric ide

mercurial