refact: ApplicationService ctor and some member functions

Signed-off-by: ComixHe <heyuming@deepin.org>
This commit is contained in:
ComixHe
2023-08-20 18:25:59 +08:00
committed by Comix
parent 0e7d84f61d
commit 920594d6e5
10 changed files with 229 additions and 204 deletions

View File

@ -6,6 +6,7 @@
#include <systemd/sd-bus.h>
#include <systemd/sd-journal.h>
#include <string_view>
#include <string>
#include <vector>
#include <deque>
#include <memory>
@ -73,6 +74,12 @@ ExitCode fromString(const char *str)
int processExecStart(msg_ptr &msg, const std::deque<std::string_view> &execArgs)
{
int ret;
if (ret = sd_bus_message_open_container(msg, SD_BUS_TYPE_STRUCT, "sv"); ret < 0) {
sd_journal_perror("open struct of ExecStart failed.");
return ret;
}
if (ret = sd_bus_message_append(msg, "s", "ExecStart"); ret < 0) {
sd_journal_perror("append ExecStart failed.");
return ret;
@ -138,6 +145,11 @@ int processExecStart(msg_ptr &msg, const std::deque<std::string_view> &execArgs)
return ret;
}
if (ret = sd_bus_message_close_container(msg); ret < 0) {
sd_journal_perror("close struct of execStart failed.");
return ret;
}
return 0;
}
@ -146,18 +158,19 @@ int processKVPair(msg_ptr &msg, const std::map<std::string_view, std::string_vie
int ret;
if (!props.empty()) {
for (auto [key, value] : props) {
// NOTE: append if necessary
// usage:
// sd_bus_message_append(msg,"s",key.data());
// sd_bus_message_open_container(msg,SD_BUS_TYPE_VARIANT,"[corresponding type]");
// append content....
// sd_bus_message_close_container(msg);
std::string keyStr{key};
std::string valueStr{value};
ret = sd_bus_message_append(msg, "(sv)", keyStr.data(), "s", valueStr.data());
if (ret < 0) {
return ret;
}
}
}
return 0;
}
std::string cmdParse(msg_ptr &msg, std::deque<std::string_view> &&cmdLines)
std::string cmdParse(msg_ptr &msg, std::deque<std::string_view> cmdLines)
{
std::string serviceName{"internalError"};
std::map<std::string_view, std::string_view> props;
@ -176,7 +189,7 @@ std::string cmdParse(msg_ptr &msg, std::deque<std::string_view> &&cmdLines)
auto kvStr = str.substr(2);
if (!kvStr.empty()) [[likely]] {
auto it = kvStr.cbegin();
const auto *it = kvStr.cbegin();
if (it = std::find(it, kvStr.cend(), '='); it == kvStr.cend()) {
sd_journal_print(LOG_WARNING, "invalid k-v pair: %s", kvStr.data());
cmdLines.pop_front();
@ -248,11 +261,6 @@ std::string cmdParse(msg_ptr &msg, std::deque<std::string_view> &&cmdLines)
return serviceName;
}
if (ret = sd_bus_message_open_container(msg, SD_BUS_TYPE_STRUCT, "sv"); ret < 0) {
sd_journal_perror("open struct failed.");
return serviceName;
}
if (ret = processKVPair(msg, props); ret < 0) { // process props
serviceName = "invalidInput";
return serviceName;
@ -263,10 +271,6 @@ std::string cmdParse(msg_ptr &msg, std::deque<std::string_view> &&cmdLines)
return serviceName;
}
if (ret = sd_bus_message_close_container(msg); ret < 0) {
sd_journal_perror("close struct failed.");
return serviceName;
}
if (ret = sd_bus_message_close_container(msg); ret < 0) {
sd_journal_perror("close array failed.");
return serviceName;

View File

@ -44,5 +44,5 @@ int main(int argc, char *argv[])
return false; // means to apply this function to the rest of the files
});
return app.exec();
return QCoreApplication::exec();
}