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 <QtCore/QList>
#include <QDBusMetaType>
#include <QDebug>
struct LauncherItemInfo {
QString path;
@ -34,6 +35,14 @@ struct LauncherItemInfo {
qint64 timeInstalled;
QStringList keywords;
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)

View File

@ -63,24 +63,7 @@ Launcher::Launcher(QObject *parent)
loadNameMap();
initItems();
// 关联org.deepin.daemon.DFWatcher1接口事件Event
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);
}));
initConnection();
}
Launcher::~Launcher()
@ -440,7 +423,7 @@ void Launcher::handleFSWatcherEvents(QDBusMessage msg)
} else if (filePath == applicationsFile) { // 应用信息文件变化
loadPkgCategoryMap();
} 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);
if (appId.isEmpty())
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中隐藏应用配置变化
*/
@ -673,7 +683,7 @@ void Launcher::initItems()
}
}
void Launcher::addItem(Item item)
void Launcher::addItem(Item &item)
{
if (!item.isValid())
return;

View File

@ -119,19 +119,21 @@ Q_SIGNALS:
private Q_SLOTS:
void handleFSWatcherEvents(QDBusMessage msg);
void onAppSuffixNameChanged(bool hidden);
void onCheckDesktopFile(const QString &filePath, int type = 0);
void onNewAppLaunched(const QString &filePath);
private:
void initConnection();
void initSettings();
void loadDesktopPkgMap();
void loadPkgCategoryMap();
void checkDesktopFile(QString filePath);
void handleAppHiddenChanged();
void loadNameMap();
void initItems();
QString getAppIdByFilePath(QString filePath, QStringList dirs);
bool isDeepinCustomDesktopFile(QString fileName);
Item NewItemWithDesktopInfo(DesktopInfo &info);
void addItem(Item item);
void addItem(Item &item);
Categorytype queryCategoryId(const Item *item);
Categorytype getXCategory(const Item *item);
QString queryPkgName(const QString &itemID, const QString &itemPath);