From 394d610b4b1920a88339adaff8bf117121966416 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 25 Feb 2026 18:01:15 +0600 Subject: [PATCH] WIP davanced installation loading --- source/ubinstall-gtk-advanced.c | 172 +++++++++++++++++++++++++++- source/ubinstall-gtk-config-hub.c | 2 +- source/ubinstall-gtk-grub.c | 4 +- source/ubinstall-gtk-installation.c | 15 +-- source/ubinstall-gtk-page-switch.c | 2 - source/ubinstall-gtk-separate.c | 4 +- source/ubinstall-gtk.h | 22 ++-- 7 files changed, 195 insertions(+), 26 deletions(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index ee838ac..0df81b3 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -212,7 +212,6 @@ void on_advanced_partition_create(GtkWidget *, main_window *widgets){ sections_size++; } } - } if (!found&&last_unvalid){ char *target; @@ -253,7 +252,36 @@ void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets){ } +void yon_advanced_device_choose(main_window *widgets, const char *device){ + if (yon_char_is_empty(device)) return; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); + for_iter(model, &iter){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + if (!yon_char_is_empty(target)&&strstr(device,target)){ + char *path = gtk_tree_model_get_string_from_iter(model,&iter); + g_signal_emit_by_name(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",path,NULL); + } + } +} + +void yon_advanced_part_choose(main_window *widgets, const char *part){ + if (yon_char_is_empty(part)) return; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); + for_iter(model, &iter){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + if (!yon_char_is_empty(target)&&strstr(part,target)){ + char *path = gtk_tree_model_get_string_from_iter(model,&iter); + g_signal_emit_by_name(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",path,NULL); + } + } +} + void yon_install_advanced_init(main_window *widgets){ + yon_advanced_partition_clear(widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo)); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo),NO_LABEL); @@ -268,6 +296,146 @@ void yon_install_advanced_init(main_window *widgets){ } yon_char_parsed_free(vmf_file,size); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); + char *device = config(device_parameter); + char *parts = config(part_parameter); + char *part_size = config(part_size_parameter); + char *part_label = config(part_label_parameter); + char *part_fs_type = config(part_fs_type_parameter); + char *part_fs_label = config(part_fs_label_parameter); + char *part_crypt = config(part_crypt_parameter); + char *part_format = config(part_format_parameter); + char *boot = config(boot_parameter); + char *swap = config(swap_parameter); + char *swap_size = config(swap_size_parameter); + if (yon_char_is_empty(device)&&yon_char_is_empty(parts)) return; + { + int size; + config_str device_parsed = yon_char_parse(device,&size,","); + if (size>0&&!yon_char_is_empty(device_parsed[0])){ + yon_advanced_device_choose(widgets,device_parsed[0]); + // sections[0] = yon_advanced_section_new(); + while(gtk_events_pending()) gtk_main_iteration(); + sections[0]->device=device_parsed[0]; + on_advanced_partition_create(NULL,widgets); + if (size>1&&!yon_char_is_empty(device_parsed[1])){ + yon_advanced_device_choose(widgets,device_parsed[1]); + // sections[1] = yon_advanced_section_new(); + while(gtk_events_pending()) gtk_main_iteration(); + sections[1]->device=device_parsed[1]; + on_advanced_partition_create(NULL,widgets); + } + free(device_parsed); + }; + } + { + int size; + config_str part_parsed = yon_char_parse(parts,&size,","); + if (size>0){ + // sections[0] = yon_advanced_section_new(); + yon_advanced_device_choose(widgets,part_parsed[0]); + yon_advanced_part_choose(widgets,part_parsed[0]); + while(gtk_events_pending()) gtk_main_iteration(); + sections[0]->partition=part_parsed[0]; + if (size>1&&!yon_char_is_empty(part_parsed[1])){ + // sections[1] = yon_advanced_section_new(); + yon_advanced_device_choose(widgets,part_parsed[1]); + yon_advanced_part_choose(widgets,part_parsed[1]); + while(gtk_events_pending()) gtk_main_iteration(); + sections[1]->device=part_parsed[1]; + } + free(part_parsed); + }; + } + { + if (!yon_char_is_empty(part_size)){ + int size; + config_str parsed = yon_char_parse(part_size,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->size = atol(parsed[0]); + sections[0]->size_letter = parsed[0][strlen(parsed[0])-1]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + + sections[1]->size = atol(parsed[1]); + sections[1]->size_letter = parsed[1][strlen(parsed[1])-1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_label)){ + int size; + config_str parsed = yon_char_parse(part_label,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->part_label = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->part_label = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_fs_type)){ + int size; + config_str parsed = yon_char_parse(part_fs_type,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->fs_type = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->fs_type = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_fs_label)){ + int size; + config_str parsed = yon_char_parse(part_fs_label,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->fs_label = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->fs_label = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_crypt)){ + int size; + config_str parsed = yon_char_parse(part_crypt,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->encryption = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->encryption = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_format)){ + int size; + config_str parsed = yon_char_parse(part_format,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + if (!strcmp(parsed[0],"yes")){ + sections[0]->format = 2; + } else if (!strcmp(parsed[0],"no")){ + sections[0]->format = 1; + } + if (size>1&&!yon_char_is_empty(parsed[1])){ + if (!strcmp(parsed[1],"yes")){ + sections[1]->format = 2; + } else if (!strcmp(parsed[1],"no")){ + sections[1]->format = 1; + } + } + } + free(parsed); + } + if (!yon_char_is_empty(boot)){ + + } + if (!yon_char_is_empty(swap)){ + + } + if (!yon_char_is_empty(swap_size)){ + + } + + } + yon_advanced_update(widgets); } void on_install_advanced_partition_chosen(GtkCellRenderer*, gchar *path, main_window *widgets){ @@ -656,7 +824,7 @@ int yon_advanced_save(main_window *widgets){ if (devices[0]||devices[1]){ char *devices_str = yon_char_parsed_to_string_full(devices,2,","); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,devices_str); + yon_config_register(device_parameter,device_parameter_command,devices_str); } if (!yon_char_is_empty(parts[0])||!yon_char_is_empty(parts[1])){ char *parts_str = yon_char_parsed_to_string_full(parts,2,","); diff --git a/source/ubinstall-gtk-config-hub.c b/source/ubinstall-gtk-config-hub.c index 9920f73..5c2523c 100644 --- a/source/ubinstall-gtk-config-hub.c +++ b/source/ubinstall-gtk-config-hub.c @@ -26,7 +26,7 @@ int yon_installation_check_packages_size(main_window *widgets){ } if (!strcmp(install_mode,"fast")){ - char *device = config(AUTOINSTALL_DEVICE); + char *device = config(device_parameter); GtkTreeIter iter; for_iter(widgets->DevicesList,&iter){ char *target; diff --git a/source/ubinstall-gtk-grub.c b/source/ubinstall-gtk-grub.c index 0137b2e..d5d1cb1 100644 --- a/source/ubinstall-gtk-grub.c +++ b/source/ubinstall-gtk-grub.c @@ -17,7 +17,7 @@ int yon_grub_install_save(main_window *widgets){ } char *partition; gtk_tree_model_get(model,&iter,0,&partition,-1); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); + yon_config_register(device_parameter,device_parameter_command,cur_device); yon_config_register(part_parameter,part_parameter_command,partition); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"grub_install"); return 1; @@ -40,7 +40,7 @@ int yon_grub_update_save(main_window *widgets){ } char *partition; gtk_tree_model_get(model,&iter,0,&partition,-1); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); + yon_config_register(device_parameter,device_parameter_command,cur_device); yon_config_register(part_parameter,part_parameter_command,partition); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"grub_update"); return 1; diff --git a/source/ubinstall-gtk-installation.c b/source/ubinstall-gtk-installation.c index 38db982..86b6b18 100644 --- a/source/ubinstall-gtk-installation.c +++ b/source/ubinstall-gtk-installation.c @@ -13,7 +13,7 @@ int yon_install_common_save(main_window *widgets){ yon_config_remove_by_key(part_parameter); gtk_tree_model_get(model,&iter,0,&device,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"fast"); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); + yon_config_register(device_parameter,device_parameter_command,device); char *device_name = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->CommonInstallationSectionNameEntry)); if (!yon_char_is_empty(device_name)){ @@ -31,7 +31,7 @@ int yon_install_common_save(main_window *widgets){ if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_DEVICE,part_label_parameter,part_fs_type_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,AUTOINSTALL_TYPE_INSTALL,device_parameter,part_label_parameter,part_fs_type_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); @@ -63,7 +63,7 @@ int yon_install_separate_save(main_window *widgets){ glong size,free_space; gtk_tree_model_get(model,&iter,0,&part,5,&size,6,&free_space,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"next"); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); + yon_config_register(device_parameter,device_parameter_command,device); yon_config_register(part_parameter,part_parameter_command,part); if (gtk_switch_get_active(GTK_SWITCH(widgets->NextInstallationFormatSwitch))){ yon_config_register(part_format_parameter,part_format_parameter_command,"yes"); @@ -113,7 +113,7 @@ int yon_install_separate_save(main_window *widgets){ if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_label_parameter,part_fs_type_parameter,AUTOINSTALL_DEVICE,part_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_label_parameter,part_fs_type_parameter,device_parameter,part_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); @@ -144,7 +144,7 @@ int yon_install_same_partition_save(main_window *widgets){ char *part; gtk_tree_model_get(model,&iter,0,&part,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"part"); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); + yon_config_register(device_parameter,device_parameter_command,device); yon_config_register(part_parameter,part_parameter_command,part); if (gtk_switch_get_active(GTK_SWITCH(widgets->SameInstallationFormatSwitch))){ @@ -171,7 +171,7 @@ int yon_install_same_partition_save(main_window *widgets){ } if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_size_parameter,part_label_parameter,part_fs_type_parameter,AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_DEVICE,part_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_size_parameter,part_label_parameter,part_fs_type_parameter,AUTOINSTALL_TYPE_INSTALL,device_parameter,part_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); @@ -354,6 +354,7 @@ void on_device_selection_changed(GtkWidget *self, main_window *widgets){ void yon_devices_setup(main_window *widgets){ GtkTreeIter iter; gtk_list_store_clear(widgets->DevicesList); + gtk_list_store_clear(widgets->PartitionsList); // int size; // config_str parameters = NULL; // parameters = yon_config_load(yon_debug_output("%s\n",get_devices_command),&size); @@ -475,7 +476,7 @@ void yon_install_init(main_window *widgets, enum YON_PAGES page){ default:return; } - char *device = config(AUTOINSTALL_DEVICE); + char *device = config(device_parameter); char *part = config(part_parameter); if (!yon_char_is_empty(device)){ diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 06e60bc..e205f8c 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -468,8 +468,6 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_packages_tab_init(widgets); break; case YON_PAGE_INSTALL_ADVANCED: - yon_install_advanced_init(widgets); - __attribute__((fallthrough)); case YON_PAGE_INSTALL_COMMON: case YON_PAGE_INSTALL_SEPARATE: case YON_PAGE_INSTALL_SAME_PARTITION: diff --git a/source/ubinstall-gtk-separate.c b/source/ubinstall-gtk-separate.c index 1fc8930..4a8aeb4 100644 --- a/source/ubinstall-gtk-separate.c +++ b/source/ubinstall-gtk-separate.c @@ -16,7 +16,7 @@ int yon_install_options_save(GtkWidget *device_tree, GtkWidget *part_tree,char * char *cur_device, *cur_section; gtk_tree_model_get(model,&iter,0,&cur_device,-1); gtk_tree_model_get(model2,&itar,0,&cur_section,-1); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); + yon_config_register(device_parameter,device_parameter_command,cur_device); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,mode); yon_config_register(part_parameter,part_parameter_command,cur_section); @@ -24,7 +24,7 @@ int yon_install_options_save(GtkWidget *device_tree, GtkWidget *part_tree,char * if(cur_device) free(cur_device); if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,AUTOINSTALL_DEVICE,AUTOINSTALL_TYPE_INSTALL,part_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,device_parameter,AUTOINSTALL_TYPE_INSTALL,part_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 8c229be..af3840e 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -162,8 +162,8 @@ layout && /description:/ {\ #define AUTOINSTALL_TYPE_INSTALL "AUTOINSTALL[install_type]" #define AUTOINSTALL_TYPE_INSTALL_command "ubconfig --source global get [autoinstall] AUTOINSTALL[install_type]" -#define AUTOINSTALL_DEVICE "AUTOINSTALL[device]" -#define AUTOINSTALL_DEVICE_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device]" +#define device_parameter "AUTOINSTALL[device]" +#define device_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device]" #define part_parameter "AUTOINSTALL[part]" #define part_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part]" @@ -311,14 +311,14 @@ layout && /description:/ {\ #define install_common_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_fs_type_parameter #define install_part_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_fs_label_parameter, \ part_parameter, \ @@ -327,7 +327,7 @@ layout && /description:/ {\ #define install_next_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_fs_label_parameter, \ part_parameter, \ @@ -336,7 +336,7 @@ layout && /description:/ {\ #define install_advanced_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_parameter, \ @@ -345,12 +345,12 @@ layout && /description:/ {\ #define install_grub_install_update_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_parameter #define install_system_only_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_parameter, \ @@ -360,7 +360,7 @@ layout && /description:/ {\ #define install_userdata_only_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_parameter, \ @@ -1531,4 +1531,6 @@ void on_pacman_search_enter(GtkEntry *self, main_window *widgets); gboolean yon_log_scroll(log_window *window); gboolean on_log_window_exit(GtkWidget *,GdkEvent*, log_window *window); void yon_modules_missed_func(main_window *widgets); -void yon_scroll_block_for_builder(GtkBuilder *builder); \ No newline at end of file +void yon_scroll_block_for_builder(GtkBuilder *builder); +void yon_advanced_device_choose(main_window *widgets, const char *device); +void yon_advanced_part_choose(main_window *widgets, const char *part); \ No newline at end of file