# class Job

### abstract

Module | akonadi
Namespace | Akonadi
Class | Job
Inherits | KCompositeJob

This class encapsulates a request to the pim storage service, the code looks like

    Akonadi.Job *job = new Akonadi.SomeJob( some parameter );
    connect( job, SIGNAL( result( KJob* ) ),
    this, SLOT( slotResult( KJob* ) ) );

The job is queued for execution as soon as the event loop is entered again.

And the slotResult is usually at least:

    if ( job->error() )
    // handle error...

With the synchronous interface the code looks like

    Akonadi.SomeJob *job = new Akonadi.SomeJob( some parameter );
    if ( !job->exec() ) {
    qDebug() << "Error:" << job->errorString();
    } else {
    // do something
    }

Warning: Using the synchronous method is error prone, use this only if the asynchronous access is not possible and none of the following known issues apply: - exec() must not be called directly from a result slot of another job in the same Session. This will trigger a dead-lock since the program won't return from the result slot and thus will never complete the finishing of the current job, keeping it in the internal queue and blocking the execution of any following job. - exec() must not be called from within another event-loop that might finish before the newly started inner sub-eventloop. This will crash.

Subclasses must reimplement

See also doStart().

KJob-derived objects delete itself, it is thus not possible to create job objects on the stack!

### enums

- Error { ConnectionFailed, ProtocolVersionMismatch, UserCanceled, Unknown, UserError }

enum details

### methods

- Job (parent)

  returns ctor

  Argument | Type | Default
  --- | --- | ---
  parent | QObject | 0

  Creates a new job. If the parent object is a Job object, the new job will be a subjob of parent. If the parent object is a Session object, it will be used for server communication instead of the default session.

  parent - The parent object, job or session.

- Job (dd, parent)

  returns ctor

  Argument | Type | Default
  --- | --- | ---
  dd | JobPrivate |
  parent | QObject |

- aboutToStart (job)

  returns Nothing
  SIGNAL ("aboutToStart (Job*)")

  Argument | Type | Default
  --- | --- | ---
  job | Akonadi.Job |

  Emitted directly before the job will be started.

  job - The started job.

- addSubjob (job)

  returns bool

  Argument | Type | Default
  --- | --- | ---
  job | KJob |

  Adds the given job as a subjob to this job. This method is automatically called if you construct a job using another job as parent object. The base implementation does the necessary setup to share the network connection with the backend.

  job - The new subjob.

- doHandleResponse (tag, data)

  returns Nothing

  Argument | Type | Default
  --- | --- | ---
  tag | QByteArray |
  data | QByteArray |

  This method should be reimplemented in the concrete jobs in case you want to handle incoming data. It will be called on received data from the backend. The default implementation does nothing.

  tag - The tag of the corresponding command, empty if this is an untagges response.

  data - The received data.

- doKill ( )

  returns bool

- doStart ( )

  returns Nothing
  pure virtual

  This method must be reimplemented in the concrete jobs. It will be called after the job has been started and a connection to the Akonadi backend has been established.

- emitWriteFinished ( )

  returns Nothing

  Call this method to indicate that this job will not call writeData() again.

  See also writeFinished()

- errorString ( )

  returns QString

  Returns the error string, if there has been an error, an empty string otherwise.

- removeSubjob (job)

  returns bool

  Argument | Type | Default
  --- | --- | ---
  job | KJob |

- slotResult (job)

  returns Nothing

  Argument | Type | Default
  --- | --- | ---
  job | KJob |

- start ( )

  returns Nothing

  Jobs are started automatically once entering the event loop again, no need to explicitly call this.

- writeFinished (job)

  returns Nothing
  SIGNAL ("writeFinished (Job*)")

  Argument | Type | Default
  --- | --- | ---
  job | Akonadi.Job |

  Emitted if the job has finished all write operations, ie. if this signal is emitted, the job guarantees to not call writeData() again. Do not emit this signal directly, call emitWriteFinished() instead.

  job - This job.

  See also emitWriteFinished()

### enums - detail

- Error { ConnectionFailed, ProtocolVersionMismatch, UserCanceled, Unknown, UserError }

  Error codes that can be emitted by this class, subclasses can provide additional codes.

  | ConnectionFailed | - UserDefinedError | - |
  | ProtocolVersionMismatch | - | - |
  | UserCanceled | - | - |
  | Unknown | - | - |
  | UserError | - UserDefinedError+42 | - |