perf(app-database-service):optimize the logic of the tranPidToDesktopFp method.
This commit is contained in:
parent
d6b622a7a2
commit
5a62faa16d
|
@ -1415,19 +1415,32 @@ bool AppDBManager::handleValueSet(const ApplicationInfoMap appInfoMap)
|
||||||
|
|
||||||
QString AppDBManager::tranPidToDesktopFp(uint pid)
|
QString AppDBManager::tranPidToDesktopFp(uint pid)
|
||||||
{
|
{
|
||||||
QString exePath = QFile::symLinkTarget("/proc/" + QString::number(pid) + "/exe");
|
QFile file("/proc/" + QString::number(pid) + "/cmdline");
|
||||||
|
file.open(QFile::ReadOnly);
|
||||||
|
QList<QByteArray> cmdlist = file.readAll().split('\0');
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
cmdlist.removeAll("");
|
||||||
|
QString exePath;
|
||||||
|
for (int i = cmdlist.size() - 1; i >= 0; i--) {
|
||||||
|
if (cmdlist.at(i).startsWith("-") || cmdlist.at(i).contains("%")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
exePath = cmdlist.at(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
QString desktopFilePath;
|
QString desktopFilePath;
|
||||||
|
|
||||||
QSqlQuery sql(m_database);
|
QSqlQuery query(m_database);
|
||||||
sql.setForwardOnly(true);
|
query.setForwardOnly(true);
|
||||||
sql.prepare("SELECT DESKTOP_FILE_PATH, EXEC FROM APPINFO WHERE EXEC LIKE :exePath");
|
query.prepare("SELECT DESKTOP_FILE_PATH, EXEC FROM APPINFO WHERE EXEC LIKE :exePath");
|
||||||
sql.bindValue(":exePath", "%" + exePath.section('/', -1) + "%");
|
query.bindValue(":exePath", "%" + exePath.section('/', -1) + "%");
|
||||||
|
|
||||||
if (sql.exec()) {
|
if (query.exec()) {
|
||||||
QMap<QString, QString> execInfos;
|
QMap<QString, QString> execInfos;
|
||||||
while (sql.next()) {
|
while (query.next()) {
|
||||||
execInfos[sql.value("DESKTOP_FILE_PATH").toString()] = sql.value("EXEC").toString();
|
execInfos[query.value("DESKTOP_FILE_PATH").toString()] = query.value("EXEC").toString();
|
||||||
desktopFilePath = sql.value("DESKTOP_FILE_PATH").toString();
|
desktopFilePath = query.value("DESKTOP_FILE_PATH").toString();
|
||||||
}
|
}
|
||||||
//筛选后有多个结果时进一步过滤
|
//筛选后有多个结果时进一步过滤
|
||||||
if (execInfos.size() > 1) {
|
if (execInfos.size() > 1) {
|
||||||
|
@ -1447,9 +1460,16 @@ QString AppDBManager::tranPidToDesktopFp(uint pid)
|
||||||
partOfExec.remove("\"");
|
partOfExec.remove("\"");
|
||||||
}
|
}
|
||||||
//compare the binary path
|
//compare the binary path
|
||||||
if ((partOfExec.contains("/") && partOfExec == exePath) || (partOfExec == exePath.section("/", -1))) {
|
if (partOfExec.contains("/") && exePath.contains("/")) {
|
||||||
desktopFilePath = it.key();
|
if (partOfExec == exePath) {
|
||||||
break;
|
desktopFilePath = it.key();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((partOfExec == exePath.section("/", -1)) || (partOfExec.section("/", -1) == exePath)) {
|
||||||
|
desktopFilePath = it.key();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!desktopFilePath.isEmpty()) {
|
if (!desktopFilePath.isEmpty()) {
|
||||||
|
@ -1464,7 +1484,7 @@ QString AppDBManager::tranPidToDesktopFp(uint pid)
|
||||||
qWarning() << "Can not find the desktop file of" << exePath << "by pid:" << pid;
|
qWarning() << "Can not find the desktop file of" << exePath << "by pid:" << pid;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Fail to exec cmd" << sql.lastQuery() << m_database.lastError();
|
qWarning() << "Fail to exec cmd" << query.lastQuery() << m_database.lastError();
|
||||||
}
|
}
|
||||||
return desktopFilePath;
|
return desktopFilePath;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue