summaryrefslogtreecommitdiffstats
path: root/ksirc/KSPrefs/page_autoconnect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ksirc/KSPrefs/page_autoconnect.cpp')
-rw-r--r--ksirc/KSPrefs/page_autoconnect.cpp309
1 files changed, 309 insertions, 0 deletions
diff --git a/ksirc/KSPrefs/page_autoconnect.cpp b/ksirc/KSPrefs/page_autoconnect.cpp
new file mode 100644
index 00000000..a6532915
--- /dev/null
+++ b/ksirc/KSPrefs/page_autoconnect.cpp
@@ -0,0 +1,309 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "page_autoconnect.h"
+
+
+#include <qregexp.h>
+#include <klocale.h>
+#include <klistview.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <knuminput.h>
+
+#define NAME 0
+#define PK 1
+#define PASS 2
+#define SSL 3
+
+PageAutoConnect::PageAutoConnect( QWidget *parent, const char *name ) : PageAutoConnectBase( parent, name)
+{
+ KLVAutoConnect->setSorting( 0 );
+ //KLVAutoConnect->header()->hide();
+
+ AddPB->setEnabled(FALSE);
+ DeletePB->setEnabled(FALSE);
+ PortKI->setValue(6667);
+}
+
+PageAutoConnect::~PageAutoConnect()
+{
+}
+
+void PageAutoConnect::saveConfig()
+{
+
+ KConfig *conf = kapp->config();
+ conf->setGroup("AutoConnect");
+
+ QStringList servers;
+
+ for(QListViewItem *it = KLVAutoConnect->firstChild();
+ it != 0;
+ it = it->nextSibling()){
+
+ QString server = it->text(NAME);
+
+ if(it->text(PK).length() > 0)
+ server += ":" + it->text(1);
+ if(it->text(SSL).length() > 0)
+ server += " (SSL)";
+ if(it->text(PASS).length() > 0)
+ server += QString(" (pass: %1)").arg(it->text(PASS));
+
+ servers << server;
+
+ QStringList channels;
+
+ for(QListViewItem *ch = it->firstChild();
+ ch != 0;
+ ch = ch->nextSibling()){
+ QString channel;
+
+ channel = ch->text(NAME);
+
+ if(ch->text(PK).length() > 0)
+ channel += QString(" (key: %1)").arg(ch->text(PK));
+
+ channels << channel;
+
+ }
+
+ channels.sort();
+ conf->writeEntry(server, channels);
+
+ }
+
+ servers.sort();
+
+ conf->writeEntry("Servers", servers);
+
+}
+
+void PageAutoConnect::readConfig()
+{
+ KConfig *conf = kapp->config();
+ conf->setGroup("AutoConnect");
+ QStringList servers = conf->readListEntry("Servers");
+ servers.sort();
+ QStringList::ConstIterator ser = servers.begin();
+ for( ; ser != servers.end(); ser++){
+ QStringList channels = conf->readListEntry(*ser);
+ QString server = *ser;
+ QString port = "6667";
+ QString ssl = QString::null;
+ QString pass = QString::null;
+
+ QRegExp rx("(.+) \\(SSL\\)(.*)");
+ if(rx.search(server) >= 0){
+ server = rx.cap(1) + rx.cap(3);
+ ssl = i18n("SSL");
+ }
+ rx.setPattern("(.+) \\(pass: (\\S+)\\)(.*)");
+ if(rx.search(server) >= 0){
+ server = rx.cap(1) + rx.cap(3);
+ pass = rx.cap(2);
+ }
+ rx.setPattern("([^: ]+):(\\d+)");
+ if(rx.search(server) >= 0){
+ kdDebug(5008) << server << ": Has port:" << rx.cap(2) << endl;
+ server = rx.cap(1);
+ port = rx.cap(2);
+ }
+ kdDebug(5008) << server << ": Done " << port << " " << ssl << " " << pass << endl;
+ QListViewItem *s = new QListViewItem(KLVAutoConnect, server, port, pass, ssl);
+ s->setOpen(TRUE);
+ channels.sort();
+ QStringList::ConstIterator chan = channels.begin();
+ for(; chan != channels.end(); chan++){
+ QString channel = *chan;
+ QString key = QString::null;
+ QRegExp crx("(.+) \\(key: (\\S+)\\)");
+ if(crx.search(channel) >= 0){
+ channel = crx.cap(1);
+ key = crx.cap(2);
+ }
+ new QListViewItem(s, channel, key);
+ }
+ }
+}
+
+void PageAutoConnect::defaultConfig()
+{
+ KLVAutoConnect->clear();
+ readConfig( );
+}
+
+void PageAutoConnect::changed()
+{
+ emit modified();
+}
+
+void PageAutoConnect::add_pressed()
+{
+ int fnd = 0;
+ QListViewItem *s = 0;
+
+ s = KLVAutoConnect->selectedItem();
+ if(!s){ /* new item */
+ QString server = ServerLE->text();
+ QString ssl = QString::null;
+ QString port;
+
+ port.setNum(PortKI->value());
+ if(sslCB->isChecked())
+ ssl = i18n("SSL");
+
+ s = new QListViewItem(KLVAutoConnect, server, port, PassLE->text(), ssl);
+ s->setOpen(TRUE);
+ s = new QListViewItem(s, ChannelLE->text(), KeyLE->text());
+ KLVAutoConnect->setCurrentItem(s);
+ }
+ else { /* update the existing one */
+ QListViewItem *parent;
+ QListViewItem *child;
+
+ if(s->parent()){
+ parent = s->parent();
+ child = s;
+ }
+ else {
+ parent = s;
+ child = 0x0;
+ }
+
+ parent->setText(NAME, ServerLE->text());
+ parent->setText(PK, QString("%1").arg(PortKI->value()));
+ parent->setText(PASS, PassLE->text());
+ if(sslCB->isChecked())
+ parent->setText(SSL, i18n("SSL"));
+ else
+ parent->setText(SSL, QString::null);
+
+ if(child){
+ child->setText(NAME, ChannelLE->text());
+ child->setText(PK, KeyLE->text());
+ }
+ else {
+ if(ChannelLE->text().length() > 0){
+ fnd = 0;
+ QListViewItem *c = parent->firstChild();
+ for( ; c != 0 && fnd == 0; c = c->nextSibling()){
+ if(c->text(NAME) == ChannelLE->text()){
+ c->setText(PK, KeyLE->text());
+ fnd = 1;
+ }
+ }
+ if(fnd == 0){
+ new QListViewItem(parent, ChannelLE->text(), KeyLE->text());
+ }
+ }
+ }
+
+ }
+ changed();
+}
+
+void PageAutoConnect::new_pressed()
+{
+ AddPB->setText(i18n("&Add"));
+ ServerLE->clear();
+ ChannelLE->clear();
+ sslCB->setChecked(false);
+ PassLE->clear();
+ KeyLE->clear();
+ KLVAutoConnect->clearSelection();
+ PortKI->setValue(6667) ;
+}
+
+void PageAutoConnect::delete_pressed()
+{
+ for(QListViewItem *it = KLVAutoConnect->firstChild();
+ it != 0;
+ it = it->nextSibling()){
+
+ if(it->text(NAME) == ServerLE->text()){
+ if(ChannelLE->text().isEmpty() == FALSE){
+ for(QListViewItem *ch = it->firstChild();
+ ch != 0;
+ ch = ch->nextSibling()){
+ if(ch->text(NAME) == ChannelLE->text()){
+ delete ch;
+ changed();
+ ChannelLE->clear();
+ ServerLE->clear();
+ return;
+ }
+ }
+ }
+ else {
+ delete it;
+ changed();
+ ServerLE->clear();
+ return;
+ }
+ }
+ }
+ changed();
+}
+
+void PageAutoConnect::kvl_clicked(QListViewItem *it)
+{
+ if(it != 0){
+ if(it->parent() != 0){
+ ChannelLE->setText(it->text(NAME));
+ KeyLE->setText(it->text(PK));
+ AddPB->setText(i18n("&Update"));
+ /*
+ * Move it to the parent to setup parent/server
+ * values. This save writing this code
+ * in two places.
+ */
+ it = it->parent();
+ }
+ else {
+ AddPB->setText(i18n("&Update/Add"));
+ ChannelLE->clear();
+ KeyLE->clear();
+ }
+
+ if(it->parent() == 0){
+ ServerLE->setText(it->text(NAME));
+ PortKI->setValue(it->text(PK).toInt());
+ PassLE->setText(it->text(PASS));
+ if(it->text(SSL).length() > 0)
+ sslCB->setChecked(true);
+ else
+ sslCB->setChecked(false);
+ }
+ /*
+ * Make sure to do this after changing all the fields
+ */
+ AddPB->setEnabled(false);
+ DeletePB->setEnabled(true);
+
+
+ }
+ else {
+ AddPB->setEnabled(false);
+ DeletePB->setEnabled(false);
+ }
+ changed();
+}
+
+void PageAutoConnect::item_changed() {
+ AddPB->setEnabled(true);
+}
+
+#include "page_autoconnect.moc"
+