Bug 131592

Summary: Store finished downloads in a different location
Product: [Applications] ktorrent Reporter: Iñaki Baz Castillo <ibc>
Component: generalAssignee: Joris Guisson <joris.guisson>
Status: RESOLVED FIXED    
Severity: wishlist    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Iñaki Baz Castillo 2006-07-31 16:38:04 UTC
Version:           2.0rc1 (using KDE 3.5.2, Kubuntu Package 4:3.5.2-0ubuntu18.1 dapper)
Compiler:          Target: i486-linux-gnu
OS:                Linux (i686) release 2.6.15-26-386

IMHO is very confusing how to distinguish between active and finished downloads, because all of them are together in the same location. For example:

I start downloading a ISO file. In fact I download twice from two different torrents. When one of them finishes I go to my "Download" folder and it's really annoying to find which one is the really downloaded file and not the still downloading one.

It could be nice if Ktorrent use a "Completed" folder in the same download folder and move the finished downloads there. I understand that it could be a problem if the "Download" and "Completed" folder are in different partitions, so I propose that Ktorrent creates the "Completed" folder inside the user choosen "Download" folder.

Sorry because my English.

Regards.
Comment 1 Joris Guisson 2006-07-31 18:10:04 UTC
We'll see, we could add an option like this.
Comment 2 Joris Guisson 2007-03-29 19:14:40 UTC
SVN commit 647847 by guisson:

Added option to move finished downloads to a different directory.

BUG: 131592



 M  +1 -0      ChangeLog  
 M  +9 -19     apps/ktorrent/ktorrentview.cpp  
 M  +1 -1      ktorrent.kdevelop  
 M  +2 -2      libktorrent/torrent/cache.h  
 M  +4 -5      libktorrent/torrent/multifilecache.cpp  
 M  +1 -1      libktorrent/torrent/multifilecache.h  
 M  +15 -5     libktorrent/torrent/torrentcontrol.cpp  


--- trunk/extragear/network/ktorrent/ChangeLog #647846:647847
@@ -11,6 +11,7 @@
 - Make sure FileView remembers it's state
 - Sleep time of upload and download is now configurable through a CPU usage
 slider in the settings
