From 17cd4456075b1aabd035f05d4b1024761e88c418 Mon Sep 17 00:00:00 2001 From: xiaoyifang <105986+xiaoyifang@users.noreply.github.com> Date: Wed, 26 Jul 2023 10:03:20 +0800 Subject: [PATCH] feat: customize dictionary's fullindex option with metadata.toml (#1000) * feat: customize dictionary's fullindex option with metadata.toml * [autofix.ci] apply automated fixes * feat: display fulltext status in the dictionary info dialog * [autofix.ci] apply automated fixes * doc: add document about how to enable dictionary's fullindex feature * Update src/metadata.cc Co-authored-by: shenleban tongying * Update src/ui/dictinfo.ui Co-authored-by: shenleban tongying * Update website/mkdocs.yml Co-authored-by: shenleban tongying * Update website/docs/custom_dictionary.md Co-authored-by: shenleban tongying * Update website/docs/custom_dictionary.md Co-authored-by: shenleban tongying * Update website/docs/custom_dictionary.md Co-authored-by: shenleban tongying * Update website/docs/custom_dictionary.md Co-authored-by: shenleban tongying * Update website/docs/custom_dictionary.md Co-authored-by: shenleban tongying * Update website/docs/custom_dictionary.md Co-authored-by: shenleban tongying * add images * feat: show fulltext search status in dictionary info dialog * Update dictinfo.cc * [autofix.ci] apply automated fixes * ui: change layout --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: YiFang Xiao Co-authored-by: shenleban tongying --- icons/fts_disabled.svg | 63 ++++++++ icons/fts_enabled.svg | 63 ++++++++ resources.qrc | 2 + src/dict/aard.cc | 2 +- src/dict/bgl.cc | 2 +- src/dict/dictdfiles.cc | 2 +- src/dict/dictionary.hh | 7 + src/dict/dsl.cc | 2 +- src/dict/epwing.cc | 2 +- src/dict/gls.cc | 2 +- src/dict/loaddictionaries.cc | 3 + src/dict/mdx.cc | 2 +- src/dict/sdict.cc | 2 +- src/dict/slob.cc | 2 +- src/dict/stardict.cc | 2 +- src/dict/xdxf.cc | 2 +- src/dict/zim.cc | 2 +- src/metadata.cc | 14 ++ src/metadata.hh | 1 + src/ui/dictinfo.cc | 1 + src/ui/dictinfo.ui | 149 +++++++++--------- ...ictionary_name.md => custom_dictionary.md} | 29 +++- .../docs/img/dictionary-info-fullindex.png | Bin 0 -> 11636 bytes website/mkdocs.yml | 2 +- 24 files changed, 273 insertions(+), 85 deletions(-) create mode 100644 icons/fts_disabled.svg create mode 100644 icons/fts_enabled.svg rename website/docs/{custom_dictionary_name.md => custom_dictionary.md} (53%) create mode 100644 website/docs/img/dictionary-info-fullindex.png diff --git a/icons/fts_disabled.svg b/icons/fts_disabled.svg new file mode 100644 index 00000000..b3b8a224 --- /dev/null +++ b/icons/fts_disabled.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/icons/fts_enabled.svg b/icons/fts_enabled.svg new file mode 100644 index 00000000..923d7ebf --- /dev/null +++ b/icons/fts_enabled.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/resources.qrc b/resources.qrc index 0171ab46..3de960bb 100644 --- a/resources.qrc +++ b/resources.qrc @@ -92,5 +92,7 @@ icons/old-downarrow.png icons/custom_trans.svg icons/splash.png + icons/fts_disabled.svg + icons/fts_enabled.svg diff --git a/src/dict/aard.cc b/src/dict/aard.cc index aacbd652..c16dbac7 100644 --- a/src/dict/aard.cc +++ b/src/dict/aard.cc @@ -263,7 +263,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "AARD", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "AARD", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/bgl.cc b/src/dict/bgl.cc index c7ff379e..0894b4d8 100644 --- a/src/dict/bgl.cc +++ b/src/dict/bgl.cc @@ -225,7 +225,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "BGL", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "BGL", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/dictdfiles.cc b/src/dict/dictdfiles.cc index 01db2de0..4d2f3e80 100644 --- a/src/dict/dictdfiles.cc +++ b/src/dict/dictdfiles.cc @@ -140,7 +140,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "DICTD", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "DICTD", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } }; diff --git a/src/dict/dictionary.hh b/src/dict/dictionary.hh index 5fc4b646..aa6b6373 100644 --- a/src/dict/dictionary.hh +++ b/src/dict/dictionary.hh @@ -312,6 +312,8 @@ protected: QAtomicInt FTS_index_completed; bool synonymSearchEnabled; string dictionaryName; + //default to true; + bool enable_FTS = true; // Load user icon if it exist // By default set icon to empty @@ -369,6 +371,11 @@ public: dictionaryName = _dictionaryName; } + void setFtsEnable( bool _enable_FTS ) + { + enable_FTS = _enable_FTS; + } + /// Returns all the available properties, like the author's name, copyright, /// description etc. All strings are in utf8. virtual map< Property, string > getProperties() noexcept = 0; diff --git a/src/dict/dsl.cc b/src/dict/dsl.cc index 575295a4..221f9744 100644 --- a/src/dict/dsl.cc +++ b/src/dict/dsl.cc @@ -240,7 +240,7 @@ public: if ( ensureInitDone().size() ) return; - can_FTS = fts.enabled && !fts.disabledTypes.contains( "DSL", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "DSL", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/epwing.cc b/src/dict/epwing.cc index da8b5c7b..34d0ef39 100644 --- a/src/dict/epwing.cc +++ b/src/dict/epwing.cc @@ -155,7 +155,7 @@ public: if ( ensureInitDone().size() ) return; - can_FTS = fts.enabled && !fts.disabledTypes.contains( "EPWING", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "EPWING", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/gls.cc b/src/dict/gls.cc index 0b63817c..d3e10665 100644 --- a/src/dict/gls.cc +++ b/src/dict/gls.cc @@ -408,7 +408,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "GLS", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "GLS", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/loaddictionaries.cc b/src/dict/loaddictionaries.cc index d32d3a02..53eebbf4 100644 --- a/src/dict/loaddictionaries.cc +++ b/src/dict/loaddictionaries.cc @@ -177,6 +177,9 @@ void LoadDictionaries::handlePath( Config::Path const & path ) if ( dictMetaData && dictMetaData->name ) { dict->setName( dictMetaData->name.value() ); } + if ( dictMetaData && dictMetaData->fullindex ) { + dict->setFtsEnable( dictMetaData->fullindex.value() ); + } } } diff --git a/src/dict/mdx.cc b/src/dict/mdx.cc index a80a1d1a..322272f6 100644 --- a/src/dict/mdx.cc +++ b/src/dict/mdx.cc @@ -261,7 +261,7 @@ public: if ( !ensureInitDone().empty() ) return; - can_FTS = fts.enabled && !fts.disabledTypes.contains( "MDICT", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "MDICT", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/sdict.cc b/src/dict/sdict.cc index 67eb7116..24d1a249 100644 --- a/src/dict/sdict.cc +++ b/src/dict/sdict.cc @@ -177,7 +177,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "SDICT", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "SDICT", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/slob.cc b/src/dict/slob.cc index 1f86c41f..8ef08b3d 100644 --- a/src/dict/slob.cc +++ b/src/dict/slob.cc @@ -640,7 +640,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "SLOB", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "SLOB", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/stardict.cc b/src/dict/stardict.cc index bd07a618..3028ba16 100644 --- a/src/dict/stardict.cc +++ b/src/dict/stardict.cc @@ -205,7 +205,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "STARDICT", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "STARDICT", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/xdxf.cc b/src/dict/xdxf.cc index 076c6898..de640fde 100644 --- a/src/dict/xdxf.cc +++ b/src/dict/xdxf.cc @@ -203,7 +203,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "XDXF", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "XDXF", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/dict/zim.cc b/src/dict/zim.cc index 83ea80e3..d4288628 100644 --- a/src/dict/zim.cc +++ b/src/dict/zim.cc @@ -221,7 +221,7 @@ public: void setFTSParameters( Config::FullTextSearch const & fts ) override { - can_FTS = fts.enabled && !fts.disabledTypes.contains( "ZIM", Qt::CaseInsensitive ) + can_FTS = enable_FTS && fts.enabled && !fts.disabledTypes.contains( "ZIM", Qt::CaseInsensitive ) && ( fts.maxDictionarySize == 0 || getArticleCount() <= fts.maxDictionarySize ); } diff --git a/src/metadata.cc b/src/metadata.cc index 3a8b86b8..582a9d82 100644 --- a/src/metadata.cc +++ b/src/metadata.cc @@ -34,5 +34,19 @@ std::optional< Metadata::result > Metadata::load( std::string_view filepath ) } result.name = tbl[ "metadata" ][ "name" ].value_exact< std::string >(); + + const auto fullindex = tbl[ "fts" ]; + if ( fullindex.as_string() ) { + const auto value = fullindex.as_string()->get(); + result.fullindex = value == "1" || value == "on" || value == "true"; + } + else if ( fullindex.as_boolean() ) { + auto value = fullindex.as_boolean()->get(); + result.fullindex = value; + } + else if ( fullindex.as_integer() ) { + const auto value = fullindex.as_integer()->get(); + result.fullindex = value > 0; + } return result; } diff --git a/src/metadata.hh b/src/metadata.hh index 5605dfe9..a8637a41 100644 --- a/src/metadata.hh +++ b/src/metadata.hh @@ -12,6 +12,7 @@ struct result { std::optional< std::vector< std::string > > categories; std::optional< std::string > name; + std::optional< bool > fullindex; }; [[nodiscard]] std::optional< Metadata::result > load( std::string_view filepath ); diff --git a/src/ui/dictinfo.cc b/src/ui/dictinfo.cc index cdfac39c..73b06cf6 100644 --- a/src/ui/dictinfo.cc +++ b/src/ui/dictinfo.cc @@ -20,6 +20,7 @@ void DictInfo::showInfo( sptr< Dictionary::Class > dict ) setWindowTitle( QString::fromUtf8( dict->getName().data(), dict->getName().size() ) ); ui.dictionaryId->setText( QString::fromStdString( dict->getId() ) ); + ui.enableFullindex->setText( dict->canFTS() ? tr( "Full-text search enabled" ) : tr( "Full-text search disabled" ) ); ui.dictionaryTotalArticles->setText( QString::number( dict->getArticleCount() ) ); ui.dictionaryTotalWords->setText( QString::number( dict->getWordCount() ) ); ui.dictionaryTranslatesFrom->setText( Language::localizedStringForId( dict->getLangFrom() ) ); diff --git a/src/ui/dictinfo.ui b/src/ui/dictinfo.ui index bb01984b..1e73f5dd 100644 --- a/src/ui/dictinfo.ui +++ b/src/ui/dictinfo.ui @@ -23,68 +23,6 @@ - - - - - - - Qt::AlignCenter - - - - - - - Total words: - - - - - - - Translates from: - - - - - - - - - - - - - - - - - Qt::AlignCenter - - - - - - - - - - - - - - Total articles: - - - - - - - Open folder - - - @@ -95,17 +33,24 @@ - - + + - Translates to: + - - + + - Index filename: + + + + + + + + Open index folder @@ -119,10 +64,72 @@ - - + + - Open index folder + + + + Qt::AlignCenter + + + + + + + Total articles: + + + + + + + Index filename: + + + + + + + Total words: + + + + + + + Open folder + + + + + + + + + + Qt::AlignCenter + + + + + + + Translates from: + + + + + + + + + + + + + + Translates to: diff --git a/website/docs/custom_dictionary_name.md b/website/docs/custom_dictionary.md similarity index 53% rename from website/docs/custom_dictionary_name.md rename to website/docs/custom_dictionary.md index 6db3b23b..6b984a79 100644 --- a/website/docs/custom_dictionary_name.md +++ b/website/docs/custom_dictionary.md @@ -1,7 +1,13 @@ -You can customize the dictionary name by the metadata.toml which is also used in [metadata grouping](manage_groups.md) +You can customize the dictionary by the metadata.toml which is also used in [metadata grouping](manage_groups.md) ## About the configuration of metadata.toml + + +the metadata.toml use toml format for configuration. + +## Customize the name of the dictionary + ```toml [metadata] name = "New Name" @@ -32,3 +38,24 @@ For example, ``` +## Disable full-text search for certain dictionary + +```toml +fts=false + +[metadata] +name="New Name" + +``` + +this `fts` field's value can be on/off, 1/0 ,true/false etc. + +``` +fts=false +``` +will disable the current dictionary's full-text search. + + +you can check the full-text search on each dictionary's info dialog. + +![](img/dictionary-info-fullindex.png) \ No newline at end of file diff --git a/website/docs/img/dictionary-info-fullindex.png b/website/docs/img/dictionary-info-fullindex.png new file mode 100644 index 0000000000000000000000000000000000000000..2bece5f3e113e83fa348e9f989df09225bc5c269 GIT binary patch literal 11636 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 G{J#K}JxFi> literal 0 HcmV?d00001 diff --git a/website/mkdocs.yml b/website/mkdocs.yml index 547949cb..98a13ef6 100644 --- a/website/mkdocs.yml +++ b/website/mkdocs.yml @@ -42,7 +42,7 @@ nav: - Custom Stylesheet & JavaScript: topic_userstyle.md - Portable Mode: topic_portablemode.md - Custom transliteration: topic_transliteration.md - - Customize Dictionary Name: custom_dictionary_name.md + - Customize Dictionary: custom_dictionary.md - OCR Integration: howto/ocr.md - Report Bugs & Feedbacks: feedbacks.md - Contributor Guides: