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:
		@ -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: 待出现这个类型的问题时再行适配,优先解决阻塞问题
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -73,6 +73,7 @@ private:
 | 
			
		||||
    QMap<QString, QString> getDesktopToAutostartMap();
 | 
			
		||||
    void setIsDBusCalled(const bool state);
 | 
			
		||||
    bool isDBusCalled() const;
 | 
			
		||||
    void handleRecognizeArgs(QStringList &exeArgs, QStringList files);
 | 
			
		||||
 | 
			
		||||
    uint64_t minMemAvail;
 | 
			
		||||
    uint64_t maxSwapUsed;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user