+- Added option to move finished downloads to a different directory
 
 Changes in 2.1.2
 - Fix 2 security vulnerabilities (thanks to Bryan Burns from Juniper Networks
--- trunk/extragear/network/ktorrent/apps/ktorrent/ktorrentview.cpp #647846:647847
@@ -32,7 +32,8 @@
 #include <interfaces/torrentinterface.h>
 #include <torrent/globals.h>
 #include <util/log.h>
-
+#include <util/functions.h>
+		
 #include <groups/group.h>
 #include <groups/torrentdrag.h>
 
@@ -614,7 +615,7 @@
 		if (tc)
 		{
 			if(tc->getStats().multi_file_torrent)
-				new KRun(KURL::fromPathOrURL(tc->getDataDir() + tc->getStats().torrent_name), 0, true, true);
+				new KRun(KURL::fromPathOrURL(tc->getStats().output_path), 0, true, true);
 			else
 				new KRun(KURL::fromPathOrURL(tc->getDataDir()), 0, true, true);
 		}
@@ -645,25 +646,14 @@
 		if (tc)
 		{
 			QString dn;
-			TorrentStats s =  tc->getStats();
-			
-			if(s.multi_file_torrent)
-			{
-				dn = KFileDialog::getExistingDirectory(s.output_path, this, i18n("Choose download location for %1").arg(tc->getStats().torrent_name));
+			dn = KFileDialog::getExistingDirectory(QString::null, this, i18n("Choose download location for %1").arg(tc->getStats().torrent_name));
 								
-				if(dn.isNull() || dn.isEmpty())
-					continue;
+			if(dn.isNull() || dn.isEmpty())
+				continue;
 								
-				if(!dn.endsWith("/"))
-					dn += "/";
-				
-				dn += s.torrent_name;
-			}
-			else
-			{
-				dn =  KFileDialog::getSaveFileName(s.output_path, QString::null, this, i18n("Choose download location for %1").arg(tc->getStats().torrent_name));
-			}
-						
+			if(!dn.endsWith(bt::DirSeparator()))
+				dn += bt::DirSeparator();
+			
 			if(!dn.isEmpty())
 				tc->changeOutputDir(dn);
 		}
--- trunk/extragear/network/ktorrent/ktorrent.kdevelop #647846:647847
@@ -49,7 +49,7 @@
         <ktorrent>/home/joris/ktorrent/newstuff/debug/./plugins/infowidget</ktorrent>
       </cwd>
       <globaldebugarguments>--nofork</globaldebugarguments>
-      <globalcwd>/home/ivan/working/ktorrent/debug</globalcwd>
+      <globalcwd>/home/joris</globalcwd>
       <useglobalprogram>true</useglobalprogram>
       <autoinstall>false</autoinstall>
       <autokdesu>false</autokdesu>
--- trunk/extragear/network/ktorrent/libktorrent/torrent/cache.h #647846:647847
@@ -67,9 +67,9 @@
 		/**
 		 * Changes output path. All data files should already been moved.
 		 * This just modifies the datadir variable.
-		 * @param outputpath The output file/directory path.
+		 * @param outputpath New output path
 		 */
-		virtual void changeOutputPath(const QString& outputpath) = 0;
+		virtual void changeOutputPath(const QString & outputpath) = 0;
 		
 		/**
 		 * Load a chunk into memory. If something goes wrong,
--- trunk/extragear/network/ktorrent/libktorrent/torrent/multifilecache.cpp #647846:647847
@@ -168,13 +168,12 @@
 	void MultiFileCache::changeOutputPath(const QString & outputpath)
 	{
 		deleteDataFiles();
-				
-		this->output_dir = outputpath;
 		
-		if(!output_dir.endsWith("/"))
-			output_dir += "/";
+		output_dir = outputpath;
+		if (!output_dir.endsWith(bt::DirSeparator()))
+			output_dir += bt::DirSeparator();
 		
-		datadir = outputpath.left(outputpath.findRev(bt::DirSeparator()) + 1);
+		datadir = output_dir;
 		
 		create();
 	}
--- trunk/extragear/network/ktorrent/libktorrent/torrent/multifilecache.h #647846:647847
@@ -53,7 +53,7 @@
 		virtual void close();
 		virtual void open();
 		virtual QString getOutputPath() const;
-		virtual void changeOutputPath(const QString& outputpath);
+		virtual void changeOutputPath(const QString & outputpath);
 		virtual void preallocateDiskSpace(PreallocationThread* prealloc);
 		virtual bool hasMissingFiles(QStringList & sl);
 		virtual void deleteDataFiles();
--- trunk/extragear/network/ktorrent/libktorrent/torrent/torrentcontrol.cpp #647846:647847
@@ -290,7 +290,6 @@
 				if(!outdir.endsWith(bt::DirSeparator()))
 					outdir += bt::DirSeparator();
 				
-				outdir += stats.output_path.mid(stats.output_path.findRev(bt::DirSeparator()) + 1);
 				changeOutputDir(outdir);
 			}
 		}
@@ -804,10 +803,21 @@
 		try
 		{
 			bt::Move(stats.output_path, new_dir);
-			cman->changeOutputPath(new_dir);	
-			outputdir = new_dir.left(new_dir.findRev(bt::DirSeparator()) + 1);		
-			stats.output_path = outputdir;
-			istats.custom_output_name = true;
+			if (istats.custom_output_name)
+			{
+				int slash_pos = stats.output_path.findRev(bt::DirSeparator(),-2);
+				QString ldir = stats.output_path.mid(slash_pos + 1);
+				cman->changeOutputPath(new_dir + ldir);	
+				outputdir = stats.output_path = new_dir + ldir;
+				istats.custom_output_name = true;
+			}
+			else
+			{
+				QString nd = new_dir + tor->getNameSuggestion();
+				cman->changeOutputPath(nd);
+				outputdir = stats.output_path = nd;
+				istats.custom_output_name = true;
+			}
 			
 			saveStats();
 			
Comment 3 Iñaki Baz Castillo 2007-09-28 19:30:05 UTC
In which version is available this patch?
Comment 4 Iñaki Baz Castillo 2007-09-28 19:34:00 UTC
Ops, sorry, I didn't see this option in my Ktorrent 2.2 XD

Thanks, this options is very very useful for me.