-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 | |||
@@ -1,93 +1,95 @@ | |||
1 | #include <qhbox.h> | 1 | #include <qhbox.h> |
2 | #include "ircchanneltab.h" | 2 | #include "ircchanneltab.h" |
3 | #include "ircservertab.h" | 3 | #include "ircservertab.h" |
4 | 4 | ||
5 | IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainWindow *mainWindow, QWidget *parent, const char *name, WFlags f) : IRCTab(parent, name, f) { | 5 | IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainWindow *mainWindow, QWidget *parent, const char *name, WFlags f) : IRCTab(parent, name, f) { |
6 | m_mainWindow = mainWindow; | 6 | m_mainWindow = mainWindow; |
7 | m_parentTab = parentTab; | 7 | m_parentTab = parentTab; |
8 | m_channel = channel; | 8 | m_channel = channel; |
9 | m_description->setText(tr("Talking on channel") + " <b>" + channel->channelname() + "</b>"); | 9 | m_description->setText(tr("Talking on channel") + " <b>" + channel->channelname() + "</b>"); |
10 | QHBox *hbox = new QHBox(this); | 10 | QHBox *hbox = new QHBox(this); |
11 | m_textview = new QTextView(hbox); | 11 | m_textview = new QTextView(hbox); |
12 | m_textview->setHScrollBarMode(QScrollView::AlwaysOff); | 12 | m_textview->setHScrollBarMode(QScrollView::AlwaysOff); |
13 | m_textview->setVScrollBarMode(QScrollView::AlwaysOn); | 13 | m_textview->setVScrollBarMode(QScrollView::AlwaysOn); |
14 | m_listVisible = TRUE; | 14 | m_listVisible = TRUE; |
15 | m_listButton = new QPushButton(">", m_textview); | 15 | m_listButton = new QPushButton(">", m_textview); |
16 | m_textview->setCornerWidget(m_listButton); | 16 | m_textview->setCornerWidget(m_listButton); |
17 | connect(m_listButton, SIGNAL(clicked()), this, SLOT(toggleList())); | 17 | connect(m_listButton, SIGNAL(clicked()), this, SLOT(toggleList())); |
18 | m_list = new IRCChannelList(m_channel, hbox); | 18 | m_list = new IRCChannelList(m_channel, hbox); |
19 | m_list->update(); | 19 | m_list->update(); |
20 | m_list->setMaximumWidth(LISTWIDTH); | 20 | m_list->setMaximumWidth(LISTWIDTH); |
21 | m_field = new QLineEdit(this); | 21 | m_field = new QLineEdit(this); |
22 | m_layout->add(hbox); | 22 | m_layout->add(hbox); |
23 | hbox->show(); | 23 | hbox->show(); |
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 | ||
75 | IRCSession *IRCChannelTab::session() { | 77 | IRCSession *IRCChannelTab::session() { |
76 | return m_parentTab->session(); | 78 | return m_parentTab->session(); |
77 | } | 79 | } |
78 | 80 | ||
79 | void IRCChannelTab::remove() { | 81 | void IRCChannelTab::remove() { |
80 | if (session()->isSessionActive()) { | 82 | if (session()->isSessionActive()) { |
81 | session()->part(m_channel); | 83 | session()->part(m_channel); |
82 | } else { | 84 | } else { |
83 | m_mainWindow->killTab(this); | 85 | m_mainWindow->killTab(this); |
84 | } | 86 | } |
85 | } | 87 | } |
86 | 88 | ||
87 | IRCChannel *IRCChannelTab::channel() { | 89 | IRCChannel *IRCChannelTab::channel() { |
88 | return m_channel; | 90 | return m_channel; |
89 | } | 91 | } |
90 | 92 | ||
91 | IRCChannelList *IRCChannelTab::list() { | 93 | IRCChannelList *IRCChannelTab::list() { |
92 | return m_list; | 94 | return m_list; |
93 | } | 95 | } |
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 | |||
@@ -17,56 +17,58 @@ | |||
17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | 18 | ||
19 | */ | 19 | */ |
20 | 20 | ||
21 | #ifndef __IRCOUTPUT_H | 21 | #ifndef __IRCOUTPUT_H |
22 | #define __IRCOUTPUT_H | 22 | #define __IRCOUTPUT_H |
23 | 23 | ||
24 | #include <qstring.h> | 24 | #include <qstring.h> |
25 | #include <qlist.h> | 25 | #include <qlist.h> |
26 | #include "ircchannel.h" | 26 | #include "ircchannel.h" |
27 | 27 | ||
28 | /* Types of possible IRC output */ | 28 | /* Types of possible IRC output */ |
29 | enum IRCOutputType { | 29 | enum IRCOutputType { |
30 | OUTPUT_ERROR = -1, /* parameters : none */ | 30 | OUTPUT_ERROR = -1, /* parameters : none */ |
31 | OUTPUT_SERVERMESSAGE = 0, /* parameters : none */ | 31 | OUTPUT_SERVERMESSAGE = 0, /* parameters : none */ |
32 | OUTPUT_CLIENTMESSAGE = 1, /* parameters : none */ | 32 | OUTPUT_CLIENTMESSAGE = 1, /* parameters : none */ |
33 | OUTPUT_CHANPRIVMSG = 2, /* parameters : channel (IRCChannel), person (IRCChannelPerson) */ | 33 | OUTPUT_CHANPRIVMSG = 2, /* parameters : channel (IRCChannel), person (IRCChannelPerson) */ |
34 | OUTPUT_QUERYPRIVMSG = 3, /* parameters : person (IRCPerson) */ | 34 | OUTPUT_QUERYPRIVMSG = 3, /* parameters : person (IRCPerson) */ |
35 | OUTPUT_NICKCHANGE = 4, /* parameters : person (IRCPerson) */ | 35 | OUTPUT_NICKCHANGE = 4, /* parameters : person (IRCPerson) */ |
36 | OUTPUT_SELFJOIN = 5, /* parameters : channel (IRCChannel) */ | 36 | OUTPUT_SELFJOIN = 5, /* parameters : channel (IRCChannel) */ |
37 | OUTPUT_OTHERJOIN = 6, /* parameters : channel (IRCChannel), person (IRCChannelPerson) */ | 37 | OUTPUT_OTHERJOIN = 6, /* parameters : channel (IRCChannel), person (IRCChannelPerson) */ |
38 | OUTPUT_SELFPART = 7, /* parameters : channel (IRCChannel) */ | 38 | OUTPUT_SELFPART = 7, /* parameters : channel (IRCChannel) */ |
39 | OUTPUT_OTHERPART = 8, /* parameters : channel (IRCChannel), person (IRCChannelPerson) */ | 39 | OUTPUT_OTHERPART = 8, /* parameters : channel (IRCChannel), person (IRCChannelPerson) */ |
40 | OUTPUT_QUIT = 9, /* parameters : person (IRCPerson) */ | 40 | OUTPUT_QUIT = 9, /* parameters : person (IRCPerson) */ |
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 | |||
@@ -14,96 +14,107 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa | |||
14 | m_layout->add(m_textview); | 14 | m_layout->add(m_textview); |
15 | m_field = new QLineEdit(this); | 15 | m_field = new QLineEdit(this); |
16 | m_layout->add(m_field); | 16 | m_layout->add(m_field); |
17 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); | 17 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); |
18 | m_field->setFocus(); | 18 | m_field->setFocus(); |
19 | connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); | 19 | connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); |
20 | } | 20 | } |
21 | 21 | ||
22 | void IRCServerTab::appendText(QString text) { | 22 | void IRCServerTab::appendText(QString text) { |
23 | /* not using append because it creates layout problems */ | 23 | /* not using append because it creates layout problems */ |
24 | m_textview->setText(m_textview->text() + text); | 24 | m_textview->setText(m_textview->text() + text); |
25 | m_textview->ensureVisible(0, m_textview->contentsHeight()); | 25 | m_textview->ensureVisible(0, m_textview->contentsHeight()); |
26 | } | 26 | } |
27 | 27 | ||
28 | IRCServerTab::~IRCServerTab() { | 28 | IRCServerTab::~IRCServerTab() { |
29 | delete m_session; | 29 | delete m_session; |
30 | } | 30 | } |
31 | 31 | ||
32 | void IRCServerTab::removeChannelTab(IRCChannelTab *tab) { | 32 | void IRCServerTab::removeChannelTab(IRCChannelTab *tab) { |
33 | m_channelTabs.remove(tab); | 33 | m_channelTabs.remove(tab); |
34 | } | 34 | } |
35 | 35 | ||
36 | QString IRCServerTab::title() { | 36 | QString IRCServerTab::title() { |
37 | return "Server"; | 37 | return "Server"; |
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(); |
86 | } else { | 97 | } else { |
87 | /* Session has previously been closed */ | 98 | /* Session has previously been closed */ |
88 | m_channelTabs.first(); | 99 | m_channelTabs.first(); |
89 | while (m_channelTabs.current() != 0) { | 100 | while (m_channelTabs.current() != 0) { |
90 | m_mainWindow->killTab(m_channelTabs.current()); | 101 | m_mainWindow->killTab(m_channelTabs.current()); |
91 | } | 102 | } |
92 | m_mainWindow->killTab(this); | 103 | m_mainWindow->killTab(this); |
93 | } | 104 | } |
94 | } | 105 | } |
95 | 106 | ||
96 | IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) { | 107 | IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) { |
97 | QListIterator<IRCChannelTab> it(m_channelTabs); | 108 | QListIterator<IRCChannelTab> it(m_channelTabs); |
98 | 109 | ||
99 | for (; it.current(); ++it) { | 110 | for (; it.current(); ++it) { |
100 | if (it.current()->channel() == channel) | 111 | if (it.current()->channel() == channel) |
101 | return it.current(); | 112 | return it.current(); |
102 | } | 113 | } |
103 | return 0; | 114 | return 0; |
104 | } | 115 | } |
105 | 116 | ||
106 | void IRCServerTab::display(IRCOutput output) { | 117 | void IRCServerTab::display(IRCOutput output) { |
107 | 118 | ||
108 | /* All messages to be displayed inside the GUI get here */ | 119 | /* All messages to be displayed inside the GUI get here */ |
109 | switch (output.type()) { | 120 | switch (output.type()) { |
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 | |||
@@ -1,86 +1,94 @@ | |||
1 | #include "ircsession.h" | 1 | #include "ircsession.h" |
2 | #include "ircmessageparser.h" | 2 | #include "ircmessageparser.h" |
3 | #include "ircversion.h" | 3 | #include "ircversion.h" |
4 | 4 | ||
5 | IRCSession::IRCSession(IRCServer *server) { | 5 | IRCSession::IRCSession(IRCServer *server) { |
6 | m_server = server; | 6 | m_server = server; |
7 | m_connection = new IRCConnection(m_server); | 7 | m_connection = new IRCConnection(m_server); |
8 | m_parser = new IRCMessageParser(this); | 8 | m_parser = new IRCMessageParser(this); |
9 | connect(m_connection, SIGNAL(messageArrived(IRCMessage *)), this, SLOT(handleMessage(IRCMessage *))); | 9 | connect(m_connection, SIGNAL(messageArrived(IRCMessage *)), this, SLOT(handleMessage(IRCMessage *))); |
10 | connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); | 10 | connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); |
11 | connect(m_connection, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); | 11 | connect(m_connection, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); |
12 | } | 12 | } |
13 | 13 | ||
14 | IRCSession::~IRCSession() { | 14 | 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; |
63 | } | 71 | } |
64 | 72 | ||
65 | IRCPerson *IRCSession::getPerson(QString nickname) { | 73 | IRCPerson *IRCSession::getPerson(QString nickname) { |
66 | QListIterator<IRCPerson> it(m_people); | 74 | QListIterator<IRCPerson> it(m_people); |
67 | for (; it.current(); ++it) { | 75 | for (; it.current(); ++it) { |
68 | if (it.current()->nick() == nickname) { | 76 | if (it.current()->nick() == nickname) { |
69 | return it.current(); | 77 | return it.current(); |
70 | } | 78 | } |
71 | } | 79 | } |
72 | return 0; | 80 | return 0; |
73 | } | 81 | } |
74 | 82 | ||
75 | void IRCSession::getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels) { | 83 | void IRCSession::getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels) { |
76 | QListIterator<IRCChannel> it(m_channels); | 84 | QListIterator<IRCChannel> it(m_channels); |
77 | for (; it.current(); ++it) { | 85 | for (; it.current(); ++it) { |
78 | if (it.current()->getPerson(person->nick()) != 0) { | 86 | if (it.current()->getPerson(person->nick()) != 0) { |
79 | channels.append(it.current()); | 87 | channels.append(it.current()); |
80 | } | 88 | } |
81 | } | 89 | } |
82 | } | 90 | } |
83 | 91 | ||
84 | void IRCSession::addPerson(IRCPerson *person) { | 92 | void IRCSession::addPerson(IRCPerson *person) { |
85 | m_people.append(person); | 93 | m_people.append(person); |
86 | } | 94 | } |
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 | |||
@@ -5,69 +5,71 @@ | |||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | 18 | ||
19 | */ | 19 | */ |
20 | 20 | ||
21 | #ifndef __IRCSESSION_H | 21 | #ifndef __IRCSESSION_H |
22 | #define __IRCSESSION_H | 22 | #define __IRCSESSION_H |
23 | 23 | ||
24 | #include <qstring.h> | 24 | #include <qstring.h> |
25 | #include <qlist.h> | 25 | #include <qlist.h> |
26 | #include "ircserver.h" | 26 | #include "ircserver.h" |
27 | #include "ircconnection.h" | 27 | #include "ircconnection.h" |
28 | #include "ircmessage.h" | 28 | #include "ircmessage.h" |
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 */ |