fix: AM 适配打开参数问题

1. 适配%f,%F,%u,%U 几个识别字段,%i,%c,%k,%v,后面遇到相关问题后再继续适配
2. 直接读取Desktop文件中Exec字段内容,启动应用

Log:
Influence: 1. 双击桌面文件夹-打开文件夹功能正常;
2. 打开文件展示文件后直接展示内容
3. 截图录屏后文件可以正常打开
4. 双击桌面图标,应用可以正常打开
5. 双击音乐文件后,音乐文件正常播放
Bug: https://pms.uniontech.com/bug-view-182185.html
Bug: https://pms.uniontech.com/bug-view-182161.html
Bug: https://pms.uniontech.com/bug-view-182395.html
Bug: https://pms.uniontech.com/bug-view-182327.html
Bug: https://pms.uniontech.com/bug-view-182137.html
Change-Id: I67a156ec0c8ab8824bf880646d1fe642959f4b20
This commit is contained in:
songwentao 2023-01-09 13:56:17 +08:00
parent b9372feb9a
commit 88c390616a
2 changed files with 44 additions and 11 deletions

View File

@ -414,7 +414,9 @@ bool StartManager::launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp
envs << cmdPrefixesEnvs; envs << cmdPrefixesEnvs;
QStringList exeArgs; QStringList exeArgs;
exeArgs << cmdLine.split(" ") << files; exeArgs << cmdLine.split(" ");
handleRecognizeArgs(exeArgs, files);
if (info->getTerminal()) { if (info->getTerminal()) {
exeArgs.insert(0, SETTING->getDefaultTerminalExecArg()); exeArgs.insert(0, SETTING->getDefaultTerminalExecArg());
@ -436,16 +438,6 @@ bool StartManager::launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp
process.setWorkingDirectory(workingDir.c_str()); process.setWorkingDirectory(workingDir.c_str());
process.setEnvironment(envs); process.setEnvironment(envs);
if (exec != "dbus-send" && desktopFile.contains("/persistent/linglong")) {
exeArgs.clear();
#ifdef QT_DEBUG
qDebug() << "exeArgs:" << cmdLine.section(" ", 1, 2);
#endif
exeArgs.append(cmdLine.section(" ", 1, 2).split(" "));
}
return process.startDetached(exec, exeArgs); return process.startDetached(exec, exeArgs);
} }
@ -595,3 +587,43 @@ bool StartManager::isDBusCalled() const
{ {
return m_isDBusCalled; return m_isDBusCalled;
} }
/**遵循 freedesktop 规范,添加识别的字段处理
* @brief StartManager::hangleRecognizeArgs
* @param exeArgs desktop文件中 exec
* @param files
*/
void StartManager::handleRecognizeArgs(QStringList &exeArgs, QStringList files)
{
QStringList argList;
argList << "%f" << "%F" << "%u" << "%U" << "%i" << "%c" << "%k";
for (const QString &arg : argList) {
if (exeArgs.contains(arg) && files.isEmpty()) {
exeArgs.removeOne(arg);
return;
}
}
if (exeArgs.contains("%f")) {
exeArgs.replaceInStrings("%f", files.at(0));
} else if (exeArgs.contains("%F")) {
QStringList urlList;
for (const QString &file : files) {
QUrl url(file);
urlList.append(url.toLocalFile());
}
const QString &fileUlr = urlList.join(" ");
exeArgs.replaceInStrings("%F", fileUlr);
} else if (exeArgs.contains("%u")) {
exeArgs.replaceInStrings("%u", files.at(0));
} else if (exeArgs.contains("%U")) {
exeArgs.replaceInStrings("%U", files.join(" "));
} else if (exeArgs.contains("%i")) {
// TODO: 待出现这个类型的问题时再行适配,优先解决阻塞问题
} else if (exeArgs.contains("%c")) {
// TODO: 待出现这个类型的问题时再行适配,优先解决阻塞问题
} else if (exeArgs.contains("%k")) {
// TODO: 待出现这个类型的问题时再行适配,优先解决阻塞问题
}
}

View File

@ -73,6 +73,7 @@ private:
QMap<QString, QString> getDesktopToAutostartMap(); QMap<QString, QString> getDesktopToAutostartMap();
void setIsDBusCalled(const bool state); void setIsDBusCalled(const bool state);
bool isDBusCalled() const; bool isDBusCalled() const;
void handleRecognizeArgs(QStringList &exeArgs, QStringList files);
uint64_t minMemAvail; uint64_t minMemAvail;
uint64_t maxSwapUsed; uint64_t maxSwapUsed;