sculpt: show message when network is needed

Whenever Sculpt needs to download depot content but no network
connectivity is provided, a message is displayed in the "Diagnostics"
part of menu.
This commit is contained in:
Norman Feske 2019-02-22 10:50:06 +01:00 committed by Christian Helmuth
parent ac68073ffc
commit 6110e6561c
3 changed files with 49 additions and 24 deletions

View File

@ -51,30 +51,11 @@ void Sculpt::Deploy::_gen_missing_dependencies(Xml_generator &xml, Start_name co
void Sculpt::Deploy::gen_child_diagnostics(Xml_generator &xml) const
{
bool all_children_ok = true;
_children.for_each_unsatisfied_child([&] (Xml_node, Xml_node) {
all_children_ok = false; });
if (all_children_ok)
return;
int count = 0;
gen_named_node(xml, "frame", "diagnostics", [&] () {
xml.node("vbox", [&] () {
xml.node("label", [&] () {
xml.attribute("text", "Diagnostics"); });
xml.node("float", [&] () {
xml.node("vbox", [&] () {
_children.for_each_unsatisfied_child([&] (Xml_node start, Xml_node launcher) {
Start_name const name = start.attribute_value("name", Start_name());
_gen_missing_dependencies(xml, name, start, count);
_gen_missing_dependencies(xml, name, launcher, count);
});
});
});
});
_children.for_each_unsatisfied_child([&] (Xml_node start, Xml_node launcher) {
Start_name const name = start.attribute_value("name", Start_name());
_gen_missing_dependencies(xml, name, start, count);
_gen_missing_dependencies(xml, name, launcher, count);
});
}

View File

@ -174,6 +174,14 @@ struct Sculpt::Deploy
*/
bool update_child_conditions();
bool any_unsatisfied_child() const
{
bool all_satisfied = true;
_children.for_each_unsatisfied_child([&] (Xml_node, Xml_node) {
all_satisfied = false; });
return !all_satisfied;
}
void _gen_missing_dependencies(Xml_generator &, Start_name const &, Xml_node, int &) const;
void gen_child_diagnostics(Xml_generator &xml) const;

View File

@ -284,7 +284,43 @@ struct Sculpt::Main : Input_event_handler,
xml.attribute("font", "title/regular");
});
_deploy.gen_child_diagnostics(xml);
bool const network_missing = _deploy.update_needed()
&& !_network._nic_state.ready();
bool const show_diagnostics =
_deploy.any_unsatisfied_child() || network_missing;
auto gen_network_diagnostics = [&] (Xml_generator &xml)
{
if (!network_missing)
return;
gen_named_node(xml, "hbox", "network", [&] () {
gen_named_node(xml, "float", "left", [&] () {
xml.attribute("west", "yes");
xml.node("label", [&] () {
xml.attribute("text", "network needed for installation");
xml.attribute("font", "annotation/regular");
});
});
});
};
if (show_diagnostics) {
gen_named_node(xml, "frame", "diagnostics", [&] () {
xml.node("vbox", [&] () {
xml.node("label", [&] () {
xml.attribute("text", "Diagnostics"); });
xml.node("float", [&] () {
xml.node("vbox", [&] () {
gen_network_diagnostics(xml);
_deploy.gen_child_diagnostics(xml);
});
});
});
});
}
Xml_node const state = _update_state_rom.xml();
if (_update_running() && state.attribute_value("progress", false))