1 | /* |
2 | SPDX-FileCopyrightText: 2015 Aleix Pol Gonzalez <aleixpol@blue-systems.com> |
3 | |
4 | SPDX-License-Identifier: LGPL-2.1-or-later |
5 | */ |
6 | |
7 | #ifndef PURPOSE_CONFIGURATION_H |
8 | #define PURPOSE_CONFIGURATION_H |
9 | |
10 | #include <QJsonArray> |
11 | #include <QJsonObject> |
12 | #include <QObject> |
13 | #include <QUrl> |
14 | #include <purpose/purpose_export.h> |
15 | |
16 | class QJsonObject; |
17 | class KPluginMetaData; |
18 | |
19 | namespace Purpose |
20 | { |
21 | class ConfigurationPrivate; |
22 | class Job; |
23 | |
24 | /** |
25 | * @brief This class will be in charge of figuring out the job configuration |
26 | * |
27 | * Once it's figured out, it can proceed to create the job. |
28 | * |
29 | * The object will be destroyed as soon as the job finishes. |
30 | */ |
31 | |
32 | class PURPOSE_EXPORT Configuration : public QObject |
33 | { |
34 | Q_OBJECT |
35 | |
36 | /** |
37 | * Tells whether there's still information to be provided, to be able to run |
38 | * the job. |
39 | * |
40 | * @sa X-Purpose-MandatoryArguments and X-Purpose-AdditionalArguments |
41 | */ |
42 | Q_PROPERTY(bool isReady READ isReady NOTIFY dataChanged) |
43 | |
44 | /** |
45 | * Represents the data the job will have available to perform its task |
46 | */ |
47 | Q_PROPERTY(QJsonObject data READ data WRITE setData NOTIFY dataChanged) |
48 | |
49 | /** |
50 | * Specifies the arguments the config file and the job will be sharing |
51 | */ |
52 | Q_PROPERTY(QJsonArray neededArguments READ neededArguments CONSTANT) |
53 | |
54 | /** |
55 | * Specifies the qml source code to be used, to configure the current job. |
56 | * |
57 | * @sa JobController QtQuick component |
58 | */ |
59 | Q_PROPERTY(QUrl configSourceCode READ configSourceCode CONSTANT) |
60 | |
61 | /** |
62 | * @returns the plugin type name to display |
63 | */ |
64 | Q_PROPERTY(QString pluginTypeName READ pluginTypeName CONSTANT) |
65 | |
66 | /** |
67 | * @returns the plugin name to display |
68 | */ |
69 | Q_PROPERTY(QString pluginName READ pluginName CONSTANT) |
70 | public: |
71 | Configuration(const QJsonObject &inputData, |
72 | const QString &pluginTypeName, |
73 | const QJsonObject &pluginType, |
74 | const KPluginMetaData &pluginInformation, |
75 | QObject *parent = nullptr); |
76 | Configuration(const QJsonObject &inputData, const QString &pluginTypeName, const KPluginMetaData &pluginInformation, QObject *parent = nullptr); |
77 | ~Configuration() override; |
78 | |
79 | void setData(const QJsonObject &data); |
80 | QJsonObject data() const; |
81 | |
82 | bool isReady() const; |
83 | QJsonArray neededArguments() const; |
84 | QUrl configSourceCode() const; |
85 | |
86 | /** |
87 | * @returns whether the job will be run in the same process. |
88 | * |
89 | * By default it will be true, unless the environment variable KDE_PURPOSE_LOCAL_JOBS is defined |
90 | */ |
91 | bool useSeparateProcess() const; |
92 | |
93 | /** |
94 | * @p separate will specify whether the process will be forced to execute |
95 | * in-process or in a separate process. |
96 | */ |
97 | void setUseSeparateProcess(bool separate); |
98 | |
99 | /** |
100 | * @returns the configured job ready to be started. |
101 | * |
102 | * Before calling it, make sure that all information has been filled by |
103 | * checking isReady(). |
104 | */ |
105 | Q_SCRIPTABLE Purpose::Job *createJob(); |
106 | |
107 | QString pluginName() const; |
108 | |
109 | QString pluginTypeName() const; |
110 | |
111 | Q_SIGNALS: |
112 | void dataChanged(); |
113 | |
114 | private: |
115 | Q_DECLARE_PRIVATE(Configuration) |
116 | ConfigurationPrivate *const d_ptr; |
117 | }; |
118 | |
119 | } |
120 | |
121 | #endif // CONFIGURATION_H |
122 | |