Bug 100312

Summary: Non-existant temp directory causes "IO error"
Product: [Applications] k3b Reporter: Kde <kde>
Component: generalAssignee: Sebastian Trueg <trueg>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In:

Description Kde 2005-02-26 17:00:55 UTC
Version:           0.11.15cvs (using KDE 3.3.2 Level "a" , SUSE 9.2 UNSUPPORTED)
Compiler:          gcc version 3.3.4 (pre 3.3.5 20040809)
OS:                Linux (i686) release 2.6.8-24.11-default

After copying my KDE settings from my previous computer to the new one, I started K3b and tried to burn a CD. Instead of the usual output in the burn window K3b just gave me an "IO error" without any additional information in the debug window.
It was only by accident, that I discovered that the temp directory which was set for K3b pointed to a directory which didn't exist on the new system. After changing it to a correct path, CD burning worked fine.

Please have K3b check whether the temp directory exists, before starting to burn. At the moment, it only seems to do that when closing the configuration dialog.
As an alternative, have K3b output more verbose/better information on what went wrong. This type of error could even be solved by non-technical users, so a more verbose error message wouldn't hurt.

Thanks.
Comment 1 Francois Marier 2005-10-08 20:54:43 UTC
I have been able to reproduce the bug on 0.12.4a as well.
Comment 2 Sebastian Trueg 2006-03-18 14:24:38 UTC
SVN commit 519980 by trueg:

check image directory and create it if necessary.

BUG: 100312


 M  +18 -1     k3bprojectburndialog.cpp  


--- trunk/extragear/multimedia/k3b/src/projects/k3bprojectburndialog.cpp #519979:519980
@@ -169,7 +169,7 @@
   saveSettings();
 
   // check if enough space in tempdir if not on-the-fly
-  if( m_tempDirSelectionWidget )
+  if( m_tempDirSelectionWidget ) {
     if( (!doc()->onTheFly() || doc()->onlyCreateImages()) &&
 	doc()->size()/1024 > m_tempDirSelectionWidget->freeTempSpace() ) {
       if( KMessageBox::warningContinueCancel( this, i18n("There seems to be not enough free space in temporary directory. "
@@ -177,6 +177,23 @@
 	return;
     }
 
+    // check if the temp dir exists
+    if( !m_checkOnTheFly->isChecked() || m_checkOnlyCreateImage->isChecked() ) {
+      QString tempDir = m_tempDirSelectionWidget->tempDirectory();
+      if( !QFile::exists( tempDir ) ) {
+	if( KMessageBox::warningYesNo( this, i18n("Image folder '%1' does not exist. Do you want K3b to create it?").arg( tempDir ) )
+	    == KMessageBox::Yes ) {
+	  if( !KStandardDirs::makeDir( tempDir ) ) {
+	    KMessageBox::error( this, i18n("Failed to create folder '%1'.").arg( tempDir ) );
+	    return;
+	  }
+	}
+	else
+	  return;
+      }
+    }
+  }
+
   K3bJobProgressDialog* dlg = 0;
   if( m_checkOnlyCreateImage && m_checkOnlyCreateImage->isChecked() )
     dlg = new K3bJobProgressDialog( parentWidget() );