13 from EricWidgets import EricMessageBox |
13 from EricWidgets import EricMessageBox |
14 from EricWidgets.EricPathPicker import EricPathPickerModes |
14 from EricWidgets.EricPathPicker import EricPathPickerModes |
15 |
15 |
16 from .Ui_MqttConnectionOptionsDialog import Ui_MqttConnectionOptionsDialog |
16 from .Ui_MqttConnectionOptionsDialog import Ui_MqttConnectionOptionsDialog |
17 |
17 |
|
18 from .MqttClient import MqttClient, MqttProtocols |
|
19 |
18 from Utilities.crypto import pwConvert |
20 from Utilities.crypto import pwConvert |
19 |
21 |
20 |
22 |
21 class MqttConnectionOptionsDialog(QDialog, Ui_MqttConnectionOptionsDialog): |
23 class MqttConnectionOptionsDialog(QDialog, Ui_MqttConnectionOptionsDialog): |
22 """ |
24 """ |
23 Class implementing a dialog to enter MQTT connection options. |
25 Class implementing a dialog to enter MQTT connection options. |
24 """ |
26 """ |
25 def __init__(self, client, options=None, parent=None): |
27 def __init__(self, options=None, parent=None): |
26 """ |
28 """ |
27 Constructor |
29 Constructor |
28 |
30 |
29 @param client reference to the MQTT client object |
|
30 @type MqttClient |
|
31 @param options dictionary containing the connection options to |
31 @param options dictionary containing the connection options to |
32 populate the dialog with. It must have the keys "ClientId", |
32 populate the dialog with. It must have the keys "ClientId", |
33 "Keepalive", "CleanSession", "Username", "Password", "WillTopic", |
33 "Protocol", "ConnectionTimeout", "Keepalive", "CleanSession", |
34 "WillMessage", "WillQos", "WillRetain", "TlsEnable", "TlsCaCert", |
34 "Username", "Password", "WillTopic", "WillMessage", "WillQos", |
35 "ConnectionTimeout". |
35 "WillRetain", "TlsEnable", "TlsCaCert". |
36 @type dict |
36 @type dict |
37 @param parent reference to the parent widget |
37 @param parent reference to the parent widget |
38 @type QWidget |
38 @type QWidget |
39 """ |
39 """ |
40 super().__init__(parent) |
40 super().__init__(parent) |
41 self.setupUi(self) |
41 self.setupUi(self) |
42 |
|
43 self.__client = client |
|
44 |
42 |
45 self.tlsCertsFilePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) |
43 self.tlsCertsFilePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) |
46 self.tlsCertsFilePicker.setFilters( |
44 self.tlsCertsFilePicker.setFilters( |
47 self.tr("Certificate Files (*.crt *.pem);;All Files (*)")) |
45 self.tr("Certificate Files (*.crt *.pem);;All Files (*)")) |
48 |
46 |
104 "WillQos", "WillRetain", "TlsEnable", "TlsCaCert", |
102 "WillQos", "WillRetain", "TlsEnable", "TlsCaCert", |
105 "ConnectionTimeout". |
103 "ConnectionTimeout". |
106 @type dict |
104 @type dict |
107 """ |
105 """ |
108 if options is None: |
106 if options is None: |
109 options = self.__client.defaultConnectionOptions() |
107 options = MqttClient.defaultConnectionOptions() |
110 |
108 |
111 # general |
109 # general |
112 self.clientIdEdit.setText(options["ClientId"]) |
110 self.clientIdEdit.setText(options["ClientId"]) |
|
111 self.mqttv31Button.setChecked( |
|
112 options["Protocol"] == MqttProtocols.MQTTv31) |
|
113 self.mqttv311Button.setChecked( |
|
114 options["Protocol"] == MqttProtocols.MQTTv311) |
|
115 self.mqttv5Button.setChecked( |
|
116 options["Protocol"] == MqttProtocols.MQTTv5) |
113 self.connectionTimeoutSpinBox.setValue(options["ConnectionTimeout"]) |
117 self.connectionTimeoutSpinBox.setValue(options["ConnectionTimeout"]) |
114 self.keepaliveSpinBox.setValue(options["Keepalive"]) |
118 self.keepaliveSpinBox.setValue(options["Keepalive"]) |
115 self.cleanSessionCheckBox.setChecked(options["CleanSession"]) |
119 self.cleanSessionCheckBox.setChecked(options["CleanSession"]) |
116 |
120 |
117 # user credentials |
121 # user credentials |
131 def getConnectionOptions(self): |
135 def getConnectionOptions(self): |
132 """ |
136 """ |
133 Public method get the entered connection options. |
137 Public method get the entered connection options. |
134 |
138 |
135 @return dictionary containing the connection options. It has the keys |
139 @return dictionary containing the connection options. It has the keys |
136 "ClientId", "Keepalive", "CleanSession", "Username", "Password", |
140 "ClientId", "Protocol", "ConnectionTimeout", "Keepalive", |
137 "WillTopic", "WillMessage", "WillQos", "WillRetain", "TlsEnable", |
141 "CleanSession", "Username", "Password", "WillTopic", "WillMessage", |
138 "TlsCaCert", "ConnectionTimeout". |
142 "WillQos", "WillRetain", "TlsEnable", "TlsCaCert". |
139 @rtype dict |
143 @rtype dict |
140 """ |
144 """ |
|
145 if self.mqttv31Button.isChecked(): |
|
146 protocol = MqttProtocols.MQTTv31 |
|
147 elif self.mqttv311Button.isChecked(): |
|
148 protocol = MqttProtocols.MQTTv311 |
|
149 elif self.mqttv5Button.isChecked(): |
|
150 protocol = MqttProtocols.MQTTv5 |
|
151 else: |
|
152 protocol = MqttProtocols.MQTTv311 |
|
153 |
141 return { |
154 return { |
142 "ClientId": self.clientIdEdit.text(), |
155 "ClientId": self.clientIdEdit.text(), |
|
156 "Protocol": protocol, |
143 "ConnectionTimeout": self.connectionTimeoutSpinBox.value(), |
157 "ConnectionTimeout": self.connectionTimeoutSpinBox.value(), |
144 "Keepalive": self.keepaliveSpinBox.value(), |
158 "Keepalive": self.keepaliveSpinBox.value(), |
145 "CleanSession": self.cleanSessionCheckBox.isChecked(), |
159 "CleanSession": self.cleanSessionCheckBox.isChecked(), |
146 "Username": self.usernameEdit.text(), |
160 "Username": self.usernameEdit.text(), |
147 "Password": pwConvert(self.passwordEdit.text(), encode=True), |
161 "Password": pwConvert(self.passwordEdit.text(), encode=True), |