Continued with the IRC management.

Sun, 02 Dec 2012 13:48:01 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 02 Dec 2012 13:48:01 +0100
changeset 2240
11445430c553
parent 2239
a47b50e80a20
child 2241
030924019d88

Continued with the IRC management.

Network/IRC/IrcChannelWidget.py file | annotate | diff | comparison | revisions
Network/IRC/IrcIdentitiesEditDialog.py file | annotate | diff | comparison | revisions
Network/IRC/IrcIdentitiesEditDialog.ui file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkManager.py file | annotate | diff | comparison | revisions
Network/IRC/IrcWidget.py file | annotate | diff | comparison | revisions
--- a/Network/IRC/IrcChannelWidget.py	Sat Dec 01 19:51:46 2012 +0100
+++ b/Network/IRC/IrcChannelWidget.py	Sun Dec 02 13:48:01 2012 +0100
@@ -365,16 +365,18 @@
             if match.lastindex == 2:
                 msg = self.trUtf8("{0} has left {1}.").format(
                     match.group(1), self.__name)
+                nmsg = msg
                 self.__addManagementMessage(IrcChannelWidget.LeaveIndicator, msg)
             else:
                 msg = self.trUtf8("{0} has left {1}: {2}.").format(
-                    match.group(1), self.__name,
-                    ircFilter(match.group(3)))
+                    match.group(1), self.__name, ircFilter(match.group(3)))
+                nmsg = self.trUtf8("{0} has left {1}: {2}.").format(
+                    match.group(1), self.__name, match.group(3))
                 self.__addManagementMessage(IrcChannelWidget.LeaveIndicator, msg)
             if Preferences.getIrc("ShowNotifications") and \
                Preferences.getIrc("NotifyJoinPart"):
                 self.__ui.showNotification(UI.PixmapCache.getPixmap("irc48.png"),
-                    self.trUtf8("Leave Channel"), msg)
+                    self.trUtf8("Leave Channel"), nmsg)
             return True
         
         return False
--- a/Network/IRC/IrcIdentitiesEditDialog.py	Sat Dec 01 19:51:46 2012 +0100
+++ b/Network/IRC/IrcIdentitiesEditDialog.py	Sun Dec 02 13:48:01 2012 +0100
@@ -9,11 +9,11 @@
 
 import copy
 
-from PyQt4.QtCore import pyqtSlot
+from PyQt4.QtCore import pyqtSlot, Qt, QEvent
 from PyQt4.QtGui import QDialog, QInputDialog, QLineEdit, QItemSelectionModel
 
 from E5Gui import E5MessageBox
-from E5Gui.E5Application import e5App
+##from E5Gui.E5Application import e5App
 
 from .Ui_IrcIdentitiesEditDialog import Ui_IrcIdentitiesEditDialog
 
@@ -24,7 +24,6 @@
 
 
 # TODO: implement "Away" page
-# TODO: implement "Advanced" page
 class IrcIdentitiesEditDialog(QDialog, Ui_IrcIdentitiesEditDialog):
     """
     Class implementing the identities management dialog.
@@ -67,6 +66,23 @@
         self.identitiesCombo.setCurrentIndex(index)
         
         self.on_identitiesCombo_currentIndexChanged(identityName)
+        
+        self.nicknameEdit.installEventFilter(self)
+    
+    def eventFilter(self, obj, evt):
+        """
+        Public method to handle events for other objects.
+        
+        @param obj reference to the object (QObject)
+        @param evt reference to the event (QEvent)
+        @return flag indicating that the event should be filtered out (boolean)
+        """
+        if obj == self.nicknameEdit and evt.type() == QEvent.KeyPress:
+            if evt.key() in [Qt.Key_Enter, Qt.Key_Return]:
+                self.on_nicknameAddButton_clicked()
+                return True
+        
+        return super().eventFilter(obj, evt)
 
     def __updateIdentitiesButtons(self):
         """
@@ -99,9 +115,15 @@
         self.serviceEdit.setText(self.__currentIdentity.getServiceName())
         self.passwordEdit.setText(self.__currentIdentity.getPassword())
         
+        self.identEdit.setText(self.__currentIdentity.getIdent())
+        self.quitEdit.setText(self.__currentIdentity.getQuitMessage())
+        self.partEdit.setText(self.__currentIdentity.getPartMessage())
+        
         self.__updateIdentitiesButtons()
         self.__updateNicknameUpDownButtons()
         self.__updateNicknameButtons()
+        
+        self.identityTabWidget.setCurrentIndex(0)
 ##    void IdentityDialog::updateIdentity(int index)
 ##    {
 ##        m_insertRememberLineOnAwayChBox->setChecked(m_currentIdentity->getInsertRememberLineOnAway());
@@ -113,13 +135,6 @@
 ##        automaticAwayGroup->setChecked(m_currentIdentity->getAutomaticAway());
 ##        m_awayInactivitySpin->setValue(m_currentIdentity->getAwayInactivity());
 ##        m_automaticUnawayChBox->setChecked(m_currentIdentity->getAutomaticUnaway());
-##
-##        m_sCommandEdit->setText(m_currentIdentity->getShellCommand());
-##        m_codecCBox->setCurrentIndex(Konversation::IRCCharsets::self()->shortNameToIndex(m_currentIdentity->getCodecName()));
-##        m_loginEdit->setText(m_currentIdentity->getIdent());
-##        m_quitEdit->setText(m_currentIdentity->getQuitReason());
-##        m_partEdit->setText(m_currentIdentity->getPartReason());
-##        m_kickEdit->setText(m_currentIdentity->getKickReason());
 ##    }
     
     def __refreshCurrentIdentity(self):
@@ -134,6 +149,10 @@
             for row in range(self.nicknamesList.count())])
         self.__currentIdentity.setServiceName(self.serviceEdit.text())
         self.__currentIdentity.setPassword(self.passwordEdit.text())
+        
+        self.__currentIdentity.setIdent(self.identEdit.text())
+        self.__currentIdentity.setQuitMessage(self.quitEdit.text())
+        self.__currentIdentity.setPartMessage(self.partEdit.text())
 ##
 ##    void IdentityDialog::refreshCurrentIdentity()
 ##    {
@@ -146,14 +165,6 @@
 ##        m_currentIdentity->setAutomaticAway(automaticAwayGroup->isChecked());
 ##        m_currentIdentity->setAwayInactivity(m_awayInactivitySpin->value());
 ##        m_currentIdentity->setAutomaticUnaway(m_automaticUnawayChBox->isChecked());
-##
-##        m_currentIdentity->setShellCommand(m_sCommandEdit->text());
-##        if(m_codecCBox->currentIndex() >= 0 && m_codecCBox->currentIndex() < Konversation::IRCCharsets::self()->availableEncodingShortNames().count())
-##            m_currentIdentity->setCodecName(Konversation::IRCCharsets::self()->availableEncodingShortNames()[m_codecCBox->currentIndex()]);
-##        m_currentIdentity->setIdent(m_loginEdit->text());
-##        m_currentIdentity->setQuitReason(m_quitEdit->text());
-##        m_currentIdentity->setPartReason(m_partEdit->text());
-##        m_currentIdentity->setKickReason(m_kickEdit->text());
 ##    }
 ##
     
@@ -359,9 +370,9 @@
         """
         Private slot handling a change of the nick name.
         """
-        itm = self.nicknamesList.currentItem()
-        if itm:
-            itm.setText(nick)
+        sel = self.nicknamesList.selectedItems()
+        if sel:
+            sel[0].setText(nick)
         
         self.__updateNicknameButtons()
     
--- a/Network/IRC/IrcIdentitiesEditDialog.ui	Sat Dec 01 19:51:46 2012 +0100
+++ b/Network/IRC/IrcIdentitiesEditDialog.ui	Sun Dec 02 13:48:01 2012 +0100
@@ -214,6 +214,63 @@
       <attribute name="title">
        <string>Advanced</string>
       </attribute>
