diff options
| -rw-r--r-- | Channel.py | 6 | ||||
| -rw-r--r-- | IrcChannelForm.ui.qml | 8 | ||||
| -rw-r--r-- | IrcConnection.py | 15 | ||||
| -rw-r--r-- | IrcHandler.py | 37 | 
4 files changed, 51 insertions, 15 deletions
| @@ -37,11 +37,11 @@ class Channel():      def set_users(self, users):          self.users = users -    def add_user(user): +    def add_user(self, user):          self.users.append(user) -    def remove_user(user): -        self.users.delete(user) +    def remove_user(self, user): +        self.users.remove(user)      def get_view(self):          return self.view diff --git a/IrcChannelForm.ui.qml b/IrcChannelForm.ui.qml index 9b37cf6..d1f5e59 100644 --- a/IrcChannelForm.ui.qml +++ b/IrcChannelForm.ui.qml @@ -74,6 +74,14 @@ Item {      function add_nick(nick){          nickListModel.append({name: nick})      } + +    function remove_nick(nick){ +        for (var i = 0; i < nickListModel.count; ++i) { +             if (nickListModel.get(i).name === nick) { +                nickListModel.remove(i) +            } +        } +    }  }      Button { diff --git a/IrcConnection.py b/IrcConnection.py index 4a1d9ed..51a39be 100644 --- a/IrcConnection.py +++ b/IrcConnection.py @@ -6,20 +6,21 @@ import IrcHandler  class ircConnectThread(QThread):      sig = pyqtSignal(str, str, str)      nick_sig = pyqtSignal(str, str) +    part_sig = pyqtSignal(str, str)      join_sig = pyqtSignal(str)      namreply_sig = pyqtSignal(str, str) -    def __init__(self): +    def __init__(self, handler):          QThread.__init__(self)          self.reactor = irc.client.Reactor()          self.server = self.reactor.server() -        self.handler = IrcHandler.IrcHandler +        self.handler = handler      def __del__(self):          self.wait()      def run(self):          try: -            self.c = self.server.connect("irc.blatech.net", 6667, "wtest") +            self.c = self.server.connect("irc.blatech.net", 6667, self.handler.get_nick())          except irc.client.ServerConnectionError:              print(sys.exc_info()[1])              raise SystemExit(1) @@ -31,6 +32,7 @@ class ircConnectThread(QThread):          self.c.add_global_handler("privmsg", self.on_privmsg)          self.c.add_global_handler("join", self.on_join)          self.c.add_global_handler("namreply", self.on_names) +        self.c.add_global_handler("part", self.on_part)          self.reactor.process_forever()      def on_connect(self, connection, event): @@ -39,7 +41,7 @@ class ircConnectThread(QThread):              return      def on_pubmsg(self, connection, event):          print(event) -        self.sig.emit(event.target, event.source, event.arguments[0]) +        self.sig.emit(event.target, event.source.split("!")[0], event.arguments[0])      def on_privmsg(self, connection, event):          self.sig.emit(event.source, "", event.arguments[0]) @@ -48,7 +50,10 @@ class ircConnectThread(QThread):          print(event)          nick = event.source.split("!")[0]          self.nick_sig.emit(event.target, event.source.split("!")[0]) -        self.sig.emit(event.target, "", event.source + " joined " + event.target) + +    def on_part(self, connection, event): +        nick = event.source.split("!")[0] +        self.part_sig.emit(event.target, event.source.split("!")[0])      def on_names(self, connection, event):          print(event) diff --git a/IrcHandler.py b/IrcHandler.py index 8b1b318..ff2053b 100644 --- a/IrcHandler.py +++ b/IrcHandler.py @@ -10,9 +10,9 @@ class IrcHandler(QObject):      def __init__(self, window):          super(self.__class__, self).__init__()          self.channels = {} -        self.nick = "" +        self.nick = "wtest"          self.server = "irc.blatech.net" -        self.irc = IrcConnection.ircConnectThread() +        self.irc = IrcConnection.ircConnectThread(self)          self.window = window      def get_channels(): @@ -30,10 +30,10 @@ class IrcHandler(QObject):      def set_server(server):          self.server = server -    def get_nick(): +    def get_nick(self):          return self.nick -    def set_nick(nick): +    def set_nick(self, nick):          self.nick = nick      @pyqtSlot(str) @@ -71,11 +71,11 @@ class IrcHandler(QObject):          if channelStr in self.channels:              channel = self.channels[channelStr]              chat_area = channel.get_view().findChild(QQuickItem, "chat_area") -            chat_area.append(msg) +            chat_area.append(nick + ": " + msg)      @pyqtSlot(str, str)      def handle_nicks(self, channelStr, users): -        userlist = users.split(" ") +        userlist = users.split(" ")[0:-1]          if (channelStr in self.channels):              channel = self.channels.get(channelStr)              channel.set_users(userlist) @@ -83,11 +83,34 @@ class IrcHandler(QObject):              for user in userlist:                  user_list.add_nick(user) +    def handle_join(self, channelStr, user): +        if (channelStr in self.channels): +            channel = self.channels.get(channelStr) +            channel.add_user(user) +            user_list = channel.get_view().findChild(QQuickItem, "nick_list") +            chat_area = channel.get_view().findChild(QQuickItem, "chat_area") + +            if (user != self.get_nick()): +                user_list.add_nick(user) +                chat_area.append(user + " joined " + channelStr) + + +    def handle_part(self, channelStr, user): +        if (channelStr in self.channels): +            channel = self.channels.get(channelStr) +            channel.remove_user(user) +            user_list = channel.get_view().findChild(QQuickItem, "nick_list") +            chat_area = channel.get_view().findChild(QQuickItem, "chat_area") +            if (user != self.get_nick()): +                user_list.remove_nick(user) +                chat_area.append(user + " left " + channelStr) +      def connect_to_irc(self, view):          self.irc.sig.connect(self.handle_msg)          self.irc.join_sig.connect(self.join_channel)          self.irc.namreply_sig.connect(self.handle_nicks) -        # self.irc.nick_sig.connect(self.add_nick) +        self.irc.nick_sig.connect(self.handle_join) +        self.irc.part_sig.connect(self.handle_part)          # self.irc.join_sig.connect(self.join_channel)          self.irc.start()          self.sig.connect(self.irc.send_msg) | 
