| 224 | } |
| 225 | |
| 226 | bool Parser::check_task(const InterfaceData& data, Configuration::Task& config_task) |
| 227 | { |
| 228 | auto data_iter = std::ranges::find(data.task, config_task.name, std::mem_fn(&InterfaceData::Task::name)); |
| 229 | if (data_iter == data.task.end()) { |
| 230 | LogWarn << "Task not found" << VAR(config_task.name); |
| 231 | return false; |
| 232 | } |
| 233 | |
| 234 | for (auto& config_option : config_task.option) { |
| 235 | auto option_iter = data.option.find(config_option.name); |
| 236 | if (option_iter == data.option.end()) { |
| 237 | LogWarn << "Option not found" << VAR(config_task.name) << VAR(config_option.name); |
| 238 | return false; |
| 239 | } |
| 240 | |
| 241 | const InterfaceData::Option& data_option = option_iter->second; |
| 242 | |
| 243 | switch (data_option.type) { |
| 244 | case InterfaceData::Option::Type::Select: |
| 245 | case InterfaceData::Option::Type::Switch: { |
| 246 | auto case_iter = std::ranges::find(data_option.cases, config_option.value, std::mem_fn(&InterfaceData::Option::Case::name)); |
| 247 | if (case_iter == data_option.cases.end()) { |
| 248 | LogWarn << "Case not found" << VAR(config_task.name) << VAR(config_option.name) << VAR(config_option.value); |
| 249 | return false; |
| 250 | } |
| 251 | } break; |
| 252 | case InterfaceData::Option::Type::Checkbox: { |
| 253 | for (const auto& val : config_option.values) { |
| 254 | auto case_iter = std::ranges::find(data_option.cases, val, std::mem_fn(&InterfaceData::Option::Case::name)); |
| 255 | if (case_iter == data_option.cases.end()) { |
| 256 | LogWarn << "Checkbox case not found" << VAR(config_task.name) << VAR(config_option.name) << VAR(val); |
| 257 | return false; |
| 258 | } |
| 259 | } |
| 260 | } break; |
| 261 | case InterfaceData::Option::Type::Input: |
| 262 | break; |
| 263 | } |
| 264 | } |
| 265 | |
| 266 | return true; |
| 267 | } |
| 268 | |
| 269 | MAA_PROJECT_INTERFACE_NS_END |