bool UploadTimesheetJob::execute(int state, QNetworkAccessManager *manager)
{
    if (state != UploadTimesheet)
        return HttpJob::execute(state, manager);

    QByteArray data;

    /* username */
    data += "--KDAB\r\n"
            "Content-Disposition: form-data; name=\"user\"\r\n\r\n";
    data += username().toUtf8();
    data += "\r\n";

    /* payload */
    data += "--KDAB\r\n"
            "Content-Disposition: form-data; name=\"" + m_fileName + "\"; filename=\"payload\"\r\n"
            "Content-Type: application/octet-stream\r\n\r\n";
    data += m_payload;
    data += "\r\n";

    /* eot */
    data += "--KDAB--\r\n";

    QNetworkRequest request(m_uploadUrl);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=KDAB");
    request.setHeader(QNetworkRequest::ContentLengthHeader, data.size());

    QNetworkReply *reply = manager->post(request, data);

    if (reply->error() != QNetworkReply::NoError)
        setErrorAndEmitFinished(SomethingWentWrong, reply->errorString());
    return true;
}
bool UploadTimesheetJob::handle(QNetworkReply *reply)
{
    /* check for failure */
    if (reply->error() != QNetworkReply::NoError) {
        setErrorAndEmitFinished(SomethingWentWrong, reply->errorString());
        return false;
    }

    if (state() != UploadTimesheet)
        return HttpJob::handle(reply);

    const QByteArray answer = reply->readAll();

    if (answer.contains("SuccessResultMessage")) {
        delayedNext();
    } else {
        setErrorAndEmitFinished(SomethingWentWrong, tr("No confirmation from server."));
    }
    return true;
}
bool GetProjectCodesJob::execute(int state, QNetworkAccessManager *manager)
{
    if (state != GetProjectCodes)
        return HttpJob::execute(state, manager);
    QNetworkRequest request(m_downloadUrl);

    QNetworkReply *reply = manager->get(request);

    if (reply->error() != QNetworkReply::NoError)
        setErrorAndEmitFinished(SomethingWentWrong, reply->errorString());
    return true;
}
bool GetProjectCodesJob::handle(QNetworkReply *reply)
{
    /* check for failure */
    if (reply->error() != QNetworkReply::NoError) {
        setErrorAndEmitFinished(SomethingWentWrong, reply->errorString());
        return false;
    }

    if (state() != GetProjectCodes)
        return HttpJob::handle(reply);

    m_payload = reply->readAll();
    delayedNext();
    return true;
}