-rw-r--r-- | noncore/net/opieirc/ircchanneltab.cpp | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/ircoutput.cpp | 6 | ||||
-rw-r--r-- | noncore/net/opieirc/ircoutput.h | 2 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 11 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.cpp | 8 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.h | 2 |
6 files changed, 31 insertions, 2 deletions
diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp index 754442a..3267525 100644 --- a/noncore/net/opieirc/ircchanneltab.cpp +++ b/noncore/net/opieirc/ircchanneltab.cpp | |||
@@ -24,51 +24,53 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW | |||
24 | m_layout->add(m_field); | 24 | m_layout->add(m_field); |
25 | m_field->setFocus(); | 25 | m_field->setFocus(); |
26 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); | 26 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); |
27 | 27 | ||
28 | } | 28 | } |
29 | 29 | ||
30 | void IRCChannelTab::appendText(QString text) { | 30 | void IRCChannelTab::appendText(QString text) { |
31 | /* not using append because it creates layout problems */ | 31 | /* not using append because it creates layout problems */ |
32 | m_textview->setText(m_textview->text() + text); | 32 | m_textview->setText(m_textview->text() + text); |
33 | m_textview->ensureVisible(0, m_textview->contentsHeight()); | 33 | m_textview->ensureVisible(0, m_textview->contentsHeight()); |
34 | } | 34 | } |
35 | 35 | ||
36 | IRCChannelTab::~IRCChannelTab() { | 36 | IRCChannelTab::~IRCChannelTab() { |
37 | m_parentTab->removeChannelTab(this); | 37 | m_parentTab->removeChannelTab(this); |
38 | } | 38 | } |
39 | 39 | ||
40 | void IRCChannelTab::processCommand() { | 40 | void IRCChannelTab::processCommand() { |
41 | QString text = m_field->text(); | 41 | QString text = m_field->text(); |
42 | if (text.length()>0) { | 42 | if (text.length()>0) { |
43 | if (session()->isSessionActive()) { | 43 | if (session()->isSessionActive()) { |
44 | if (text.startsWith("/") && !text.startsWith("//")) { | 44 | if (text.startsWith("/") && !text.startsWith("//")) { |
45 | /* Command mode */ | 45 | /* Command mode */ |
46 | m_parentTab->executeCommand(this, text);; | 46 | m_parentTab->executeCommand(this, text);; |
47 | } else { | 47 | } else { |
48 | if (text.startsWith("//")) | ||
49 | text = text.right(text.length()-1); | ||
48 | if (session()->isSessionActive()) { | 50 | if (session()->isSessionActive()) { |
49 | session()->sendMessage(m_channel, m_field->text()); | 51 | session()->sendMessage(m_channel, m_field->text()); |
50 | appendText("<<font color=\"#dd0000\">"+m_parentTab->server()->nick()+"</font>> "+m_field->text()+"<br>"); | 52 | appendText("<<font color=\"#dd0000\">"+m_parentTab->server()->nick()+"</font>> "+IRCOutput::toHTML(m_field->text())+"<br>"); |
51 | } | 53 | } |
52 | } | 54 | } |
53 | } else { | 55 | } else { |
54 | appendText("<font color=\"#ff0000\">"+tr("Disconnected")+"</font><br>"); | 56 | appendText("<font color=\"#ff0000\">"+tr("Disconnected")+"</font><br>"); |
55 | } | 57 | } |
56 | } | 58 | } |
57 | m_field->clear(); | 59 | m_field->clear(); |
58 | } | 60 | } |
59 | 61 | ||
60 | void IRCChannelTab::toggleList() { | 62 | void IRCChannelTab::toggleList() { |
61 | if (m_listVisible) { | 63 | if (m_listVisible) { |
62 | m_list->setMaximumWidth(0); | 64 | m_list->setMaximumWidth(0); |
63 | m_listButton->setText("<"); | 65 | m_listButton->setText("<"); |
64 | } else { | 66 | } else { |
65 | m_list->setMaximumWidth(LISTWIDTH); | 67 | m_list->setMaximumWidth(LISTWIDTH); |
66 | m_listButton->setText(">"); | 68 | m_listButton->setText(">"); |
67 | } | 69 | } |
68 | m_listVisible = !m_listVisible; | 70 | m_listVisible = !m_listVisible; |
69 | } | 71 | } |
70 | 72 | ||
71 | QString IRCChannelTab::title() { | 73 | QString IRCChannelTab::title() { |
72 | return m_channel->channelname(); | 74 | return m_channel->channelname(); |
73 | } | 75 | } |
74 | 76 | ||
diff --git a/noncore/net/opieirc/ircoutput.cpp b/noncore/net/opieirc/ircoutput.cpp index 878bc9b..4822fc4 100644 --- a/noncore/net/opieirc/ircoutput.cpp +++ b/noncore/net/opieirc/ircoutput.cpp | |||
@@ -1,29 +1,33 @@ | |||
1 | #include "ircoutput.h" | 1 | #include "ircoutput.h" |
2 | 2 | ||
3 | IRCOutput::IRCOutput(IRCOutputType type, QString message) { | 3 | IRCOutput::IRCOutput(IRCOutputType type, QString message) { |
4 | m_type = type; | 4 | m_type = type; |
5 | m_message = message; | 5 | m_message = message; |
6 | } | 6 | } |
7 | 7 | ||
8 | IRCOutputType IRCOutput::type() { | 8 | IRCOutputType IRCOutput::type() { |
9 | return m_type; | 9 | return m_type; |
10 | } | 10 | } |
11 | 11 | ||
12 | QString IRCOutput::message() { | 12 | QString IRCOutput::message() { |
13 | return m_message; | 13 | return m_message; |
14 | } | 14 | } |
15 | 15 | ||
16 | QString IRCOutput::htmlMessage() { | 16 | QString IRCOutput::htmlMessage() { |
17 | QString htmlMessage =m_message.replace(QRegExp("&"), "&"); | 17 | return toHTML(m_message); |
18 | } | ||
19 | |||
20 | QString IRCOutput::toHTML(QString message) { | ||
21 | QString htmlMessage =message.replace(QRegExp("&"), "&"); | ||
18 | htmlMessage = htmlMessage.replace(QRegExp(">"), ">"); | 22 | htmlMessage = htmlMessage.replace(QRegExp(">"), ">"); |
19 | htmlMessage = htmlMessage.replace(QRegExp("<"), "<"); | 23 | htmlMessage = htmlMessage.replace(QRegExp("<"), "<"); |
20 | return htmlMessage; | 24 | return htmlMessage; |
21 | } | 25 | } |
22 | 26 | ||
23 | void IRCOutput::addParam(void *data) { | 27 | void IRCOutput::addParam(void *data) { |
24 | m_parameters.append(data); | 28 | m_parameters.append(data); |
25 | } | 29 | } |
26 | 30 | ||
27 | void *IRCOutput::getParam(int index) { | 31 | void *IRCOutput::getParam(int index) { |
28 | return m_parameters.at(index); | 32 | return m_parameters.at(index); |
29 | } | 33 | } |
diff --git a/noncore/net/opieirc/ircoutput.h b/noncore/net/opieirc/ircoutput.h index 72361d4..e8cc524 100644 --- a/noncore/net/opieirc/ircoutput.h +++ b/noncore/net/opieirc/ircoutput.h | |||
@@ -41,32 +41,34 @@ enum IRCOutputType { | |||
41 | OUTPUT_CONNCLOSE = 10, /* parameters : none */ | 41 | OUTPUT_CONNCLOSE = 10, /* parameters : none */ |
42 | OUTPUT_CTCP = 11, /* parameters : none */ | 42 | OUTPUT_CTCP = 11, /* parameters : none */ |
43 | OUTPUT_SELFKICK = 12, /* parameters : channel (IRCChannel) */ | 43 | OUTPUT_SELFKICK = 12, /* parameters : channel (IRCChannel) */ |
44 | OUTPUT_OTHERKICK = 13, /* parameters : channel (IRCChannel) person (IRCChannelPerson) */ | 44 | OUTPUT_OTHERKICK = 13, /* parameters : channel (IRCChannel) person (IRCChannelPerson) */ |
45 | OUTPUT_CHANACTION = 14, /* parameters : channel (IRCChannel) person (IRCChannelPerson) */ | 45 | OUTPUT_CHANACTION = 14, /* parameters : channel (IRCChannel) person (IRCChannelPerson) */ |
46 | OUTPUT_QUERYACTION = 15, /* parameters : person (IRCPerson) */ | 46 | OUTPUT_QUERYACTION = 15, /* parameters : person (IRCPerson) */ |
47 | OUTPUT_CHANPERSONMODE = 16 /* parameters : channel (IRCCHannel) person (IRCChannelPerson) */ | 47 | OUTPUT_CHANPERSONMODE = 16 /* parameters : channel (IRCCHannel) person (IRCChannelPerson) */ |
48 | }; | 48 | }; |
49 | 49 | ||
50 | /* The IRCOutput class is used as a kind of message which is sent by the | 50 | /* The IRCOutput class is used as a kind of message which is sent by the |
51 | IRC parser to inform the GUI of changes. This could for example be a | 51 | IRC parser to inform the GUI of changes. This could for example be a |
52 | channel message or a nickname change */ | 52 | channel message or a nickname change */ |
53 | 53 | ||
54 | class IRCOutput { | 54 | class IRCOutput { |
55 | public: | 55 | public: |
56 | IRCOutput(IRCOutputType type, QString message); | 56 | IRCOutput(IRCOutputType type, QString message); |
57 | /* Used to add a parameter to this IRCOutput. Parameters are dependent | 57 | /* Used to add a parameter to this IRCOutput. Parameters are dependent |
58 | on which IRCOutputType we are using (see above) */ | 58 | on which IRCOutputType we are using (see above) */ |
59 | void addParam(void *data); | 59 | void addParam(void *data); |
60 | 60 | ||
61 | IRCOutputType type(); | 61 | IRCOutputType type(); |
62 | QString message(); | 62 | QString message(); |
63 | /* Return the message with all HTML code escaped (for example < instead of '<') */ | 63 | /* Return the message with all HTML code escaped (for example < instead of '<') */ |
64 | QString htmlMessage(); | 64 | QString htmlMessage(); |
65 | |||
66 | static QString toHTML(QString message); | ||
65 | void *getParam(int index); | 67 | void *getParam(int index); |
66 | protected: | 68 | protected: |
67 | IRCOutputType m_type; | 69 | IRCOutputType m_type; |
68 | QString m_message; | 70 | QString m_message; |
69 | QList<void> m_parameters; | 71 | QList<void> m_parameters; |
70 | }; | 72 | }; |
71 | 73 | ||
72 | #endif | 74 | #endif |
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp index 2ad56a8..503a758 100644 --- a/noncore/net/opieirc/ircservertab.cpp +++ b/noncore/net/opieirc/ircservertab.cpp | |||
@@ -38,48 +38,59 @@ QString IRCServerTab::title() { | |||
38 | } | 38 | } |
39 | 39 | ||
40 | IRCSession *IRCServerTab::session() { | 40 | IRCSession *IRCServerTab::session() { |
41 | return m_session; | 41 | return m_session; |
42 | } | 42 | } |
43 | 43 | ||
44 | IRCServer *IRCServerTab::server() { | 44 | IRCServer *IRCServerTab::server() { |
45 | return &m_server; | 45 | return &m_server; |
46 | } | 46 | } |
47 | 47 | ||
48 | void IRCServerTab::executeCommand(IRCTab *tab, QString line) { | 48 | void IRCServerTab::executeCommand(IRCTab *tab, QString line) { |
49 | QTextIStream stream(&line); | 49 | QTextIStream stream(&line); |
50 | QString command; | 50 | QString command; |
51 | stream >> command; | 51 | stream >> command; |
52 | command = command.upper().right(command.length()-1); | 52 | command = command.upper().right(command.length()-1); |
53 | 53 | ||
54 | if (command == "JOIN") { | 54 | if (command == "JOIN") { |
55 | QString channel; | 55 | QString channel; |
56 | stream >> channel; | 56 | stream >> channel; |
57 | if (channel.length() > 0 && channel.startsWith("#")) { | 57 | if (channel.length() > 0 && channel.startsWith("#")) { |
58 | m_session->join(channel); | 58 | m_session->join(channel); |
59 | } else { | 59 | } else { |
60 | tab->appendText("<font color=\"#ff0000\">Unknown channel format!</font><br>"); | 60 | tab->appendText("<font color=\"#ff0000\">Unknown channel format!</font><br>"); |
61 | } | 61 | } |
62 | } else if (command == "ME") { | ||
63 | QString text = IRCOutput::toHTML(line.right(line.length()-4)); | ||
64 | if (text.length() > 0) { | ||
65 | if (tab->isA("IRCChannelTab")) { | ||
66 | tab->appendText("<font color=\"#cc0000\">*" + m_server.nick() + " " + text + "</font><br>"); | ||
67 | m_session->sendAction(((IRCChannelTab *)tab)->channel(), text); | ||
68 | } else if (tab->isA("IRCQueryTab")) { | ||
69 | } else { | ||
70 | tab->appendText("<font color=\"#ff0000\">Invalid tab for this command</font><br>"); | ||
71 | } | ||
72 | } | ||
62 | } else { | 73 | } else { |
63 | tab->appendText("<font color=\"#ff0000\">Unknown command</font><br>"); | 74 | tab->appendText("<font color=\"#ff0000\">Unknown command</font><br>"); |
64 | } | 75 | } |
65 | } | 76 | } |
66 | 77 | ||
67 | void IRCServerTab::processCommand() { | 78 | void IRCServerTab::processCommand() { |
68 | QString text = m_field->text(); | 79 | QString text = m_field->text(); |
69 | if (text.startsWith("/") && !text.startsWith("//")) { | 80 | if (text.startsWith("/") && !text.startsWith("//")) { |
70 | /* Command mode */ | 81 | /* Command mode */ |
71 | executeCommand(this, text); | 82 | executeCommand(this, text); |
72 | } | 83 | } |
73 | m_field->clear(); | 84 | m_field->clear(); |
74 | } | 85 | } |
75 | 86 | ||
76 | void IRCServerTab::doConnect() { | 87 | void IRCServerTab::doConnect() { |
77 | m_session->beginSession(); | 88 | m_session->beginSession(); |
78 | } | 89 | } |
79 | 90 | ||
80 | void IRCServerTab::remove() { | 91 | void IRCServerTab::remove() { |
81 | /* Close requested */ | 92 | /* Close requested */ |
82 | if (m_session->isSessionActive()) { | 93 | if (m_session->isSessionActive()) { |
83 | /* While there is a running session */ | 94 | /* While there is a running session */ |
84 | m_close = TRUE; | 95 | m_close = TRUE; |
85 | m_session->endSession(); | 96 | m_session->endSession(); |
diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp index 89df68c..122a943 100644 --- a/noncore/net/opieirc/ircsession.cpp +++ b/noncore/net/opieirc/ircsession.cpp | |||
@@ -15,48 +15,56 @@ IRCSession::~IRCSession() { | |||
15 | /* We want this to get deleted automatically */ | 15 | /* We want this to get deleted automatically */ |
16 | m_channels.setAutoDelete(TRUE); | 16 | m_channels.setAutoDelete(TRUE); |
17 | m_people.setAutoDelete(TRUE); | 17 | m_people.setAutoDelete(TRUE); |
18 | 18 | ||
19 | delete m_parser; | 19 | delete m_parser; |
20 | delete m_connection; | 20 | delete m_connection; |
21 | } | 21 | } |
22 | 22 | ||
23 | void IRCSession::beginSession() { | 23 | void IRCSession::beginSession() { |
24 | m_connection->doConnect(); | 24 | m_connection->doConnect(); |
25 | } | 25 | } |
26 | 26 | ||
27 | void IRCSession::join(QString channelname) { | 27 | void IRCSession::join(QString channelname) { |
28 | m_connection->sendLine("JOIN "+channelname); | 28 | m_connection->sendLine("JOIN "+channelname); |
29 | } | 29 | } |
30 | 30 | ||
31 | void IRCSession::sendMessage(IRCPerson *person, QString message) { | 31 | void IRCSession::sendMessage(IRCPerson *person, QString message) { |
32 | m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message); | 32 | m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message); |
33 | } | 33 | } |
34 | 34 | ||
35 | void IRCSession::sendMessage(IRCChannel *channel, QString message) { | 35 | void IRCSession::sendMessage(IRCChannel *channel, QString message) { |
36 | m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message); | 36 | m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message); |
37 | } | 37 | } |
38 | 38 | ||
39 | void IRCSession::sendAction(IRCChannel *channel, QString message) { | ||
40 | m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001"); | ||
41 | } | ||
42 | |||
43 | void IRCSession::sendAction(IRCPerson *person, QString message) { | ||
44 | m_connection->sendLine("PRIVMSG " + person->nick() + " :\001ACTION " + message + "\001"); | ||
45 | } | ||
46 | |||
39 | bool IRCSession::isSessionActive() { | 47 | bool IRCSession::isSessionActive() { |
40 | return m_connection->isConnected(); | 48 | return m_connection->isConnected(); |
41 | } | 49 | } |
42 | 50 | ||
43 | void IRCSession::endSession() { | 51 | void IRCSession::endSession() { |
44 | if (m_connection->isLoggedIn()) | 52 | if (m_connection->isLoggedIn()) |
45 | m_connection->sendLine("QUIT :" APP_VERSION); | 53 | m_connection->sendLine("QUIT :" APP_VERSION); |
46 | else | 54 | else |
47 | m_connection->close(); | 55 | m_connection->close(); |
48 | } | 56 | } |
49 | 57 | ||
50 | void IRCSession::part(IRCChannel *channel) { | 58 | void IRCSession::part(IRCChannel *channel) { |
51 | m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION); | 59 | m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION); |
52 | } | 60 | } |
53 | 61 | ||
54 | 62 | ||
55 | IRCChannel *IRCSession::getChannel(QString channelname) { | 63 | IRCChannel *IRCSession::getChannel(QString channelname) { |
56 | QListIterator<IRCChannel> it(m_channels); | 64 | QListIterator<IRCChannel> it(m_channels); |
57 | for (; it.current(); ++it) { | 65 | for (; it.current(); ++it) { |
58 | if (it.current()->channelname() == channelname) { | 66 | if (it.current()->channelname() == channelname) { |
59 | return it.current(); | 67 | return it.current(); |
60 | } | 68 | } |
61 | } | 69 | } |
62 | return 0; | 70 | return 0; |
diff --git a/noncore/net/opieirc/ircsession.h b/noncore/net/opieirc/ircsession.h index 59c26aa..aa4bed3 100644 --- a/noncore/net/opieirc/ircsession.h +++ b/noncore/net/opieirc/ircsession.h | |||
@@ -29,45 +29,47 @@ | |||
29 | #include "ircchannel.h" | 29 | #include "ircchannel.h" |
30 | #include "ircoutput.h" | 30 | #include "ircoutput.h" |
31 | 31 | ||
32 | class IRCMessageParser; | 32 | class IRCMessageParser; |
33 | 33 | ||
34 | /* The IRCSession stores all information relating to the connection | 34 | /* The IRCSession stores all information relating to the connection |
35 | to one IRC server. IRCSession makes it possible to run multiple | 35 | to one IRC server. IRCSession makes it possible to run multiple |
36 | IRC server connections from within the same program */ | 36 | IRC server connections from within the same program */ |
37 | 37 | ||
38 | class IRCSession : public QObject { | 38 | class IRCSession : public QObject { |
39 | friend class IRCMessageParser; | 39 | friend class IRCMessageParser; |
40 | Q_OBJECT | 40 | Q_OBJECT |
41 | public: | 41 | public: |
42 | IRCSession(IRCServer *server); | 42 | IRCSession(IRCServer *server); |
43 | ~IRCSession(); | 43 | ~IRCSession(); |
44 | 44 | ||
45 | void join(QString channel); | 45 | void join(QString channel); |
46 | void part(IRCChannel *channel); | 46 | void part(IRCChannel *channel); |
47 | void beginSession(); | 47 | void beginSession(); |
48 | bool isSessionActive(); | 48 | bool isSessionActive(); |
49 | void endSession(); | 49 | void endSession(); |
50 | 50 | ||
51 | void sendMessage(IRCPerson *person, QString message); | 51 | void sendMessage(IRCPerson *person, QString message); |
52 | void sendMessage(IRCChannel *channel, QString message); | 52 | void sendMessage(IRCChannel *channel, QString message); |
53 | void sendAction(IRCPerson *person, QString message); | ||
54 | void sendAction(IRCChannel *channel, QString message); | ||
53 | IRCChannel *getChannel(QString channelname); | 55 | IRCChannel *getChannel(QString channelname); |
54 | IRCPerson *getPerson(QString nickname); | 56 | IRCPerson *getPerson(QString nickname); |
55 | protected: | 57 | protected: |
56 | void addPerson(IRCPerson *person); | 58 | void addPerson(IRCPerson *person); |
57 | void addChannel(IRCChannel *channel); | 59 | void addChannel(IRCChannel *channel); |
58 | void removeChannel(IRCChannel *channel); | 60 | void removeChannel(IRCChannel *channel); |
59 | void removePerson(IRCPerson *person); | 61 | void removePerson(IRCPerson *person); |
60 | void getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels); | 62 | void getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels); |
61 | protected slots: | 63 | protected slots: |
62 | void handleMessage(IRCMessage *message); | 64 | void handleMessage(IRCMessage *message); |
63 | signals: | 65 | signals: |
64 | void outputReady(IRCOutput output); | 66 | void outputReady(IRCOutput output); |
65 | protected: | 67 | protected: |
66 | IRCServer *m_server; | 68 | IRCServer *m_server; |
67 | IRCConnection *m_connection; | 69 | IRCConnection *m_connection; |
68 | IRCMessageParser *m_parser; | 70 | IRCMessageParser *m_parser; |
69 | QList<IRCChannel> m_channels; | 71 | QList<IRCChannel> m_channels; |
70 | QList<IRCPerson> m_people; | 72 | QList<IRCPerson> m_people; |
71 | }; | 73 | }; |
72 | 74 | ||
73 | #endif /* __IRCSESSION_H */ | 75 | #endif /* __IRCSESSION_H */ |