summaryrefslogtreecommitdiffstats
path: root/src/modules/mircimport/libkvimircimport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/mircimport/libkvimircimport.cpp')
-rw-r--r--src/modules/mircimport/libkvimircimport.cpp385
1 files changed, 385 insertions, 0 deletions
diff --git a/src/modules/mircimport/libkvimircimport.cpp b/src/modules/mircimport/libkvimircimport.cpp
new file mode 100644
index 00000000..4f3ac568
--- /dev/null
+++ b/src/modules/mircimport/libkvimircimport.cpp
@@ -0,0 +1,385 @@
+//
+// File : libkvimircimport.cpp
+// Creation date : Tue Aug 27 01:20:35 2002 GMT by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2002 Szymon Stefanek (pragma at kvirc dot net)
+//
+// 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 opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+
+#include "libkvimircimport.h"
+#include "kvi_module.h"
+
+#include "kvi_filedialog.h"
+#include "kvi_fileutils.h"
+#include "kvi_locale.h"
+#include "kvi_config.h"
+#include "kvi_app.h"
+#include "kvi_qstring.h"
+
+
+#include <qmessagebox.h>
+#include <qdir.h>
+#include <qpushbutton.h>
+#include "kvi_tal_vbox.h"
+
+KviMircServersIniImport * g_pMircServersIniImport = 0;
+KviRemoteMircServersIniImport * g_pRemoteMircServersIniImport = 0;
+
+
+KviMircServersIniImport::KviMircServersIniImport(KviModuleExtensionDescriptor * d)
+: KviMexServerImport(d)
+{
+}
+
+KviMircServersIniImport::~KviMircServersIniImport()
+{
+ g_pMircServersIniImport = 0;
+}
+
+int KviMircServersIniImport::doImport(const QString& filename)
+{
+ KviConfig cfg(filename,KviConfig::Read,true);
+ int iCount = 0;
+ if(cfg.hasGroup("servers"))
+ {
+ cfg.setGroup("servers");
+ int i = 0;
+ QString key;
+ QString entry;
+ do {
+ KviQString::sprintf(key,"n%d",i);
+ entry = cfg.readEntry(key,"");
+ if(!entry.isEmpty())
+ {
+ QString description;
+ QString serv;
+ QString port;
+ kvi_u32_t uPort = 0;
+ // <description>SERVER:<server:port>GROUP:<network>
+ int idx = KviQString::find(entry,"SERVER:");
+ if(idx != -1)
+ {
+ description = entry.left(idx);
+ entry.remove(0,idx + 7);
+ idx = KviQString::find(entry,"GROUP:");
+ if(idx != -1)
+ {
+ port = entry.left(idx);
+ entry.remove(0,idx + 6);
+ }
+ idx = KviQString::find(port,':');
+ if(idx != -1)
+ {
+ serv = port.left(idx);
+ port.remove(0,idx + 1);
+ bool bOk;
+ uPort = port.toUInt(&bOk);
+ if(!bOk)uPort = 6667;
+ } else {
+ serv = port;
+ uPort = 6667;
+ }
+ }
+ if(entry.isEmpty())entry = __tr("Standalone Servers");
+ if(!serv.isEmpty())
+ {
+ KviIrcServer s;
+ s.m_szHostname = serv;
+ s.m_szDescription = description;
+ s.m_uPort = uPort;
+ iCount++;
+ emit server(s,entry);
+ }
+ ++i;
+ }
+ } while(!entry.isEmpty());
+ } else {
+ QString tmp;
+ KviQString::sprintf(tmp,__tr2qs("%Q doesn't look like a servers.ini file.\nImport failed."),&filename);
+ QMessageBox::warning(0,__tr2qs("Warning - KVIrc"),tmp);
+ }
+ return iCount;
+}
+
+void KviMircServersIniImport::start()
+{
+ //KviStr buffer;
+ QString buffer;
+ if(!KviFileDialog::askForOpenFileName(buffer,__tr("Choose a servers.ini file"),0,"*.ini",false,true))return;
+
+ doImport(buffer);
+ delete this;
+}
+
+void KviMircServersIniImport::die()
+{
+ delete this;
+}
+
+
+
+
+
+
+
+#define KVI_WWWMIRCCOUK_SERVERSINI "http://www.mirc.co.uk/servers.ini"
+
+
+
+KviRemoteMircServerImportWizard::KviRemoteMircServerImportWizard(KviRemoteMircServersIniImport * f)
+: KviTalWizard(0)
+{
+ QString capt = __tr2qs("Remote mIRC servers.ini Import Wizard");
+ setCaption(capt);
+
+
+ m_pRequest = 0;
+ m_pFilter = f;
+
+ QLabel * l = new QLabel(this);
+ l->setText(__tr2qs("<center><b>Welcome!</b><br><br>This wizard will guide you in the process of " \
+ "downloading a list of IRC servers. Please click \"<b>Next</b>\" to begin the operation.</center>"));
+ addPage(l,capt);
+
+
+ KviTalVBox * vb = new KviTalVBox(this);
+ l = new QLabel(vb);
+ l->setText(__tr2qs("<center>Here you can modify the URL that the list will be downloaded from. In most cases the default URL is acceptable.</center>"));
+
+ vb->setStretchFactor(l,1);
+
+ m_pUrlEdit = new QLineEdit(vb);
+
+ m_pUrlEdit->setText(KVI_WWWMIRCCOUK_SERVERSINI);
+
+ addPage(vb,__tr2qs("URL Selection"));
+
+ vb = new KviTalVBox(this);
+
+ l = new QLabel(__tr2qs("Please wait while the list is being downloaded"),vb);
+ vb->setStretchFactor(l,1);
+
+ m_pOutput = new QLabel(vb);
+ m_pOutput->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
+
+ addPage(vb,__tr2qs("List Download"));
+
+ setBackEnabled(vb,false);
+ setNextEnabled(vb,false);
+ setFinishEnabled(vb,true);
+
+ connect(this,SIGNAL(selected(const QString &)),this,SLOT(pageSelected(const QString &)));
+}
+
+KviRemoteMircServerImportWizard::~KviRemoteMircServerImportWizard()
+{
+ if(m_pRequest)delete m_pRequest;
+}
+
+void KviRemoteMircServerImportWizard::pageSelected(const QString &title)
+{
+ if(title == __tr2qs("List Download"))
+ {
+ start();
+ }
+}
+
+void KviRemoteMircServerImportWizard::closeEvent(QCloseEvent *)
+{
+ m_pFilter->die();
+}
+
+void KviRemoteMircServerImportWizard::done(int r)
+{
+ m_pFilter->die();
+}
+
+
+void KviRemoteMircServerImportWizard::start()
+{
+ QString url = m_pUrlEdit->text();
+ if(url.isEmpty())url = KVI_WWWMIRCCOUK_SERVERSINI;
+
+ finishButton()->setEnabled(false);
+ if(m_pRequest)delete m_pRequest;
+
+ m_pRequest = new KviHttpRequest();
+ connect(m_pRequest,SIGNAL(terminated(bool)),this,SLOT(getListTerminated(bool)));
+ connect(m_pRequest,SIGNAL(status(const QString &)),this,SLOT(getListMessage(const QString &)));
+
+ g_pApp->getTmpFileName(m_szTmpFileName,"servers.ini");
+ if(!m_pRequest->get(KviUrl(url),KviHttpRequest::StoreToFile,m_szTmpFileName))
+ {
+ delete m_pRequest;
+ m_pRequest = 0;
+ m_pOutput->setText(__tr2qs("Failed to start the server list transfer :("));
+ finishButton()->setEnabled(true);
+ }
+}
+
+void KviRemoteMircServerImportWizard::getListMessage(const QString &message)
+{
+ if(!message.isEmpty())m_pOutput->setText(message);
+}
+
+
+void KviRemoteMircServerImportWizard::getListTerminated(bool bSuccess)
+{
+ if(!m_pRequest)return;
+ if(bSuccess)
+ {
+ m_pOutput->setText(__tr2qs("File downloaded: processing ..."));
+ m_pOutput->repaint();
+#ifndef COMPILE_ON_WINDOWS
+ g_pApp->syncX();
+#endif //!COMPILE_ON_WINDOWS
+
+ int iCount = m_pFilter->doImport(m_szTmpFileName);
+
+ QString tmp;
+ if(iCount > 0)
+ tmp = __tr2qs("%1 servers imported succesfully").arg(iCount);
+ else
+ tmp = __tr2qs("No servers imported");
+ m_pOutput->setText(tmp);
+
+ QDir d;
+ d.remove(m_szTmpFileName);
+ } else m_pOutput->setText(m_pRequest->lastError());
+
+ delete m_pRequest;
+ m_pRequest = 0;
+ cancelButton()->setEnabled(false);
+ finishButton()->setEnabled(true);
+}
+
+
+KviRemoteMircServersIniImport::KviRemoteMircServersIniImport(KviModuleExtensionDescriptor * d)
+: KviMircServersIniImport(d)
+{
+ m_pWizard = 0;
+}
+
+KviRemoteMircServersIniImport::~KviRemoteMircServersIniImport()
+{
+ if(m_pWizard)delete m_pWizard;
+ g_pRemoteMircServersIniImport = 0;
+}
+
+void KviRemoteMircServersIniImport::start()
+{
+ if(m_pWizard)delete m_pWizard;
+ m_pWizard = new KviRemoteMircServerImportWizard(this);
+ m_pWizard->show();
+}
+
+void KviRemoteMircServersIniImport::die()
+{
+ delete this;
+}
+
+
+static KviModuleExtension * mircimport_local_filter_alloc(KviModuleExtensionAllocStruct * s)
+{
+ if(g_pMircServersIniImport)delete g_pMircServersIniImport;
+ g_pMircServersIniImport = new KviMircServersIniImport(s->pDescriptor);
+ return g_pMircServersIniImport;
+}
+
+static KviModuleExtension * mircimport_remote_filter_alloc(KviModuleExtensionAllocStruct * s)
+{
+ if(g_pRemoteMircServersIniImport)delete g_pRemoteMircServersIniImport;
+ g_pRemoteMircServersIniImport = new KviRemoteMircServersIniImport(s->pDescriptor);
+ return g_pRemoteMircServersIniImport;
+}
+
+static bool mircimport_module_init(KviModule * m)
+{
+ QString szPath;
+ QPixmap * pix = 0;
+ if(g_pApp->findImage(szPath,"kvi_mircimport.png"))
+ {
+ pix = new QPixmap(szPath);
+ if(pix->isNull())
+ {
+ delete pix;
+ pix = 0;
+ }
+ }
+
+ KviModuleExtensionDescriptor * d = m->registerExtension("serverimport",
+ "mIRC servers.ini import filter",
+ __tr("Import from servers.ini"),
+ mircimport_local_filter_alloc);
+
+ if(d && pix)d->setIcon(*pix);
+
+ d = m->registerExtension("serverimport",
+ "Remote mIRC servers.ini import filter",
+ __tr("Import from http://www.mirc.co.uk/servers.ini"),
+ mircimport_remote_filter_alloc);
+
+ if(d && pix)d->setIcon(*pix);
+
+ if(pix)delete pix;
+ return true;
+}
+
+static bool mircimport_module_cleanup(KviModule *m)
+{
+ if(g_pMircServersIniImport)delete g_pMircServersIniImport;
+ if(g_pRemoteMircServersIniImport)delete g_pRemoteMircServersIniImport;
+ g_pMircServersIniImport = 0;
+ g_pRemoteMircServersIniImport = 0;
+
+ return true;
+}
+
+static bool mircimport_module_can_unload(KviModule * m)
+{
+ return ((!g_pMircServersIniImport) && (!g_pRemoteMircServersIniImport));
+}
+
+/*
+KVIMODULEEXPORTFUNC KviIrcServerImport * mircimport_module_createIrcServerImport(const char *filterName)
+{
+ if(kvi_strEqualCI(filterName,__tr("Import from servers.ini")))
+ {
+ if(!g_pMircServersIniImport)g_pMircServersIniImport = new KviMircServersIniImport();
+ return g_pMircServersIniImport;
+ } else {
+ if(!g_pRemoteMircServersIniImport)g_pRemoteMircServersIniImport = new KviRemoteMircServersIniImport("http://www.mirc.co.uk/servers.ini");
+ return g_pRemoteMircServersIniImport;
+ }
+ return 0;
+}
+*/
+
+
+
+KVIRC_MODULE(
+ "File", // module name
+ "1.0.0", // module version
+ "Copyright (C) 2002 Szymon Stefanek (pragma at kvirc dot net)", // author & (C)
+ "mIRC servers.ini importer",
+ mircimport_module_init,
+ mircimport_module_can_unload,
+ 0,
+ mircimport_module_cleanup
+)
+
+#include "libkvimircimport.moc"