aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qbsprojectmanager/qbsrequest.h
blob: 92537d2e55622781f2d2e2826f9885ca7842ce67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#pragma once

#include <projectexplorer/buildstep.h>

#include <solutions/tasking/tasktree.h>

#include <QJsonObject>

#include <utility>

namespace QbsProjectManager::Internal {

class QbsBuildSystem;
class QbsRequestObject;
class QbsSession;

using ParseData = std::pair<QPointer<QbsBuildSystem>, QVariantMap>;

class QbsRequest final : public QObject
{
    Q_OBJECT

public:
    ~QbsRequest() override;

    void setSession(QbsSession *session) { m_session = session; }
    void setRequestData(const QJsonObject &requestData) { m_requestData = requestData; }
    void setParseData(const ParseData &parseData) { m_parseData = parseData; }
    void start();

signals:
    void done(Tasking::DoneResult result);
    void progressChanged(int progress, const QString &info); // progress in %
    void outputAdded(const QString &output, ProjectExplorer::BuildStep::OutputFormat format);
    void taskAdded(const ProjectExplorer::Task &task);

private:
    QbsSession *m_session = nullptr; // TODO: Should we keep a QPointer?
    std::optional<QJsonObject> m_requestData;
    ParseData m_parseData;
    QbsRequestObject *m_requestObject = nullptr;
};

using QbsRequestTask = Tasking::SimpleCustomTask<QbsRequest>;

} // namespace QbsProjectManager::Internal