taddon_description::taddon_description(const std::string& addon_id, const addons_list& addons_list, const addons_tracking_list& addon_states) : feedback_url_() { const addon_info& addon = const_at(addon_id, addons_list); const addon_tracking_info& state = const_at(addon_id, addon_states); const std::string& created_text = format_addon_time(addon.created); const std::string& updated_text = format_addon_time(addon.updated); register_label("image", true, addon.display_icon()); register_label("title", true, addon.title); register_label("version", true, addon.version); register_label("status", true, describe_addon_state_info(state), true); register_label("author", true, addon.author); register_label("type", true, addon.display_type()); register_label("size", true, size_display_string(addon.size)); register_label("downloads", true, std::to_string(addon.downloads)); register_label("created", true, created_text); register_label("updated", true, updated_text); if(!addon.description.empty()) { register_label("description", true, addon.description); } if(!addon.depends.empty()) { register_label( "dependencies", true, make_display_dependencies(addon_id, addons_list, addon_states), true); } feedback_url_ = addon.feedback_url; std::string languages; for(const auto & lc : addon.locales) { const std::string& langlabel = langcode_to_string(lc); if(!langlabel.empty()) { if(!languages.empty()) { languages += ", "; } languages += langlabel; } } if(!languages.empty()) { register_label("translations", true, languages); } }
std::string make_display_dependencies( const std::string& addon_id, const addons_list& addons_list, const addons_tracking_list& addon_states) { const addon_info& addon = const_at(addon_id, addons_list); std::string str; const std::set<std::string>& deps = addon.resolve_dependencies(addons_list); for(const auto& dep_id : deps) { addon_info dep; addon_tracking_info depstate; addons_list::const_iterator ali = addons_list.find(dep_id); addons_tracking_list::const_iterator tli = addon_states.find(dep_id); if(ali == addons_list.end()) { dep.id = dep_id; // Build dummy addon_info. } else { dep = ali->second; } if(tli == addon_states.end()) { depstate = get_addon_tracking_info(dep); } else { depstate = tli->second; } if(!str.empty()) { str += ", "; } str += addon_list::colorize_addon_state_string(dep.display_title(), depstate.state); } return str; }