You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktorrent/plugins/ipfilter/ipblockingprefpage.cpp

259 lines
7.3 KiB

/***************************************************************************
* Copyright (C) 2005 by Joris Guisson *
* joris.guisson@gmail.com *
* ivasic@gmail.com *
* *
* 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. *
* *
* 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 "ipblockingprefpage.h"
#include "ipblockingpref.h"
#include "ipfilterpluginsettings.h"
#include "ipfilterplugin.h"
#include "convertdialog.h"
#include <kapplication.h>
#include <kglobal.h>
#include <kstandarddirs.h>
#include <klocale.h>
#include <kiconloader.h>
#include <kurlrequester.h>
#include <kurl.h>
#include <kmessagebox.h>
#include <kio/netaccess.h>
#include <kprogress.h>
#include <kmimetype.h>
#include <util/log.h>
#include <torrent/globals.h>
#include <interfaces/coreinterface.h>
#include <tqthread.h>
#include <tqlabel.h>
#include <tqcheckbox.h>
#include <tqregexp.h>
#include <tqvalidator.h>
#include <tqlayout.h>
#include <tqdialog.h>
#include <tqobject.h>
using namespace bt;
#define MAX_RANGES 500
namespace kt
{
IPBlockingPrefPageWidget::IPBlockingPrefPageWidget(TQWidget* parent) : IPBlockingPref(parent)
{
m_url->setURL(IPBlockingPluginSettings::filterURL());
if (m_url->url() == "")
m_url->setURL(TQString("http://www.bluetack.co.uk/config/splist.zip"));
bool use_level1 = IPBlockingPluginSettings::useLevel1();
checkUseLevel1->setChecked(use_level1);
if(use_level1)
{
lbl_status1->setText(i18n("Status: Loaded and running."));
m_url->setEnabled(true);
btnDownload->setEnabled(true);
}
else
{
lbl_status1->setText(i18n("Status: Not loaded."));
m_url->setEnabled(false);
btnDownload->setEnabled(false);
}
m_plugin = 0;
}
void IPBlockingPrefPageWidget::apply()
{
IPBlockingPluginSettings::setFilterURL(m_url->url());
IPBlockingPluginSettings::setUseLevel1(checkUseLevel1->isChecked());
IPBlockingPluginSettings::writeConfig();
if(checkUseLevel1->isChecked())
{
TQFile target(KGlobal::dirs()->saveLocation("data","ktorrent") + "level1.dat");
if(target.exists())
lbl_status1->setText(i18n("Status: Loaded and running."));
else
lbl_status1->setText(i18n("Status: <font color=\"#ff0000\">Filter file not found.</font> Download and convert filter file."));
}
else
lbl_status1->setText(i18n("Status: Not loaded."));
}
void IPBlockingPrefPageWidget::btnDownload_clicked()
{
TQString target(KGlobal::dirs()->saveLocation("data","ktorrent") + "level1");
TQFile target_file(target);
TQFile txtfile(target + ".txt");
KURL url(m_url->url());
KURL dest(target);
KURL temp(KGlobal::dirs()->saveLocation("data","ktorrent") + "level1.tmp");
if(KIO::NetAccess::exists(temp,false, this))
KIO::NetAccess::del(temp,this);
bool download = true;
if(txtfile.exists())
{
if((KMessageBox::questionYesNo(this, i18n("Selected file already exists, do you want to download it again?"),i18n("File Exists")) == 4))
download = false;
else
KIO::NetAccess::move(target, temp);
}
if(download)
{
if(!url.isLocalFile())
{
if (KIO::NetAccess::download(url,target,NULL))
{
//Level1 list successfully downloaded, remove temporary file
KIO::NetAccess::removeTempFile(target);
KIO::NetAccess::del(temp, this);
}
else
{
TQString err = KIO::NetAccess::lastErrorString();
if(err != TQString())
KMessageBox::error(0,KIO::NetAccess::lastErrorString(),i18n("Error"));
else
KIO::NetAccess::move(temp, target);
//we don't want to convert since download failed
return;
}
}
else
{
if (!KIO::NetAccess::file_copy(url,dest, -1, true))
{
KMessageBox::error(0,KIO::NetAccess::lastErrorString(),i18n("Error"));
return;
}
}
//now determine if it's ZIP or TXT file
KMimeType::Ptr ptr = KMimeType::findByPath(target);
if(ptr->name() == "application/x-zip")
{
KURL zipfile("zip:" + target + "/splist.txt");
KURL destinationfile(target + ".txt");
KIO::NetAccess::file_copy(zipfile,destinationfile, -1, true);
}
else
{
KURL zipfile(target);
KURL destinationfile(target + ".txt");
KIO::NetAccess::file_copy(zipfile,destinationfile, -1, true);
}
}
convert();
}
void IPBlockingPrefPageWidget::checkUseLevel1_toggled(bool check)
{
if(check)
{
m_url->setEnabled(true);
btnDownload->setEnabled(true);
}
else
{
lbl_status1->setText("");
m_url->setEnabled(false);
btnDownload->setEnabled(false);
}
}
void IPBlockingPrefPageWidget::convert()
{
TQFile target(KGlobal::dirs()->saveLocation("data","ktorrent") + "level1.dat");
if(target.exists())
{
if((KMessageBox::questionYesNo(this,i18n("Filter file (level1.dat) already exists, do you want to convert it again?"),i18n("File Exists")) == 4))
return;
// else
// KIO::NetAccess::del(KGlobal::dirs()->saveLocation("data","ktorrent") + "level1.dat", NULL);
}
ConvertDialog dlg(m_plugin);
dlg.exec();
}
void IPBlockingPrefPageWidget::setPlugin(IPFilterPlugin* p)
{
m_plugin = p;
}
void IPBlockingPrefPageWidget::setPrefPage( IPBlockingPrefPage * p )
{
m_prefpage = p;
}
void IPBlockingPrefPageWidget::setConverting(bool enable)
{
btnDownload->setEnabled(enable);
lbl_status1->setText("");
}
////////////////////////////////////////////////////////////////////////////////////
IPBlockingPrefPage::IPBlockingPrefPage(CoreInterface* core, IPFilterPlugin* p)
: PrefPageInterface(i18n("IPBlocking Filter"), i18n("IPBlocking Filter Options"), KGlobal::iconLoader()->loadIcon("filter",KIcon::NoGroup)), m_core(core), m_plugin(p)
{
widget = 0;
}
IPBlockingPrefPage::~IPBlockingPrefPage()
{}
bool IPBlockingPrefPage::apply()
{
widget->apply();
if(IPBlockingPluginSettings::useLevel1())
m_plugin->loadAntiP2P();
else
m_plugin->unloadAntiP2P();
return true;
}
void IPBlockingPrefPage::createWidget(TQWidget* parent)
{
widget = new IPBlockingPrefPageWidget(parent);
widget->setPlugin(m_plugin);
widget->setPrefPage(this);
}
void IPBlockingPrefPage::deleteWidget()
{
delete widget;
widget = 0;
}
void IPBlockingPrefPage::updateData()
{}
}