From b141f7ad26b0922595c146ab452671e13755424f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20D=C3=ADaz?= Date: Fri, 10 Aug 2018 16:16:02 +0100 Subject: [PATCH] WIP --- src/include/samba-server/complex.rb | 87 +++++++++++++++++++---------- src/include/samba-server/dialogs.rb | 34 ++++++----- 2 files changed, 79 insertions(+), 42 deletions(-) diff --git a/src/include/samba-server/complex.rb b/src/include/samba-server/complex.rb index 4aa60d6..2d434bf 100644 --- a/src/include/samba-server/complex.rb +++ b/src/include/samba-server/complex.rb @@ -63,37 +63,68 @@ def ProgressStatus end # Write settings dialog - # @return `abort if aborted and `next otherwise + # + # @return [Symbol] :next if service is saved successfully + # :abort otherwise def WriteDialog Wizard.RestoreHelp(Ops.get_string(@HELPS, "write", "")) - # Bugzilla #120080 - 'reload' instead of 'restart' - # If there some connected users, SAMBA is running and should be running also after the Write() operation - # and the Progress was turned on before Writing SAMBA conf - connected_users = SambaService.ConnectedUsers - Builtins.y2milestone( - "Number of connected users: %1", - Builtins.size(connected_users) - ) - report_restart_popup = Ops.greater_than(Builtins.size(connected_users), 0) && - SambaService.GetServiceRunning && - SambaService.GetServiceAutoStart && - ProgressStatus() - - ret = SambaServer.Write(false) - - # If popup should be shown and SAMBA is still/again running - if report_restart_popup && SambaService.GetServiceRunning - # TRANSLATORS: a popup message - Report.Message( - _( - "Because users are currently connected to this Samba server,\n" + - "the server configuration has been reloaded instead of restarted.\n" + - "To confirm that all settings are applied despite possibly disconnecting the users,\n" + - "run 'systemctl restart smb' and 'systemctl restart nmb'" - ) - ) + + ProgressStatus() if switch_to_reload? + + return :abort unless save_status + + show_not_restarted_message + + :next + end + + def save_status + if Mode.auto || Mode.commandline + # Replacemnet of action from restart to reload, if needed, is performed + # at {SambaConfig#Write} which is a module of SambaClient + SambaServer.Write(false) + else + services.restart if switch_to_reload? + services.save end - ret ? :next : :abort + end + + def service_running? + if Mode.auto || Mode.commandline + SambaService.GetServiceRunning + else + services.currently_active? + end + end + + def switch_to_reload? + @switch_to_reload ||= + begin + if Mode.auto || Mode.commandline + service_running? && connected_users? && SambaService.GetServiceAutoStart + else + services.action == :restart && services.currently_active? && connected_users? + end + end + end + + def connected_users? + @connnected_users ||= SambaService.ConnectedUsers.count > 0 + true + end + + def show_not_restarted_message + return unless switch_to_reload? && service_running? + + # TRANSLATORS: a popup message + Report.Message( + _( + "Because users are currently connected to this Samba server,\n" + + "the server configuration has been reloaded instead of restarted.\n" + + "To confirm that all settings are applied despite possibly disconnecting the users,\n" + + "run 'systemctl restart smb' and 'systemctl restart nmb'" + ) + ) end end end diff --git a/src/include/samba-server/dialogs.rb b/src/include/samba-server/dialogs.rb index 7e8e094..a58ff9f 100644 --- a/src/include/samba-server/dialogs.rb +++ b/src/include/samba-server/dialogs.rb @@ -26,8 +26,25 @@ # Lukas Ocilka # # $Id$ + +require "cwm/service_widget" +require "yast2/system_service" +require "yast2/compound_service" + module Yast module SambaServerDialogsInclude + + def service_widget + @service_widget ||= ::CWM::ServiceWidget.new(services) + end + + def services + @services ||= Yast2::CompoundService.new( + Yast2::SystemService.find("nmb"), + Yast2::SystemService.find("smb") + ) + end + def initialize_samba_server_dialogs(include_target) Yast.import "UI" @@ -1167,7 +1184,7 @@ def Installation_Conf_Tab 100, VBox( VSpacing(1), - "SERVICE START", + "service_widget", VSpacing(1), "FIREWALL", VStretch() @@ -1175,7 +1192,7 @@ def Installation_Conf_Tab ), HWeight(2, Empty()) ), - "widget_names" => ["SERVICE START", "FIREWALL"] + "widget_names" => ["service_widget", "FIREWALL"] }, "shares" => { "header" => _("&Shares"), @@ -1267,18 +1284,7 @@ def Installation_Conf_Tab ) tabs_widget_descr = { - "SERVICE START" => CWMServiceStart.CreateAutoStartWidget( - { - "get_service_auto_start" => fun_ref( - SambaService.method(:GetServiceAutoStart), - "boolean ()" - ), - "set_service_auto_start" => fun_ref( - SambaService.method(:SetServiceAutoStart), - "void (boolean)" - ) - } - ), + "service_widget" => service_widget.cwm_definition, # BNC #247344, BNC #541958 (comment #18) "FIREWALL" => CWMFirewallInterfaces.CreateOpenFirewallWidget( {