feat: support set application's working directory
Signed-off-by: ComixHe <heyuming@deepin.org>
This commit is contained in:
parent
fb0fc0a8ee
commit
8970298ad0
@ -96,6 +96,9 @@
|
|||||||
2. `env` (type s):
|
2. `env` (type s):
|
||||||
passing some specific environment variables to Launch
|
passing some specific environment variables to Launch
|
||||||
this application, eg. 'LANG=en_US;PATH=xxx:yyy;'
|
this application, eg. 'LANG=en_US;PATH=xxx:yyy;'
|
||||||
|
3. `path` (type s):
|
||||||
|
set this application's working directory, please pass
|
||||||
|
absoult directory path.
|
||||||
NOTE:
|
NOTE:
|
||||||
When application launched with `uid` option,
|
When application launched with `uid` option,
|
||||||
`env` option will not take effect at all."
|
`env` option will not take effect at all."
|
||||||
|
@ -141,13 +141,14 @@ int processExecStart(msg_ptr &msg, const std::deque<std::string_view> &execArgs)
|
|||||||
|
|
||||||
DBusValueType getPropType(std::string_view key)
|
DBusValueType getPropType(std::string_view key)
|
||||||
{
|
{
|
||||||
static std::unordered_map<std::string_view, DBusValueType> map{{"Environment", DBusValueType::ArrayOfString}};
|
static std::unordered_map<std::string_view, DBusValueType> map{{"Environment", DBusValueType::ArrayOfString},
|
||||||
|
{"WorkingDirectory", DBusValueType::String}};
|
||||||
|
|
||||||
if (auto it = map.find(key); it != map.cend()) {
|
if (auto it = map.find(key); it != map.cend()) {
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DBusValueType::Default;
|
return DBusValueType::String; // fallback to string
|
||||||
}
|
}
|
||||||
|
|
||||||
int appendPropValue(msg_ptr &msg, DBusValueType type, std::string_view value)
|
int appendPropValue(msg_ptr &msg, DBusValueType type, std::string_view value)
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
enum class ExitCode { SystemdError = -3, InvalidInput = -2, InternalError = -1, Done = 0, Waiting = 1 };
|
enum class ExitCode { SystemdError = -3, InvalidInput = -2, InternalError = -1, Done = 0, Waiting = 1 };
|
||||||
|
|
||||||
enum class DBusValueType { Default, ArrayOfString };
|
enum class DBusValueType { String, ArrayOfString };
|
||||||
|
|
||||||
using msg_ptr = sd_bus_message *;
|
using msg_ptr = sd_bus_message *;
|
||||||
using bus_ptr = sd_bus *;
|
using bus_ptr = sd_bus *;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
std::unique_ptr<VariantValue> creatValueHandler(msg_ptr &msg, DBusValueType type)
|
std::unique_ptr<VariantValue> creatValueHandler(msg_ptr &msg, DBusValueType type)
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case DBusValueType::Default:
|
case DBusValueType::String:
|
||||||
return std::make_unique<StringValue>(msg);
|
return std::make_unique<StringValue>(msg);
|
||||||
case DBusValueType::ArrayOfString:
|
case DBusValueType::ArrayOfString:
|
||||||
return std::make_unique<ASValue>(msg);
|
return std::make_unique<ASValue>(msg);
|
||||||
|
@ -19,6 +19,8 @@ QStringList generateCommand(const QVariantMap &props) noexcept
|
|||||||
options.emplace_back(std::make_unique<setEnvLaunchOption>(value));
|
options.emplace_back(std::make_unique<setEnvLaunchOption>(value));
|
||||||
} else if (key == hookLaunchOption::key()) {
|
} else if (key == hookLaunchOption::key()) {
|
||||||
options.emplace_back(std::make_unique<hookLaunchOption>(value));
|
options.emplace_back(std::make_unique<hookLaunchOption>(value));
|
||||||
|
} else if (key == setPathLaunchOption::key()) {
|
||||||
|
options.emplace_back(std::make_unique<setPathLaunchOption>(value));
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "unsupported options" << key;
|
qWarning() << "unsupported options" << key;
|
||||||
}
|
}
|
||||||
@ -106,3 +108,13 @@ QStringList setEnvLaunchOption::generateCommandLine() const noexcept
|
|||||||
|
|
||||||
return QStringList{QString{"--Environment=%1"}.arg(str)};
|
return QStringList{QString{"--Environment=%1"}.arg(str)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList setPathLaunchOption::generateCommandLine() const noexcept
|
||||||
|
{
|
||||||
|
auto str = m_val.toString();
|
||||||
|
if (str.isEmpty()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return QStringList{QString{"--WorkingDirectory=%1"}.arg(str)};
|
||||||
|
}
|
||||||
|
@ -94,4 +94,20 @@ struct hookLaunchOption : public LaunchOption
|
|||||||
[[nodiscard]] QStringList generateCommandLine() const noexcept override { return m_val.toStringList(); };
|
[[nodiscard]] QStringList generateCommandLine() const noexcept override { return m_val.toStringList(); };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct setPathLaunchOption : public LaunchOption
|
||||||
|
{
|
||||||
|
using LaunchOption::LaunchOption;
|
||||||
|
[[nodiscard]] const QString &type() const noexcept override
|
||||||
|
{
|
||||||
|
static QString tp{systemdOption};
|
||||||
|
return tp;
|
||||||
|
}
|
||||||
|
[[nodiscard]] static const QString &key() noexcept
|
||||||
|
{
|
||||||
|
static QString path{"path"};
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
[[nodiscard]] QStringList generateCommandLine() const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
QStringList generateCommand(const QVariantMap &props) noexcept;
|
QStringList generateCommand(const QVariantMap &props) noexcept;
|
||||||
|
Loading…
Reference in New Issue
Block a user