style: format code
This commit is contained in:
@ -9,14 +9,20 @@ ApplicationManager1Service::~ApplicationManager1Service() = default;
|
|||||||
|
|
||||||
ApplicationManager1Service::ApplicationManager1Service() = default;
|
ApplicationManager1Service::ApplicationManager1Service() = default;
|
||||||
|
|
||||||
QList<QDBusObjectPath> ApplicationManager1Service::list() const { return m_applicationList.keys(); }
|
QList<QDBusObjectPath> ApplicationManager1Service::list() const
|
||||||
|
{
|
||||||
|
return m_applicationList.keys();
|
||||||
|
}
|
||||||
|
|
||||||
bool ApplicationManager1Service::removeOneApplication(const QDBusObjectPath &application)
|
bool ApplicationManager1Service::removeOneApplication(const QDBusObjectPath &application)
|
||||||
{
|
{
|
||||||
return m_applicationList.remove(application) != 0;
|
return m_applicationList.remove(application) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationManager1Service::removeAllApplication() { m_applicationList.clear(); }
|
void ApplicationManager1Service::removeAllApplication()
|
||||||
|
{
|
||||||
|
m_applicationList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
QDBusObjectPath ApplicationManager1Service::Application(const QString &id)
|
QDBusObjectPath ApplicationManager1Service::Application(const QString &id)
|
||||||
{
|
{
|
||||||
|
@ -21,13 +21,11 @@ public:
|
|||||||
ApplicationManager1Service(const ApplicationManager1Service &) = delete;
|
ApplicationManager1Service(const ApplicationManager1Service &) = delete;
|
||||||
ApplicationManager1Service(ApplicationManager1Service &&) = delete;
|
ApplicationManager1Service(ApplicationManager1Service &&) = delete;
|
||||||
ApplicationManager1Service &operator=(const ApplicationManager1Service &) = delete;
|
ApplicationManager1Service &operator=(const ApplicationManager1Service &) = delete;
|
||||||
ApplicationManager1Service &operator=(ApplicationManager1Service&&) = delete;
|
ApplicationManager1Service &operator=(ApplicationManager1Service &&) = delete;
|
||||||
|
|
||||||
Q_PROPERTY(QList<QDBusObjectPath> List READ list)
|
Q_PROPERTY(QList<QDBusObjectPath> List READ list)
|
||||||
QList<QDBusObjectPath> list() const;
|
QList<QDBusObjectPath> list() const;
|
||||||
void addApplication(const QString &ID,
|
void addApplication(const QString &ID, const QStringList &actions, bool AutoStart = false);
|
||||||
const QStringList &actions,
|
|
||||||
bool AutoStart = false);
|
|
||||||
bool removeOneApplication(const QDBusObjectPath &application);
|
bool removeOneApplication(const QDBusObjectPath &application);
|
||||||
void removeAllApplication();
|
void removeAllApplication();
|
||||||
|
|
||||||
@ -37,7 +35,7 @@ public Q_SLOTS:
|
|||||||
QDBusObjectPath Launch(const QString &id, const QString &action, const QStringList &fields, const QVariantMap &options);
|
QDBusObjectPath Launch(const QString &id, const QString &action, const QStringList &fields, const QVariantMap &options);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMap<QDBusObjectPath,QSharedPointer<ApplicationService>> m_applicationList;
|
QMap<QDBusObjectPath, QSharedPointer<ApplicationService>> m_applicationList;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,22 +35,52 @@ QDBusObjectPath ApplicationService::Launch(const QString &action, const QStringL
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ApplicationService::actions() const noexcept { return m_actions; }
|
QStringList ApplicationService::actions() const noexcept
|
||||||
|
{
|
||||||
|
return m_actions;
|
||||||
|
}
|
||||||
|
|
||||||
QStringList& ApplicationService::actionsRef() noexcept { return m_actions; }
|
QStringList &ApplicationService::actionsRef() noexcept
|
||||||
|
{
|
||||||
|
return m_actions;
|
||||||
|
}
|
||||||
|
|
||||||
QString ApplicationService::iD() const noexcept { return m_ID; }
|
QString ApplicationService::iD() const noexcept
|
||||||
|
{
|
||||||
|
return m_ID;
|
||||||
|
}
|
||||||
|
|
||||||
IconMap ApplicationService::icons() const { return m_Icons; }
|
IconMap ApplicationService::icons() const
|
||||||
|
{
|
||||||
|
return m_Icons;
|
||||||
|
}
|
||||||
|
|
||||||
IconMap& ApplicationService::iconsRef() { return m_Icons; }
|
IconMap &ApplicationService::iconsRef()
|
||||||
|
{
|
||||||
|
return m_Icons;
|
||||||
|
}
|
||||||
|
|
||||||
bool ApplicationService::isAutoStart() const noexcept { return m_AutoStart; }
|
bool ApplicationService::isAutoStart() const noexcept
|
||||||
|
{
|
||||||
|
return m_AutoStart;
|
||||||
|
}
|
||||||
|
|
||||||
void ApplicationService::setAutoStart(bool autostart) noexcept { m_AutoStart = autostart; }
|
void ApplicationService::setAutoStart(bool autostart) noexcept
|
||||||
|
{
|
||||||
|
m_AutoStart = autostart;
|
||||||
|
}
|
||||||
|
|
||||||
QList<QDBusObjectPath> ApplicationService::instances() const noexcept { return m_Instances.keys(); }
|
QList<QDBusObjectPath> ApplicationService::instances() const noexcept
|
||||||
|
{
|
||||||
|
return m_Instances.keys();
|
||||||
|
}
|
||||||
|
|
||||||
bool ApplicationService::removeOneInstance(const QDBusObjectPath &instance) { return m_Instances.remove(instance) != 0; }
|
bool ApplicationService::removeOneInstance(const QDBusObjectPath &instance)
|
||||||
|
{
|
||||||
|
return m_Instances.remove(instance) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
void ApplicationService::removeAllInstance() { m_Instances.clear();}
|
void ApplicationService::removeAllInstance()
|
||||||
|
{
|
||||||
|
m_Instances.clear();
|
||||||
|
}
|
||||||
|
@ -19,21 +19,21 @@ class ApplicationService : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
~ApplicationService() override;
|
~ApplicationService() override;
|
||||||
ApplicationService(const ApplicationService&) = delete;
|
ApplicationService(const ApplicationService &) = delete;
|
||||||
ApplicationService(ApplicationService &&) = delete;
|
ApplicationService(ApplicationService &&) = delete;
|
||||||
ApplicationService& operator=(const ApplicationService&) = delete;
|
ApplicationService &operator=(const ApplicationService &) = delete;
|
||||||
ApplicationService &operator=(ApplicationService &&) = delete;
|
ApplicationService &operator=(ApplicationService &&) = delete;
|
||||||
|
|
||||||
Q_PROPERTY(QStringList Actions READ actions CONSTANT)
|
Q_PROPERTY(QStringList Actions READ actions CONSTANT)
|
||||||
QStringList actions() const noexcept;
|
QStringList actions() const noexcept;
|
||||||
QStringList& actionsRef() noexcept;
|
QStringList &actionsRef() noexcept;
|
||||||
|
|
||||||
Q_PROPERTY(QString ID READ iD CONSTANT)
|
Q_PROPERTY(QString ID READ iD CONSTANT)
|
||||||
QString iD() const noexcept;
|
QString iD() const noexcept;
|
||||||
|
|
||||||
Q_PROPERTY(IconMap Icons READ icons)
|
Q_PROPERTY(IconMap Icons READ icons)
|
||||||
IconMap icons() const;
|
IconMap icons() const;
|
||||||
IconMap& iconsRef();
|
IconMap &iconsRef();
|
||||||
|
|
||||||
Q_PROPERTY(bool AutoStart READ isAutoStart WRITE setAutoStart)
|
Q_PROPERTY(bool AutoStart READ isAutoStart WRITE setAutoStart)
|
||||||
bool isAutoStart() const noexcept;
|
bool isAutoStart() const noexcept;
|
||||||
@ -57,7 +57,7 @@ private:
|
|||||||
QString m_ID;
|
QString m_ID;
|
||||||
QDBusObjectPath m_applicationPath;
|
QDBusObjectPath m_applicationPath;
|
||||||
QStringList m_actions;
|
QStringList m_actions;
|
||||||
QMap<QDBusObjectPath,QSharedPointer<InstanceService>> m_Instances;
|
QMap<QDBusObjectPath, QSharedPointer<InstanceService>> m_Instances;
|
||||||
IconMap m_Icons;
|
IconMap m_Icons;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5,12 +5,19 @@
|
|||||||
#include "instanceservice.h"
|
#include "instanceservice.h"
|
||||||
|
|
||||||
InstanceService::InstanceService(QString application, QString systemdUnitPath)
|
InstanceService::InstanceService(QString application, QString systemdUnitPath)
|
||||||
: m_Application(std::move(application)), m_SystemdUnitPath(std::move(systemdUnitPath))
|
: m_Application(std::move(application))
|
||||||
|
, m_SystemdUnitPath(std::move(systemdUnitPath))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceService::~InstanceService() = default;
|
InstanceService::~InstanceService() = default;
|
||||||
|
|
||||||
QDBusObjectPath InstanceService::application() const { return m_Application; }
|
QDBusObjectPath InstanceService::application() const
|
||||||
|
{
|
||||||
|
return m_Application;
|
||||||
|
}
|
||||||
|
|
||||||
QDBusObjectPath InstanceService::systemdUnitPath() const { return m_SystemdUnitPath; }
|
QDBusObjectPath InstanceService::systemdUnitPath() const
|
||||||
|
{
|
||||||
|
return m_SystemdUnitPath;
|
||||||
|
}
|
||||||
|
@ -16,7 +16,7 @@ public:
|
|||||||
InstanceService(const InstanceService &) = delete;
|
InstanceService(const InstanceService &) = delete;
|
||||||
InstanceService(InstanceService &&) = delete;
|
InstanceService(InstanceService &&) = delete;
|
||||||
InstanceService &operator=(const InstanceService &) = delete;
|
InstanceService &operator=(const InstanceService &) = delete;
|
||||||
InstanceService &operator=(InstanceService&&) = delete;
|
InstanceService &operator=(InstanceService &&) = delete;
|
||||||
|
|
||||||
Q_PROPERTY(QDBusObjectPath Application READ application CONSTANT)
|
Q_PROPERTY(QDBusObjectPath Application READ application CONSTANT)
|
||||||
QDBusObjectPath application() const;
|
QDBusObjectPath application() const;
|
||||||
|
@ -23,7 +23,7 @@ class JobManager1Service final : public QObject
|
|||||||
public:
|
public:
|
||||||
JobManager1Service();
|
JobManager1Service();
|
||||||
JobManager1Service(const JobManager1Service &) = delete;
|
JobManager1Service(const JobManager1Service &) = delete;
|
||||||
JobManager1Service(JobManager1Service&&) = delete;
|
JobManager1Service(JobManager1Service &&) = delete;
|
||||||
JobManager1Service &operator=(const JobManager1Service &) = delete;
|
JobManager1Service &operator=(const JobManager1Service &) = delete;
|
||||||
JobManager1Service &operator=(JobManager1Service &&) = delete;
|
JobManager1Service &operator=(JobManager1Service &&) = delete;
|
||||||
|
|
||||||
@ -34,8 +34,12 @@ public:
|
|||||||
static_assert(std::is_invocable_v<F, QVariant>, "param type must be QVariant.");
|
static_assert(std::is_invocable_v<F, QVariant>, "param type must be QVariant.");
|
||||||
|
|
||||||
QString objectPath{DDEApplicationManager1JobObjectPath + QUuid::createUuid().toString(QUuid::Id128)};
|
QString objectPath{DDEApplicationManager1JobObjectPath + QUuid::createUuid().toString(QUuid::Id128)};
|
||||||
auto future = QtConcurrent::mappedReduced(
|
auto future = QtConcurrent::mappedReduced(args.begin(),
|
||||||
args.begin(), args.end(), func,qOverload<QVariantList::parameter_type>(&QVariantList::append), QVariantList{}, QtConcurrent::ReduceOption::OrderedReduce);
|
args.end(),
|
||||||
|
func,
|
||||||
|
qOverload<QVariantList::parameter_type>(&QVariantList::append),
|
||||||
|
QVariantList{},
|
||||||
|
QtConcurrent::ReduceOption::OrderedReduce);
|
||||||
QSharedPointer<JobService> job{new JobService{future}};
|
QSharedPointer<JobService> job{new JobService{future}};
|
||||||
auto path = QDBusObjectPath{objectPath};
|
auto path = QDBusObjectPath{objectPath};
|
||||||
{
|
{
|
||||||
@ -44,7 +48,7 @@ public:
|
|||||||
}
|
}
|
||||||
emit JobNew(path, source);
|
emit JobNew(path, source);
|
||||||
registerObjectToDbus(new JobAdaptor(job.data()), objectPath, getDBusInterface<JobAdaptor>());
|
registerObjectToDbus(new JobAdaptor(job.data()), objectPath, getDBusInterface<JobAdaptor>());
|
||||||
auto emitRemove = [this, job, path, future] (QVariantList value) {
|
auto emitRemove = [this, job, path, future](QVariantList value) {
|
||||||
decltype(m_jobs)::size_type removeCount{0};
|
decltype(m_jobs)::size_type removeCount{0};
|
||||||
{
|
{
|
||||||
QMutexLocker locker{&m_mutex};
|
QMutexLocker locker{&m_mutex};
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "jobservice.h"
|
#include "jobservice.h"
|
||||||
|
|
||||||
JobService::JobService(const QFuture<QVariantList>& job)
|
JobService::JobService(const QFuture<QVariantList> &job)
|
||||||
: m_job(job)
|
: m_job(job)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ public Q_SLOTS:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
friend class JobManager1Service;
|
friend class JobManager1Service;
|
||||||
explicit JobService(const QFuture<QVariantList>& job);
|
explicit JobService(const QFuture<QVariantList> &job);
|
||||||
QFuture<QVariantList> m_job;
|
QFuture<QVariantList> m_job;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -22,12 +22,12 @@ auto DesktopEntry::parserGroupHeader(const QString &str) noexcept
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ParseError DesktopEntry::parseEntry(const QString &str, decltype(m_entryMap)::iterator& currentGroup) noexcept
|
ParseError DesktopEntry::parseEntry(const QString &str, decltype(m_entryMap)::iterator ¤tGroup) noexcept
|
||||||
{
|
{
|
||||||
if (str.startsWith("#"))
|
if (str.startsWith("#"))
|
||||||
return ParseError::NoError;
|
return ParseError::NoError;
|
||||||
auto splitCharIndex = str.indexOf(']');
|
auto splitCharIndex = str.indexOf(']');
|
||||||
if(splitCharIndex != -1){
|
if (splitCharIndex != -1) {
|
||||||
for (; splitCharIndex < str.size(); ++splitCharIndex) {
|
for (; splitCharIndex < str.size(); ++splitCharIndex) {
|
||||||
if (str.at(splitCharIndex) == '=')
|
if (str.at(splitCharIndex) == '=')
|
||||||
break;
|
break;
|
||||||
@ -39,11 +39,11 @@ ParseError DesktopEntry::parseEntry(const QString &str, decltype(m_entryMap)::it
|
|||||||
auto valueStr = str.sliced(splitCharIndex + 1).trimmed();
|
auto valueStr = str.sliced(splitCharIndex + 1).trimmed();
|
||||||
QString key, valueKey{defaultKeyStr};
|
QString key, valueKey{defaultKeyStr};
|
||||||
|
|
||||||
constexpr auto MainKey = R"re((?<MainKey>[0-9a-zA-Z-]+))re";// main key. eg.(Name, X-CUSTOM-KEY).
|
constexpr auto MainKey = R"re((?<MainKey>[0-9a-zA-Z-]+))re"; // main key. eg.(Name, X-CUSTOM-KEY).
|
||||||
constexpr auto Language = R"re((?:[a-z]+))re";// language of locale postfix. eg.(en, zh)
|
constexpr auto Language = R"re((?:[a-z]+))re"; // language of locale postfix. eg.(en, zh)
|
||||||
constexpr auto Country = R"re((?:_[A-Z]+))re";// country of locale postfix. eg.(US, CN)
|
constexpr auto Country = R"re((?:_[A-Z]+))re"; // country of locale postfix. eg.(US, CN)
|
||||||
constexpr auto Encoding = R"re((?:\.[0-9A-Z-]+))re";// encoding of locale postfix. eg.(UFT-8)
|
constexpr auto Encoding = R"re((?:\.[0-9A-Z-]+))re"; // encoding of locale postfix. eg.(UFT-8)
|
||||||
constexpr auto Modifier = R"re((?:@[a-z=;]+))re";// modifier of locale postfix. eg(euro;collation=traditional)
|
constexpr auto Modifier = R"re((?:@[a-z=;]+))re"; // modifier of locale postfix. eg(euro;collation=traditional)
|
||||||
const static auto validKey =
|
const static auto validKey =
|
||||||
QString("^%1(?:\\[(?<LOCALE>%2%3?%4?%5?)\\])?$").arg(MainKey).arg(Language).arg(Country).arg(Encoding).arg(Modifier);
|
QString("^%1(?:\\[(?<LOCALE>%2%3?%4?%5?)\\])?$").arg(MainKey).arg(Language).arg(Country).arg(Encoding).arg(Modifier);
|
||||||
// example: https://regex101.com/r/hylOay/1
|
// example: https://regex101.com/r/hylOay/1
|
||||||
@ -58,7 +58,7 @@ ParseError DesktopEntry::parseEntry(const QString &str, decltype(m_entryMap)::it
|
|||||||
key = matcher.captured("MainKey");
|
key = matcher.captured("MainKey");
|
||||||
|
|
||||||
if (auto locale = matcher.captured("LOCALE"); !locale.isEmpty()) {
|
if (auto locale = matcher.captured("LOCALE"); !locale.isEmpty()) {
|
||||||
valueKey = locale ;
|
valueKey = locale;
|
||||||
}
|
}
|
||||||
qDebug() << valueKey << valueStr;
|
qDebug() << valueKey << valueStr;
|
||||||
if (auto cur = currentGroup->find(key); cur == currentGroup->end()) {
|
if (auto cur = currentGroup->find(key); cur == currentGroup->end()) {
|
||||||
@ -84,7 +84,7 @@ std::optional<DesktopFile> DesktopFile::searchDesktopFile(const QString &desktop
|
|||||||
err = ParseError::MismatchedFile;
|
err = ParseError::MismatchedFile;
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
QString path,id;
|
QString path, id;
|
||||||
QFileInfo Fileinfo{desktopFile};
|
QFileInfo Fileinfo{desktopFile};
|
||||||
if (Fileinfo.isAbsolute() and Fileinfo.exists()) {
|
if (Fileinfo.isAbsolute() and Fileinfo.exists()) {
|
||||||
path = desktopFile;
|
path = desktopFile;
|
||||||
@ -93,8 +93,9 @@ std::optional<DesktopFile> DesktopFile::searchDesktopFile(const QString &desktop
|
|||||||
qDebug() << "Current Application Dirs:" << XDGDataDirs;
|
qDebug() << "Current Application Dirs:" << XDGDataDirs;
|
||||||
for (const auto &d : XDGDataDirs) {
|
for (const auto &d : XDGDataDirs) {
|
||||||
auto dirPath = QDir::cleanPath(d);
|
auto dirPath = QDir::cleanPath(d);
|
||||||
QDirIterator it{dirPath,{desktopFile},QDir::AllEntries | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories};
|
QDirIterator it{
|
||||||
if (it.hasNext()){
|
dirPath, {desktopFile}, QDir::AllEntries | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories};
|
||||||
|
if (it.hasNext()) {
|
||||||
path = it.next();
|
path = it.next();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -119,10 +120,10 @@ std::optional<DesktopFile> DesktopFile::searchDesktopFile(const QString &desktop
|
|||||||
id = FileId.chopped(1);
|
id = FileId.chopped(1);
|
||||||
}
|
}
|
||||||
err = ParseError::NoError;
|
err = ParseError::NoError;
|
||||||
return DesktopFile{std::move(path),std::move(id)};
|
return DesktopFile{std::move(path), std::move(id)};
|
||||||
}
|
}
|
||||||
|
|
||||||
ParseError DesktopEntry::parse(QTextStream& stream) noexcept
|
ParseError DesktopEntry::parse(QTextStream &stream) noexcept
|
||||||
{
|
{
|
||||||
if (stream.atEnd())
|
if (stream.atEnd())
|
||||||
return ParseError::OpenFailed;
|
return ParseError::OpenFailed;
|
||||||
@ -143,7 +144,7 @@ ParseError DesktopEntry::parse(QTextStream& stream) noexcept
|
|||||||
|
|
||||||
if (auto e = parseEntry(line, currentGroup); e != ParseError::NoError) {
|
if (auto e = parseEntry(line, currentGroup); e != ParseError::NoError) {
|
||||||
err = e;
|
err = e;
|
||||||
qWarning() << "an error occurred,this line will be skipped:"<< line;
|
qWarning() << "an error occurred,this line will be skipped:" << line;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
@ -209,15 +210,14 @@ QString DesktopEntry::Value::toString(bool &ok) const noexcept
|
|||||||
auto unescapedStr = unescape(*str);
|
auto unescapedStr = unescape(*str);
|
||||||
constexpr auto controlChars = "\\p{Cc}";
|
constexpr auto controlChars = "\\p{Cc}";
|
||||||
constexpr auto asciiChars = "[^\x00-\x7f]";
|
constexpr auto asciiChars = "[^\x00-\x7f]";
|
||||||
if (unescapedStr.contains(QRegularExpression{controlChars}) and
|
if (unescapedStr.contains(QRegularExpression{controlChars}) and unescapedStr.contains(QRegularExpression{asciiChars}))
|
||||||
unescapedStr.contains(QRegularExpression{asciiChars}))
|
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
ok = true;
|
ok = true;
|
||||||
return unescapedStr;
|
return unescapedStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DesktopEntry::Value::toLocaleString(const QLocale &locale, bool& ok) const noexcept
|
QString DesktopEntry::Value::toLocaleString(const QLocale &locale, bool &ok) const noexcept
|
||||||
{
|
{
|
||||||
ok = false;
|
ok = false;
|
||||||
for (auto it = this->constKeyValueBegin(); it != this->constKeyValueEnd(); ++it) {
|
for (auto it = this->constKeyValueBegin(); it != this->constKeyValueEnd(); ++it) {
|
||||||
@ -238,7 +238,7 @@ QString DesktopEntry::Value::toIconString(bool &ok) const noexcept
|
|||||||
bool DesktopEntry::Value::toBoolean(bool &ok) const noexcept
|
bool DesktopEntry::Value::toBoolean(bool &ok) const noexcept
|
||||||
{
|
{
|
||||||
ok = false;
|
ok = false;
|
||||||
const auto& str = (*this)[defaultKeyStr];
|
const auto &str = (*this)[defaultKeyStr];
|
||||||
if (str == "true") {
|
if (str == "true") {
|
||||||
ok = true;
|
ok = true;
|
||||||
return true;
|
return true;
|
||||||
@ -252,7 +252,7 @@ bool DesktopEntry::Value::toBoolean(bool &ok) const noexcept
|
|||||||
|
|
||||||
float DesktopEntry::Value::toNumeric(bool &ok) const noexcept
|
float DesktopEntry::Value::toNumeric(bool &ok) const noexcept
|
||||||
{
|
{
|
||||||
const auto& str = (*this)[defaultKeyStr];
|
const auto &str = (*this)[defaultKeyStr];
|
||||||
QVariant v{str};
|
QVariant v{str};
|
||||||
return v.toFloat(&ok);
|
return v.toFloat(&ok);
|
||||||
}
|
}
|
||||||
@ -260,7 +260,7 @@ float DesktopEntry::Value::toNumeric(bool &ok) const noexcept
|
|||||||
QDebug operator<<(QDebug debug, const DesktopEntry::Value &v)
|
QDebug operator<<(QDebug debug, const DesktopEntry::Value &v)
|
||||||
{
|
{
|
||||||
QDebugStateSaver saver{debug};
|
QDebugStateSaver saver{debug};
|
||||||
debug << static_cast<const QMap<QString,QString>&>(v);
|
debug << static_cast<const QMap<QString, QString> &>(v);
|
||||||
return debug;
|
return debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,31 +269,31 @@ QDebug operator<<(QDebug debug, const ParseError &v)
|
|||||||
QDebugStateSaver saver{debug};
|
QDebugStateSaver saver{debug};
|
||||||
QString errMsg;
|
QString errMsg;
|
||||||
switch (v) {
|
switch (v) {
|
||||||
case ParseError::NoError:{
|
case ParseError::NoError: {
|
||||||
errMsg = "no error.";
|
errMsg = "no error.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ParseError::NotFound:{
|
case ParseError::NotFound: {
|
||||||
errMsg = "file not found.";
|
errMsg = "file not found.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ParseError::MismatchedFile:{
|
case ParseError::MismatchedFile: {
|
||||||
errMsg = "file type is mismatched.";
|
errMsg = "file type is mismatched.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ParseError::InvalidLocation:{
|
case ParseError::InvalidLocation: {
|
||||||
errMsg = "file location is invalid, please check $XDG_DATA_DIRS.";
|
errMsg = "file location is invalid, please check $XDG_DATA_DIRS.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ParseError::OpenFailed:{
|
case ParseError::OpenFailed: {
|
||||||
errMsg = "couldn't open the file.";
|
errMsg = "couldn't open the file.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ParseError::GroupHeaderInvalid:{
|
case ParseError::GroupHeaderInvalid: {
|
||||||
errMsg = "groupHead syntax is invalid.";
|
errMsg = "groupHead syntax is invalid.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ParseError::EntryKeyInvalid:{
|
case ParseError::EntryKeyInvalid: {
|
||||||
errMsg = "key syntax is invalid.";
|
errMsg = "key syntax is invalid.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -11,15 +11,7 @@
|
|||||||
|
|
||||||
constexpr static auto defaultKeyStr = "default";
|
constexpr static auto defaultKeyStr = "default";
|
||||||
|
|
||||||
enum class ParseError {
|
enum class ParseError { NoError, NotFound, MismatchedFile, InvalidLocation, OpenFailed, GroupHeaderInvalid, EntryKeyInvalid };
|
||||||
NoError,
|
|
||||||
NotFound,
|
|
||||||
MismatchedFile,
|
|
||||||
InvalidLocation,
|
|
||||||
OpenFailed,
|
|
||||||
GroupHeaderInvalid,
|
|
||||||
EntryKeyInvalid
|
|
||||||
};
|
|
||||||
|
|
||||||
class DesktopEntry
|
class DesktopEntry
|
||||||
{
|
{
|
||||||
@ -41,7 +33,7 @@ public:
|
|||||||
|
|
||||||
DesktopEntry() = default;
|
DesktopEntry() = default;
|
||||||
~DesktopEntry() = default;
|
~DesktopEntry() = default;
|
||||||
[[nodiscard]] ParseError parse(QTextStream& stream) noexcept;
|
[[nodiscard]] ParseError parse(QTextStream &stream) noexcept;
|
||||||
[[nodiscard]] QMap<QString, Value> group(const QString &key) const noexcept;
|
[[nodiscard]] QMap<QString, Value> group(const QString &key) const noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -62,14 +54,18 @@ struct DesktopFile
|
|||||||
const QString &filePath() const { return m_filePath; }
|
const QString &filePath() const { return m_filePath; }
|
||||||
const QString &desktopId() const { return m_desktopId; }
|
const QString &desktopId() const { return m_desktopId; }
|
||||||
|
|
||||||
static std::optional<DesktopFile> searchDesktopFile(const QString &desktopFilePath, ParseError& err) noexcept;
|
static std::optional<DesktopFile> searchDesktopFile(const QString &desktopFilePath, ParseError &err) noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DesktopFile(QString &&path,QString &&fileId):m_filePath(std::move(path)),m_desktopId(std::move(fileId)){}
|
DesktopFile(QString &&path, QString &&fileId)
|
||||||
|
: m_filePath(std::move(path))
|
||||||
|
, m_desktopId(std::move(fileId))
|
||||||
|
{
|
||||||
|
}
|
||||||
QString m_filePath;
|
QString m_filePath;
|
||||||
QString m_desktopId;
|
QString m_desktopId;
|
||||||
};
|
};
|
||||||
|
|
||||||
QDebug operator<<(QDebug debug, const DesktopEntry::Value& v);
|
QDebug operator<<(QDebug debug, const DesktopEntry::Value &v);
|
||||||
|
|
||||||
QDebug operator<<(QDebug debug, const ParseError &v);
|
QDebug operator<<(QDebug debug, const ParseError &v);
|
||||||
|
@ -28,10 +28,10 @@ public:
|
|||||||
ApplicationManager1DBus(const ApplicationManager1DBus &) = delete;
|
ApplicationManager1DBus(const ApplicationManager1DBus &) = delete;
|
||||||
ApplicationManager1DBus(ApplicationManager1DBus &&) = delete;
|
ApplicationManager1DBus(ApplicationManager1DBus &&) = delete;
|
||||||
ApplicationManager1DBus &operator=(const ApplicationManager1DBus &) = delete;
|
ApplicationManager1DBus &operator=(const ApplicationManager1DBus &) = delete;
|
||||||
ApplicationManager1DBus &operator=(ApplicationManager1DBus&&) = delete;
|
ApplicationManager1DBus &operator=(ApplicationManager1DBus &&) = delete;
|
||||||
const QString &BusAddress() { return m_busAddress; }
|
const QString &BusAddress() { return m_busAddress; }
|
||||||
void setBusAddress(const QString &address) { m_busAddress = address; }
|
void setBusAddress(const QString &address) { m_busAddress = address; }
|
||||||
QDBusConnection& CustomBus()
|
QDBusConnection &CustomBus()
|
||||||
{
|
{
|
||||||
static auto con = QDBusConnection::connectToBus(m_busAddress, "org.deepin.dde.ApplicationManager1");
|
static auto con = QDBusConnection::connectToBus(m_busAddress, "org.deepin.dde.ApplicationManager1");
|
||||||
if (!con.isConnected()) {
|
if (!con.isConnected()) {
|
||||||
@ -52,7 +52,7 @@ private:
|
|||||||
QString m_busAddress;
|
QString m_busAddress;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool registerObjectToDbus(QObject* o, const QString &path, const QString &interface);
|
bool registerObjectToDbus(QObject *o, const QString &path, const QString &interface);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
QString getDBusInterface()
|
QString getDBusInterface()
|
||||||
|
@ -18,26 +18,24 @@ public:
|
|||||||
auto curDir = QDir::current();
|
auto curDir = QDir::current();
|
||||||
QString path{curDir.absolutePath() + "/data/desktopExample.desktop"};
|
QString path{curDir.absolutePath() + "/data/desktopExample.desktop"};
|
||||||
ParseError err;
|
ParseError err;
|
||||||
auto file = DesktopFile::searchDesktopFile(path,err);
|
auto file = DesktopFile::searchDesktopFile(path, err);
|
||||||
if (!file.has_value()) {
|
if (!file.has_value()) {
|
||||||
qWarning() << "search " << path << "failed:" << err;
|
qWarning() << "search " << path << "failed:" << err;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_file.reset(new DesktopFile{std::move(file).value()});
|
m_file.reset(new DesktopFile{std::move(file).value()});
|
||||||
}
|
}
|
||||||
void SetUp() override
|
void SetUp() override {}
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
void TearDown() override {}
|
void TearDown() override {}
|
||||||
QSharedPointer<DesktopFile> file() { return m_file; }
|
QSharedPointer<DesktopFile> file() { return m_file; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static inline QSharedPointer<DesktopFile> m_file;
|
static inline QSharedPointer<DesktopFile> m_file;
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(TestDesktopEntry, desktopFile)
|
TEST_F(TestDesktopEntry, desktopFile)
|
||||||
{
|
{
|
||||||
const auto& fileptr = file();
|
const auto &fileptr = file();
|
||||||
ASSERT_FALSE(fileptr.isNull());
|
ASSERT_FALSE(fileptr.isNull());
|
||||||
const auto &exampleFile = file();
|
const auto &exampleFile = file();
|
||||||
auto curDir = QDir::current();
|
auto curDir = QDir::current();
|
||||||
@ -49,7 +47,8 @@ TEST_F(TestDesktopEntry, desktopFile)
|
|||||||
TEST_F(TestDesktopEntry, prase)
|
TEST_F(TestDesktopEntry, prase)
|
||||||
{
|
{
|
||||||
const auto &exampleFile = file();
|
const auto &exampleFile = file();
|
||||||
ASSERT_FALSE(exampleFile.isNull());;
|
ASSERT_FALSE(exampleFile.isNull());
|
||||||
|
;
|
||||||
DesktopEntry entry;
|
DesktopEntry entry;
|
||||||
QFile in{exampleFile->filePath()};
|
QFile in{exampleFile->filePath()};
|
||||||
ASSERT_TRUE(in.open(QFile::ExistingOnly | QFile::ReadOnly | QFile::Text));
|
ASSERT_TRUE(in.open(QFile::ExistingOnly | QFile::ReadOnly | QFile::Text));
|
||||||
|
@ -9,7 +9,8 @@
|
|||||||
class TestJobManager : public testing::Test
|
class TestJobManager : public testing::Test
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
JobManager1Service& service() { return m_jobManager; }
|
JobManager1Service &service() { return m_jobManager; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JobManager1Service m_jobManager;
|
JobManager1Service m_jobManager;
|
||||||
};
|
};
|
||||||
@ -33,9 +34,12 @@ TEST_F(TestJobManager, addJob)
|
|||||||
qDebug() << "job was really removed";
|
qDebug() << "job was really removed";
|
||||||
});
|
});
|
||||||
|
|
||||||
manager.addJob(sourcePath, [](auto value) -> QVariant {
|
manager.addJob(
|
||||||
EXPECT_TRUE(value.toString() == "Application");
|
sourcePath,
|
||||||
return QVariant::fromValue(true);
|
[](auto value) -> QVariant {
|
||||||
}, args);
|
EXPECT_TRUE(value.toString() == "Application");
|
||||||
QThread::sleep(1); // force wait
|
return QVariant::fromValue(true);
|
||||||
|
},
|
||||||
|
args);
|
||||||
|
QThread::sleep(1); // force wait
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user