Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'Job (./kdelibs/kio/jobclasses.h:60)
class Job : public QObject {
Q_OBJECT
protected:
Job( bool showProgressInfo );
public:
virtual ~Job();
/**
* Abort job
* This kills all subjobs and deletes the job
*/
virtual void kill();
/**
* @return the error code for this job, 0 if no error
* Error codes are defined in @ref KIO::Error.
* Only call this method from the slot connected to @ref result.
*/
int error() { return m_error; }
/**
* @return the progress id for this job, as returned by uiserver
*/
int progressId() { return m_progressId; }
/**
* @return a string to help understand the error, usually the url
* related to the error.
* Only call if @ref error is not 0.
* This is really internal, better use errorString or errorDialog.
*/
const QString & errorText() { return m_errorText; }
/**
* Converts an error code and a non-i18n error message into an
* error message in the current language. The low level (non-i18n)
* error message (usually a url) is put into the translated error
* message using %1.
* Example for errid == ERR_CANNOT_OPEN_FOR_READING:
* i18n( "Could not read\n%1" ).arg( errortext );
* Use this to display the error yourself, but for a dialog box
* use @ref KIO::ErrorDialog.
*/
QString errorString();
/**
* Display a dialog box to inform the user of the error given by
* this job.
* Only call if @ref error is not 0, and only in the slot connected
* to @ref result.
* @param parent the parent widget for the dialog box
*/
void showErrorDialog( QWidget * parent = 0L );
signals:
/**
* Emitted when the job is finished, in any case (completed, canceled,
* failed...). Use @ref error to know the result.
*/
void result( KIO::Job *job );
/**
* Progress signal showing the overall progress of the job
* This is valid for any kind of job, and allows using a
* a progress bar very easily (see @ref KProgress)
*/
void percent( KIO::Job *job, unsigned long percent );
protected slots:
/**
* Called whenever a subjob finishes.
* Default implementation checks for errors and propagates
* to parent job, then calls @ref removeSubjob.
* Override if you don't want subjobs errors to be propagated.
*/
virtual void slotResult( KIO::Job *job );
protected:
/**
* Add a job that has to be finished before a result
* is emitted. This has obviously to be called before
* the finish signal is emitted by the slave.
*/
virtual void addSubjob( Job *job );
/**
* Mark a sub job as beeing done. If it's the last to
* wait on the job will emit a result - jobs with
* two steps might want to override slotResult
* in order to avoid calling this method.
*/
virtual void removeSubjob( Job *job );
QList<Job> subjobs;
int m_error;
QString m_errorText;
unsigned long m_percent;
int m_progressId; // for uiserver
};
/**
* A simple job (one url and one command)
* This is the base class for all jobs that are scheduled.
* Other jobs are high-level jobs (CopyJob, DeleteJob, FileCopyJob...)
* that manage subjobs but aren't scheduled directly.
*/
kdelibs'Job::errorString() (./kdelibs/kio/global.cpp:135)
QString Job::errorString()
{
QString result;
switch( m_error )
{
case KIO::ERR_CANNOT_OPEN_FOR_READING:
result = i18n( "Could not read\n%1" ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_OPEN_FOR_WRITING:
result = i18n( "Could not write to\n%1" ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_LAUNCH_PROCESS:
result = i18n( "Could not start process\n%1" ).arg( m_errorText );
break;
case KIO::ERR_INTERNAL:
result = i18n( "Internal Error\nPlease send a full bugreport at http://bugs.kde.org\n\n%1" ).arg( m_errorText );
break;
case KIO::ERR_MALFORMED_URL:
result = i18n( "Malformed URL\n%1" ).arg( m_errorText );
break;
case KIO::ERR_UNSUPPORTED_PROTOCOL:
result = i18n( "The protocol %1\n is not supported" ).arg( m_errorText );
break;
case KIO::ERR_NO_SOURCE_PROTOCOL:
result = i18n( "The protocol %1\nis only a filter protocol.\n").arg( m_errorText );
break;
case KIO::ERR_UNSUPPORTED_ACTION:
result = i18n( "Unsupported action\n%1" ).arg( m_errorText );
break;
case KIO::ERR_IS_DIRECTORY:
result = i18n( "%1\n is a directory,\nbut a file was expected" ).arg( m_errorText );
break;
case KIO::ERR_IS_FILE:
result = i18n( "%1\n is a file,\nbut a directory was expected" ).arg( m_errorText );
break;
case KIO::ERR_DOES_NOT_EXIST:
result = i18n( "The file or directory\n%1\ndoes not exist" ).arg( m_errorText );
break;
case KIO::ERR_FILE_ALREADY_EXIST:
result = i18n( "A file named\n%1\ndoes already exist" ).arg( m_errorText );
break;
case KIO::ERR_DIR_ALREADY_EXIST:
result = i18n( "A directory named\n%1\ndoes already exist" ).arg( m_errorText );
break;
case KIO::ERR_UNKNOWN_HOST:
result = i18n( "Unknown host\n%1" ).arg( m_errorText );
break;
case KIO::ERR_ACCESS_DENIED:
result = i18n( "Access denied to\n%1" ).arg( m_errorText );
break;
case KIO::ERR_WRITE_ACCESS_DENIED:
result = i18n( "Access denied\nCould not write to\n%1" ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_ENTER_DIRECTORY:
result = i18n( "Could not enter directory\n%1" ).arg( m_errorText );
break;
case KIO::ERR_PROTOCOL_IS_NOT_A_FILESYSTEM:
result = i18n( "The protocol %1\ndoes not implement a directory service" ).arg( m_errorText );
break;
case KIO::ERR_CYCLIC_LINK:
result = i18n( "Found a cyclic link in\n%1" ).arg( m_errorText );
break;
case KIO::ERR_USER_CANCELED:
// Do nothing in this case. The user doesn't need to be told what he just did.
break;
case KIO::ERR_CYCLIC_COPY:
result = i18n( "Found a cyclic link while copying\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_CREATE_SOCKET:
result = i18n( "Could not create socket for accessing\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_CONNECT:
result = i18n( "Could not connect to host\n%1" ).arg( m_errorText );
break;
case KIO::ERR_CONNECTION_BROKEN:
result = i18n( "Connection to host\n%1\nis broken" ).arg( m_errorText );
break;
case KIO::ERR_NOT_FILTER_PROTOCOL:
result = i18n( "The protocol %1\nis not a filter protocol" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_MOUNT:
result = i18n( "Could not mount device.\nThe reported error was:\n\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_UNMOUNT:
result = i18n( "Could not unmount device.\nThe reported error was:\n\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_READ:
result = i18n( "Could not read file\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_WRITE:
result = i18n( "Could not write to file\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_BIND:
result = i18n( "Could not bind\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_LISTEN:
result = i18n( "Could not listen\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_ACCEPT:
result = i18n( "Could not accept\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_LOGIN:
result = i18n( "Could not login into %1" ).arg ( m_errorText );
break;
case KIO::ERR_COULD_NOT_STAT:
result = i18n( "Could not access\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_CLOSEDIR:
result = i18n( "Could not terminate listing\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_MKDIR:
result = i18n( "Could not make directory\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_RMDIR:
result = i18n( "Could not remove directory\n%1" ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_RESUME:
result = i18n( "Could not resume file %1" ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_RENAME:
result = i18n( "Could not rename file %1" ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_CHMOD:
result = i18n( "Could not change permissions for\n%1" ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_DELETE:
result = i18n( "Could not delete file %1" ).arg( m_errorText );
break;
case KIO::ERR_SLAVE_DIED:
result = i18n( "The process for the\n%1 protocol\ndied unexpectedly" ).arg( m_errorText );
break;
case KIO::ERR_OUT_OF_MEMORY:
result = i18n( "Error. Out of Memory.\n%1" ).arg( m_errorText );
break;
case KIO::ERR_UNKNOWN_PROXY_HOST:
result = i18n( "Unknown proxy host\n%1" ).arg( m_errorText );
break;
case KIO::ERR_COULD_NOT_AUTHENTICATE:
result = i18n( "Authorization failed, %1 authentication not supported" ).arg( m_errorText );
break;
case KIO::ERR_ABORTED:
result = i18n( "User canceled action\n%1" ).arg( m_errorText );
break;
case KIO::ERR_INTERNAL_SERVER:
result = i18n( "Internal error in server\n%1" ).arg( m_errorText );
break;
case KIO::ERR_SERVER_TIMEOUT:
result = i18n( "Timeout on server\n%1" ).arg( m_errorText );
break;
case KIO::ERR_UNKNOWN:
result = i18n( "Unknown error\n%1" ).arg( m_errorText );
break;
case KIO::ERR_UNKNOWN_INTERRUPT:
result = i18n( "Unknown interrupt\n%1" ).arg( m_errorText );
break;
/*
case KIO::ERR_CHECKSUM_MISMATCH:
if (m_errorText)
result = i18n( "Warning: MD5 Checksum for %1 does not match checksum returned from server" ).arg(m_errorText);
else
result = i18n( "Warning: MD5 Checksum for %1 does not match checksum returned from server" ).arg("document");
break;
*/
case KIO::ERR_CANNOT_DELETE_ORIGINAL:
result = i18n( "Could not delete original file %1.\nPlease check permissions." ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_DELETE_PARTIAL:
result = i18n( "Could not delete partial file %1.\nPlease check permissions." ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_RENAME_ORIGINAL:
result = i18n( "Could not rename original file %1.\nPlease check permissions." ).arg( m_errorText );
break;
case KIO::ERR_CANNOT_RENAME_PARTIAL:
result = i18n( "Could not rename partial file %1.\nPlease check permissions." ).arg( m_errorText );
break;
default:
result = i18n( "Unknown error code %1\n%2\n\nPlease send a full bugreport at http://bugs.kde.org" ).arg( m_error ).arg( m_errorText );
break;
}
return result;
}
#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
#include <qfile.h>
#include <config.h>
#ifdef HAVE_PATHS_H
#include <paths.h>
#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
#ifdef HAVE_SYS_MNTTAB_H
#include <sys/mnttab.h>
#endif
#ifdef HAVE_MNTENT_H
#include <mntent.h>
#endif
/***************************************************************
*
* Utility functions
*
***************************************************************/
#ifdef _PATH_MOUNTED
// On some Linux, MNTTAB points to /etc/fstab !
kdelibs'Job::Job() (./kdelibs/kio/job.cpp:65)
Job::Job(bool showProgressInfo) : QObject(0, "job"), m_error(0), m_percent(0), m_progressId(0)
{
// All jobs delete themselves after emiting 'result'.
// Notify the UI Server and get a progress id
if ( showProgressInfo )
{
kdDebug(7007) << " -- with progress info -- " << endl;
m_progressId = Observer::self()->newJob( this );
// Connect global progress info signal
connect( this, SIGNAL( percent( KIO::Job*, unsigned long ) ),
Observer::self(), SLOT( slotPercent( KIO::Job*, unsigned long ) ) );
}
}
kdelibs'Job::~Job() (./kdelibs/kio/job.cpp:80)
Job::~Job()
{
if ( m_progressId ) // Did we get an ID from the observer ?
Observer::self()->jobFinished( m_progressId );
}
kdelibs'Job::addSubjob() (./kdelibs/kio/job.cpp:86)
void Job::addSubjob(Job *job)
{
kdDebug(7007) << "addSubJob(" << job << ") this = " << this << endl;
subjobs.append(job);
connect(job, SIGNAL(result(KIO::Job*)),
SLOT(slotResult(KIO::Job*)));
}
kdelibs'Job::removeSubjob() (./kdelibs/kio/job.cpp:94)
void Job::removeSubjob( Job *job )
{
kdDebug(7007) << "removeSubJob(" << job << ") this = " << this << " subjobs = " << subjobs.count() << endl;
subjobs.remove(job);
if (subjobs.isEmpty())
{
emit result(this);
delete this; // Suicide is painless
}
}
kdelibs'Job::kill() (./kdelibs/kio/job.cpp:105)
void Job::kill()
{
// kill all subjobs
QListIterator<Job> it( subjobs );
for ( ; it.current() ; ++it )
(*it)->kill();
delete this;
}
kdelibs'Job::slotResult() (./kdelibs/kio/job.cpp:114)
void Job::slotResult( Job *job )
{
// Did job have an error ?
if ( job->error() && !m_error )
{
// Store it in the parent only if first error
m_error = job->error();
m_errorText = job->errorText();
}
removeSubjob(job);
}
//Job::errorString is implemented in global.cpp
kdelibs'Job::showErrorDialog() (./kdelibs/kio/job.cpp:128)
void Job::showErrorDialog( QWidget * parent )
{
kapp->enableStyles();
// Show a message box, except for "user canceled"
if ( m_error != ERR_USER_CANCELED )
KMessageBox::error( parent, errorString() );
}