1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
from PyQt5.QtCore import QUrl, QThread, pyqtSignal, QObject, pyqtSlot, Qt
from PyQt5.QtQuick import QQuickView, QQuickItem, QQuickWindow
import IrcConnection
import Channel
class IrcHandler(QObject):
sig = pyqtSignal(str,str)
join_sig = pyqtSignal(str)
def __init__(self, window):
super(self.__class__, self).__init__()
self.channels = {}
self.nick = ""
self.server = "irc.blatech.net"
self.irc = IrcConnection.ircConnectThread()
self.window = window
def get_channels():
return self.channels
def set_channels(channels):
self.channels = channels
def add_channel(self, channel):
self.channels[channel.get_name()] = channel
def get_server():
return self.server
def set_server(server):
self.server = server
def get_nick():
return self.nick
def set_nick(nick):
self.nick = nick
@pyqtSlot(str)
def join_channel(self, channelStr):
res = self.irc.join_channel(channelStr)
if (res):
channel = Channel.Channel(channelStr)
self.add_channel(channel)
self.window.channel_tabs.add_channel(channelStr)
channel_view = self.window.view.findChild(QQuickItem, "channel-" + channelStr)
send_button = channel_view.findChild(QQuickItem, "send_button")
input_field = channel_view.findChild(QQuickItem, "input")
send_button.clicked.connect(self.handle_input)
input_field.send_to_irc.connect(self.handle_input)
channel.set_view(channel_view)
def handle_input(self):
current_channel = self.window.channel_tabs.property('currentItem').property('text')
text = self.window.get_input(current_channel)
if (text.startswith("/")):
command = text.split(" ")[0][1:]
if (command == "join"):
channel = text.split(" ")[1]
self.join_channel(channel)
else:
self.sig.emit(current_channel, text)
self.window.update_chat(current_channel, text)
self.window.reset_input(current_channel)
@pyqtSlot(str, str, str)
def handle_msg(self, channelStr, nick, msg):
if channelStr in self.channels:
channel = self.channels[channelStr]
chat_area = channel.get_view().findChild(QQuickItem, "chat_area")
chat_area.append(msg)
@pyqtSlot(str, str)
def handle_nicks(self, channelStr, users):
userlist = users.split(" ")
if (channelStr in self.channels):
channel = self.channels.get(channelStr)
channel.set_users(userlist)
user_list = channel.get_view().findChild(QQuickItem, "nick_list")
for user in userlist:
user_list.add_nick(user)
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.join_sig.connect(self.join_channel)
self.irc.start()
self.sig.connect(self.irc.send_msg)
|