276 lines
7.5 KiB
C++
276 lines
7.5 KiB
C++
#include "IrcClientPlugin.h"
|
|
#include "pingmessagehandler.h"
|
|
#include "privmsgmessagehandler.h"
|
|
#include "testhandler.h"
|
|
#include "topichandler.h"
|
|
#include "joinmessagehandler.h"
|
|
#include "quitmessagehandler.h"
|
|
#include <QVBoxLayout>
|
|
#include <QtWidgets>
|
|
|
|
|
|
QString IrcClientPlugin::pname()
|
|
{
|
|
return "Irc Client Plugin";
|
|
}
|
|
|
|
QString IrcClientPlugin::pdesc()
|
|
{
|
|
return "Simple Irc Client Plugin";
|
|
}
|
|
|
|
QWidget* IrcClientPlugin::pcontent()
|
|
{
|
|
connectButton = new QPushButton(tr("Connect"));
|
|
connect(connectButton, SIGNAL(clicked()), this, SLOT(connectToServer()));
|
|
sendButton = new QPushButton(tr("Send"));
|
|
connect(sendButton, SIGNAL(clicked()), this, SLOT(sendMsg()));
|
|
joinButton = new QPushButton(tr("Join"));
|
|
connect(joinButton, SIGNAL(clicked()), this, SLOT(joinRoom()));
|
|
smallEditor = new QLineEdit;
|
|
smallEditor->setText("");
|
|
topic = new QLineEdit;
|
|
topic->setText("");
|
|
msgs = new QTextBrowser;
|
|
nicks = new QTextEdit;
|
|
nicks->setMinimumWidth(100);
|
|
nicks->setMaximumWidth(100);
|
|
msgs->setOpenExternalLinks(true);
|
|
connect(msgs, SIGNAL(textChanged()), this, SLOT(changePixmap())) ;
|
|
test = new QWidget();
|
|
test->setWindowTitle(tr("Irc Client Plugin"));
|
|
test->resize(400, 300);
|
|
|
|
QHBoxLayout *topLayout = new QHBoxLayout;
|
|
topLayout->addWidget(connectButton);
|
|
topLayout->addWidget(joinButton);
|
|
|
|
QHBoxLayout *midleLayout = new QHBoxLayout;
|
|
midleLayout->addWidget(msgs);
|
|
midleLayout->addWidget(nicks);
|
|
|
|
|
|
QHBoxLayout *bottomLayout = new QHBoxLayout;
|
|
// topLayout->addWidget(ftpServerLabel);
|
|
bottomLayout->addWidget(smallEditor);
|
|
//topLayout->addWidget(cdToParentButton);
|
|
bottomLayout->addWidget(sendButton);
|
|
|
|
QVBoxLayout *mainLayout = new QVBoxLayout;
|
|
mainLayout->addLayout(topLayout);
|
|
mainLayout->addWidget(topic);
|
|
mainLayout->addLayout(midleLayout);
|
|
// mainLayout->addWidget(msgs);
|
|
//mainLayout->addWidget(statusLabel);
|
|
mainLayout->addLayout(bottomLayout);
|
|
test->setLayout(mainLayout);
|
|
QIcon icon = QIcon(":/images/monkey.png");
|
|
test->setWindowIcon(icon);
|
|
return test;
|
|
}
|
|
|
|
void IrcClientPlugin::changePixmap()
|
|
{
|
|
QRegularExpression reg1(":\\)");
|
|
QTextCursor cursor1(msgs->document()->find(reg1));
|
|
|
|
if (!cursor1.isNull()) {
|
|
cursor1.insertHtml("<img src=\":/images/smile.png\">");
|
|
}
|
|
|
|
//auto text = msgs->toHtml();
|
|
// if(text != ""){
|
|
// QRegExp exp("<\sa\s+[^>]href\s=\s\"([^\"])\"\s>(.)<\/\sa\s*>");
|
|
// text.replace(exp, "{{\1}}");
|
|
// msgs->setHtml(text);
|
|
//}
|
|
|
|
|
|
//QRegExp reg(":\\("); // you can improve regular expression
|
|
QRegularExpression reg("https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)");
|
|
QTextCursor cursor(msgs->document()->find(reg));
|
|
|
|
if (!cursor.isNull()) {
|
|
|
|
QString nlink = "<a href=\"http://barosonix.com\">http://barosonix.com</a>";
|
|
|
|
cursor.insertHtml(nlink);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void IrcClientPlugin::connectToServer()
|
|
{
|
|
_client = new Client(test);
|
|
connect(_client, SIGNAL(PrivmsgReceived(Hostmask,QString,QString)), SLOT(onPrivmsgReceived(Hostmask,QString,QString)));
|
|
connect(_client, SIGNAL(NamesListReceived(QString)), SLOT(onNamesListReceived(QString)));
|
|
connect(_client, SIGNAL(JoinMsgReceived(Hostmask,QString,QString)), SLOT(onJoinMsgReceived(Hostmask,QString,QString)));
|
|
connect(_client, SIGNAL(QuitMsgReceived(Hostmask,QString,QString)), SLOT(onQuitMsgReceived(Hostmask,QString,QString)));
|
|
connect(_client, SIGNAL(TopicReceived(Hostmask,QString,QString)), SLOT(onTopicReceived(Hostmask,QString,QString)));
|
|
|
|
_client->setNickname("ahf_");
|
|
_client->setUsername("ahf");
|
|
_client->setRealname(QString::fromUtf8("Alexander Færøy"));
|
|
|
|
_client->setServerHostname("127.0.0.1");
|
|
_client->setServerPort(6667);
|
|
|
|
_client->registerMessageHandler("PING", new PingMessageHandler);
|
|
_client->registerMessageHandler("PRIVMSG", new PrivmsgMessageHandler);
|
|
_client->registerMessageHandler("353", new testhandler);
|
|
_client->registerMessageHandler("332", new topichandler);
|
|
_client->registerMessageHandler("JOIN", new joinmessagehandler);
|
|
_client->registerMessageHandler("PART", new quitmessagehandler);
|
|
|
|
_client->connectToServer();
|
|
}
|
|
|
|
void IrcClientPlugin::sendMsg()
|
|
{
|
|
QString input;
|
|
|
|
input = smallEditor->text();
|
|
|
|
if (input.isEmpty())
|
|
return;
|
|
|
|
if (input.at(0) == '/')
|
|
{
|
|
QString command = input.mid(1);
|
|
_client->sendRaw(command);
|
|
}
|
|
else
|
|
{
|
|
_client->sendPrivmsg("#test", input);
|
|
|
|
QString format;
|
|
format = "<font style='color: blue'>" + _client->getNickname() + "</font> " + input;
|
|
append(format);
|
|
}
|
|
|
|
smallEditor->clear();
|
|
|
|
}
|
|
|
|
void IrcClientPlugin::joinRoom()
|
|
{
|
|
_client->sendJoin("#test");
|
|
}
|
|
|
|
void IrcClientPlugin::onPrivmsgReceived(const Hostmask &hostmask, const QString &target, const QString &text)
|
|
{
|
|
QString format;
|
|
|
|
format = "<" + hostmask.getNickname() + "> " + text;
|
|
|
|
append(format);
|
|
}
|
|
|
|
void IrcClientPlugin::onNamesListReceived(const QString &text)
|
|
{
|
|
//QString format;
|
|
int marker = 0;
|
|
// qDebug() << "GOT:" << text;
|
|
QStringList list1 = text.split(QLatin1Char(' '));
|
|
for (QString data : list1) // iterate over array fibonacci
|
|
{
|
|
marker = marker +1;
|
|
if(marker > 2)
|
|
{
|
|
nicks->append(data);
|
|
// qDebug() << "GOT:" << data;
|
|
}
|
|
|
|
}
|
|
|
|
//format = "<" + hostmask.getNickname() + "> " + text;
|
|
|
|
//append(format);
|
|
}
|
|
|
|
void IrcClientPlugin::onJoinMsgReceived(const Hostmask& hostmask, const QString& target, const QString& text)
|
|
{
|
|
if(hostmask.getNickname() != _client->getNickname())
|
|
{
|
|
QString format;
|
|
qDebug() << "GOT:" << text;
|
|
format = "<" + hostmask.getNickname() + "> Has Joined.";
|
|
nicks->append(hostmask.getNickname());
|
|
append(format);
|
|
}
|
|
|
|
}
|
|
|
|
void IrcClientPlugin::onTopicReceived(const Hostmask& hostmask, const QString& target, const QString& text)
|
|
{
|
|
int marker = 0;
|
|
|
|
QString ftext = "";
|
|
QStringList list1 = text.split(QLatin1Char(' '));
|
|
for (QString data : list1) // iterate over array fibonacci
|
|
{
|
|
marker = marker +1;
|
|
if(marker > 1)
|
|
{
|
|
if(ftext != "")
|
|
{
|
|
ftext += " " + data;
|
|
}
|
|
else
|
|
{
|
|
ftext += data;
|
|
}
|
|
|
|
// qDebug() << "GOT:" << data;
|
|
}
|
|
|
|
}
|
|
// if(hostmask.getNickname() != _client->getNickname())
|
|
//{
|
|
// QString format;
|
|
qDebug() << "GOT:" << ftext;
|
|
topic->setText(ftext);
|
|
// format = "<" + hostmask.getNickname() + "> Has Joined.";
|
|
// nicks->append(hostmask.getNickname());
|
|
// append(format);
|
|
// }
|
|
|
|
}
|
|
|
|
void IrcClientPlugin::onQuitMsgReceived(const Hostmask& hostmask, const QString& target, const QString& text)
|
|
{
|
|
QString format;
|
|
qDebug() << "GOT:" << text;
|
|
format = "<" + hostmask.getNickname() + "> Has Quit.";
|
|
QStringList lines = nicks->toPlainText().split("\n");
|
|
|
|
int i = 0;
|
|
while(i < lines.size())
|
|
{
|
|
QString line = lines.at(i);
|
|
if(line.contains(hostmask.getNickname()))
|
|
{
|
|
lines.removeAt(i);
|
|
}
|
|
else
|
|
{
|
|
i++;
|
|
}
|
|
}
|
|
|
|
nicks->setPlainText(lines.join("\n"));
|
|
append(format);
|
|
}
|
|
|
|
void IrcClientPlugin::append(const QString &line)
|
|
{
|
|
msgs->append(line);
|
|
}
|
|
|
|
void IrcClientPlugin::connectToHost(QObject* host)
|
|
{
|
|
Q_UNUSED(host);
|
|
// Calculator plugin doesn't need host signals
|
|
}
|