From a74c02d4c522547457d0006f60b3d5a8d02cf141 Mon Sep 17 00:00:00 2001 From: weizhixiang Date: Mon, 6 Jun 2022 11:55:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=20=E4=BF=AE=E5=A4=8D=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=99=A8=E8=8E=B7=E5=8F=96=E6=96=B0=E5=AE=89=E8=A3=85=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=95=B0=E6=8D=AE=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复启动器获取新安装应用数据异常的问题 Log: Task: https://pms.uniontech.com/task-view-143305.html Influence: 启动器正常获取新安装应用 Change-Id: I556b6725348813cc1674f00273cb9e34f96283a2 --- src/modules/apps/alrecorder.cpp | 18 ++++++++---------- src/modules/apps/alrecorder.h | 3 ++- src/modules/apps/dbusalrecorderadaptor.cpp | 2 -- src/modules/launcher/launcher.cpp | 8 ++++++-- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/modules/apps/alrecorder.cpp b/src/modules/apps/alrecorder.cpp index d4071a8..a46f746 100644 --- a/src/modules/apps/alrecorder.cpp +++ b/src/modules/apps/alrecorder.cpp @@ -77,25 +77,22 @@ void AlRecorder::markLaunched(const QString &filePath) QFileInfo info; QMutexLocker locker(&mutex); for (auto sri = subRecoders.begin(); sri != subRecoders.end(); sri++) { - if (!filePath.contains(sri.key())) + if (!filePath.startsWith(sri.key())) continue; info.setFile(filePath); QString name = info.baseName(); for (auto li = sri.value().launchedMap.begin(); li != sri.value().launchedMap.end(); li++) { + // 查找同名且未启动过的应用 if (li.key() == name && !li.value()) { li.value() = true; - goto end; + Q_EMIT launched(filePath); + + // 记录启动状态 + saveStatusFile(info.absolutePath() + "/"); } } } - - // 根据filePath匹配到唯一应用 - end: - if (info.isDir()) { - saveStatusFile(info.absolutePath() + "/"); - Q_EMIT launched(filePath); - } } /** @@ -154,7 +151,7 @@ void AlRecorder::initSubRecoder(const QString &dirPath) // 读取App状态记录 QMap launchedApp; QFile file(statusFile); - if (file.open(QIODevice::ReadWrite | QIODevice::Text)) { + if (file.exists() && file.open(QIODevice::ReadWrite | QIODevice::Text)) { while (!file.atEnd()){ QString line(file.readLine()); QStringList strs = line.split(","); @@ -166,6 +163,7 @@ void AlRecorder::initSubRecoder(const QString &dirPath) else launchedApp[strs[0]] = false; } + file.close(); } else { // 读取app desktop diff --git a/src/modules/apps/alrecorder.h b/src/modules/apps/alrecorder.h index 86efd59..81ebdcb 100644 --- a/src/modules/apps/alrecorder.h +++ b/src/modules/apps/alrecorder.h @@ -28,13 +28,14 @@ class DFWatcher; -// 记录应用状态信息 +// 记录当前用户应用状态信息 class AlRecorder: public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.deepin.daemon.AlRecorder1") public: + // 各个应用目录中应用的启动记录 struct subRecorder { QString statusFile; // 应用目录状态文件 QMap launchedMap; // 应用启动记录 diff --git a/src/modules/apps/dbusalrecorderadaptor.cpp b/src/modules/apps/dbusalrecorderadaptor.cpp index 684dccc..1a05786 100644 --- a/src/modules/apps/dbusalrecorderadaptor.cpp +++ b/src/modules/apps/dbusalrecorderadaptor.cpp @@ -3,7 +3,6 @@ DBusAdaptorRecorder::DBusAdaptorRecorder(QObject *parent) : QDBusAbstractAdaptor(parent) { - // constructor setAutoRelaySignals(true); if (QMetaType::type("UnlaunchedAppMap") == QMetaType::UnknownType) registerUnLaunchedAppMapMetaType(); @@ -18,7 +17,6 @@ DBusAdaptorRecorder::DBusAdaptorRecorder(QObject *parent) DBusAdaptorRecorder::~DBusAdaptorRecorder() { - // destructor } AlRecorder *DBusAdaptorRecorder::parent() const diff --git a/src/modules/launcher/launcher.cpp b/src/modules/launcher/launcher.cpp index e0ae884..bbbc28f 100644 --- a/src/modules/launcher/launcher.cpp +++ b/src/modules/launcher/launcher.cpp @@ -178,8 +178,12 @@ QStringList Launcher::getAllNewInstalledApps() newApps = reply; for (auto iter = newApps.begin(); iter != newApps.end(); iter++) { - if (iter.value().size() > 0) { - ret << iter.value(); + for (QString name : iter.value()) { + QString path = iter.key() + name + ".desktop"; + Item item = getItemByPath(path); + if (item.isValid()) { + ret << item.info.id; + } } } return ret;