Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
368 changes: 198 additions & 170 deletions apps/app-launch-helper/src/main.cpp

Large diffs are not rendered by default.

9 changes: 4 additions & 5 deletions apps/app-launch-helper/src/types.h
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

#ifndef TYPES_H
#define TYPES_H

#include <string_view>
#include <systemd/sd-bus.h>
#include <systemd/sd-journal.h>
#include <string>
#include <string_view>

enum class ExitCode { SystemdError = -3, InvalidInput = -2, InternalError = -1, Done = 0, Waiting = 1 };
enum class ExitCode : int8_t { SystemdError = -3, InvalidInput = -2, InternalError = -1, Done = 0, Waiting = 1 };

enum class DBusValueType { String, ArrayOfString };
enum class DBusValueType : uint8_t { String, ArrayOfString };

using msg_ptr = sd_bus_message *;
using bus_ptr = sd_bus *;
Expand Down
57 changes: 25 additions & 32 deletions apps/app-launch-helper/src/variantValue.h
Original file line number Diff line number Diff line change
@@ -1,50 +1,43 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef VARIANTVALUE_H
#define VARIANTVALUE_H

#include "types.h"
#include <memory>
#include <variant>

class VariantValue
class StringHandler
{
public:
explicit VariantValue(msg_ptr &msg)
explicit StringHandler(msg_ptr msg)
: m_msg(msg)
{
}
virtual ~VariantValue() = default;
VariantValue(const VariantValue &) = delete;
VariantValue(VariantValue &&) = delete;
VariantValue &operator=(const VariantValue &) = delete;
VariantValue &operator=(VariantValue &&) = delete;

virtual int openVariant() noexcept = 0;
virtual int closeVariant() noexcept = 0;
virtual int appendValue(std::string &&value) noexcept = 0;

msg_ptr &msgRef() noexcept { return m_msg; }
int openVariant() noexcept;
int closeVariant() noexcept;
int appendValue(std::string_view value) noexcept;

private:
msg_ptr &m_msg;
msg_ptr m_msg;
};

class StringValue : public VariantValue
class ASHandler
{
using VariantValue::VariantValue;

public:
int openVariant() noexcept override;
int closeVariant() noexcept override;
int appendValue(std::string &&value) noexcept override;
};

class ASValue : public VariantValue
{
using VariantValue::VariantValue;
explicit ASHandler(msg_ptr msg)
: m_msg(msg)
{
}
int openVariant() noexcept;
int closeVariant() noexcept;
int appendValue(std::string_view value) noexcept;

public:
int openVariant() noexcept override;
int closeVariant() noexcept override;
int appendValue(std::string &&value) noexcept override;
private:
msg_ptr m_msg;
};

std::unique_ptr<VariantValue> creatValueHandler(msg_ptr &msg, DBusValueType type);
using Handler = std::variant<StringHandler, ASHandler, std::monostate>;
Handler creatValueHandler(msg_ptr msg, DBusValueType type) noexcept;

#endif
42 changes: 21 additions & 21 deletions apps/app-launch-helper/src/variantvalue.cpp
Original file line number Diff line number Diff line change
@@ -1,55 +1,55 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

#include "variantValue.h"
#include "constant.h"
#include <sstream>

std::unique_ptr<VariantValue> creatValueHandler(msg_ptr &msg, DBusValueType type)
Handler creatValueHandler(msg_ptr msg, DBusValueType type) noexcept
{
switch (type) {
case DBusValueType::String:
return std::make_unique<StringValue>(msg);
return StringHandler{msg};
case DBusValueType::ArrayOfString:
return std::make_unique<ASValue>(msg);
return ASHandler{msg};
default:
return nullptr;
return std::monostate{};
}
}

int StringValue::openVariant() noexcept
int StringHandler::openVariant() noexcept
{
return sd_bus_message_open_container(msgRef(), SD_BUS_TYPE_VARIANT, "s");
return sd_bus_message_open_container(m_msg, SD_BUS_TYPE_VARIANT, "s");
}

int StringValue::closeVariant() noexcept
int StringHandler::closeVariant() noexcept
{
return sd_bus_message_close_container(msgRef());
return sd_bus_message_close_container(m_msg);
}

int StringValue::appendValue(std::string &&value) noexcept
int StringHandler::appendValue(std::string_view value) noexcept
{
return sd_bus_message_append(msgRef(), "s", value.data());
return sd_bus_message_append(m_msg, "s", value.data());
}

int ASValue::openVariant() noexcept
int ASHandler::openVariant() noexcept
{
if (int ret = sd_bus_message_open_container(msgRef(), SD_BUS_TYPE_VARIANT, "as"); ret < 0)
if (const auto ret = sd_bus_message_open_container(m_msg, SD_BUS_TYPE_VARIANT, "as"); ret < 0) {
return ret;
}

return sd_bus_message_open_container(msgRef(), SD_BUS_TYPE_ARRAY, "s");
return sd_bus_message_open_container(m_msg, SD_BUS_TYPE_ARRAY, "s");
}

int ASValue::closeVariant() noexcept
int ASHandler::closeVariant() noexcept
{
if (int ret = sd_bus_message_close_container(msgRef()); ret < 0)
if (const auto ret = sd_bus_message_close_container(m_msg); ret < 0) {
return ret;
}

return sd_bus_message_close_container(msgRef());
return sd_bus_message_close_container(m_msg);
}

int ASValue::appendValue(std::string &&value) noexcept
int ASHandler::appendValue(std::string_view value) noexcept
{
return sd_bus_message_append(msgRef(), "s", value.data());
return sd_bus_message_append(m_msg, "s", value.data());
}
11 changes: 4 additions & 7 deletions apps/dde-application-manager/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

#include "applicationmanagerstorage.h"
#include "cgroupsidentifier.h"
#include "dbus/applicationmanager1service.h"
#include "global.h"
#include <QDBusConnection>
#include <QGuiApplication>
#include <QDir>
#include "dbus/applicationmanager1service.h"
#include "cgroupsidentifier.h"
#include "applicationmanagerstorage.h"
#include <chrono>
#include <iostream>

Q_LOGGING_CATEGORY(DDEAMProf, "dde.am.prof", QtInfoMsg)

Expand Down
Loading