## Status Values

A transaction will have different status values as it it queued, prepared and executed. The `::StatusChanged` signal from PkClient allow you to design user interfaces that tell the user what is happening with the transaction.

A typical transaction will have the following states:

- Queued in the active queue (`PK_STATUS_ENUM_WAIT`)

- Transaction started, and is being prepared (`PK_STATUS_ENUM_SETUP`)

- The transaction is running (`PK_STATUS_ENUM_RUNNING`)

- (optional) Data is downloading (`PK_STATUS_ENUM_DOWNLOADING`)

- (optional) Data is installing (`PK_STATUS_ENUM_INSTALLING`)

- The transaction is finished (`PK_STATUS_ENUM_FINISHED`)

If the transaction is waiting for other jobs to finish (in the active queue) then the status will be stuck at `PK_STATUS_ENUM_WAIT` and the UI should show a message to this effect.

If the transaction is waiting for a package lock (when a legacy tool like `pirut` is loaded and has the `hif` lock) then the transaction will be stuck at `PK_STATUS_ENUM_WAITING_FOR_LOCK`.

As a backend writer, you do not have to set `PK_STATUS_ENUM_RUNNING` manually, as this will be set for you if you set any other value such as `PK_STATUS_ENUM_DOWNLOADING` or `PK_STATUS_ENUM_INFO`. However, you will need to avoid setting any status values until a package lock is available and the transaction has started.