Version: 2.2rc1 (using KDE KDE 3.5.7) Installed from: Ubuntu Packages OS: Linux When changing the download place for a torrent and downloading it at the same time, ktorrent starts to copy the old files to the new directory as it should, but as the download process is still going on it shows the error message of lost data (wether I want download the data again or ignore the problem) The quick solution is to stop/pause the download and start it again when the transfer of the uncomplete data is done, but it might be nice if the was an automatic system for the dum guys like me how doesn't think before they do something :-) Heres a screenshot of the situation: http://metalguru.fi/valokuva2.png
Is this torrent controlled by the QM ?
Yes, it was... and I tested to do the same thing to a torrent that is user controlled and discovered that torrent automatically stops untill the transfer is complete :-) So the problem obviously has something to do with the QM.
We stop the torrent, but the QM starts it again.
SVN commit 678949 by guisson: Make sure QM cannot start torrents which are currently moving their data files. BUG: 146997 M +3 -0 interfaces/torrentinterface.h M +1 -1 torrent/queuemanager.cpp M +9 -2 torrent/torrentcontrol.cpp M +4 -2 torrent/torrentcontrol.h --- branches/extragear/kde3/network/ktorrent/libktorrent/interfaces/torrentinterface.h #678948:678949 @@ -428,6 +428,9 @@ /// Check if there is enough diskspace available for this torrent virtual bool checkDiskSpace(bool emit_sig = true) = 0; + + /// Are we in the process of moving files + virtual bool isMovingFiles() const = 0; signals: /** * Emited when we have finished downloading. --- branches/extragear/kde3/network/ktorrent/libktorrent/torrent/queuemanager.cpp #678948:678949 @@ -474,7 +474,7 @@ ++user_seeding; } - if (!s.user_controlled) + if (!s.user_controlled && !tc->isMovingFiles()) { if (s.completed) seed_queue.append(tc); --- branches/extragear/kde3/network/ktorrent/libktorrent/torrent/torrentcontrol.cpp #678948:678949 @@ -117,6 +117,7 @@ // by default no torrent limits upload_gid = download_gid = 0; upload_limit = download_limit = 0; + moving_files = false; } @@ -142,7 +143,7 @@ void TorrentControl::update() { UpdateCurrentTime(); - if (stats.status == kt::CHECKING_DATA) + if (stats.status == kt::CHECKING_DATA || moving_files) return; if (istats.io_error) @@ -322,7 +323,7 @@ void TorrentControl::start() { // do not start running torrents - if (stats.running || stats.status == kt::ALLOCATING_DISKSPACE) + if (stats.running || stats.status == kt::ALLOCATING_DISKSPACE || moving_files) return; stats.stopped_by_error = false; @@ -817,6 +818,7 @@ Out(SYS_GEN|LOG_NOTICE) << "Moving data for torrent " << stats.torrent_name << " to " << new_dir << endl; bool start = false; + int old_prio = getPriority(); //check if torrent is running and stop it before moving data if(stats.running) @@ -825,6 +827,7 @@ this->stop(false); } + moving_files = true; try { QString nd; @@ -858,11 +861,15 @@ catch (Error& err) { Out(SYS_GEN|LOG_IMPORTANT) << "Could not move " << stats.output_path << " to " << new_dir << ". Exception: " << err.toString() << endl; + moving_files = false; return false; } + moving_files = false; if(start) + { this->start(); + } return true; } --- branches/extragear/kde3/network/ktorrent/libktorrent/torrent/torrentcontrol.h #678948:678949 @@ -260,6 +260,9 @@ ///Get the PeerManager const PeerManager * getPeerMgr() const; + /// Are we in the process of moving files + bool isMovingFiles() const {return moving_files;} + public slots: /** * Update the object, should be called periodically. @@ -344,10 +347,9 @@ bool prealloc; PreallocationThread* prealoc_thread; - DataCheckerThread* dcheck_thread; - TimeStamp last_diskspace_check; + bool moving_files; struct InternalStats {