Network/IRC/IrcNetworkManager.py

changeset 2236
e30d5f978919
parent 2235
266800cbe7cc
child 2237
baddb671c326
equal deleted inserted replaced
2235:266800cbe7cc 2236:e30d5f978919
65 65
66 @return identity name (string) 66 @return identity name (string)
67 """ 67 """
68 return self.__name 68 return self.__name
69 69
70 def getIdent(self):
71 """
72 Public method to get the real identity name.
73
74 Note: This methdo takes care of converting the default
75 identity name to the user's user name.
76
77 @return real identity name (string)
78 """
79 if self.__name == IrcIdentity.DefaultIdentityName:
80 return Utilities.getUserName()
81 else:
82 return self.__name
83
70 def setRealName(self, name): 84 def setRealName(self, name):
71 """ 85 """
72 Public method to set the real name of the identity. 86 Public method to set the real name of the identity.
73 87
74 @param name real name (string) 88 @param name real name (string)
128 Public method to get the password. 142 Public method to get the password.
129 143
130 @return password (string) 144 @return password (string)
131 """ 145 """
132 return pwConvert(self.__password, encode=False) 146 return pwConvert(self.__password, encode=False)
147
148 @classmethod
149 def createDefaultIdentity(cls):
150 """
151 Class method to create the default identity.
152
153 @return default identity (IrcIdentity)
154 """
155 userName = Utilities.getUserName()
156 identity = IrcIdentity(IrcIdentity.DefaultIdentityName)
157 identity.setNickNames([userName, userName + "_", userName + "__"])
158 identity.setRealName(userName)
159 return identity
133 160
134 161
135 class IrcServer(object): 162 class IrcServer(object):
136 """ 163 """
137 Class implementing the IRC identity object. 164 Class implementing the IRC identity object.
170 """ 197 """
171 self.__port = int(settings.value("Port", IrcServer.DefaultPort)) 198 self.__port = int(settings.value("Port", IrcServer.DefaultPort))
172 self.__ssl = Preferences.toBool(settings.value("SSL", False)) 199 self.__ssl = Preferences.toBool(settings.value("SSL", False))
173 self.__password = settings.value("Password", "") 200 self.__password = settings.value("Password", "")
174 201
175 def getServer(self): 202 def getName(self):
176 """ 203 """
177 Public method to get the server name. 204 Public method to get the server name.
178 205
179 @return server name (string) 206 @return server name (string)
180 """ 207 """
319 """ 346 """
320 super().__init__() 347 super().__init__()
321 348
322 self.__name = name 349 self.__name = name
323 self.__identity = "" 350 self.__identity = ""
324 self.__server = "" 351 self.__servers = {}
325 self.__channels = {} 352 self.__channels = {}
326 353
327 def save(self, settings): 354 def save(self, settings):
328 """ 355 """
329 Public method to save the network data. 356 Public method to save the network data.
330 357
331 @param settings reference to the settings object (QSettings) 358 @param settings reference to the settings object (QSettings)
332 """ 359 """
333 # no need to save the network name because that is the group key 360 # no need to save the network name because that is the group key
334 settings.setValue("Identity", self.__identity) 361 settings.setValue("Identity", self.__identity)
335 settings.setValue("Server", self.__server) 362
363 settings.beginGroup("Servers")
364 for key in self.__servers:
365 settings.beginGroup(key)
366 self.__servers[key].save(settings)
367 settings.endGroup()
368 settings.endGroup()
369
336 settings.beginGroup("Channels") 370 settings.beginGroup("Channels")
337 for key in self.__channels: 371 for key in self.__channels:
338 settings.beginGroup(key) 372 settings.beginGroup(key)
339 self.__channels[key].save(settings) 373 self.__channels[key].save(settings)
340 settings.endGroup() 374 settings.endGroup()
345 Public method to load the network data. 379 Public method to load the network data.
346 380
347 @param settings reference to the settings object (QSettings) 381 @param settings reference to the settings object (QSettings)
348 """ 382 """
349 self.__identity = settings.value("Identity", "") 383 self.__identity = settings.value("Identity", "")
350 self.__server = settings.value("Server", "") 384
385 settings.beginGroup("Servers")
386 for key in settings.childKeys():
387 self.__servers[key] = IrcServer(key)
388 settings.beginGroup(key)
389 self.__servers[key].load(settings)
390 settings.endGroup()
391 settings.endGroup()
392
351 settings.beginGroup("Channels") 393 settings.beginGroup("Channels")
352 for key in self.__channels: 394 for key in self.__channels:
353 self.__channels[key] = IrcChannel(key) 395 self.__channels[key] = IrcChannel(key)
354 settings.beginGroup(key) 396 settings.beginGroup(key)
355 self.__channels[key].load(settings) 397 self.__channels[key].load(settings)
378 420
379 @return identity name (string) 421 @return identity name (string)
380 """ 422 """
381 return self.__identity 423 return self.__identity
382 424
383 def setServerName(self, name): 425 def setServers(self, servers):
384 """ 426 """
385 Public method to set the server name. 427 Public method to set the list of servers.
386 428
387 @param name server name (string) 429 @param servers list of servers for the network (list of IrcServer)
388 """ 430 """
389 self.__server = name 431 self.__servers = {}
390 432 for server in servers:
391 def getServerName(self): 433 self.__servers[server.getName()] = server
392 """ 434
393 Public method to get the server name. 435 def getServers(self):
394 436 """
395 @return server name (string) 437 Public method to get the servers.
396 """ 438
397 return self.__server 439 @return list of servers for the network (list of IrcServer)
440 """
441 return list(self.__servers.values())
442
443 def getServerNames(self):
444 """
445 Public method to get a list of all known server names.
446
447 @return list of server names (list of string)
448 """
449 return list(sorted(self.__servers.keys()))
450
451 def getServer(self, name):
452 """
453 Public method to get a server object.
454
455 @param name name of the server to get (string)
456 @return reference to the server (IrcServer)
457 """
458 if name in self.__servers:
459 return self.__servers[name]
460 else:
461 return None
462
463 def setServer(self, server):
464 """
465 Public method to set a server.
466
467 @param server server object to set (IrcServer)
468 """
469 serverName = server.getName()
470 if serverName in self.__servers:
471 self.__servers[serverName] = server
472
473 def addServer(self, server):
474 """
475 Public method to add a server.
476
477 @param server server object to add (IrcServer)
478 """
479 serverName = server.getName()
480 if serverName not in self.__servers:
481 self.__servers[serverName] = server
398 482
399 def setChannels(self, channels): 483 def setChannels(self, channels):
400 """ 484 """
401 Public method to set the list of channels. 485 Public method to set the list of channels.
402 486
451 @param channel channel object to add (IrcChannel) 535 @param channel channel object to add (IrcChannel)
452 """ 536 """
453 channelName = channel.getName() 537 channelName = channel.getName()
454 if channelName not in self.__channels: 538 if channelName not in self.__channels:
455 self.__channels[channelName] = channel 539 self.__channels[channelName] = channel
540
541 def deleteChannel(self, channelName):
542 """
543 Public method to delete the given channel.
544
545 @param channelName name of the channel to be deleted (string)
546 """
547 if channelName in self.__channels:
548 del self.__channels[channelName]
549
550 @classmethod
551 def createDefaultNetwork(cls):
552 """
553 Class method to create the default network.
554
555 @return default network object (IrcNetwork)
556 """
557 # network
558 networkName = "Freenode"
559 network = IrcNetwork(networkName)
560 network.setIdentityName(IrcIdentity.DefaultIdentityName)
561
562 # server
563 serverName = "chat.freenode.net"
564 server = IrcServer(serverName)
565 server.setPort(8001)
566 network.addServer(server)
567
568 # channel
569 channel = IrcChannel("#eric-ide")
570 channel.setAutoJoin(False)
571 network.addChannel(channel)
572
573 return network
456 574
457 575
458 class IrcNetworkManager(QObject): 576 class IrcNetworkManager(QObject):
459 """ 577 """
460 Class implementing the IRC identity object. 578 Class implementing the IRC identity object.
478 596
479 self.__settings = Preferences.Prefs.settings 597 self.__settings = Preferences.Prefs.settings
480 598
481 self.__networks = {} 599 self.__networks = {}
482 self.__identities = {} 600 self.__identities = {}
483 self.__servers = {}
484 601
485 self.dataChanged.connect(self.__saveTimer.changeOccurred) 602 self.dataChanged.connect(self.__saveTimer.changeOccurred)
486 603
487 def close(self): 604 def close(self):
488 """ 605 """
503 # identities 620 # identities
504 self.__settings.beginGroup("Identities") 621 self.__settings.beginGroup("Identities")
505 for key in self.__identities: 622 for key in self.__identities:
506 self.__settings.beginGroup(key) 623 self.__settings.beginGroup(key)
507 self.__identities[key].save(self.__settings) 624 self.__identities[key].save(self.__settings)
508 self.__settings.endGroup()
509 self.__settings.endGroup()
510
511 # servers
512 self.__settings.beginGroup("Servers")
513 for key in self.__servers:
514 self.__settings.beginGroup(key)
515 self.__servers[key].save(self.__settings)
516 self.__settings.endGroup() 625 self.__settings.endGroup()
517 self.__settings.endGroup() 626 self.__settings.endGroup()
518 627
519 # networks 628 # networks
520 self.__settings.beginGroup("Networks") 629 self.__settings.beginGroup("Networks")
543 self.__settings.beginGroup(key) 652 self.__settings.beginGroup(key)
544 self.__identities[key].load(self.__settings) 653 self.__identities[key].load(self.__settings)
545 self.__settings.endGroup() 654 self.__settings.endGroup()
546 self.__settings.endGroup() 655 self.__settings.endGroup()
547 656
548 # servers
549 self.__settings.beginGroup("Servers")
550 for key in self.__settings.childKeys():
551 self.__servers[key] = IrcServer(key)
552 self.__settings.beginGroup(key)
553 self.__servers[key].load(self.__settings)
554 self.__settings.endGroup()
555 self.__settings.endGroup()
556
557 # networks 657 # networks
558 self.__settings.beginGroup("Networks") 658 self.__settings.beginGroup("Networks")
559 for key in self.__settings.childKeys(): 659 for key in self.__settings.childKeys():
560 self.__networks[key] = IrcNetwork(key) 660 self.__networks[key] = IrcNetwork(key)
561 self.__settings.beginGroup(key) 661 self.__settings.beginGroup(key)
587 self.__networks = {} 687 self.__networks = {}
588 self.__identities = {} 688 self.__identities = {}
589 self.__servers = {} 689 self.__servers = {}
590 690
591 # identity 691 # identity
592 userName = Utilities.getUserName() 692 identity = IrcIdentity.createDefaultIdentity()
593 identity = IrcIdentity(IrcIdentity.DefaultIdentityName) 693 self.__identities[identity.getName()] = identity
594 identity.setNickNames([userName, userName + "_", userName + "__"])
595 self.__identities[IrcIdentity.DefaultIdentityName] = identity
596 694
597 if not identityOnly: 695 if not identityOnly:
598 # server 696 network = IrcNetwork.createDefaultNetwork()
599 serverName = "chat.freenode.net" 697 self.__networks[network.getName()] = network
600 server = IrcServer(serverName)
601 server.setPort(8001)
602 self.__servers[serverName] = server
603
604 # network
605 networkName = "Freenode"
606 network = IrcNetwork(networkName)
607 network.setIdentityName(IrcIdentity.DefaultIdentityName)
608 network.setServerName(serverName)
609 channel = IrcChannel("#eric-ide")
610 channel.setAutoJoin(False)
611 network.addChannel(channel)
612 self.__networks[networkName] = network
613 698
614 self.dataChanged.emit() 699 self.dataChanged.emit()
700
701 ##################################################################
702 ## Identity related methods below
703 ##################################################################
615 704
616 def getIdentity(self, name, create=False): 705 def getIdentity(self, name, create=False):
617 """ 706 """
618 Public method to get an identity object. 707 Public method to get an identity object.
619 708
689 """ 778 """
690 Public method to indicate a change of an identity object. 779 Public method to indicate a change of an identity object.
691 """ 780 """
692 self.dataChanged.emit() 781 self.dataChanged.emit()
693 782
694 # TODO: move server to network because it belongs there 783 ##################################################################
695 def getServer(self, name, create=False): 784 ## Network related methods below
696 """ 785 ##################################################################
697 Public method to get a server object.
698
699 @param name name of the server to get (string)
700 @param create flag indicating to create a new object,
701 if none exists (boolean)
702 @return reference to the server (IrcServer)
703 """
704 if not name:
705 return None
706
707 if not self.__loaded:
708 self.__load()
709
710 if name in self.__servers:
711 return self.__servers[name]
712 elif create:
713 server = IrcServer(name)
714 self.__servers[name] = server
715
716 self.dataChanged.emit()
717
718 return server
719 else:
720 return None
721
722 def serverChanged(self):
723 """
724 Public method to indicate a change of a server object.
725 """
726 self.dataChanged.emit()
727
728 def getServerNames(self):
729 """
730 Public method to get a list of all known server names.
731
732 @return list of server names (list of string)
733 """
734 if not self.__loaded:
735 self.__load()
736
737 return list(sorted(self.__servers.keys()))
738 786
739 def getNetwork(self, name): 787 def getNetwork(self, name):
740 """ 788 """
741 Public method to get a network object. 789 Public method to get a network object.
742 790
749 if name in self.__networks: 797 if name in self.__networks:
750 return self.__networks[name] 798 return self.__networks[name]
751 else: 799 else:
752 return None 800 return None
753 801
802 def setNetwork(self, network):
803 """
804 Public method to set a network.
805
806 @param network network object to set (IrcNetwork)
807 """
808 name = network.getName()
809 if name in self.__networks:
810 self.__networks[name] = network
811 self.networkChanged()
812
754 # TODO: check, if this method is needed 813 # TODO: check, if this method is needed
755 def createNetwork(self, name, identity, server, channels=None): 814 ## def createNetwork(self, name, identity, server, channels=None):
756 """ 815 ## """
757 Public method to create a new network object. 816 ## Public method to create a new network object.
758 817 ##
759 @param name name of the network (string) 818 ## @param name name of the network (string)
760 @param identity reference to an identity object to associate with 819 ## @param identity reference to an identity object to associate with
761 this network (IrcIdentity) 820 ## this network (IrcIdentity)
762 @param server reference to a server object to associate with this 821 ## @param server reference to a server object to associate with this
763 network (IrcServer) 822 ## network (IrcServer)
764 @param channels list of channels for the network (list of IrcChannel) 823 ## @param channels list of channels for the network (list of IrcChannel)
765 @return reference to the created network object (IrcNetwork) 824 ## @return reference to the created network object (IrcNetwork)
766 """ 825 ## """
767 if not self.__loaded: 826 ## if not self.__loaded:
768 self.__load() 827 ## self.__load()
769 828 ##
770 if name in self.__networks: 829 ## if name in self.__networks:
771 return None 830 ## return None
772 831 ##
773 network = IrcNetwork(name) 832 ## network = IrcNetwork(name)
774 network.setIdentityName(identity.getName()) 833 ## network.setIdentityName(identity.getName())
775 network.setServerName(server.getServer()) 834 #### network.setServerName(server.getServer())
776 # TODO: change this 835 #### network.setChannels(channels[:])
777 network.setChannels(channels[:]) 836 #### network.setAutoJoinChannels(autoJoinChannels)
778 ## network.setAutoJoinChannels(autoJoinChannels) 837 ## self.__networks[name] = network
779 self.__networks[name] = network 838 ##
780 839 ## self.networkChanged()
781 self.networkChanged() 840 ##
782 841 ## return network
783 return network 842 ##
784
785 def deleteNetwork(self, name): 843 def deleteNetwork(self, name):
786 """ 844 """
787 Public method to delete the given network. 845 Public method to delete the given network.
788 846
789 @param name name of the network to delete (string) 847 @param name name of the network to delete (string)

eric ide

mercurial