From f5601a82928b1f58a33f453186e974a4eed022d7 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 18 Jul 2024 17:14:52 +0600 Subject: [PATCH] Test build for advanced installation options --- source/ubinstall-gtk.c | 59 +++++++++++++++++++++++++++++++++++++++--- ubinstall-gtk.glade | 2 ++ 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 4f824fb..5a2b5a7 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -1039,7 +1039,7 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ GtkTreeIter iter,itar; GtkTreeModel *model,*model2; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SeparateDevicesTree)),&model,&iter)){ - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SeparateUserSysSectionTree)),&model2,&itar)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SeparateSysSectionTree)),&model2,&itar)){ char *cur_device, *system_section, *user_section; gtk_tree_model_get(model,&iter,0,&cur_device,-1); gtk_tree_model_get(model2,&itar,0,&system_section,-1); @@ -1057,7 +1057,7 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ } } else { - + } } break; @@ -1191,6 +1191,56 @@ void on_partition_changed(GtkWidget *self, main_window *widgets){ } +void on_separate_installation_changed(GtkWidget *self, main_window *widgets); +void on_separate_installation_changed(GtkWidget *self, main_window *widgets){ + + gtk_list_store_clear(widgets->PartitionsList); + GtkTreeIter iter; + GtkTreeModel *model; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),&model,&iter)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SeparateUserDevicesTree)),&iter); + char *disk_path=""; + gtk_tree_model_get(model,&iter,0,&disk_path,-1); + int size; + config_str parsed; + parsed = yon_config_load(get_parts_and_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); + 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 *type, *path, *size, *model, *fstype, *fsused; + + json_object_object_get_ex(device, "type", &type); + if (strcmp("part",json_object_get_string(type))) + continue; + json_object_object_get_ex(device, "path", &path); + if (!strstr(json_object_get_string(path),disk_path)){ + continue; + } + json_object_object_get_ex(device, "size", &size); + json_object_object_get_ex(device, "model", &model); + json_object_object_get_ex(device, "fstype", &fstype); + json_object_object_get_ex(device, "fsused", &fsused); + + float free_space=0; + char *free_space_string=""; + if (size&&fsused){ + free_space = atof(json_object_get_string(size))-atof(json_object_get_string(fsused)); + free_space_string = yon_char_append(yon_char_from_float(free_space)," "); + free_space_string[strlen(free_space_string)-1]=json_object_get_string(size)[strlen(json_object_get_string(size))-1]; + } + // gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->InstallationNearSizeSpin),0.0); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(widgets->InstallationNearSizeSpin)),0.0); + gtk_list_store_append(widgets->PartitionsList,&iter); + gtk_list_store_set(widgets->PartitionsList,&iter,0,json_object_get_string(path),1,json_object_get_string(size),2,free_space_string,3,json_object_get_string(fstype),-1); + } + yon_char_parsed_free(parsed,size); + } +} + void on_near_installation_device_changed(GtkWidget *self, main_window *widgets); void on_near_installation_device_changed(GtkWidget *self, main_window *widgets){ gtk_list_store_clear(widgets->PartitionsList); @@ -1406,7 +1456,7 @@ main_window *yon_main_window_complete(){ widgets->SeparateSysSectionTree = yon_gtk_builder_get_widget(builder,"SeparateSysSectionTree"); widgets->GpartedSeparateUserButton = yon_gtk_builder_get_widget(builder,"GpartedSeparateUserButton"); widgets->SeparateUserDevicesTree = yon_gtk_builder_get_widget(builder,"SeparateUserDevicesTree"); - widgets->SeparateUserSysSectionTree = yon_gtk_builder_get_widget(builder,"SeparateUse-rSysSectionTree"); + widgets->SeparateUserSysSectionTree = yon_gtk_builder_get_widget(builder,"SeparateUserSysSectionTree"); widgets->GpartedOSButton = yon_gtk_builder_get_widget(builder,"GpartedOSButton"); widgets->OSDevicesTree = yon_gtk_builder_get_widget(builder,"OSDevicesTree"); @@ -1449,6 +1499,9 @@ main_window *yon_main_window_complete(){ g_signal_connect(G_OBJECT(widgets->CompletionToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->InstallationNearSysDevicesTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); g_signal_connect(G_OBJECT(widgets->SamePlaceDeviceTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserdataDevicesTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); + g_signal_connect(G_OBJECT(widgets->OSDevicesTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SeparateDevicesTree),"cursor-changed",G_CALLBACK(on_separate_installation_changed),widgets); g_signal_connect(G_OBJECT(widgets->ConfigurationModeMenuItem),"toggled",G_CALLBACK(on_configuration_mode_switch),widgets); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),widgets); diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index af8287f..5ced464 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -919,6 +919,7 @@ and help you install UBLinux on your computer + True True False True @@ -5550,6 +5551,7 @@ separately into the selected partition. True + False True DevicesList 0