9 #include "fcitx-config/configuration.h" 13 AddonConfigBase, Option<I18NString> name{
this,
"Name",
"Addon Name"};
14 Option<I18NString> comment{
this,
"Comment",
"Comment"};
15 Option<SemanticVersion> version{
this,
"Version",
"Addon Version"};
16 Option<std::string> type{
this,
"Type",
"Addon Type"};
17 Option<std::string> library{
this,
"Library",
"Addon Library"};
18 Option<bool> configurable{
this,
"Configurable",
"Configurable",
false};
19 Option<bool> enabled{
this,
"Enabled",
"Enabled",
true};
20 Option<AddonCategory> category{
this,
"Category",
"Category"};
21 Option<std::vector<std::string>> dependencies{
this,
"Dependencies",
23 Option<std::vector<std::string>> optionalDependencies{
24 this,
"OptionalDependencies",
"Optional Dependencies"};
25 Option<bool> onDemand{
this,
"OnDemand",
"Load only on request",
false};
26 Option<int> uiPriority{
this,
"UIPriority",
"User interface priority", 0};
27 Option<UIType> uiType{
this,
"UIType",
"User interface type",
28 UIType::PhyscialKeyboard};)
30 FCITX_CONFIGURATION(AddonConfig,
31 Option<AddonConfigBase> addon{
this,
"Addon",
"Addon"};)
35 void parseDependencies(
const std::vector<std::string> &data,
36 std::vector<std::string> &dependencies,
37 std::vector<std::tuple<std::string, SemanticVersion>>
38 &dependenciesWithVersion) {
40 dependenciesWithVersion.clear();
41 for (
const auto &item : data) {
43 if (tokens.size() == 1) {
44 dependencies.push_back(tokens[0]);
45 dependenciesWithVersion.emplace_back(tokens[0], SemanticVersion{});
46 }
else if (tokens.size() == 2) {
47 auto version = SemanticVersion::parse(tokens[1]);
49 dependencies.push_back(tokens[0]);
50 dependenciesWithVersion.emplace_back(tokens[0],
63 std::string uniqueName_;
64 OverrideEnabled overrideEnabled_ = OverrideEnabled::NotSet;
65 std::vector<std::string> dependencies_;
66 std::vector<std::string> optionalDependencies_;
67 std::vector<std::tuple<std::string, SemanticVersion>>
68 dependenciesWithVersion_;
69 std::vector<std::tuple<std::string, SemanticVersion>>
70 optionalDependenciesWithVersion_;
73 AddonInfo::AddonInfo(
const std::string &name)
74 : d_ptr(std::make_unique<AddonInfoPrivate>(name)) {}
76 AddonInfo::~AddonInfo() {}
78 bool AddonInfo::isValid()
const {
83 const std::string &AddonInfo::uniqueName()
const {
85 return d->uniqueName_;
90 return d->addon->name.value();
95 return d->addon->comment.value();
98 const std::string &AddonInfo::type()
const {
100 return d->addon->type.value();
103 AddonCategory AddonInfo::category()
const {
105 return d->addon->category.value();
108 const std::string &AddonInfo::library()
const {
110 return d->addon->library.value();
113 const std::vector<std::string> &AddonInfo::dependencies()
const {
115 return d->dependencies_;
118 const std::vector<std::string> &AddonInfo::optionalDependencies()
const {
120 return d->optionalDependencies_;
123 const std::vector<std::tuple<std::string, SemanticVersion>> &
124 AddonInfo::dependenciesWithVersion()
const {
126 return d->dependenciesWithVersion_;
129 const std::vector<std::tuple<std::string, SemanticVersion>> &
130 AddonInfo::optionalDependenciesWithVersion()
const {
132 return d->optionalDependenciesWithVersion_;
135 bool AddonInfo::onDemand()
const {
137 return d->addon->onDemand.value();
140 int AddonInfo::uiPriority()
const {
142 return d->addon->uiPriority.value();
145 UIType AddonInfo::uiType()
const {
147 return d->addon->uiType.value();
150 void AddonInfo::load(
const RawConfig &config) {
154 parseDependencies(*d->addon->dependencies, d->dependencies_,
155 d->dependenciesWithVersion_);
156 parseDependencies(*d->addon->optionalDependencies, d->optionalDependencies_,
157 d->optionalDependenciesWithVersion_);
160 d->valid_ = !(d->uniqueName_.empty()) &&
161 !(d->addon->type.value().empty()) &&
162 !(d->addon->library.value().empty());
165 bool AddonInfo::isEnabled()
const {
167 if (d->overrideEnabled_ == OverrideEnabled::NotSet) {
168 return *d->addon->enabled;
170 return d->overrideEnabled_ == OverrideEnabled::Enabled;
173 bool AddonInfo::isDefaultEnabled()
const {
175 return *d->addon->enabled;
178 bool AddonInfo::isConfigurable()
const {
180 return *d->addon->configurable;
185 return *d->addon->version;
188 void AddonInfo::setOverrideEnabled(OverrideEnabled overrideEnabled) {
190 d->overrideEnabled_ = overrideEnabled;
Provide a Semantic version 2.0 implementation.
std::vector< std::string > split(std::string_view str, std::string_view delim, SplitBehavior behavior)
Split the string by delim.