This is how the KNS::Engine works.... it is a higher-level view which does not talk about KNS::DxsEngine or KNS::CoreEngine yet, those will be documented later. General ------- The KNS::Engine class is the only class that applications need to care about (beside the information from *.knsrc files of course). As such, this class should be as comfortable as possible. There are two principal operations supported by it, upload and download. Other operations, especially direct interaction through DXS, is also handled by it since it inherits from DxsEngine. Both principal operations have a modal and a non-modal way of being called. The modal way is the easiest one and translates the old KNS::DownloadDialog::open() call from KNewStuff1 to the new KNS::Engine::downloadDialogModal() call in KNewStuff2. Similarly, calling ::uploadDialogModal() handles all upload in a modal way, without the need for signals and slots. The modal calls return the list of affected entries directly. These entries should be queried about their status for installed, removed and updated entries in the download dialog, and a single entry returned for the upload dialog. The non-modal calls will send signals for each affected entry. Upload ------ The state machine for modal upload is as follows: * provider loading * failure(*) -> stop * finish(*) -> next/provider selection * provider(1) -> discard * provider selection * reject -> stop * accept -> next/meta data selection * meta data selection * reject -> stop * accept -> next/upload * upload * failure -> stop * success -> stop + result