From 9661bca2f8805f99a80e36c4db94f6d6feaa1be6 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 24 Oct 2025 18:23:37 +0600 Subject: [PATCH] Added --dry-run launch argument --- source/ubinstall-gtk-saving.c | 39 +++++++++++++++++++++-------------- source/ubinstall-gtk.c | 34 ++++++++++++++++++++++++++++-- source/ubinstall-gtk.h | 2 ++ source/ubl-strings.h | 5 +++++ 4 files changed, 63 insertions(+), 17 deletions(-) diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index c59c8b6..710c80f 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -571,25 +571,29 @@ void *on_config_save(void *data){ g_signal_connect(G_OBJECT(widgets->install_info_monitor),"changed",G_CALLBACK(yon_installation_progress_update),widgets); g_object_unref(file_desc); gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress)); - char *command = yon_debug_output("%s\n",save_config_command(yon_char_parsed_to_string(parameters,size," "))); - yon_char_parsed_free(parameters,size); - yon_debug_output("%s\n","Entered installation"); - if (system(yon_debug_output("%s\n",command))){ - - gdk_threads_add_idle((GSourceFunc)on_install_error,widgets); + if (!main_config.dry_run){ + char *command = yon_debug_output("%s\n",save_config_command(yon_char_parsed_to_string(parameters,size," "))); + yon_char_parsed_free(parameters,size); + yon_debug_output("%s\n","Entered installation"); + if (system(yon_debug_output("%s\n",command))){ + + gdk_threads_add_idle((GSourceFunc)on_install_error,widgets); + free(command); + g_mutex_lock(&main_config.install_mutex); + main_config.install_complete=1; + g_mutex_unlock(&main_config.install_mutex); + return 0; + }; free(command); g_mutex_lock(&main_config.install_mutex); main_config.install_complete=1; g_mutex_unlock(&main_config.install_mutex); - return 0; - }; - free(command); - g_mutex_lock(&main_config.install_mutex); - main_config.install_complete=1; - g_mutex_unlock(&main_config.install_mutex); - if ((!main_config.save_done)&&main_config.save_configured){ - on_setup_system_configuration(widgets); - on_page_next_clicked(NULL,widgets); + if ((!main_config.save_done)&&main_config.save_configured){ + on_setup_system_configuration(widgets); + on_page_next_clicked(NULL,widgets); + } + } else { + yon_launch("ubconfig --source system get /"); } return 0; } @@ -674,12 +678,17 @@ void *on_setup_system_configuration(void * data){ } + + if (!main_config.dry_run){ char *parameter_string = yon_char_parsed_to_string(all_parameters,size," "); char *command = set_user_config_command(parameter_string); if (system(yon_debug_output("%s\n",command))){}; yon_char_parsed_free(all_parameters,size); free(command); if (parameter_string) free(parameter_string); + } else { + yon_launch("ubconfig --source system get /"); + } } g_idle_add((GSourceFunc)on_install_success,widgets); return NULL; diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 1a98232..272ff51 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -460,6 +460,8 @@ void config_init(){ main_config.config_load_path = NULL; main_config.config_save_path = NULL; yon_packages_init(); + main_config.dry_run=0; + main_config.force_ini=NULL; main_config.network_types = g_hash_table_new(g_str_hash,g_str_equal); main_config.cur_slide=0; } @@ -1165,8 +1167,36 @@ int main(int argc, char *argv[]){ config_init(); config_str unfound = NULL; int size=0; - yon_ubl_connect_config((_template_config*)&main_config); - yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); + yon_ubl_connect_config((_template_config*)&main_config); + opterr=0; + yon_ubl_window_init(TITLE_LABEL,"",LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); + yon_ubl_setup_arguments(argc,argv,&unfound,&size,ADDITIONAL_ARGS); + if (size) { + int option_index = 0; + struct option long_options[] = { + {"dry-run", 0, 0, 'D'}, + {"ini", 0, 0, 'I'}, + {NULL, 0, NULL, 0} + }; + + // Сбрасываем optind для повторного прохода + optind = 1; + + // Перебор необработанных аргументов + for (int i = 0; i < size; i++) { + int argument = getopt_long(argc, argv, "DI:", long_options, &option_index); + switch (argument) { + case 'D': + main_config.dry_run = 1; + break; + case 'I': + main_config.force_ini = yon_char_new(optarg); + break; + default: + break; + } + } + } gtk_init(&argc,&argv); main_window *widgets = NULL; widgets = yon_main_window_complete(); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 70f88be..390cd35 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -398,6 +398,8 @@ typedef struct { char *config_load_path; char *config_save_path; unsigned int cur_slide; + gboolean dry_run; + char *force_ini; } config; extern config main_config; diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 29b814d..f8016ad 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -6,6 +6,11 @@ #define OPEN_LABEL _("Open") +#define ADDITIONAL_ARGS yon_char_unite(\ + " --dry-run ",_("Dry run; Installation will not start"),"\n",\ + " --ini ", _("Set ini file for configuration mode"),\ +NULL) + #define KEYBOARD_TITLE_LABEL _("Keyboard layout") #define CUSTOM_CONFIG_CREATION_ERROR_LABEL _("New configuration file creation failed")