Fri, 30 Nov 2012 20:14:50 +0100
Continued with the IRC management.
--- a/Network/IRC/IrcNetworkEditDialog.py Thu Nov 29 20:02:43 2012 +0100 +++ b/Network/IRC/IrcNetworkEditDialog.py Fri Nov 30 20:14:50 2012 +0100 @@ -67,7 +67,7 @@ self.identityCombo.setCurrentIndex(index) # servers - self.serverEdit.setText(self.__network.getServerNames()[0]) + self.serverEdit.setText(self.__network.getServerName()) # channels for channelName in sorted(self.__network.getChannelNames()):
--- a/Network/IRC/IrcNetworkListDialog.py Thu Nov 29 20:02:43 2012 +0100 +++ b/Network/IRC/IrcNetworkListDialog.py Fri Nov 30 20:14:50 2012 +0100 @@ -38,10 +38,13 @@ for networkName in networkNames: topitm = QTreeWidgetItem(self.networksList, [networkName]) network = self.__manager.getNetwork(networkName) - server = network.getServer(network.getServerNames()[0]) + server = network.getServer() identityName = network.getIdentityName() if identityName == IrcIdentity.DefaultIdentityName: identityName = IrcIdentity.DefaultIdentityDisplay + autoConnect = self.trUtf8("Yes") if network.autoConnect() \ + else self.trUtf8("No") + QTreeWidgetItem(topitm, [self.trUtf8("Identity"), identityName]) QTreeWidgetItem(topitm, @@ -49,6 +52,8 @@ server.getName(), server.getPort())]) QTreeWidgetItem(topitm, [self.trUtf8("Channels"), ", ".join(network.getChannelNames())]) + QTreeWidgetItem(topitm, + [self.trUtf8("Auto-Connect"), autoConnect]) topitm.setExpanded(True) self.__resizeColumns() @@ -75,6 +80,12 @@ self.editButton.setEnabled(enable) self.deleteButton.setEnabled(enable) + self.autoConnectButton.setEnabled(enable) + + if enable: + itm = self.networksList.selectedItems()[0] + check = self.__manager.getNetwork(itm.text(0)).autoConnect() + self.autoConnectButton.setChecked(check) @pyqtSlot() def on_networksList_itemSelectionChanged(self): @@ -135,3 +146,53 @@ Private slot handling the collapse of a top level item. """ self.__resizeColumns() + + @pyqtSlot(bool) + def on_autoConnectButton_clicked(self, checked): + """ + Private slot handling the auto-connect selection. + + @param checked flag indicating the state of the button (boolean) + """ + itm = self.networksList.selectedItems()[0] + if itm.parent() is None: + networkName = itm.text(0) + if checked: + # enable the selected network, disable all others + # step 1: update network objects + for name in self.__manager.getNetworkNames(): + network = self.__manager.getNetwork(networkName) + if name == networkName: + network.setAutoConnect(True) + else: + network.setAutoConnect(False) + self.__manager.networkChanged() + + # step 2: update list entries + for index in range(self.networksList.topLevelItemCount()): + titm = self.networksList.topLevelItem(index) + if titm.text(0) == networkName: + self.__setAutoConnectEntry(titm, True) + else: + self.__setAutoConnectEntry(titm, False) + else: + # step 1: update network object + network = self.__manager.getNetwork(networkName) + network.setAutoConnect(False) + self.__manager.networkChanged() + + # step 2: update list entry + self.__setAutoConnectEntry(itm, False) + + def __setAutoConnectEntry(self, itm, on): + """ + Private method to set the auto-connect entry of a network item. + + @param itm reference to the network item (QTreeWidgetItem) + @param on flag indicating the auto-connect state (boolean) + """ + autoConnect = self.trUtf8("Yes") if on else self.trUtf8("No") + for index in range(itm.childCount()): + citm = itm.child(index) + if citm.text(0) == self.trUtf8("Auto-Connect"): + citm.setText(1, autoConnect)
--- a/Network/IRC/IrcNetworkListDialog.ui Thu Nov 29 20:02:43 2012 +0100 +++ b/Network/IRC/IrcNetworkListDialog.ui Fri Nov 30 20:14:50 2012 +0100 @@ -76,6 +76,19 @@ </widget> </item> <item> + <widget class="QPushButton" name="autoConnectButton"> + <property name="toolTip"> + <string>Press to toggle the auto-connect flag of the selected network</string> + </property> + <property name="text"> + <string>Auto-Connect</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -107,6 +120,7 @@ <tabstop>newButton</tabstop> <tabstop>editButton</tabstop> <tabstop>deleteButton</tabstop> + <tabstop>autoConnectButton</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources/>
--- a/Network/IRC/IrcNetworkManager.py Thu Nov 29 20:02:43 2012 +0100 +++ b/Network/IRC/IrcNetworkManager.py Fri Nov 30 20:14:50 2012 +0100 @@ -55,7 +55,7 @@ @param settings reference to the settings object (QSettings) """ self.__realName = settings.value("RealName", "") - self.__nickNames = Preferences.toList(settings.value("NickNames"), []) + self.__nickNames = Preferences.toList(settings.value("NickNames", [])) self.__serviceName = settings.value("ServiceName", "") self.__password = settings.value("Password", "") @@ -184,7 +184,7 @@ @param settings reference to the settings object (QSettings) """ - # no need to save the server name because that is the group key + settings.setValue("Name", self.__server) settings.setValue("Port", self.__port) settings.setValue("SSL", self.__ssl) settings.setValue("Password", self.__password) @@ -195,6 +195,7 @@ @param settings reference to the settings object (QSettings) """ + self.__server = settings.value("Name", "") self.__port = int(settings.value("Port", IrcServer.DefaultPort)) self.__ssl = Preferences.toBool(settings.value("SSL", False)) self.__password = settings.value("Password", "") @@ -207,6 +208,14 @@ """ return self.__server + def setName(self, name): + """ + Public method to set the server name. + + @param name server name (string) + """ + self.__server = name + def getPort(self): """ Public method to get the server port number. @@ -289,7 +298,7 @@ @param settings reference to the settings object (QSettings) """ self.__key = settings.value("Key", "") - self.__autoJoin = Preferences.toBool(settings.value("AutoJoin"), False) + self.__autoJoin = Preferences.toBool(settings.value("AutoJoin", False)) def getName(self): """ @@ -348,8 +357,9 @@ self.__name = name self.__identity = "" - self.__servers = {} + self.__server = None self.__channels = {} + self.__autoConnect = False def save(self, settings): """ @@ -359,12 +369,10 @@ """ # no need to save the network name because that is the group key settings.setValue("Identity", self.__identity) + settings.setValue("AutoConnect", self.__autoConnect) - settings.beginGroup("Servers") - for key in self.__servers: - settings.beginGroup(key) - self.__servers[key].save(settings) - settings.endGroup() + settings.beginGroup("Server") + self.__server.save(settings) settings.endGroup() settings.beginGroup("Channels") @@ -381,17 +389,15 @@ @param settings reference to the settings object (QSettings) """ self.__identity = settings.value("Identity", "") + self.__autoConnect = Preferences.toBool(settings.value("AutoConnect", False)) - settings.beginGroup("Servers") - for key in settings.childKeys(): - self.__servers[key] = IrcServer(key) - settings.beginGroup(key) - self.__servers[key].load(settings) - settings.endGroup() + settings.beginGroup("Server") + self.__server = IrcServer("") + self.__server.load(settings) settings.endGroup() settings.beginGroup("Channels") - for key in self.__channels: + for key in settings.childGroups(): self.__channels[key] = IrcChannel(key) settings.beginGroup(key) self.__channels[key].load(settings) @@ -422,63 +428,32 @@ """ return self.__identity - def setServers(self, servers): - """ - Public method to set the list of servers. - - @param servers list of servers for the network (list of IrcServer) + def getServerName(self): """ - self.__servers = {} - for server in servers: - self.__servers[server.getName()] = server - - def getServers(self): - """ - Public method to get the servers. + Public method to get the server name. - @return list of servers for the network (list of IrcServer) + @return server name (string) """ - return list(self.__servers.values()) + if self.__server: + return self.__server.getName() + else: + return "" - def getServerNames(self): - """ - Public method to get a list of all known server names. - - @return list of server names (list of string) + def getServer(self): """ - return list(sorted(self.__servers.keys())) - - def getServer(self, name): - """ - Public method to get a server object. + Public method to get the server object. - @param name name of the server to get (string) @return reference to the server (IrcServer) """ - if name in self.__servers: - return self.__servers[name] - else: - return None + return self.__server def setServer(self, server): """ - Public method to set a server. + Public method to set the server. @param server server object to set (IrcServer) """ - serverName = server.getName() - if serverName in self.__servers: - self.__servers[serverName] = server - - def addServer(self, server): - """ - Public method to add a server. - - @param server server object to add (IrcServer) - """ - serverName = server.getName() - if serverName not in self.__servers: - self.__servers[serverName] = server + self.__server = server def setChannels(self, channels): """ @@ -547,6 +522,22 @@ if channelName in self.__channels: del self.__channels[channelName] + def setAutoConnect(self, enable): + """ + Public method to set the auto connect flag. + + @param enable flag indicate to connect to the network at start-up. + """ + self.__autoConnect = enable + + def autoConnect(self): + """ + Public method to check, if the network should be connected to at start-up. + + @return flag indicating an auto connect (boolean) + """ + return self.__autoConnect + @classmethod def createDefaultNetwork(cls): """ @@ -563,13 +554,16 @@ serverName = "chat.freenode.net" server = IrcServer(serverName) server.setPort(8001) - network.addServer(server) + network.setServer(server) # channel channel = IrcChannel("#eric-ide") channel.setAutoJoin(False) network.addChannel(channel) + # auto connect + network.setAutoConnect(False) + return network @@ -647,7 +641,7 @@ # identities self.__settings.beginGroup("Identities") - for key in self.__settings.childKeys(): + for key in self.__settings.childGroups(): self.__identities[key] = IrcIdentity(key) self.__settings.beginGroup(key) self.__identities[key].load(self.__settings) @@ -656,7 +650,7 @@ # networks self.__settings.beginGroup("Networks") - for key in self.__settings.childKeys(): + for key in self.__settings.childGroups(): self.__networks[key] = IrcNetwork(key) self.__settings.beginGroup(key) self.__networks[key].load(self.__settings) @@ -666,7 +660,6 @@ self.__settings.endGroup() if not self.__identities or \ - not self.__servers or \ not self.__networks: # data structures got corrupted; load defaults self.__loadDefaults() @@ -686,7 +679,6 @@ if not identityOnly: self.__networks = {} self.__identities = {} - self.__servers = {} # identity identity = IrcIdentity.createDefaultIdentity()
--- a/Network/IRC/IrcNetworkWidget.py Thu Nov 29 20:02:43 2012 +0100 +++ b/Network/IRC/IrcNetworkWidget.py Fri Nov 30 20:14:50 2012 +0100 @@ -62,22 +62,33 @@ self.__manager.networksChanged.connect(self.__refreshNetworks) + def autoConnect(self): + """ + Public method to perform the IRC auto connection. + """ + for networkName in self.__manager.getNetworkNames(): + if self.__manager.getNetwork(networkName).autoConnect(): + row = self.networkCombo.findText(networkName) + self.networkCombo.setCurrentIndex(row) + self.on_connectButton_clicked() + break + @pyqtSlot() def __refreshNetworks(self): """ Private slot to refresh all network related widgets. """ currentNetwork = self.networkCombo.currentText() -## currentNick = self.nickCombo.currentText() -## currentChannel = self.channelCombo.currentText() + currentNick = self.nickCombo.currentText() + currentChannel = self.channelCombo.currentText() self.networkCombo.clear() self.networkCombo.addItems(self.__manager.getNetworkNames()) row = self.networkCombo.findText(currentNetwork) if row == -1: row = 0 self.networkCombo.setCurrentIndex(row) -## self.nickCombo.setEditText(currentNick) -## self.channelCombo.setEditText(currentChannel) + self.nickCombo.setEditText(currentNick) + self.channelCombo.setEditText(currentChannel) @pyqtSlot() def on_connectButton_clicked(self):
--- a/Network/IRC/IrcWidget.py Thu Nov 29 20:02:43 2012 +0100 +++ b/Network/IRC/IrcWidget.py Fri Nov 30 20:14:50 2012 +0100 @@ -118,6 +118,12 @@ self.__ircNetworkManager.close() return ok + def autoConnect(self): + """ + Public method to initiate the IRC auto connection. + """ + self.networkWidget.autoConnect() + def __connectNetwork(self, name, connect): """ Private slot to connect to or disconnect from the given network. @@ -128,7 +134,7 @@ if connect: network = self.__ircNetworkManager.getNetwork(name) if network: - self.__server = network.getServer(network.getServerNames()[0]) + self.__server = network.getServer() self.__identityName = network.getIdentityName() identity = self.__ircNetworkManager.getIdentity(self.__identityName) self.__userName = identity.getIdent()
--- a/UI/UserInterface.py Thu Nov 29 20:02:43 2012 +0100 +++ b/UI/UserInterface.py Fri Nov 30 20:14:50 2012 +0100 @@ -5595,3 +5595,13 @@ @return flag indicating, if notifications are enabled (boolean) """ return Preferences.getUI("NotificationsEnabled") + + ######################### + ## Support for IRC below + ######################### + + def autoConnectIrc(self): + """ + Public method to initiate the IRC auto connection. + """ + self.irc.autoConnect()