From 20d861b4fdb1b18afbc34af0deb71505795a0309 Mon Sep 17 00:00:00 2001 From: Zhang Sheng Date: Fri, 10 Jul 2026 17:09:03 +0800 Subject: [PATCH] fix: validate CLI option compatibility with search type and apply file-extensions filter for content/ocr validate CLI option compatibility with search type and apply file-extensions filter for content/ocr Log: --- .../dfm-search-client/cli_options.cpp | 21 +++++++++++++++++++ src/dfm-search/dfm-search-client/main.cpp | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/src/dfm-search/dfm-search-client/cli_options.cpp b/src/dfm-search/dfm-search-client/cli_options.cpp index f71bb02..7a3aa33 100644 --- a/src/dfm-search/dfm-search-client/cli_options.cpp +++ b/src/dfm-search/dfm-search-client/cli_options.cpp @@ -453,6 +453,27 @@ bool CliOptions::parse(QCoreApplication &app, SearchCliConfig &config) } } + // Validate option compatibility with search type + if (config.searchType == SearchType::FileName) { + if (m_parser.isSet(m_filenameOption)) { + std::cerr << "Error: --filename is only valid for content/ocr search, not filename search" << std::endl; + return false; + } + } else { + if (m_parser.isSet(m_pinyinOption)) { + std::cerr << "Error: --pinyin is only valid for filename search" << std::endl; + return false; + } + if (m_parser.isSet(m_pinyinAcronymOption)) { + std::cerr << "Error: --pinyin-acronym is only valid for filename search" << std::endl; + return false; + } + if (m_parser.isSet(m_fileTypesOption)) { + std::cerr << "Error: --file-types is only valid for filename search" << std::endl; + return false; + } + } + return true; } diff --git a/src/dfm-search/dfm-search-client/main.cpp b/src/dfm-search/dfm-search-client/main.cpp index 65eaf30..66bbec2 100644 --- a/src/dfm-search/dfm-search-client/main.cpp +++ b/src/dfm-search/dfm-search-client/main.cpp @@ -68,6 +68,9 @@ static void configureSearchOptions(SearchOptions &options, const SearchCliConfig if (!config.filenameKeyword.isEmpty()) { contentOptions.setFilenameKeyword(config.filenameKeyword); } + if (!config.fileExtensions.isEmpty()) { + contentOptions.setFileExtensions(config.fileExtensions); + } } else if (config.searchType == SearchType::Ocr) { OcrTextOptionsAPI ocrTextOptions(options); ocrTextOptions.setMaxPreviewLength(config.maxPreviewLength); @@ -77,6 +80,9 @@ static void configureSearchOptions(SearchOptions &options, const SearchCliConfig if (!config.filenameKeyword.isEmpty()) { ocrTextOptions.setFilenameKeyword(config.filenameKeyword); } + if (!config.fileExtensions.isEmpty()) { + ocrTextOptions.setFileExtensions(config.fileExtensions); + } } // 应用时间范围过滤