src/eric7/Network/IRC/IrcNetworkManager.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 8881
54e42bc2437a
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the IRC data structures and their manager.
8 """
9
10 import copy
11
12 from PyQt6.QtCore import pyqtSignal, QObject, QCoreApplication
13
14 import Utilities
15 from Utilities.AutoSaver import AutoSaver
16 from Utilities.crypto import pwConvert
17 import Preferences
18
19
20 class IrcIdentity:
21 """
22 Class implementing the IRC identity object.
23 """
24 DefaultIdentityName = "0default"
25 DefaultIdentityDisplay = QCoreApplication.translate(
26 "IrcIdentity", "Default Identity")
27
28 DefaultAwayMessage = QCoreApplication.translate(
29 "IrcIdentity", "Gone away for now.")
30 DefaultQuitMessage = QCoreApplication.translate(
31 "IrcIdentity", "IRC for eric IDE")
32 DefaultPartMessage = QCoreApplication.translate(
33 "IrcIdentity", "IRC for eric IDE")
34
35 def __init__(self, name):
36 """
37 Constructor
38
39 @param name name of the identity (string)
40 """
41 super().__init__()
42
43 self.__name = name
44 self.__realName = ""
45 self.__nickNames = []
46 self.__serviceName = ""
47 self.__password = ""
48 self.__ident = Utilities.getUserName()
49
50 self.__rememberPosOnAway = True
51 self.__awayMessage = IrcIdentity.DefaultAwayMessage
52
53 self.__quitMessage = IrcIdentity.DefaultQuitMessage
54 self.__partMessage = IrcIdentity.DefaultPartMessage
55
56 def save(self, settings):
57 """
58 Public method to save the identity data.
59
60 @param settings reference to the settings object (QSettings)
61 """
62 # no need to save the name because that is the group key
63 settings.setValue("Ident", self.__ident)
64 settings.setValue("RealName", self.__realName)
65 settings.setValue("NickNames", self.__nickNames)
66 settings.setValue("ServiceName", self.__serviceName)
67 settings.setValue("Password", self.__password)
68 settings.setValue("QuitMessage", self.__quitMessage)
69 settings.setValue("PartMessage", self.__partMessage)
70 settings.setValue("RememberAwayPosition", self.__rememberPosOnAway)
71 settings.setValue("AwayMessage", self.__awayMessage)
72
73 def load(self, settings):
74 """
75 Public method to load the identity data.
76
77 @param settings reference to the settings object (QSettings)
78 """
79 self.__ident = settings.value("Ident", Utilities.getUserName())
80 self.__realName = settings.value("RealName", "")
81 self.__nickNames = Preferences.toList(settings.value("NickNames", []))
82 self.__serviceName = settings.value("ServiceName", "")
83 self.__password = settings.value("Password", "")
84 self.__quitMessage = settings.value(
85 "QuitMessage", IrcIdentity.DefaultQuitMessage)
86 self.__partMessage = settings.value(
87 "PartMessage", IrcIdentity.DefaultPartMessage)
88 self.__rememberPosOnAway = Preferences.toBool(
89 settings.value("RememberAwayPosition", True))
90 self.__awayMessage = settings.value(
91 "AwayMessage", IrcIdentity.DefaultAwayMessage)
92
93 def setName(self, name):
94 """
95 Public method to set the identity name.
96
97 @param name identity name (string)
98 """
99 self.__name = name
100
101 def getName(self):
102 """
103 Public method to get the identity name.
104
105 @return identity name (string)
106 """
107 return self.__name
108
109 def setIdent(self, name):
110 """
111 Public method to set the real identity name.
112
113 @param name real identity name (string)
114 """
115 self.__ident = name
116
117 def getIdent(self):
118 """
119 Public method to get the real identity name.
120
121 @return real identity name (string)
122 """
123 return self.__ident
124
125 def setRealName(self, name):
126 """
127 Public method to set the real name of the identity.
128
129 @param name real name (string)
130 """
131 self.__realName = name
132
133 def getRealName(self):
134 """
135 Public method to get the real name.
136
137 @return real name (string)
138 """
139 return self.__realName
140
141 def setNickNames(self, names):
142 """
143 Public method to set the nick names of the identity.
144
145 @param names nick names (list of string)
146 """
147 self.__nickNames = names[:]
148
149 def getNickNames(self):
150 """
151 Public method to get the nick names.
152
153 @return nick names (list of string)
154 """
155 return self.__nickNames
156
157 def setServiceName(self, name):
158 """
159 Public method to set the service name of the identity used for
160 identification.
161
162 @param name service name (string)
163 """
164 self.__serviceName = name
165
166 def getServiceName(self):
167 """
168 Public method to get the service name of the identity used for
169 identification.
170
171 @return service name (string)
172 """
173 return self.__serviceName
174
175 def setPassword(self, password):
176 """
177 Public method to set a new password.
178
179 @param password password to set (string)
180 """
181 self.__password = pwConvert(password, encode=True)
182
183 def getPassword(self):
184 """
185 Public method to get the password.
186
187 @return password (string)
188 """
189 return pwConvert(self.__password, encode=False)
190
191 def setQuitMessage(self, message):
192 """
193 Public method to set the QUIT message.
194
195 @param message QUIT message (string)
196 """
197 if message:
198 self.__quitMessage = message
199 else:
200 self.__quitMessage = IrcIdentity.DefaultQuitMessage
201
202 def getQuitMessage(self):
203 """
204 Public method to get the QUIT message.
205
206 @return QUIT message (string)
207 """
208 return self.__quitMessage
209
210 def setPartMessage(self, message):
211 """
212 Public method to set the PART message.
213
214 @param message PART message (string)
215 """
216 if message:
217 self.__partMessage = message
218 else:
219 self.__partMessage = IrcIdentity.DefaultPartMessage
220
221 def getPartMessage(self):
222 """
223 Public method to get the PART message.
224
225 @return PART message (string)
226 """
227 return self.__partMessage
228
229 def setRememberAwayPosition(self, remember):
230 """
231 Public method to set to remember the chat position upon AWAY.
232
233 @param remember flag indicating to remember the chat position (boolean)
234 """
235 self.__rememberPosOnAway = remember
236
237 def rememberAwayPosition(self):
238 """
239 Public method to get a flag indicating to remember the chat position
240 upon AWAY.
241
242 @return flag indicating to remember the chat position (boolean)
243 """
244 return self.__rememberPosOnAway
245
246 def setAwayMessage(self, message):
247 """
248 Public method to set the AWAY message.
249
250 @param message AWAY message (string)
251 """
252 if message:
253 self.__awayMessage = message
254 else:
255 self.__awayMessage = IrcIdentity.DefaultAwayMessage
256
257 def getAwayMessage(self):
258 """
259 Public method to get the AWAY message.
260
261 @return AWAY message (string)
262 """
263 return self.__awayMessage
264
265 @classmethod
266 def createDefaultIdentity(cls):
267 """
268 Class method to create the default identity.
269
270 @return default identity (IrcIdentity)
271 """
272 userName = Utilities.getUserName()
273 realName = Utilities.getRealName()
274 if not realName:
275 realName = "eric IDE chat"
276 identity = IrcIdentity(IrcIdentity.DefaultIdentityName)
277 identity.setNickNames([userName, userName + "_", userName + "__"])
278 identity.setRealName(realName)
279 identity.setIdent(userName)
280 return identity
281
282
283 class IrcServer:
284 """
285 Class implementing the IRC identity object.
286 """
287 DefaultPort = 6667
288 DefaultSslPort = 6697
289
290 def __init__(self, name):
291 """
292 Constructor
293
294 @param name name of the server (string)
295 """
296 super().__init__()
297
298 self.__server = name
299 self.__port = IrcServer.DefaultPort
300 self.__ssl = False
301 self.__password = ""
302
303 def save(self, settings):
304 """
305 Public method to save the server data.
306
307 @param settings reference to the settings object (QSettings)
308 """
309 settings.setValue("Name", self.__server)
310 settings.setValue("Port", self.__port)
311 settings.setValue("SSL", self.__ssl)
312 settings.setValue("Password", self.__password)
313
314 def load(self, settings):
315 """
316 Public method to load the server data.
317
318 @param settings reference to the settings object (QSettings)
319 """
320 self.__server = settings.value("Name", "")
321 self.__port = int(settings.value("Port", IrcServer.DefaultPort))
322 self.__ssl = Preferences.toBool(settings.value("SSL", False))
323 self.__password = settings.value("Password", "")
324
325 def getName(self):
326 """
327 Public method to get the server name.
328
329 @return server name (string)
330 """
331 return self.__server
332
333 def setName(self, name):
334 """
335 Public method to set the server name.
336
337 @param name server name (string)
338 """
339 self.__server = name
340
341 def getPort(self):
342 """
343 Public method to get the server port number.
344
345 @return port number (integer)
346 """
347 return self.__port
348
349 def setPort(self, port):
350 """
351 Public method to set the server port number.
352
353 @param port server port number (integer)
354 """
355 self.__port = port
356
357 def useSSL(self):
358 """
359 Public method to check for SSL usage.
360
361 @return flag indicating SSL usage (boolean)
362 """
363 return self.__ssl
364
365 def setUseSSL(self, on):
366 """
367 Public method to set the SSL usage.
368
369 @param on flag indicating SSL usage (boolean)
370 """
371 self.__ssl = on
372
373 def setPassword(self, password):
374 """
375 Public method to set a new password.
376
377 @param password password to set (string)
378 """
379 self.__password = pwConvert(password, encode=True)
380
381 def getPassword(self):
382 """
383 Public method to get the password.
384
385 @return password (string)
386 """
387 return pwConvert(self.__password, encode=False)
388
389
390 class IrcChannel:
391 """
392 Class implementing the IRC channel object.
393 """
394 def __init__(self, name):
395 """
396 Constructor
397
398 @param name name of the network (string)
399 """
400 super().__init__()
401
402 self.__name = name
403 self.__key = ""
404 self.__autoJoin = False
405
406 def save(self, settings):
407 """
408 Public method to save the channel data.
409
410 @param settings reference to the settings object (QSettings)
411 """
412 # no need to save the channel name because that is the group key
413 settings.setValue("Key", self.__key)
414 settings.setValue("AutoJoin", self.__autoJoin)
415
416 def load(self, settings):
417 """
418 Public method to load the network data.
419
420 @param settings reference to the settings object (QSettings)
421 """
422 self.__key = settings.value("Key", "")
423 self.__autoJoin = Preferences.toBool(settings.value("AutoJoin", False))
424
425 def getName(self):
426 """
427 Public method to get the channel name.
428
429 @return channel name (string)
430 """
431 return self.__name
432
433 def setKey(self, key):
434 """
435 Public method to set a new channel key.
436
437 @param key channel key to set (string)
438 """
439 self.__key = pwConvert(key, encode=True)
440
441 def getKey(self):
442 """
443 Public method to get the channel key.
444
445 @return channel key (string)
446 """
447 return pwConvert(self.__key, encode=False)
448
449 def autoJoin(self):
450 """
451 Public method to check the auto join status.
452
453 @return flag indicating if the channel should be
454 joined automatically (boolean)
455 """
456 return self.__autoJoin
457
458 def setAutoJoin(self, enable):
459 """
460 Public method to set the auto join status of the channel.
461
462 @param enable flag indicating if the channel should be
463 joined automatically (boolean)
464 """
465 self.__autoJoin = enable
466
467
468 class IrcNetwork:
469 """
470 Class implementing the IRC network object.
471 """
472 def __init__(self, name):
473 """
474 Constructor
475
476 @param name name of the network (string)
477 """
478 super().__init__()
479
480 self.__name = name
481 self.__identity = ""
482 self.__server = None
483 self.__channels = {}
484 self.__autoConnect = False
485
486 def save(self, settings):
487 """
488 Public method to save the network data.
489
490 @param settings reference to the settings object (QSettings)
491 """
492 # no need to save the network name because that is the group key
493 settings.setValue("Identity", self.__identity)
494 settings.setValue("AutoConnect", self.__autoConnect)
495
496 settings.beginGroup("Server")
497 self.__server.save(settings)
498 settings.endGroup()
499
500 settings.beginGroup("Channels")
501 for key in self.__channels:
502 settings.beginGroup(key)
503 self.__channels[key].save(settings)
504 settings.endGroup()
505 settings.endGroup()
506
507 def load(self, settings):
508 """
509 Public method to load the network data.
510
511 @param settings reference to the settings object (QSettings)
512 """
513 self.__identity = settings.value("Identity", "")
514 self.__autoConnect = Preferences.toBool(
515 settings.value("AutoConnect", False))
516
517 settings.beginGroup("Server")
518 self.__server = IrcServer("")
519 self.__server.load(settings)
520 settings.endGroup()
521
522 settings.beginGroup("Channels")
523 for key in settings.childGroups():
524 self.__channels[key] = IrcChannel(key)
525 settings.beginGroup(key)
526 self.__channels[key].load(settings)
527 settings.endGroup()
528 settings.endGroup()
529
530 def setName(self, name):
531 """
532 Public method to set the network name.
533
534 @param name network name (string)
535 """
536 self.__name = name
537
538 def getName(self):
539 """
540 Public method to get the network name.
541
542 @return network name (string)
543 """
544 return self.__name
545
546 def setIdentityName(self, name):
547 """
548 Public method to set the name of the identity.
549
550 @param name identity name (string)
551 """
552 self.__identity = name
553
554 def getIdentityName(self):
555 """
556 Public method to get the name of the identity.
557
558 @return identity name (string)
559 """
560 return self.__identity
561
562 def getServerName(self):
563 """
564 Public method to get the server name.
565
566 @return server name (string)
567 """
568 if self.__server:
569 return self.__server.getName()
570 else:
571 return ""
572
573 def getServer(self):
574 """
575 Public method to get the server object.
576
577 @return reference to the server (IrcServer)
578 """
579 return self.__server
580
581 def setServer(self, server):
582 """
583 Public method to set the server.
584
585 @param server server object to set (IrcServer)
586 """
587 self.__server = server
588
589 def setChannels(self, channels):
590 """
591 Public method to set the list of channels.
592
593 @param channels list of channels for the network (list of IrcChannel)
594 """
595 self.__channels = {}
596 for channel in channels:
597 self.__channels[channel.getName()] = channel
598
599 def getChannels(self):
600 """
601 Public method to get the channels.
602
603 @return list of channels for the network (list of IrcChannel)
604 """
605 return list(copy.deepcopy(self.__channels).values())
606
607 def getChannelNames(self):
608 """
609 Public method to get the list of channels.
610
611 @return list of channel names (list of string)
612 """
613 return sorted(self.__channels.keys())
614
615 def getChannel(self, channelName):
616 """
617 Public method to get a channel.
618
619 @param channelName name of the channel to retrieve (string)
620 @return reference to the channel (IrcChannel)
621 """
622 if channelName in self.__channels:
623 return self.__channels[channelName]
624 else:
625 return None
626
627 def setChannel(self, channel):
628 """
629 Public method to set a channel.
630
631 @param channel channel object to set (IrcChannel)
632 """
633 channelName = channel.getName()
634 if channelName in self.__channels:
635 self.__channels[channelName] = channel
636
637 def addChannel(self, channel):
638 """
639 Public method to add a channel.
640
641 @param channel channel object to add (IrcChannel)
642 """
643 channelName = channel.getName()
644 if channelName not in self.__channels:
645 self.__channels[channelName] = channel
646
647 def deleteChannel(self, channelName):
648 """
649 Public method to delete the given channel.
650
651 @param channelName name of the channel to be deleted (string)
652 """
653 if channelName in self.__channels:
654 del self.__channels[channelName]
655
656 def setAutoConnect(self, enable):
657 """
658 Public method to set the auto connect flag.
659
660 @param enable flag indicate to connect to the network at start-up.
661 """
662 self.__autoConnect = enable
663
664 def autoConnect(self):
665 """
666 Public method to check, if the network should be connected to at
667 start-up.
668
669 @return flag indicating an auto connect (boolean)
670 """
671 return self.__autoConnect
672
673 @classmethod
674 def createDefaultNetwork(cls, ssl=False):
675 """
676 Class method to create the default network.
677
678 @param ssl flag indicating to create a SSL network configuration
679 (boolean)
680 @return default network object (IrcNetwork)
681 """
682 # network
683 networkName = "libera.chat (SSL)" if ssl else "libera.chat"
684 network = IrcNetwork(networkName)
685 network.setIdentityName(IrcIdentity.DefaultIdentityName)
686
687 # server
688 serverName = "irc.libera.chat"
689 server = IrcServer(serverName)
690 if ssl:
691 server.setPort(IrcServer.DefaultSslPort)
692 server.setUseSSL(True)
693 else:
694 server.setPort(IrcServer.DefaultPort)
695 network.setServer(server)
696
697 # channel
698 channel = IrcChannel("#eric-ide")
699 channel.setAutoJoin(False)
700 network.addChannel(channel)
701
702 # auto connect
703 network.setAutoConnect(False)
704
705 return network
706
707
708 class IrcNetworkManager(QObject):
709 """
710 Class implementing the IRC identity object.
711
712 @signal dataChanged() emitted after some data has changed
713 @signal networksChanged() emitted after a network object has changed
714 @signal identitiesChanged() emitted after an identity object has changed
715 """
716 dataChanged = pyqtSignal()
717 networksChanged = pyqtSignal()
718 identitiesChanged = pyqtSignal()
719
720 def __init__(self, parent=None):
721 """
722 Constructor
723
724 @param parent reference to the parent object (QObject)
725 """
726 super().__init__(parent)
727
728 self.__loaded = False
729 self.__saveTimer = AutoSaver(self, self.save)
730
731 self.__settings = Preferences.getSettings()
732
733 self.__networks = {}
734 self.__identities = {}
735
736 self.dataChanged.connect(self.__saveTimer.changeOccurred)
737
738 def close(self):
739 """
740 Public method to close the open search engines manager.
741 """
742 self.__saveTimer.saveIfNeccessary()
743
744 def save(self):
745 """
746 Public slot to save the IRC data.
747 """
748 if not self.__loaded:
749 return
750
751 # save IRC data
752 self.__settings.beginGroup("IRC")
753
754 # identities
755 self.__settings.remove("Identities")
756 self.__settings.beginGroup("Identities")
757 for key in self.__identities:
758 self.__settings.beginGroup(key)
759 self.__identities[key].save(self.__settings)
760 self.__settings.endGroup()
761 self.__settings.endGroup()
762
763 # networks
764 self.__settings.remove("Networks")
765 self.__settings.beginGroup("Networks")
766 for key in self.__networks:
767 self.__settings.beginGroup(key)
768 self.__networks[key].save(self.__settings)
769 self.__settings.endGroup()
770 self.__settings.endGroup()
771
772 self.__settings.endGroup()
773
774 def __load(self):
775 """
776 Private slot to load the IRC data.
777 """
778 if self.__loaded:
779 return
780
781 # load IRC data
782 self.__settings.beginGroup("IRC")
783
784 # identities
785 self.__settings.beginGroup("Identities")
786 for key in self.__settings.childGroups():
787 self.__identities[key] = IrcIdentity(key)
788 self.__settings.beginGroup(key)
789 self.__identities[key].load(self.__settings)
790 self.__settings.endGroup()
791 self.__settings.endGroup()
792
793 # networks
794 self.__settings.beginGroup("Networks")
795 for key in self.__settings.childGroups():
796 self.__networks[key] = IrcNetwork(key)
797 self.__settings.beginGroup(key)
798 self.__networks[key].load(self.__settings)
799 self.__settings.endGroup()
800 self.__settings.endGroup()
801
802 self.__settings.endGroup()
803
804 if not self.__identities or not self.__networks:
805 # data structures got corrupted; load defaults
806 self.__loadDefaults()
807
808 if IrcIdentity.DefaultIdentityName not in self.__identities:
809 self.__loadDefaults(identityOnly=True)
810
811 self.__loaded = True
812
813 def __loadDefaults(self, identityOnly=False):
814 """
815 Private method to load default values.
816
817 @param identityOnly flag indicating to just load the default
818 identity (boolean)
819 """
820 if not identityOnly:
821 self.__networks = {}
822 self.__identities = {}
823
824 # identity
825 identity = IrcIdentity.createDefaultIdentity()
826 self.__identities[identity.getName()] = identity
827
828 if not identityOnly:
829 network = IrcNetwork.createDefaultNetwork()
830 self.__networks[network.getName()] = network
831 network = IrcNetwork.createDefaultNetwork(True)
832 self.__networks[network.getName()] = network
833
834 self.dataChanged.emit()
835
836 ##################################################################
837 ## Identity related methods below
838 ##################################################################
839
840 def getIdentity(self, name, create=False):
841 """
842 Public method to get an identity object.
843
844 @param name name of the identity to get (string)
845 @param create flag indicating to create a new object,
846 if none exists (boolean)
847 @return reference to the identity (IrcIdentity)
848 """
849 if not name:
850 return None
851
852 if not self.__loaded:
853 self.__load()
854
855 if name in self.__identities:
856 return self.__identities[name]
857 elif create:
858 ircId = IrcIdentity(name)
859 self.__identities[name] = ircId
860
861 self.dataChanged.emit()
862
863 return ircId
864 else:
865 return None
866
867 def getIdentities(self):
868 """
869 Public method to get a copy of all identities.
870
871 @return dictionary of all identities (dict of IrcIdentity)
872 """
873 return copy.deepcopy(self.__identities)
874
875 def setIdentities(self, identities):
876 """
877 Public method to set the identities.
878
879 @param identities dictionary of all identities (dict of IrcIdentity)
880 """
881 self.__identities = copy.deepcopy(identities)
882 self.identityChanged()
883
884 # Check all networks, if the identity they use is still available.
885 # If it isn't, change them to use the default identity.
886 for network in self.__networks.values():
887 if network.getIdentityName() not in self.__identities:
888 network.setIdentityName(IrcIdentity.DefaultIdentityName)
889
890 def getIdentityNames(self):
891 """
892 Public method to get the names of all identities.
893
894 @return names of all identities (list of string)
895 """
896 return list(self.__identities.keys())
897
898 def addIdentity(self, identity):
899 """
900 Public method to add a new identity.
901
902 @param identity reference to the identity to add (IrcIdentity)
903 """
904 name = identity.getName()
905 self.__identities[name] = identity
906 self.identityChanged()
907
908 def deleteIdentity(self, name):
909 """
910 Public method to delete the given identity.
911
912 @param name name of the identity to delete (string)
913 """
914 if (
915 name in self.__identities and
916 name != IrcIdentity.DefaultIdentityName
917 ):
918 del self.__identities[name]
919 self.identityChanged()
920
921 def renameIdentity(self, oldName, newName):
922 """
923 Public method to rename an identity.
924
925 @param oldName old name of the identity (string)
926 @param newName new name of the identity (string)
927 """
928 if oldName in self.__identities:
929 self.__identities[newName] = self.__identities[oldName]
930 del self.__identities[oldName]
931
932 for network in self.__networks:
933 if network.getIdentityName() == oldName:
934 network.setIdentityName(newName)
935
936 self.identityChanged()
937
938 def identityChanged(self):
939 """
940 Public method to indicate a change of an identity object.
941 """
942 self.dataChanged.emit()
943 self.identitiesChanged.emit()
944
945 ##################################################################
946 ## Network related methods below
947 ##################################################################
948
949 def getNetwork(self, name):
950 """
951 Public method to get a network object.
952
953 @param name name of the network (string)
954 @return reference to the network object (IrcNetwork)
955 """
956 if not self.__loaded:
957 self.__load()
958
959 if name in self.__networks:
960 return self.__networks[name]
961 else:
962 return None
963
964 def setNetwork(self, network, networkName=""):
965 """
966 Public method to set a network.
967
968 @param network network object to set (IrcNetwork)
969 @param networkName name the network was known for (string)
970 """
971 name = network.getName()
972 if networkName and name != networkName:
973 # the network name has changed
974 self.deleteNetwork(networkName)
975 self.addNetwork(network)
976 elif name in self.__networks:
977 self.__networks[name] = network
978 self.networkChanged()
979
980 def addNetwork(self, network):
981 """
982 Public method to add a network.
983
984 @param network network object to add (IrcNetwork)
985 """
986 name = network.getName()
987 if name not in self.__networks:
988 self.__networks[name] = network
989 self.networkChanged()
990
991 def deleteNetwork(self, name):
992 """
993 Public method to delete the given network.
994
995 @param name name of the network to delete (string)
996 """
997 if name in self.__networks:
998 del self.__networks[name]
999 self.networkChanged()
1000
1001 def networkChanged(self):
1002 """
1003 Public method to indicate a change of a network object.
1004 """
1005 self.dataChanged.emit()
1006 self.networksChanged.emit()
1007
1008 def getNetworkNames(self):
1009 """
1010 Public method to get a list of all known network names.
1011
1012 @return list of network names (list of string)
1013 """
1014 if not self.__loaded:
1015 self.__load()
1016
1017 return sorted(self.__networks.keys())

eric ide

mercurial