@@ -136,7 +136,8 @@ def showEvent(self, event):
136136 oldUid = self .uidCombo .currentText ()
137137 self .ifaceCombo .clear ()
138138 self .uidCombo .clear ()
139- if self ._nodes .is_local (self .nodesCombo .currentText ()):
139+ addr = self .get_node_addr ()
140+ if addr is not None and self ._nodes .is_local (addr ):
140141 self .ifaceCombo .addItems (NetworkInterfaces .list ().keys ())
141142 try :
142143 for ip in NetworkInterfaces .list ().values ():
@@ -277,7 +278,8 @@ def _cb_save_clicked(self):
277278 if rule_name == "" :
278279 return
279280
280- node = self .nodesCombo .currentText ()
281+ #node = self.nodesCombo.currentText()
282+ node = self .get_node_addr ()
281283 # avoid to overwrite rules when:
282284 # - adding a new rule.
283285 # - when a rule is renamed, i.e., the rule is edited or added and the
@@ -431,15 +433,19 @@ def _is_valid_regex(self, regex):
431433 def _is_valid_list_path (self , listWidget ):
432434 if listWidget .text () == "" :
433435 return QC .translate ("rules" , "Lists field cannot be empty" )
434- if self ._nodes .is_local (self .nodesCombo . currentText ()) and \
436+ if self ._nodes .is_local (self .get_node_addr ()) and \
435437 self .nodeApplyAllCheck .isChecked () == False and \
436438 os .path .isdir (listWidget .text ()) == False :
437439 return QC .translate ("rules" , "Lists field must be a directory" )
438440
439441 return None
440442
441443 def set_fields_from_connection (self , records ):
442- self .nodesCombo .setCurrentText (records .value (ConnFields .Node ))
444+ nIdx = self .nodesCombo .findData (records .value (ConnFields .Node ))
445+ if nIdx == - 1 :
446+ self .set_status_error ("Unable to load connection, unknown node? ({0})" .format (nIdx ))
447+ return
448+ self .nodesCombo .setCurrentIndex (nIdx )
443449 self .protoCombo .setCurrentText (records .value (ConnFields .Protocol ).upper ())
444450 self .srcIPCombo .setCurrentText (records .value (ConnFields .SrcIP ))
445451 self .dstIPCombo .setCurrentText (records .value (ConnFields .DstIP ))
@@ -691,7 +697,7 @@ def _load_nodes(self, addr=None):
691697 self .nodesCombo .clear ()
692698 self ._node_list = self ._nodes .get ()
693699
694- if addr != None and addr not in self ._node_list :
700+ if addr is not None and addr not in self ._node_list :
695701 Message .ok (QC .translate ("rules" , "<b>Error loading rule</b>" ),
696702 QC .translate ("rules" , "node {0} not connected" .format (addr )),
697703 QtWidgets .QMessageBox .Icon .Warning )
@@ -701,10 +707,12 @@ def _load_nodes(self, addr=None):
701707 self .nodeApplyAllCheck .setVisible (False )
702708
703709 for node in self ._node_list :
704- self .nodesCombo .addItem (node )
710+ hostname = self ._nodes .get_node_hostname (node )
711+ self .nodesCombo .addItem (f"{ node } - { hostname } " , node )
705712
706- if addr != None :
707- self .nodesCombo .setCurrentText (addr )
713+ nIdx = self .nodesCombo .findData (addr )
714+ if nIdx != - 1 :
715+ self .nodesCombo .setCurrentIndex (nIdx )
708716
709717 showNodes = len (self ._node_list ) > 1
710718 self .nodesCombo .setVisible (showNodes )
@@ -716,18 +724,24 @@ def _load_nodes(self, addr=None):
716724
717725 return True
718726
727+ def get_node_addr (self ):
728+ nIdx = self .nodesCombo .currentIndex ()
729+ addr = self .nodesCombo .itemData (nIdx )
730+ return addr
731+
719732 def _insert_rule_to_db (self , node_addr ):
720733 # the order of the fields doesn't matter here, as long as we use the
721734 # name of the field.
722735 self ._rules .add_rules (node_addr , [self .rule ])
723736
724737 def _add_rule (self ):
725738 try :
739+ addr = self .get_node_addr ()
726740 if self .nodeApplyAllCheck .isChecked ():
727- for pos in range (self .nodesCombo .count ()):
728- self ._insert_rule_to_db (self .nodesCombo .itemText ( pos ))
741+ for idx in range (self .nodesCombo .count ()):
742+ self ._insert_rule_to_db (self .nodesCombo .itemData ( idx ))
729743 else :
730- self ._insert_rule_to_db (self . nodesCombo . currentText () )
744+ self ._insert_rule_to_db (addr )
731745
732746 notif = ui_pb2 .Notification (
733747 id = int (str (time .time ()).replace ("." , "" )),
@@ -737,7 +751,7 @@ def _add_rule(self):
737751 if self .nodeApplyAllCheck .isChecked ():
738752 nid = self ._nodes .send_notifications (notif , self ._notification_callback )
739753 else :
740- nid = self ._nodes .send_notification (self . nodesCombo . currentText () , notif , self ._notification_callback )
754+ nid = self ._nodes .send_notification (addr , notif , self ._notification_callback )
741755
742756 self ._notifications_sent [nid ] = notif
743757 except Exception as e :
@@ -747,7 +761,7 @@ def _delete_rule(self):
747761 try :
748762 # if the rule name has changed, we need to remove the old one
749763 if self ._old_rule_name != self .rule .name :
750- node = self .nodesCombo . currentText ()
764+ node = self .get_node_addr ()
751765 old_rule = self .rule
752766 old_rule .name = self ._old_rule_name
753767 if self .nodeApplyAllCheck .isChecked ():
0 commit comments