94{
96 try
97 {
98 if (json_file.is_open())
99 {
100 const json& json_content = json::parse(json_file);
101 if (!json_content.contains("data")) { return; }
102
103 const json& json_data = json_content[
"data"];
104 for (const auto& json_data_item : json_data)
105 {
106 const wxString& fila_id = json_data_item.contains("fila_id") ? json_data_item["fila_id"].get<wxString>() : wxString();
107 const wxString& fila_type = json_data_item.contains("fila_type") ? json_data_item["fila_type"].get<wxString>() : wxString();
108 const wxString& fila_color_code = json_data_item.contains("fila_color_code") ? json_data_item["fila_color_code"].get<wxString>() : wxString();
109
110 FilamentColor fila_color;
111 if (json_data_item.contains("fila_color"))
112 {
113 const auto& fila_color_strs = json_data_item["fila_color"].get<std::vector<wxString>>();
114 for (const auto& color_str : fila_color_strs) {
115 if (color_str.size() > 3) {
116 fila_color.AddColor(wxColour(color_str));
117 }
118 }
119 }
120
121 if (fila_color.m_colors.empty()) {
122 BOOST_LOG_TRIVIAL(warning) << "FilamentColorCodeQuery::LoadFromLocal: No colors found for fila_color_code: " << fila_color_code;
123 continue;
124 };
125
126 const wxString& fila_color_type = json_data_item.contains("fila_color_type") ? wxString::FromUTF8(json_data_item["fila_color_type"].get<std::string>()) : wxString();
127 if (fila_color_type == wxString::FromUTF8("单色")) {
129 } else if (fila_color_type == wxString::FromUTF8("多拼色")) {
131 } else if (fila_color_type == wxString::FromUTF8("渐变色"))
132 {
134 };
135
136 std::unordered_map<wxString, wxString> fila_color_names;
137 if (json_data_item.contains("fila_color_name"))
138 {
139 const json& color_names_json = json_data_item["fila_color_name"];
140 for (const auto& color_name_item : color_names_json.items())
141 {
142 const wxString& lang_code = wxString::FromUTF8(color_name_item.key());
143 const wxString& color_name = wxString::FromUTF8(color_name_item.value().get<std::string>());
144 fila_color_names[lang_code] = color_name;
145 }
146 }
147
148 CreateFilaCode(fila_id, fila_type, fila_color_code, std::move(fila_color), std::move(fila_color_names));
149 }
150 }
151 }
152 catch (...)
153 {
154 assert(0 && "FilamentColorCodeQuery::LoadFromLocal failed");
155 BOOST_LOG_TRIVIAL(error) << "FilamentColorCodeQuery::LoadFromLocal failed";
156 }
157}
void CreateFilaCode(const wxString &fila_id, const wxString &fila_type, const wxString &fila_color_code, FilamentColor &&fila_color, std::unordered_map< wxString, wxString > &&fila_color_names)
Definition EncodedFilament.cpp:159
std::string encode_path(const char *src)
Definition utils.cpp:1382
nlohmann::json json
Definition AssembleList.cpp:42
@ MULTI_CLR
Definition EncodedFilament.hpp:81
@ GRADIENT_CLR
Definition EncodedFilament.hpp:82
@ SINGLE_CLR
Definition EncodedFilament.hpp:80