fix: 修复安装应用失败问题
优化新应用安装/启动后,AM发送消息通知dde-launcher的逻辑 Log: Influence: 安装应用/启动应用时,启动器功能正常 Bug: https://pms.uniontech.com/bug-view-150623.html Change-Id: Icebea449ccd5ad9eac39cf5d527e87813910b356
This commit is contained in:
parent
e4a62a73a2
commit
f8d2e15dc0
@ -24,6 +24,7 @@
|
|||||||
#include <QtDBus/QtDBus>
|
#include <QtDBus/QtDBus>
|
||||||
#include <QtCore/QList>
|
#include <QtCore/QList>
|
||||||
#include <QDBusMetaType>
|
#include <QDBusMetaType>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
struct LauncherItemInfo {
|
struct LauncherItemInfo {
|
||||||
QString path;
|
QString path;
|
||||||
@ -34,6 +35,14 @@ struct LauncherItemInfo {
|
|||||||
qint64 timeInstalled;
|
qint64 timeInstalled;
|
||||||
QStringList keywords;
|
QStringList keywords;
|
||||||
bool operator!=(const LauncherItemInfo &versionInfo);
|
bool operator!=(const LauncherItemInfo &versionInfo);
|
||||||
|
|
||||||
|
friend QDebug operator<<(QDebug argument, const LauncherItemInfo &info)
|
||||||
|
{
|
||||||
|
argument << info.path << info.name << info.id;
|
||||||
|
argument << info.icon << info.categoryId << info.timeInstalled << info.keywords;
|
||||||
|
|
||||||
|
return argument;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(LauncherItemInfo)
|
Q_DECLARE_METATYPE(LauncherItemInfo)
|
||||||
|
@ -63,24 +63,7 @@ Launcher::Launcher(QObject *parent)
|
|||||||
loadNameMap();
|
loadNameMap();
|
||||||
initItems();
|
initItems();
|
||||||
|
|
||||||
// 关联org.deepin.daemon.DFWatcher1接口事件Event
|
initConnection();
|
||||||
QDBusConnection::sessionBus().connect("org.deepin.daemon.DFWatcher1",
|
|
||||||
"/org/deepin/daemon/DFWatcher1",
|
|
||||||
"org.deepin.daemon.DFWatcher1",
|
|
||||||
"Event", "", // TODO 修正事件参数
|
|
||||||
this, SLOT(handleFSWatcherEvents(QDBusMessage)));
|
|
||||||
|
|
||||||
// 关联org.deepin.daemon.LRecorder1接口事件Launched
|
|
||||||
QDBusConnection::sessionBus().connect("org.deepin.daemon.AlRecorder1",
|
|
||||||
"/org/deepin/daemon/AlRecorder1",
|
|
||||||
"org.deepin.daemon.AlRecorder1",
|
|
||||||
"Launched", "sa",
|
|
||||||
this, SLOT([&](QDBusMessage msg) {
|
|
||||||
QString path = msg.arguments().at(0).toString();
|
|
||||||
Item item = getItemByPath(path);
|
|
||||||
if (item.isValid())
|
|
||||||
Q_EMIT newAppLaunched(item.id);
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Launcher::~Launcher()
|
Launcher::~Launcher()
|
||||||
@ -440,7 +423,7 @@ void Launcher::handleFSWatcherEvents(QDBusMessage msg)
|
|||||||
} else if (filePath == applicationsFile) { // 应用信息文件变化
|
} else if (filePath == applicationsFile) { // 应用信息文件变化
|
||||||
loadPkgCategoryMap();
|
loadPkgCategoryMap();
|
||||||
} else if (filePath.endsWith(".desktop")){ // desktop文件变化
|
} else if (filePath.endsWith(".desktop")){ // desktop文件变化
|
||||||
checkDesktopFile(filePath);
|
onCheckDesktopFile(filePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -521,8 +504,10 @@ void Launcher::loadPkgCategoryMap()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Launcher::checkDesktopFile(QString filePath)
|
void Launcher::onCheckDesktopFile(const QString &filePath, int type)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(type);
|
||||||
|
|
||||||
QString appId = getAppIdByFilePath(filePath, appDirs);
|
QString appId = getAppIdByFilePath(filePath, appDirs);
|
||||||
if (appId.isEmpty())
|
if (appId.isEmpty())
|
||||||
return;
|
return;
|
||||||
@ -563,6 +548,31 @@ void Launcher::checkDesktopFile(QString filePath)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Launcher::onNewAppLaunched(const QString &filePath)
|
||||||
|
{
|
||||||
|
Item item = getItemByPath(filePath);
|
||||||
|
|
||||||
|
if (item.isValid())
|
||||||
|
Q_EMIT newAppLaunched(item.info.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Launcher::initConnection()
|
||||||
|
{
|
||||||
|
QDBusConnection::sessionBus().connect("org.deepin.daemon.DFWatcher1",
|
||||||
|
"/org/deepin/daemon/DFWatcher1",
|
||||||
|
"org.deepin.daemon.DFWatcher1",
|
||||||
|
"Event",
|
||||||
|
this,
|
||||||
|
SLOT(onCheckDesktopFile(const QString &, int)));
|
||||||
|
|
||||||
|
QDBusConnection::sessionBus().connect("org.deepin.daemon.AlRecorder1",
|
||||||
|
"/org/deepin/daemon/AlRecorder1",
|
||||||
|
"org.deepin.daemon.AlRecorder1",
|
||||||
|
"Launched",
|
||||||
|
this,
|
||||||
|
SLOT(onNewAppLaunched(const QString &)));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Launcher::handleAppHiddenChanged 响应DConfig中隐藏应用配置变化
|
* @brief Launcher::handleAppHiddenChanged 响应DConfig中隐藏应用配置变化
|
||||||
*/
|
*/
|
||||||
@ -673,7 +683,7 @@ void Launcher::initItems()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Launcher::addItem(Item item)
|
void Launcher::addItem(Item &item)
|
||||||
{
|
{
|
||||||
if (!item.isValid())
|
if (!item.isValid())
|
||||||
return;
|
return;
|
||||||
|
@ -119,19 +119,21 @@ Q_SIGNALS:
|
|||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void handleFSWatcherEvents(QDBusMessage msg);
|
void handleFSWatcherEvents(QDBusMessage msg);
|
||||||
void onAppSuffixNameChanged(bool hidden);
|
void onAppSuffixNameChanged(bool hidden);
|
||||||
|
void onCheckDesktopFile(const QString &filePath, int type = 0);
|
||||||
|
void onNewAppLaunched(const QString &filePath);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void initConnection();
|
||||||
void initSettings();
|
void initSettings();
|
||||||
void loadDesktopPkgMap();
|
void loadDesktopPkgMap();
|
||||||
void loadPkgCategoryMap();
|
void loadPkgCategoryMap();
|
||||||
void checkDesktopFile(QString filePath);
|
|
||||||
void handleAppHiddenChanged();
|
void handleAppHiddenChanged();
|
||||||
void loadNameMap();
|
void loadNameMap();
|
||||||
void initItems();
|
void initItems();
|
||||||
QString getAppIdByFilePath(QString filePath, QStringList dirs);
|
QString getAppIdByFilePath(QString filePath, QStringList dirs);
|
||||||
bool isDeepinCustomDesktopFile(QString fileName);
|
bool isDeepinCustomDesktopFile(QString fileName);
|
||||||
Item NewItemWithDesktopInfo(DesktopInfo &info);
|
Item NewItemWithDesktopInfo(DesktopInfo &info);
|
||||||
void addItem(Item item);
|
void addItem(Item &item);
|
||||||
Categorytype queryCategoryId(const Item *item);
|
Categorytype queryCategoryId(const Item *item);
|
||||||
Categorytype getXCategory(const Item *item);
|
Categorytype getXCategory(const Item *item);
|
||||||
QString queryPkgName(const QString &itemID, const QString &itemPath);
|
QString queryPkgName(const QString &itemID, const QString &itemPath);
|
||||||
|
Loading…
Reference in New Issue
Block a user