fix: 修复安装应用失败问题

优化新应用安装/启动后,AM发送消息通知dde-launcher的逻辑

Log:
Influence: 安装应用/启动应用时,启动器功能正常
Bug: https://pms.uniontech.com/bug-view-150623.html
Change-Id: Icebea449ccd5ad9eac39cf5d527e87813910b356
This commit is contained in:
songwentao 2022-08-19 16:07:41 +08:00
parent e4a62a73a2
commit f8d2e15dc0
3 changed files with 44 additions and 23 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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);