[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/ioslaves/kio_magnet
From: Christian Weilbach <christian () whiletaker ! homeip ! net>
Date: 2010-11-18 21:19:25
Message-ID: 20101118211925.14874AC8A0 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1198543 by weilbach:
Use the foreach macro; Rename vars for lists and items more meaningful; cleanup \
unnecessary code; fix handling of yet downloading single file torrents; add a message \
box to ask for user confirmation as a first security measure. Torrents are not \
started atm. (?) in slotTorrentAdded, have to check why.
M +34 -29 ktorrentdbusinterface.cpp
--- trunk/playground/ioslaves/kio_magnet/ktorrentdbusinterface.cpp #1198542:1198543
@@ -196,10 +196,16 @@
m_slave->setPath(m_torrentInt->filePathOnDisk(m_file));
m_slave->setSize(m_torrentInt->fileSize(m_file));
m_slave->downloaded();
- } else { // still downloading
+ } else if (m_file==-1) { // still downloading
+ m_slave->setPath(m_torrentInt->pathOnDisk());
+ m_slave->setSize(m_torrentInt->totalSize());
+ m_coreInt->start(m_tor);
+ m_torrentInt->createTorrentFileStream(0,true);
+ } else {
m_torrentInt->setDoNotDownload(m_file, false);
m_slave->setPath(m_torrentInt->filePathOnDisk(m_file));
m_slave->setSize(m_torrentInt->fileSize(m_file));
+ m_coreInt->start(m_tor);
m_torrentInt->createTorrentFileStream(m_file,true);
}
m_slave->added();
@@ -252,48 +258,43 @@
return;
qulonglong totalSize=0;
- QHash<QString,double> tList;
- QStringList torrents = MagnetSettings::managedTorrents();
- QList<QString>::const_iterator it = torrents.begin();
- QList<QString>::const_iterator end = torrents.end();
- for (;it!=end;it++) {
- if ((*it)==m_tor||MagnetSettings::runningTorrents().contains((*it)))
+ QHash<QString,double> shareRatioList;
+ foreach( QString torrent, MagnetSettings::managedTorrents() ) {
+ if (torrent==m_tor || MagnetSettings::runningTorrents().contains((torrent)))
break;
- KTorrentTorrentInterface* torrentInt = new \
org::ktorrent::torrent("org.ktorrent.ktorrent", "/torrent/"+(*it), + \
KTorrentTorrentInterface* torrentInt = new \
org::ktorrent::torrent("org.ktorrent.ktorrent", "/torrent/"+torrent, \
QDBusConnection::sessionBus()); if (!torrentInt->isValid() ||
(torrentInt->bytesLeft()==0 && \
torrentInt->shareRatio()>=MagnetSettings::maxShareRatio())) { QStringList mt = \
MagnetSettings::managedTorrents();
- mt.removeAll((*it));
+ mt.removeAll(torrent);
MagnetSettings::setManagedTorrents( mt );
delete torrentInt;
- m_coreInt->remove((*it),true);
- kDebug() << "remove " << (*it) << " torrent.";
+ m_coreInt->remove(torrent,true);
+ kDebug() << "removed " << torrent << " torrent.";
continue;
}
totalSize+=torrentInt->bytesDownloaded(); // TODO might get wrong results if \
network connection is buggy? if (torrentInt->bytesLeft()==0) {
- tList[(*it)]=torrentInt->shareRatio();
- kDebug() << (*it) << "-> " << torrentInt->shareRatio();
+ shareRatioList[torrent]=torrentInt->shareRatio();
+ kDebug() << torrent << "-> " << torrentInt->shareRatio();
}
delete torrentInt;
}
// TODO add ktorrent plugin/support to allow sane group size management?
// this only removes torrents when we run out of configured space, starting with \
the most shared ones
- if (totalSize>MagnetSettings::shareSize()*1024*1024&&m_torrentInt->isValid()) {
+ if ( totalSize>(MagnetSettings::shareSize()*1024*1024) && \
m_torrentInt->isValid() ) {
totalSize+=m_file!=-1 ? m_torrentInt->fileSize(m_file) : \
m_torrentInt->totalSize();
- QList<double> vals = tList.values();
- qSort( vals );
- QList<double>::const_iterator it = vals.end();
- QList<double>::const_iterator end = vals.begin();
- for ( ;it!=end; it-- ) {
- QString tor = tList.key((*it));
+ QList<double> sortedRatios = shareRatioList.values();
+ qSort( sortedRatios );
+ foreach ( double ratio, sortedRatios ) {
+ QString tor = shareRatioList.key(ratio);
KTorrentTorrentInterface* torrentInt = new \
org::ktorrent::torrent("org.ktorrent.ktorrent", "/torrent/"+tor, \
QDBusConnection::sessionBus()); totalSize-=torrentInt->bytesDownloaded();
delete torrentInt;
- tList.take(tor);
+ shareRatioList.take(tor);
m_coreInt->remove(tor,true);
if (totalSize<MagnetSettings::shareSize()*1024*1024) {
break;
@@ -315,6 +316,17 @@
if ( tor != m_tor )
return;
+ m_coreInt->stop(tor);
+ if ( m_slave->messageBox(KIO::SlaveBase::QuestionYesNo
+ , i18n( "Do you want to download and share the Torrent: \
\"%1\"?" ).arg( m_torrentInt->name() ) + , i18n( \
"Magnet-Link confirmation" )) != KMessageBox::Yes ) { + \
m_slave->error(KIO::ERR_UNKNOWN, i18n("Download of torrent %1 rejected by \
user.").arg(tor)); + m_coreInt->remove(tor,true);
+ return;
+ }
+ m_coreInt->start(tor);
+
+
QStringList mt = MagnetSettings::managedTorrents();
QStringList rt = MagnetSettings::runningTorrents();
mt.append(m_tor);
@@ -328,12 +340,6 @@
QDBusReply<uint>numFiles = m_torrentInt->numFiles();
int n = numFiles.value();
- if (m_file==-1&&n!=0) { // TODO add directory support
- m_slave->error(KIO::ERR_IS_DIRECTORY, i18n("Torrent \"%1\" contains a \
directory but no flid given.")
- .arg(m_torrentInt->name()));
- delete m_coreInt;
- return;
- }
// disable all files except the one needed
kDebug() << "Number of files: " << n;
@@ -343,7 +349,7 @@
m_torrentInt->setDoNotDownload(i, (i!=m_file) );
}
- // stream all torrents
+ // TODO stream all torrents for now
m_torrentInt->createTorrentFileStream(m_file,true);
m_coreInt->start(m_tor);
@@ -364,7 +370,6 @@
path = m_torrentInt->filePathOnDisk(m_file);
if (!path.isValid()) {
m_slave->error(KIO::ERR_SLAVE_DEFINED, i18n("Could not fetch path from \
KTorrent."));
- delete m_coreInt;
return;
}
QString p = path.value();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic