From 88c390616aa0f139c63adfb4520ffd7a63755a77 Mon Sep 17 00:00:00 2001 From: songwentao Date: Mon, 9 Jan 2023 13:56:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20AM=20=E9=80=82=E9=85=8D=E6=89=93?= =?UTF-8?q?=E5=BC=80=E5=8F=82=E6=95=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/modules/startmanager/startmanager.cpp | 54 ++++++++++++++++++----- src/modules/startmanager/startmanager.h | 1 + 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/modules/startmanager/startmanager.cpp b/src/modules/startmanager/startmanager.cpp index 30d1f77..30f08df 100644 --- a/src/modules/startmanager/startmanager.cpp +++ b/src/modules/startmanager/startmanager.cpp @@ -414,7 +414,9 @@ bool StartManager::launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp envs << cmdPrefixesEnvs; QStringList exeArgs; - exeArgs << cmdLine.split(" ") << files; + exeArgs << cmdLine.split(" "); + + handleRecognizeArgs(exeArgs, files); if (info->getTerminal()) { 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.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); } @@ -595,3 +587,43 @@ bool StartManager::isDBusCalled() const { 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: 待出现这个类型的问题时再行适配,优先解决阻塞问题 + } +} diff --git a/src/modules/startmanager/startmanager.h b/src/modules/startmanager/startmanager.h index f7b60ac..563582b 100644 --- a/src/modules/startmanager/startmanager.h +++ b/src/modules/startmanager/startmanager.h @@ -73,6 +73,7 @@ private: QMap getDesktopToAutostartMap(); void setIsDBusCalled(const bool state); bool isDBusCalled() const; + void handleRecognizeArgs(QStringList &exeArgs, QStringList files); uint64_t minMemAvail; uint64_t maxSwapUsed;