+      <layout class="QGridLayout" name="gridLayout_3">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>Ident:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="identEdit">
+         <property name="toolTip">
+          <string>Enter the identity to be used to log-on to the server</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_6">
+         <property name="text">
+          <string>Reason for Quit:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QLineEdit" name="quitEdit">
+         <property name="toolTip">
+          <string>Enter a message to be sent when quitting</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_7">
+         <property name="text">
+          <string>Reason for Part:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1">
+        <widget class="QLineEdit" name="partEdit">
+         <property name="toolTip">
+          <string>Enter message to be sent when leaving a channel</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1">
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>291</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
      </widget>
     </widget>
    </item>
@@ -245,6 +302,9 @@
   <tabstop>nicknameDownButton</tabstop>
   <tabstop>serviceEdit</tabstop>
   <tabstop>passwordEdit</tabstop>
+  <tabstop>identEdit</tabstop>
+  <tabstop>quitEdit</tabstop>
+  <tabstop>partEdit</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>
--- a/Network/IRC/IrcNetworkManager.py	Sat Dec 01 19:51:46 2012 +0100
+++ b/Network/IRC/IrcNetworkManager.py	Sun Dec 02 13:48:01 2012 +0100
@@ -24,6 +24,9 @@
     DefaultIdentityName = "0default"
     DefaultIdentityDisplay = QCoreApplication.translate("IrcIdentity", "Default Identity")
     
+    DefaultQuitMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric5 IDE")
+    DefaultPartMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric5 IDE")
+    
     def __init__(self, name):
         """
         Constructor
@@ -38,6 +41,11 @@
         self.__serviceName = ""
         self.__password = ""
         self.__ident = Utilities.getUserName()
+        
+        # TODO: add AWAY handling
+        
+        self.__quitMessage = IrcIdentity.DefaultQuitMessage
+        self.__partMessage = IrcIdentity.DefaultPartMessage
     
     def save(self, settings):
         """
@@ -51,6 +59,8 @@
         settings.setValue("NickNames", self.__nickNames)
         settings.setValue("ServiceName", self.__serviceName)
         settings.setValue("Password", self.__password)
+        settings.setValue("QuitMessage", self.__quitMessage)
+        settings.setValue("PartMessage", self.__partMessage)
     
     def load(self, settings):
         """
@@ -63,6 +73,8 @@
         self.__nickNames = Preferences.toList(settings.value("NickNames", []))
         self.__serviceName = settings.value("ServiceName", "")
         self.__password = settings.value("Password", "")
+        self.__quitMessage = settings.value("QuitMessage", IrcIdentity.DefaultQuitMessage)
+        self.__partMessage = settings.value("PartMessage", IrcIdentity.DefaultPartMessage)
     
     def setName(self, name):
         """
@@ -160,6 +172,44 @@
         """
         return pwConvert(self.__password, encode=False)
     
+    def setQuitMessage(self, message):
+        """
+        Public method to set the QUIT message.
+        
+        @param message QUIT message (string)
+        """
+        if message:
+            self.__quitMessage = message
+        else:
+            self.__quitMessage = IrcIdentity.DefaultQuitMessage
+    
+    def getQuitMessage(self):
+        """
+        Public method to get the QUIT message.
+        
+        @return QUIT message (string)
+        """
+        return self.__quitMessage
+    
+    def setPartMessage(self, message):
+        """
+        Public method to set the PART message.
+        
+        @param message PART message (string)
+        """
+        if message:
+            self.__partMessage = message
+        else:
+            self.__partMessage = IrcIdentity.DefaultPartMessage
+    
+    def getPartMessage(self):
+        """
+        Public method to get the PART message.
+        
+        @return PART message (string)
+        """
+        return self.__partMessage
+    
     @classmethod
     def createDefaultIdentity(cls):
         """
--- a/Network/IRC/IrcWidget.py	Sat Dec 01 19:51:46 2012 +0100
+++ b/Network/IRC/IrcWidget.py	Sun Dec 02 13:48:01 2012 +0100
@@ -40,6 +40,7 @@
         self.setupUi(self)
         
         self.__ircNetworkManager = IrcNetworkManager(self)
