diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 02:37:40 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 02:37:40 +0000 |
commit | 9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0 (patch) | |
tree | d088b5210e77d9fa91d954d8550e00e372b47378 /plugins/partfileimport | |
download | ktorrent-9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0.tar.gz ktorrent-9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0.zip |
Updated to final KDE3 ktorrent release (2.2.6)
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/ktorrent@1077377 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'plugins/partfileimport')
-rw-r--r-- | plugins/partfileimport/Makefile.am | 27 | ||||
-rw-r--r-- | plugins/partfileimport/importdialog.cpp | 389 | ||||
-rw-r--r-- | plugins/partfileimport/importdialog.h | 78 | ||||
-rw-r--r-- | plugins/partfileimport/importdlgbase.ui | 163 | ||||
-rw-r--r-- | plugins/partfileimport/ktpartfileimportplugin.desktop | 25 | ||||
-rw-r--r-- | plugins/partfileimport/ktpartfileimportpluginui.rc | 8 | ||||
-rw-r--r-- | plugins/partfileimport/partfileimportplugin.cpp | 78 | ||||
-rw-r--r-- | plugins/partfileimport/partfileimportplugin.h | 52 |
8 files changed, 820 insertions, 0 deletions
diff --git a/plugins/partfileimport/Makefile.am b/plugins/partfileimport/Makefile.am new file mode 100644 index 0000000..f5aca48 --- /dev/null +++ b/plugins/partfileimport/Makefile.am @@ -0,0 +1,27 @@ +INCLUDES = -I$(top_builddir)/apps/ktorrent -I$(srcdir)/../../libktorrent \ + $(all_includes) +METASOURCES = AUTO +kde_module_LTLIBRARIES = ktpartfileimportplugin.la +noinst_HEADERS = partfileimportplugin.h importdialog.h +ktpartfileimportplugin_la_SOURCES = partfileimportplugin.cpp importdlgbase.ui importdialog.cpp + +# Libs needed by the plugin +ktpartfileimportplugin_la_LIBADD = $(LIB_KHTML) $(LIB_KPARTS) \ + ../../libktorrent/libktorrent.la \ + $(LIB_QT) $(LIB_KDECORE) $(LIB_KDEUI) $(LIB_KFILE) + +# LD flags for the plugin +# -module says: this is a module, i.e. something you're going to dlopen +# so e.g. it has no version number like a normal shared lib would have. +ktpartfileimportplugin_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) + +# rc file containing the GUI for the plugin +rcdir = $(kde_datadir)/ktorrent +rc_DATA = ktpartfileimportpluginui.rc + +# Install the desktop file needed to detect the plugin +kde_services_DATA = ktpartfileimportplugin.desktop + +# kde_kcfg_DATA = ktpartfileimportplugin.kcfg + +KDE_CXXFLAGS = $(USE_EXCEPTIONS) $(USE_RTTI) diff --git a/plugins/partfileimport/importdialog.cpp b/plugins/partfileimport/importdialog.cpp new file mode 100644 index 0000000..22f9a4b --- /dev/null +++ b/plugins/partfileimport/importdialog.cpp @@ -0,0 +1,389 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joris Guisson * + * joris.guisson@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 <kurl.h> +#include <klocale.h> +#include <kprogress.h> +#include <kurlrequester.h> +#include <kpushbutton.h> +#include <kmessagebox.h> +#include <kio/job.h> +#include <kio/jobclasses.h> +#include <util/log.h> +#include <util/error.h> +#include <util/file.h> +#include <util/fileops.h> +#include <util/functions.h> +#include <torrent/globals.h> +#include <torrent/torrent.h> +#include <torrent/chunkmanager.h> +#include <interfaces/coreinterface.h> +#include "importdialog.h" +#include <datachecker/singledatachecker.h> +#include <datachecker/multidatachecker.h> + +using namespace bt; + +namespace kt +{ + ImportDialog::ImportDialog(CoreInterface* core,QWidget* parent, const char* name, bool modal, WFlags fl) + : ImportDlgBase(parent,name, modal,fl),DataCheckerListener(false),core(core) + { + KURLRequester* r = m_torrent_url; + r->setMode(KFile::File|KFile::LocalOnly); + r->setFilter("*.torrent|" + i18n("Torrent files") + "\n*|" + i18n("All files")); + + r = m_data_url; + r->setMode(KFile::File|KFile::Directory|KFile::LocalOnly); + + connect(m_import_btn,SIGNAL(clicked()),this,SLOT(onImport())); + connect(m_cancel_btn,SIGNAL(clicked()),this,SLOT(reject())); + m_progress->setEnabled(false); + } + + ImportDialog::~ImportDialog() + {} + + void ImportDialog::progress(Uint32 num,Uint32 total) + { + m_progress->setTotalSteps(total); + m_progress->setProgress(num); + } + + void ImportDialog::status(Uint32 ,Uint32 ) + { + // don't care + } + + void ImportDialog::finished() + { + // only used for check in separate thread, so does not apply for the import plugin + } + + void ImportDialog::import(Torrent & tor) + { + // get the urls + KURL tor_url = KURL::fromPathOrURL(m_torrent_url->url()); + KURL data_url = KURL::fromPathOrURL(m_data_url->url()); + + // now we need to check the data + DataChecker* dc = 0; + if (tor.isMultiFile()) + dc = new MultiDataChecker(); + else + dc = new SingleDataChecker(); + + try + { + dc->setListener(this); + dc->check(data_url.path(),tor,QString::null); + } + catch (Error & e) + { + delete dc; + KMessageBox::error(this,i18n("Cannot verify data : %1").arg(e.toString()),i18n("Error")); + reject(); + return; + } + + // find a new torrent dir and make it if necessary + QString tor_dir = core->findNewTorrentDir(); + if (!tor_dir.endsWith(bt::DirSeparator())) + tor_dir += bt::DirSeparator(); + + try + { + if (!bt::Exists(tor_dir)) + bt::MakeDir(tor_dir); + + // write the index file + writeIndex(tor_dir + "index",dc->getDownloaded()); + + // copy the torrent file + bt::CopyFile(tor_url.prettyURL(),tor_dir + "torrent"); + + Uint64 imported = calcImportedBytes(dc->getDownloaded(),tor); + + // make the cache + if (tor.isMultiFile()) + { + QValueList<Uint32> dnd_files; + bool dnd = false; + // first make tor_dir/cache/ + QString cache_dir = tor_dir + "cache" + bt::DirSeparator(); + QString dnd_dir = tor_dir + "dnd" + bt::DirSeparator(); + if (!bt::Exists(cache_dir)) + MakeDir(cache_dir); + if (!bt::Exists(dnd_dir)) + MakeDir(dnd_dir); + + + // make all sub symlinks + for (Uint32 i = 0;i < tor.getNumFiles();i++) + { + linkTorFile(cache_dir,dnd_dir,data_url,tor.getFile(i).getPath(),dnd); + if (dnd) + dnd_files.append(i); + dnd = false; + } + + QString durl = data_url.path(); + if (durl.endsWith(bt::DirSeparator())) + durl = durl.left(durl.length() - 1); + int ds = durl.findRev(bt::DirSeparator()); + if (durl.mid(ds+1) == tor.getNameSuggestion()) + { + durl = durl.left(ds); + saveStats(tor_dir + "stats",KURL::fromPathOrURL(durl),imported,false); + } + else + { + saveStats(tor_dir + "stats",KURL::fromPathOrURL(durl),imported,true); + } + saveFileInfo(tor_dir + "file_info",dnd_files); + } + else + { + // single file, just symlink the data_url to tor_dir/cache + bt::SymLink(data_url.path(),tor_dir + "cache"); + QString durl = data_url.path(); + int ds = durl.findRev(bt::DirSeparator()); + durl = durl.left(ds); + saveStats(tor_dir + "stats",durl,imported,false); + } + + // everything went OK, so load the whole shabang and start downloading + core->loadExistingTorrent(tor_dir); + } + catch (Error & e) + { + // delete tor_dir + bt::Delete(tor_dir,true); + delete dc; + KMessageBox::error(this,e.toString(),i18n("Error")); + reject(); + return; + } + + delete dc; + accept(); + } + + void ImportDialog::onTorrentGetReult(KIO::Job* j) + { + if (j->error()) + { + j->showErrorDialog(this); + reject(); + } + else + { + KIO::StoredTransferJob* stj = (KIO::StoredTransferJob*)j; + Torrent tor; + + // try to load the torrent + try + { + tor.load(stj->data(),false); + } + catch (Error & e) + { + KMessageBox::error(this,i18n("Cannot load the torrent file : %1").arg(e.toString()), + i18n("Error")); + reject(); + return; + } + import(tor); + } + } + + void ImportDialog::onImport() + { + m_progress->setEnabled(true); + m_import_btn->setEnabled(false); + m_cancel_btn->setEnabled(false); + m_torrent_url->setEnabled(false); + m_data_url->setEnabled(false); + + KURL tor_url = KURL::fromPathOrURL(m_torrent_url->url()); + if (!tor_url.isLocalFile()) + { + // download the torrent file + KIO::StoredTransferJob* j = KIO::storedGet(tor_url); + connect(j,SIGNAL(result(KIO::Job* )),this,SLOT(onTorrentGetReult(KIO::Job*))); + } + else + { + KURL tor_url = KURL::fromPathOrURL(m_torrent_url->url()); + Torrent tor; + + // try to load the torrent + try + { + tor.load(tor_url.path(),false); + } + catch (Error & e) + { + KMessageBox::error(this,i18n("Cannot load the torrent file : %1").arg(e.toString()), + i18n("Error")); + reject(); + return; + } + import(tor); + } + } + + void ImportDialog::writeIndex(const QString & file,const BitSet & chunks) + { + // first try to open it + File fptr; + if (!fptr.open(file,"wb")) + throw Error(i18n("Cannot open %1 : %2").arg(file).arg(fptr.errorString())); + + // write all chunks to the file + for (Uint32 i = 0;i < chunks.getNumBits();i++) + { + if (!chunks.get(i)) + continue; + + // we have the chunk so write a NewChunkHeader struct to the file + NewChunkHeader hdr; + hdr.index = i; + hdr.deprecated = 0; + fptr.write(&hdr,sizeof(NewChunkHeader)); + } + } + + void ImportDialog::linkTorFile(const QString & cache_dir,const QString & dnd_dir, + const KURL & data_url,const QString & fpath,bool & dnd) + { + QStringList sl = QStringList::split(bt::DirSeparator(),fpath); + + // create all necessary subdirs + QString ctmp = cache_dir; + QString otmp = data_url.path(); + if (!otmp.endsWith(bt::DirSeparator())) + otmp += bt::DirSeparator(); + + QString dtmp = dnd_dir; + for (Uint32 i = 0;i < sl.count() - 1;i++) + { + otmp += sl[i]; + ctmp += sl[i]; + dtmp += sl[i]; + // we need to make the same directory structure in the cache + // as the output dir + if (!bt::Exists(ctmp)) + MakeDir(ctmp); + if (!bt::Exists(otmp)) + MakeDir(otmp); + if (!bt::Exists(dtmp)) + MakeDir(dtmp); + otmp += bt::DirSeparator(); + ctmp += bt::DirSeparator(); + dtmp += bt::DirSeparator(); + } + + QString dfile = otmp + sl.last(); + if (!bt::Exists(dfile)) + { + // when we start the torrent the user will be asked what to do + // bt::SymLink(dfile,cache_dir + fpath); + dnd = false; + } + else + { + // just symlink the existing file + bt::SymLink(dfile,cache_dir + fpath); + dnd = false; + } + } + + void ImportDialog::saveStats(const QString & stats_file,const KURL & data_url,Uint64 imported,bool custom_output_name) + { + QFile fptr(stats_file); + if (!fptr.open(IO_WriteOnly)) + { + Out(SYS_PFI|LOG_IMPORTANT) << "Warning : can't create stats file" << endl; + return; + } + + QTextStream out(&fptr); + out << "OUTPUTDIR=" << data_url.path() << ::endl; + out << "UPLOADED=0" << ::endl; + out << "RUNNING_TIME_DL=0" << ::endl; + out << "RUNNING_TIME_UL=0" << ::endl; + out << "PRIORITY=0" << ::endl; + out << "AUTOSTART=1" << ::endl; + if (core->getGlobalMaxShareRatio() > 0) + out << QString("MAX_RATIO=%1").arg(core->getGlobalMaxShareRatio(),0,'f',2) << ::endl; + out << QString("IMPORTED=%1").arg(imported) << ::endl; + if (custom_output_name) + out << "CUSTOM_OUTPUT_NAME=1" << endl; + } + + Uint64 ImportDialog::calcImportedBytes(const bt::BitSet & chunks,const Torrent & tor) + { + Uint64 nb = 0; + Uint64 ls = tor.getFileLength() % tor.getChunkSize(); + if (ls == 0) + ls = tor.getChunkSize(); + + for (Uint32 i = 0;i < chunks.getNumBits();i++) + { + if (!chunks.get(i)) + continue; + + if (i == chunks.getNumBits() - 1) + nb += ls; + else + nb += tor.getChunkSize(); + } + return nb; + } + + void ImportDialog::saveFileInfo(const QString & file_info_file,QValueList<Uint32> & dnd) + { + // saves which TorrentFile's do not need to be downloaded + File fptr; + if (!fptr.open(file_info_file,"wb")) + { + Out(SYS_PFI|LOG_IMPORTANT) << "Warning : Can't save chunk_info file : " << fptr.errorString() << endl; + return; + } + + ; + + // first write the number of excluded ones + Uint32 tmp = dnd.count(); + fptr.write(&tmp,sizeof(Uint32)); + // then all the excluded ones + for (Uint32 i = 0;i < dnd.count();i++) + { + tmp = dnd[i]; + fptr.write(&tmp,sizeof(Uint32)); + } + fptr.flush(); + } +} + + + +#include "importdialog.moc" + diff --git a/plugins/partfileimport/importdialog.h b/plugins/partfileimport/importdialog.h new file mode 100644 index 0000000..b7617fc --- /dev/null +++ b/plugins/partfileimport/importdialog.h @@ -0,0 +1,78 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joris Guisson * + * joris.guisson@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. * + ***************************************************************************/ + +#ifndef IMPORTDIALOG_H +#define IMPORTDIALOG_H + +#include <util/constants.h> +#include <datachecker/datacheckerlistener.h> +#include "importdlgbase.h" + +class KURL; + +namespace bt +{ + class BitSet; + class Torrent; +} + +namespace KIO +{ + class Job; +} + + +namespace kt +{ + class CoreInterface; + + class ImportDialog : public ImportDlgBase,public bt::DataCheckerListener + { + Q_OBJECT + + public: + ImportDialog(CoreInterface* core,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); + virtual ~ImportDialog(); + + public slots: + void onImport(); + void onTorrentGetReult(KIO::Job* j); + + private: + void writeIndex(const QString & file,const bt::BitSet & chunks); + void linkTorFile(const QString & cache_dir,const QString & dnd_dir, + const KURL & data_url,const QString & fpath,bool & dnd); + void saveStats(const QString & stats_file,const KURL & data_url,bt::Uint64 imported,bool custom_output_name); + bt::Uint64 calcImportedBytes(const bt::BitSet & chunks,const bt::Torrent & tor); + void saveFileInfo(const QString & file_info_file,QValueList<bt::Uint32> & dnd); + + virtual void progress(bt::Uint32 num,bt::Uint32 total); + virtual void status(bt::Uint32 num_failed,bt::Uint32 num_downloaded); + virtual void finished(); + + void import(bt::Torrent & tor); + + private: + CoreInterface* core; + }; +} + +#endif + diff --git a/plugins/partfileimport/importdlgbase.ui b/plugins/partfileimport/importdlgbase.ui new file mode 100644 index 0000000..e1cdd64 --- /dev/null +++ b/plugins/partfileimport/importdlgbase.ui @@ -0,0 +1,163 @@ +<!DOCTYPE UI><UI version="3.3" stdsetdef="1"> +<class>ImportDlgBase</class> +<widget class="QDialog"> + <property name="name"> + <cstring>ImportDlgBase</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>473</width> + <height>196</height> + </rect> + </property> + <property name="caption"> + <string>Import an existing download</string> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>layout6</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>layout5</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>textLabel1</cstring> + </property> + <property name="minimumSize"> + <size> + <width>60</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>Torrent:</string> + </property> + </widget> + <widget class="QLabel"> + <property name="name"> + <cstring>textLabel2</cstring> + </property> + <property name="minimumSize"> + <size> + <width>60</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>Data:</string> + </property> + </widget> + </vbox> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>layout4</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="KURLRequester"> + <property name="name"> + <cstring>m_torrent_url</cstring> + </property> + </widget> + <widget class="KURLRequester"> + <property name="name"> + <cstring>m_data_url</cstring> + </property> + </widget> + </vbox> + </widget> + </hbox> + </widget> + <widget class="KActiveLabel"> + <property name="name"> + <cstring>kActiveLabel1</cstring> + </property> + <property name="text"> + <string>Please specify the torrent and the data already downloaded for that torrent.</string> + </property> + </widget> + <widget class="KProgress"> + <property name="name"> + <cstring>m_progress</cstring> + </property> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>layout3</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <spacer> + <property name="name"> + <cstring>spacer1</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>61</width> + <height>20</height> + </size> + </property> + </spacer> + <widget class="KPushButton"> + <property name="name"> + <cstring>m_import_btn</cstring> + </property> + <property name="text"> + <string>&Import</string> + </property> + </widget> + <widget class="KPushButton"> + <property name="name"> + <cstring>m_cancel_btn</cstring> + </property> + <property name="text"> + <string>Ca&ncel</string> + </property> + </widget> + </hbox> + </widget> + </vbox> +</widget> +<customwidgets> +</customwidgets> +<layoutdefaults spacing="6" margin="11"/> +<includehints> + <includehint>kurlrequester.h</includehint> + <includehint>klineedit.h</includehint> + <includehint>kpushbutton.h</includehint> + <includehint>kurlrequester.h</includehint> + <includehint>klineedit.h</includehint> + <includehint>kpushbutton.h</includehint> + <includehint>kactivelabel.h</includehint> + <includehint>kprogress.h</includehint> + <includehint>kpushbutton.h</includehint> + <includehint>kpushbutton.h</includehint> +</includehints> +</UI> diff --git a/plugins/partfileimport/ktpartfileimportplugin.desktop b/plugins/partfileimport/ktpartfileimportplugin.desktop new file mode 100644 index 0000000..5b28fe0 --- /dev/null +++ b/plugins/partfileimport/ktpartfileimportplugin.desktop @@ -0,0 +1,25 @@ +[Desktop Entry] +Name=PartialFileImportPlugin +Name[bg]=Приставка за частично импортиране на файлове +Name[de]=Teildatei-Import-Modul +Name[el]=Πρόσθετο εισαγωγής μερικής λήψης +Name[es]=Importación de ficheros parciales +Name[et]=Osalise faili impordi plugin +Name[it]=Plugin importazione file parziali +Name[nb]=Filimportmodul +Name[nds]=Importmoduul för Deeldateien +Name[nl]=Import gedeeltelijke bestanden +Name[pl]=Wtyczka importu części plików +Name[pt]=Importação de Ficheiros Parciais +Name[pt_BR]=Plugin de Importação Parcial de Arquivo +Name[sk]=PartialFileImport Plugin +Name[sr]=Прикључак за увоз недовршених фајлова +Name[sr@Latn]=Priključak za uvoz nedovršenih fajlova +Name[sv]=Insticksprogram för partiell filimport +Name[tr]=Tamamlanmamış Dosya Alma Eklentisi +Name[xx]=xxPartialFileImportPluginxx +Name[zh_CN]=部分文件导入插件 +Name[zh_TW]=PartialFileImport外掛程式 +ServiceTypes=KTorrent/Plugin +Type=Service +X-KDE-Library=ktpartfileimportplugin diff --git a/plugins/partfileimport/ktpartfileimportpluginui.rc b/plugins/partfileimport/ktpartfileimportpluginui.rc new file mode 100644 index 0000000..f8867e3 --- /dev/null +++ b/plugins/partfileimport/ktpartfileimportpluginui.rc @@ -0,0 +1,8 @@ +<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> +<kpartgui name="ktorrent" version="1"> +<MenuBar> + <Menu name="file"> + <Action name="partfileimport"/> + </Menu> +</MenuBar> +</kpartgui> diff --git a/plugins/partfileimport/partfileimportplugin.cpp b/plugins/partfileimport/partfileimportplugin.cpp new file mode 100644 index 0000000..c154478 --- /dev/null +++ b/plugins/partfileimport/partfileimportplugin.cpp @@ -0,0 +1,78 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joris Guisson * + * joris.guisson@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 <kgenericfactory.h> +#include <kglobal.h> +#include <klocale.h> +#include <kiconloader.h> +#include <kstdaction.h> +#include <kpopupmenu.h> +#include <interfaces/guiinterface.h> +#include <interfaces/coreinterface.h> +#include "partfileimportplugin.h" +#include "importdialog.h" + +#define NAME "Import" +#define AUTHOR "Joris Guisson" +#define EMAIL "joris.guisson@gmail.com" + + + +K_EXPORT_COMPONENT_FACTORY(ktpartfileimportplugin,KGenericFactory<kt::PartFileImportPlugin>("ktpartfileimportplugin")) + +namespace kt +{ + + PartFileImportPlugin::PartFileImportPlugin(QObject* parent, const char* name, const QStringList& args) + : Plugin(parent, name, args,NAME,i18n("Import"),AUTHOR,EMAIL,i18n("Imports partially or fully downloaded torrents from other clients"),"ktplugins") + { + setXMLFile("ktpartfileimportpluginui.rc"); + import_action = 0; + } + + + PartFileImportPlugin::~PartFileImportPlugin() + {} + + + void PartFileImportPlugin::load() + { + import_action = new KAction(i18n("Import existing download" ), 0, this, + SLOT(onImport()), actionCollection(), "partfileimport" ); + } + + void PartFileImportPlugin::unload() + { + delete import_action; + import_action = 0; + } + + void PartFileImportPlugin::onImport() + { + ImportDialog dlg(getCore(),0,0,true); + dlg.exec(); + } + + bool PartFileImportPlugin::versionCheck(const QString & version) const + { + return version == KT_VERSION_MACRO; + } + +} +#include "partfileimportplugin.moc" diff --git a/plugins/partfileimport/partfileimportplugin.h b/plugins/partfileimport/partfileimportplugin.h new file mode 100644 index 0000000..31f2d3a --- /dev/null +++ b/plugins/partfileimport/partfileimportplugin.h @@ -0,0 +1,52 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joris Guisson * + * joris.guisson@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. * + ***************************************************************************/ +#ifndef KTPARTFILEIMPORTPLUGIN_H +#define KTPARTFILEIMPORTPLUGIN_H + +#include <interfaces/plugin.h> + +class KAction; + +namespace kt +{ + + /** + @author Joris Guisson + */ + class PartFileImportPlugin : public Plugin + { + Q_OBJECT + public: + PartFileImportPlugin(QObject* parent, const char* name, const QStringList& args); + virtual ~PartFileImportPlugin(); + + virtual void load(); + virtual void unload(); + virtual bool versionCheck(const QString& version) const; + public slots: + void onImport(); + + private: + KAction* import_action; + }; + +} + +#endif |