23 #include "cfgircdefinenetworkdialog.h" 24 #include "ui_cfgircdefinenetworkdialog.h" 26 #include "irc/configuration/chatnetworkscfg.h" 27 #include "irc/entities/ircnetworkentity.h" 28 #include "irc/chatnetworknamer.h" 29 #include <QMessageBox> 33 DClass<CFGIRCDefineNetworkDialog> :
public Ui::CFGIRCDefineNetworkDialog
36 static const int MAX_IRC_COMMAND_LENGTH = 512;
38 QList<IRCNetworkEntity> existingNetworks;
39 QString originalDescription;
50 initFrom(initValuesEntity);
53 CFGIRCDefineNetworkDialog::CFGIRCDefineNetworkDialog(QWidget* parent)
59 CFGIRCDefineNetworkDialog::~CFGIRCDefineNetworkDialog()
63 void CFGIRCDefineNetworkDialog::accept()
65 if (!validateDescription())
69 QStringList offenders = validateAutojoinCommands();
70 if (!offenders.isEmpty())
72 if (!askToAcceptAnywayWhenCommandsBad(offenders))
80 bool CFGIRCDefineNetworkDialog::askToAcceptAnywayWhenCommandsBad(
const QStringList& offenders)
82 assert(!offenders.isEmpty() &&
"no offenders");
83 QString header = tr(
"Following commands have violated the IRC maximum byte " 85 QString footer = tr(
"\n\nIf saved, the script may not run properly.\n\n" 86 "Do you wish to save the script anyway?");
87 QStringList formattedOffenders = formatOffenders(offenders.mid(0, 10));
88 QString body = formattedOffenders.join(
"\n\n");
89 if (formattedOffenders.size() < offenders.size())
91 body += tr(
"\n\n... and %n more ...",
"", offenders.size() - formattedOffenders.size());
93 QString msg = header + body + footer;
94 QMessageBox::StandardButton result = QMessageBox::warning(
95 this, tr(
"Doomseeker - IRC Commands Problem"), msg,
96 QMessageBox::Yes | QMessageBox::Cancel);
97 return result == QMessageBox::Yes;
100 QStringList CFGIRCDefineNetworkDialog::autojoinCommands()
const 102 return d->teAutojoinCommands->toPlainText().split(
"\n");
105 void CFGIRCDefineNetworkDialog::buttonClicked(QAbstractButton* button)
107 QPushButton* pButton = (QPushButton*)button;
108 if (pButton == d->buttonBox->button(QDialogButtonBox::Ok))
118 void CFGIRCDefineNetworkDialog::construct()
122 connect(d->buttonBox, SIGNAL( clicked(QAbstractButton*) ), SLOT( buttonClicked(QAbstractButton*) ) );
125 QStringList CFGIRCDefineNetworkDialog::formatOffenders(
const QStringList& offenders)
const 127 QStringList offendersFormatted;
128 foreach (
const QString& offender, offenders)
130 offendersFormatted << tr(
"\t%1 (...)").arg(offender.left(40));
132 return offendersFormatted;
139 QString autojoinChannels = d->teAutojoinChannels->toPlainText();
140 autojoinChannels.remove(
'\r').replace(
'\n',
' ');
142 entity.setAddress(d->leAddress->text().trimmed());
143 entity.setAutojoinChannels(autojoinChannels.split(
" ", QString::SkipEmptyParts));
144 entity.setAutojoinCommands(autojoinCommands());
145 entity.setDescription(d->leDescription->text().trimmed());
146 entity.setNickservCommand(d->leNickservCommand->text().trimmed());
147 entity.setNickservPassword(d->leNickservPassword->text());
148 entity.setPassword(d->leServerPassword->text());
149 entity.setPort(d->spinPort->value());
154 void CFGIRCDefineNetworkDialog::initFrom(
const IRCNetworkEntity& networkEntity)
156 d->originalDescription = networkEntity.
description();
157 d->leAddress->setText(networkEntity.
address());
158 d->teAutojoinChannels->setPlainText(networkEntity.
autojoinChannels().join(
" "));
159 d->teAutojoinCommands->setPlainText(networkEntity.
autojoinCommands().join(
"\n"));
160 d->leDescription->setText(networkEntity.
description());
161 d->leNickservCommand->setText(networkEntity.nickservCommand());
162 d->leNickservPassword->setText(networkEntity.nickservPassword());
163 d->leServerPassword->setText(networkEntity.
password());
164 d->spinPort->setValue(networkEntity.
port());
167 bool CFGIRCDefineNetworkDialog::isDescriptionUnique()
const 169 QString current = d->leDescription->text().trimmed().toLower();
170 if (d->originalDescription.trimmed().toLower() == current)
177 if (network.
description().trimmed().toLower() == current)
185 bool CFGIRCDefineNetworkDialog::isValidDescription()
const 187 return ChatNetworkNamer::isValidName(d->leDescription->text());
190 QList<IRCNetworkEntity> CFGIRCDefineNetworkDialog::listExistingNetworks()
const 192 if (!d->existingNetworks.isEmpty())
194 return d->existingNetworks;
202 QStringList CFGIRCDefineNetworkDialog::validateAutojoinCommands()
const 204 QStringList offenders;
205 foreach (
const QString& command, autojoinCommands())
209 offenders << command;
217 d->existingNetworks = networks;
220 bool CFGIRCDefineNetworkDialog::validateDescription()
222 if (d->leDescription->text().trimmed().isEmpty())
224 QMessageBox::critical(
this, tr(
"Invalid network description"),
225 tr(
"Network description cannot be empty."));
228 if (!isDescriptionUnique())
230 QMessageBox::critical(
this, tr(
"Invalid network description"),
231 tr(
"There already is a network with such description."));
234 if (!isValidDescription())
236 QString msg = tr(
"Network description is invalid.\n\n" 237 "Only letters, digits, spaces and \"%1\" are allowed.")
238 .arg(ChatNetworkNamer::additionalAllowedChars());
239 QMessageBox::critical(
this, tr(
"Invalid network description"), msg);
unsigned short port() const
Port of the server or network to connect to.
const QStringList & autojoinChannels() const
List of channels to which a /join command will be issued automatically when a connection with this ne...
const QString & description() const
A short, human-readable description for the network. (Preferably a single word).
Data structure that describes and defines a connection to an IRC network or server.
const QStringList & autojoinCommands() const
List of commands executed on network join.
void setExistingNetworks(const QList< IRCNetworkEntity > &networks)
Overrides extraction from config if not-empty list is set.
const QString & password() const
Password for the server or network. Ignored if empty.
const QString & address() const
Address of the server or network to connect to.