+        self.__ircNetworkManager.dataChanged.connect(self.__networkDataChanged)
         
         self.__leaveButton = QToolButton(self)
         self.__leaveButton.setIcon(UI.PixmapCache.getIcon("ircCloseChannel.png"))
@@ -59,6 +60,7 @@
         self.__channelTypePrefixes = ""
         self.__userName = ""
         self.__identityName = ""
+        self.__quitMessage = ""
         self.__nickIndex = -1
         self.__nickName = ""
         self.__server = None
@@ -108,7 +110,7 @@
             if ok:
                 self.__socket.blockSignals(True)
                 
-                self.__send("QUIT :" + self.trUtf8("IRC for eric IDE"))
+                self.__send("QUIT :" + self.__quitMessage)
                 self.__socket.close()
                 self.__socket.deleteLater()
         else:
@@ -132,12 +134,14 @@
         @param connect flag indicating to connect (boolean)
         """
         if connect:
+            # TODO: support SSL connection
             network = self.__ircNetworkManager.getNetwork(name)
             if network:
                 self.__server = network.getServer()
                 self.__identityName = network.getIdentityName()
                 identity = self.__ircNetworkManager.getIdentity(self.__identityName)
                 self.__userName = identity.getIdent()
+                self.__quitMessage = identity.getQuitMessage()
                 if self.__server:
                     self.networkWidget.addServerMessage(self.trUtf8("Info"),
                         self.trUtf8("Looking for server {0} (port {1})...").format(
@@ -159,10 +163,11 @@
                     self.channelsWidget.removeTab(self.channelsWidget.indexOf(channel))
                     channel.deleteLater()
                     channel = None
-                self.__send("QUIT :" + self.trUtf8("IRC for eric IDE"))
+                self.__send("QUIT :" + self.__quitMessage)
                 self.__socket.close()
                 self.__userName = ""
                 self.__identityName = ""
+                self.__quitMessage = ""
     
     def __editNetwork(self, name):
         """
@@ -173,6 +178,16 @@
         dlg = IrcNetworkListDialog(self.__ircNetworkManager, self)
         dlg.exec_()
     
+    def __networkDataChanged(self):
+        """
+        Private slot handling changes of the network and identity definitions.
+        """
+        identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+        if identity:
+            partMsg = identity.getPartMessage()
+            for channel in self.__channelList:
+                channel.setPartMessage(partMsg)
+    
     def __joinChannel(self, name, key=""):
         """
         Private slot to join a channel.
@@ -188,7 +203,8 @@
         channel = IrcChannelWidget(self)
         channel.setName(name)
         channel.setUserName(self.__nickName)
-        channel.setPartMessage(self.trUtf8("IRC for eric IDE"))
+        identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+        channel.setPartMessage(identity.getPartMessage())
         channel.setUserPrivilegePrefix(self.__userPrefix)
         
         channel.sendData.connect(self.__send)
@@ -197,7 +213,10 @@
         self.channelsWidget.addTab(channel, name)
         self.__channelList.append(channel)
         
-        self.__send("JOIN " + name) # TODO: add channel key
+        joinCommand = ["JOIN", name]
+        if key:
+            joinCommand.append(key)
+        self.__send(" ".join(joinCommand))
         self.__send("MODE " + name)
         
         emptyIndex = self.channelsWidget.indexOf(self.__emptyLabel)
@@ -378,6 +397,9 @@
                 self.networkWidget.addMessage(
                     self.trUtf8("You have left channel {0}.").format(channel))
                 return True
+        elif name == "QUIT":
+            # don't do anything with it here
+            return True
         elif name == "NICK":
             # :foo_!n=foo@foohost.bar.net NICK :newnick
             oldNick = match.group(1).split("!", 1)[0]
@@ -497,7 +519,7 @@
         Private method to register to services.
         """
         identity = self.__ircNetworkManager.getIdentity(self.__identityName)
-        service = identity.getName()
+        service = identity.getServiceName()
         password = identity.getPassword()
         if service and password:
             self.__send("PRIVMSG " + service + " :identify " + password)

eric ide

mercurial