From 06892dd8c7caf73d4e68c97a71cd54873becd13d Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 12 Feb 2026 18:32:49 +0600 Subject: [PATCH] Changes; Fixes; WIP device and partition fixes --- source/ubinstall-gtk-configuration-mode.c | 2 +- source/ubinstall-gtk-installation.c | 119 +++++++++++++--------- source/ubinstall-gtk.c | 8 +- source/ubinstall-gtk.h | 12 ++- 4 files changed, 87 insertions(+), 54 deletions(-) diff --git a/source/ubinstall-gtk-configuration-mode.c b/source/ubinstall-gtk-configuration-mode.c index 4030c1b..f4c1f06 100644 --- a/source/ubinstall-gtk-configuration-mode.c +++ b/source/ubinstall-gtk-configuration-mode.c @@ -79,7 +79,7 @@ void on_configuration_mode_switch(GtkWidget *self,main_window *widgets){ GList *box = gtk_container_get_children(GTK_CONTAINER(self)); GList *children = gtk_container_get_children(GTK_CONTAINER(box->data)); - GtkWidget *Check = GTK_WIDGET(g_list_nth_data(children,1)); + GtkWidget *Check = GTK_WIDGET(g_list_nth_data(children,0)); int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Check)); if (!active){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration_mode); diff --git a/source/ubinstall-gtk-installation.c b/source/ubinstall-gtk-installation.c index d5fc62f..37e505e 100644 --- a/source/ubinstall-gtk-installation.c +++ b/source/ubinstall-gtk-installation.c @@ -237,6 +237,34 @@ int yon_advanced_sections_save(dictionary *dict){ return 1; } +void on_partition_size_changed(GtkWidget *self, main_window *widgets){ + GtkAdjustment *adj = NULL; + GtkWidget *tree = NULL; + if (self == widgets->OSFormatSizeCombo){ + adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(widgets->OSFormatSizeSpin)); + tree = widgets->OSDevicesTree; + } else if (self == widgets->UserdataFormatSizeCombo){ + adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(widgets->UserdataFormatSizeSpin)); + tree = widgets->UserdataDevicesTree; + } else if (self == widgets->NextInstallationSizeTypeSpin){ + adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(widgets->NextInstallationSizeSpin)); + tree = widgets->NextInstallationSysSectionTree; + } + GtkTreeModel *model; + GtkTreeIter iter; + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)),&model,&iter)) return; + long selected_size =0; + + gtk_tree_model_get(model,&iter,6,&selected_size,-1); + if (!selected_size){ + gtk_tree_model_get(model,&iter,5,&selected_size,-1); + } + const char *sizemod = gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); + double new_size = yon_size_long_convert_to_mod(selected_size,sizemod[0]); + gtk_adjustment_set_upper(adj,new_size); + +} + void yon_set_max_size_from_partition(GtkTreeView *table, GtkSpinButton *spin_button, GtkComboBox *spin_combo){ GtkTreeModel *model; GtkTreeIter iter; @@ -251,29 +279,26 @@ void yon_set_max_size_from_partition(GtkTreeView *table, GtkSpinButton *spin_but const char *sizemod = gtk_combo_box_get_active_id(spin_combo); double new_size = yon_size_long_convert_to_mod(selected_size,sizemod[0]); gtk_adjustment_set_upper(adj,new_size); - gdouble old_value = gtk_adjustment_get_value(adj); - if (old_value>new_size){ - gtk_adjustment_set_value(adj,new_size); + char *command = yon_config_parameter_prepare_command(part_size_parameter_command,"default",NULL,NULL); + int size=0; + config_str parsed = yon_config_load(command,&size); + if (size&&strcmp(parsed[0],"(null)\n")){ + yon_char_remove_last_symbol(parsed[0],'\n'); + free(yon_char_divide_search(parsed[0],"=",-1)); + yon_char_remove_brackets(parsed[0]); + char *parameter = parsed[0]; + if (!yon_char_is_empty(parameter)){ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_button),atol(parameter)); + gtk_combo_box_set_active(GTK_COMBO_BOX(spin_combo),yon_get_size_get_from_letter(parameter[strlen(parameter)-1])-1); + } else { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_button),3); + gtk_combo_box_set_active(GTK_COMBO_BOX(spin_combo),2); + } } + } } } -// char *parameter = config(part_size_parameter); -// if (!yon_char_is_empty(parameter)){ -// GtkAdjustment *adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(widgets->OSFormatSizeSpin)); -// gtk_adjustment_set_value(adj,atol(parameter)); -// g_signal_handlers_block_by_func(G_OBJECT(widgets->NextInstallationSizeTypeSpin),G_CALLBACK(on_partition_changed),widgets); -// g_signal_handlers_block_by_func(G_OBJECT(widgets->OSFormatSizeCombo),G_CALLBACK(on_partition_changed),widgets); -// g_signal_handlers_block_by_func(G_OBJECT(widgets->UserdataFormatSizeCombo),G_CALLBACK(on_partition_changed),widgets); - -// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->OSFormatSizeCombo),yon_get_size_get_from_letter(parameter[strlen(parameter)-1])-1); -// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->UserdataFormatSizeCombo),yon_get_size_get_from_letter(parameter[strlen(parameter)-1])-1); -// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NextInstallationSizeTypeSpin),yon_get_size_get_from_letter(parameter[strlen(parameter)-1])-1); - -// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NextInstallationSizeTypeSpin),G_CALLBACK(on_partition_changed),widgets); -// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OSFormatSizeCombo),G_CALLBACK(on_partition_changed),widgets); -// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserdataFormatSizeCombo),G_CALLBACK(on_partition_changed),widgets); -// } void on_partition_changed(GtkWidget *self, main_window *widgets){ if (self==widgets->NextInstallationSysSectionTree||self == widgets->NextInstallationSizeTypeSpin){ @@ -282,6 +307,11 @@ void on_partition_changed(GtkWidget *self, main_window *widgets){ } +void *yon_partitions_list_load(main_window *){ + main_config.partitions = yon_config_load(yon_debug_output("%s\n",get_parts_for_device_command),&main_config.part_size); + g_thread_exit(NULL); +} + void on_device_selection_changed(GtkWidget *self, main_window *widgets){ gtk_list_store_clear(widgets->PartitionsList); GtkTreeIter iter; @@ -289,10 +319,11 @@ void on_device_selection_changed(GtkWidget *self, main_window *widgets){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),&model,&iter)){ char *disk_path; gtk_tree_model_get(model,&iter,0,&disk_path,-1); - int size; + int size = main_config.part_size; config_str partitions; - partitions = yon_config_load(yon_debug_output("%s\n",get_parts_and_devices_command),&size); + partitions = main_config.partitions; for (int i=0;iDevicesList); int size; - config_str parsed = NULL; - parsed = yon_config_load(yon_debug_output("%s\n",get_devices_command),&size); - char *string = yon_char_parsed_to_string(parsed,size,""); - struct json_object *root; - struct json_object *blockdevices; - root = json_tokener_parse(string); - free(string); - json_object_object_get_ex(root, "blockdevices", &blockdevices); - for (long unsigned int i = 0; i < json_object_array_length(blockdevices); i++) { - struct json_object *device = json_object_array_get_idx(blockdevices, i); - struct json_object *path, *size, *model, *vendor, *serial; - - json_object_object_get_ex(device, "path", &path); - json_object_object_get_ex(device, "size", &size); - json_object_object_get_ex(device, "model", &model); - json_object_object_get_ex(device, "vendor", &vendor); - json_object_object_get_ex(device, "serial", &serial); + config_str parameters = NULL; + parameters = yon_config_load(yon_debug_output("%s\n",get_devices_command),&size); + for (int i=1;iDevicesList,&iter); - char *size_string = yon_char_new(json_object_get_string(size)); - char *size_str = yon_size_get_name_from_letter(size_string[strlen(size_string)-1]); - size_string[strlen(size_string)-1] = '\0'; - char *size_final_string = yon_char_unite(size_string," ",size_str,NULL); - gtk_list_store_set(widgets->DevicesList,&iter,0,json_object_get_string(path),1,json_object_get_string(model),2,json_object_get_string(serial),3,size_final_string,4,json_object_get_string(vendor),6,1,-1); - free(size_string); - free(size_str); - free(size_final_string); + gtk_list_store_set(widgets->DevicesList,&iter, + 0,yon_char_return_if_exist(parsed[0],""), + 1,yon_char_return_if_exist(parsed[2],""), + 2,yon_char_return_if_exist(parsed[4],""), + 3,yon_char_return_if_exist(size_string,""), + 4,yon_char_return_if_exist(parsed[3],""), + 6,1,-1); + // gtk_list_store_set(widgets->DevicesList,&iter,,1,json_object_get_string(model),2,json_object_get_string(serial),3,size_final_string,4,json_object_get_string(vendor),6,1,-1); + + yon_char_parsed_free(parsed,parsed_size); } - yon_char_parsed_free(parsed,size); + yon_char_parsed_free(parameters,size); } void yon_os_password_open(GtkWidget *, main_window *widgets){ diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index c0fd160..147f4af 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -808,9 +808,9 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SamePlacePartTree),"cursor-changed",G_CALLBACK(on_partition_changed),widgets); g_signal_connect(G_OBJECT(widgets->NextInstallationSysSectionTree),"cursor-changed",G_CALLBACK(on_partition_changed),widgets); - g_signal_connect(G_OBJECT(widgets->NextInstallationSizeTypeSpin),"changed",G_CALLBACK(on_partition_changed),widgets); - g_signal_connect(G_OBJECT(widgets->OSFormatSizeCombo),"changed",G_CALLBACK(on_partition_changed),widgets); - g_signal_connect(G_OBJECT(widgets->UserdataFormatSizeCombo),"changed",G_CALLBACK(on_partition_changed),widgets); + g_signal_connect(G_OBJECT(widgets->NextInstallationSizeTypeSpin),"changed",G_CALLBACK(on_partition_size_changed),widgets); + g_signal_connect(G_OBJECT(widgets->OSFormatSizeCombo),"changed",G_CALLBACK(on_partition_size_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserdataFormatSizeCombo),"changed",G_CALLBACK(on_partition_size_changed),widgets); g_signal_connect(G_OBJECT(widgets->UserRootPasswordCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),widgets->UserRootPasswordEntry); g_signal_connect(G_OBJECT(widgets->UserRootPasswordCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),widgets->UserRootPasswordButton); @@ -931,7 +931,7 @@ void yon_main_window_create(main_window *widgets){ gtk_overlay_add_overlay(GTK_OVERLAY(widgets->RegionMapOverlay),widgets->TimeZoneMapOverlayBox); gtk_overlay_set_overlay_pass_through(GTK_OVERLAY(widgets->RegionMapOverlay),widgets->TimeZoneMapOverlayBox,1); gtk_widget_hide(widgets->TimeZoneMapOverlayBox); - + g_thread_new("Partitions_thread",(GThreadFunc)yon_partitions_list_load,widgets); { widgets->EnableRDPMenuItem = gtk_menu_item_new(); GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 18a769a..c6a8824 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -155,7 +155,7 @@ layout && /description:/ {\ #define disable_rdp_command "ubconfig --target system remove [desktop] AUTOEXEC[@users]" #define get_layouts_local_command(layout) yon_char_unite("xkbcli list --load-exotic | awk -v layout=\"", layout, "\" \"BEGIN {layout_pattern = sprintf(\\\"^ *- *layout: *'%s'\\\",layout);matched=0} matched && /variant:/ {match(\\$0, /: *'([^']+)'/, matches);variant = matches[1]} matched && /description:/ {match(\\$0, /: *(.+)/, matches);description = matches[1]} matched && /^ *-/{matched=0; if (variant) printf \\\"%s|%s\\n\\\",variant,description} \\$0 ~ layout_pattern {matched=1;variant=\\\"\\\";description=\\\"\\\";next}\" | sort -u", NULL) -#define get_devices_command "lsblk --noheadings --nodeps -Jo PATH,SIZE,MODEL,VENDOR,SERIAL --exclude 7" +// #define get_devices_command "lsblk --noheadings --nodeps -Jo PATH,SIZE,MODEL,VENDOR,SERIAL --exclude 7" #define get_parts_and_devices_command "lsblk --noheadings --bytes -o TYPE,PATH,SIZE,FSTYPE,LABEL,PARTLABEL,MOUNTPOINT,FSUSED,FSUSE% --exclude 7 |awk '{print ($1\";\"$2\";\"$3\";\"$4\";\"$5\";\"$6\";\"$7\";\"$8\";\"$9)}'" #define AUTOINSTALL(target) yon_char_unite("AUTOINSTALL[", target, "]", NULL) @@ -288,6 +288,9 @@ layout && /description:/ {\ #define full_log_path "/var/log/ubinstall.log" +#define get_devices_command "ubinstall show --lsdevices" +#define get_parts_for_device_command "ubinstall show --lsparts" + #define config_get_command(target) yon_char_unite("ubconfig -ea --conarg --source ", target, " get [autoinstall] AUTOINSTALL[*] -- get [locale] LANG", NULL) #define config_get_default_command "ubconfig -ea --conarg --source default get [autoinstall] AUTOINSTALL[*] -- get [locale] LANG" @@ -458,6 +461,9 @@ typedef struct gboolean force_scenario; char *os_name; + + config_str partitions; + int part_size; } config; extern config main_config; @@ -1494,4 +1500,6 @@ void yon_map_status_show(main_window *widgets, char *icon_name, char *title, cha gboolean on_map_box_ckicked_skip(); gboolean on_time_zone_status_hover(GtkWidget *, GdkEvent *, main_window *widgets); gboolean on_time_zone_status_hover_end(GtkWidget *, GdkEvent *, main_window *widgets); -void yon_map_update(main_window *widgets, const char *timezone); \ No newline at end of file +void yon_map_update(main_window *widgets, const char *timezone); +void on_partition_size_changed(GtkWidget *self, main_window *widgets); +void *yon_partitions_list_load(main_window *widgets); \ No newline at end of file