1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 00:57:45 +00:00

NetworkSettings: Convert NetworkSettingsWidget to a failable factory

This commit is contained in:
Karol Kosek 2023-05-09 22:57:02 +02:00 committed by Andreas Kling
parent 956a932a87
commit 754a5bda7a
2 changed files with 20 additions and 9 deletions

View file

@ -30,9 +30,16 @@ static int netmask_to_cidr(IPv4Address const& address)
return 32 - count_trailing_zeroes_safe(address_in_host_representation); return 32 - count_trailing_zeroes_safe(address_in_host_representation);
} }
NetworkSettingsWidget::NetworkSettingsWidget() ErrorOr<NonnullRefPtr<NetworkSettingsWidget>> NetworkSettingsWidget::try_create()
{ {
load_from_gml(network_settings_gml).release_value_but_fixme_should_propagate_errors(); auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) NetworkSettingsWidget()));
TRY(widget->setup());
return widget;
}
ErrorOr<void> NetworkSettingsWidget::setup()
{
TRY(load_from_gml(network_settings_gml));
m_adapters_combobox = *find_descendant_of_type_named<GUI::ComboBox>("adapters_combobox"); m_adapters_combobox = *find_descendant_of_type_named<GUI::ComboBox>("adapters_combobox");
m_enabled_checkbox = *find_descendant_of_type_named<GUI::CheckBox>("enabled_checkbox"); m_enabled_checkbox = *find_descendant_of_type_named<GUI::CheckBox>("enabled_checkbox");
@ -63,12 +70,12 @@ NetworkSettingsWidget::NetworkSettingsWidget()
set_modified(true); set_modified(true);
}; };
auto config_file = Core::ConfigFile::open_for_system("Network").release_value_but_fixme_should_propagate_errors(); auto config_file = TRY(Core::ConfigFile::open_for_system("Network"));
auto proc_net_adapters_file = Core::File::open("/sys/kernel/net/adapters"sv, Core::File::OpenMode::Read).release_value_but_fixme_should_propagate_errors(); auto proc_net_adapters_file = TRY(Core::File::open("/sys/kernel/net/adapters"sv, Core::File::OpenMode::Read));
auto data = proc_net_adapters_file->read_until_eof().release_value_but_fixme_should_propagate_errors(); auto data = TRY(proc_net_adapters_file->read_until_eof());
JsonParser parser(data); JsonParser parser(data);
JsonValue proc_net_adapters_json = parser.parse().release_value_but_fixme_should_propagate_errors(); JsonValue proc_net_adapters_json = TRY(parser.parse());
// FIXME: This should be done before creating a window. // FIXME: This should be done before creating a window.
if (proc_net_adapters_json.as_array().is_empty()) { if (proc_net_adapters_json.as_array().is_empty()) {
@ -102,7 +109,7 @@ NetworkSettingsWidget::NetworkSettingsWidget()
index++; index++;
}); });
m_adapters_combobox->set_model(GUI::ItemListModel<DeprecatedString>::create(m_adapter_names)); m_adapters_combobox->set_model(TRY(GUI::ItemListModel<DeprecatedString>::try_create(m_adapter_names)));
m_adapters_combobox->on_change = [this](DeprecatedString const& text, GUI::ModelIndex const&) { m_adapters_combobox->on_change = [this](DeprecatedString const& text, GUI::ModelIndex const&) {
on_switch_adapter(text); on_switch_adapter(text);
}; };
@ -110,6 +117,7 @@ NetworkSettingsWidget::NetworkSettingsWidget()
dbgln("{} in {}", selected_adapter, m_adapter_names); dbgln("{} in {}", selected_adapter, m_adapter_names);
m_adapters_combobox->set_selected_index(selected_adapter); m_adapters_combobox->set_selected_index(selected_adapter);
on_switch_adapter(m_adapter_names[selected_adapter_index]); on_switch_adapter(m_adapter_names[selected_adapter_index]);
return {};
} }
void NetworkSettingsWidget::on_switch_adapter(DeprecatedString const& adapter) void NetworkSettingsWidget::on_switch_adapter(DeprecatedString const& adapter)

View file

@ -13,14 +13,17 @@
namespace NetworkSettings { namespace NetworkSettings {
class NetworkSettingsWidget : public GUI::SettingsWindow::Tab { class NetworkSettingsWidget : public GUI::SettingsWindow::Tab {
C_OBJECT(NetworkSettingsWidget) C_OBJECT_ABSTRACT(NetworkSettingsWidget)
public: public:
static ErrorOr<NonnullRefPtr<NetworkSettingsWidget>> try_create();
virtual void apply_settings() override; virtual void apply_settings() override;
void switch_adapter(DeprecatedString const& adapter); void switch_adapter(DeprecatedString const& adapter);
private: private:
NetworkSettingsWidget(); NetworkSettingsWidget() = default;
ErrorOr<void> setup();
struct NetworkAdapterData { struct NetworkAdapterData {
bool enabled = false; bool enabled = false;