Changes; Fixes; WIP device and partition fixes

pull/228/head
parent dd47c48d54
commit 06892dd8c7

@ -79,7 +79,7 @@ void on_configuration_mode_switch(GtkWidget *self,main_window *widgets){
GList *box = gtk_container_get_children(GTK_CONTAINER(self)); GList *box = gtk_container_get_children(GTK_CONTAINER(self));
GList *children = gtk_container_get_children(GTK_CONTAINER(box->data)); 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)); int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Check));
if (!active){ if (!active){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration_mode); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration_mode);

@ -237,6 +237,34 @@ int yon_advanced_sections_save(dictionary *dict){
return 1; 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){ void yon_set_max_size_from_partition(GtkTreeView *table, GtkSpinButton *spin_button, GtkComboBox *spin_combo){
GtkTreeModel *model; GtkTreeModel *model;
GtkTreeIter iter; 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); const char *sizemod = gtk_combo_box_get_active_id(spin_combo);
double new_size = yon_size_long_convert_to_mod(selected_size,sizemod[0]); double new_size = yon_size_long_convert_to_mod(selected_size,sizemod[0]);
gtk_adjustment_set_upper(adj,new_size); gtk_adjustment_set_upper(adj,new_size);
gdouble old_value = gtk_adjustment_get_value(adj); char *command = yon_config_parameter_prepare_command(part_size_parameter_command,"default",NULL,NULL);
if (old_value>new_size){ int size=0;
gtk_adjustment_set_value(adj,new_size); 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){ void on_partition_changed(GtkWidget *self, main_window *widgets){
if (self==widgets->NextInstallationSysSectionTree||self == widgets->NextInstallationSizeTypeSpin){ 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){ void on_device_selection_changed(GtkWidget *self, main_window *widgets){
gtk_list_store_clear(widgets->PartitionsList); gtk_list_store_clear(widgets->PartitionsList);
GtkTreeIter iter; 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)){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),&model,&iter)){
char *disk_path; char *disk_path;
gtk_tree_model_get(model,&iter,0,&disk_path,-1); gtk_tree_model_get(model,&iter,0,&disk_path,-1);
int size; int size = main_config.part_size;
config_str partitions; 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;i<size;i++){ for (int i=0;i<size;i++){
if(!strstr(partitions[i],disk_path)) continue;
yon_char_remove_last_symbol(partitions[i],'\n'); yon_char_remove_last_symbol(partitions[i],'\n');
int parsed_size; int parsed_size;
config_str parsed = yon_char_parse(partitions[i],&parsed_size,";"); config_str parsed = yon_char_parse(partitions[i],&parsed_size,";");
@ -345,36 +376,30 @@ void yon_devices_setup(main_window *widgets){
GtkTreeIter iter; GtkTreeIter iter;
gtk_list_store_clear(widgets->DevicesList); gtk_list_store_clear(widgets->DevicesList);
int size; int size;
config_str parsed = NULL; config_str parameters = NULL;
parsed = yon_config_load(yon_debug_output("%s\n",get_devices_command),&size); parameters = yon_config_load(yon_debug_output("%s\n",get_devices_command),&size);
char *string = yon_char_parsed_to_string(parsed,size,""); for (int i=1;i<size;i++){
struct json_object *root; yon_char_remove_last_symbol(parameters[i],'\n');
struct json_object *blockdevices; int parsed_size;
root = json_tokener_parse(string); config_str parsed = yon_char_parse(parameters[i],&parsed_size,";");
free(string); char sizemod;
json_object_object_get_ex(root, "blockdevices", &blockdevices); double size_converted = yon_size_long_convert_automatic(atol(parsed[1]),&sizemod);
for (long unsigned int i = 0; i < json_object_array_length(blockdevices); i++) { char *size_string = yon_char_unite(yon_char_from_double(size_converted)," ", yon_size_get_name_from_letter(sizemod),NULL);
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);
gtk_list_store_append(widgets->DevicesList,&iter); gtk_list_store_append(widgets->DevicesList,&iter);
char *size_string = yon_char_new(json_object_get_string(size)); gtk_list_store_set(widgets->DevicesList,&iter,
char *size_str = yon_size_get_name_from_letter(size_string[strlen(size_string)-1]); 0,yon_char_return_if_exist(parsed[0],""),
size_string[strlen(size_string)-1] = '\0'; 1,yon_char_return_if_exist(parsed[2],""),
char *size_final_string = yon_char_unite(size_string," ",size_str,NULL); 2,yon_char_return_if_exist(parsed[4],""),
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); 3,yon_char_return_if_exist(size_string,""),
free(size_string); 4,yon_char_return_if_exist(parsed[3],""),
free(size_str); 6,1,-1);
free(size_final_string); // 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){ void yon_os_password_open(GtkWidget *, main_window *widgets){

@ -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->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->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->NextInstallationSizeTypeSpin),"changed",G_CALLBACK(on_partition_size_changed),widgets);
g_signal_connect(G_OBJECT(widgets->OSFormatSizeCombo),"changed",G_CALLBACK(on_partition_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_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->UserRootPasswordEntry);
g_signal_connect(G_OBJECT(widgets->UserRootPasswordCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),widgets->UserRootPasswordButton); 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_add_overlay(GTK_OVERLAY(widgets->RegionMapOverlay),widgets->TimeZoneMapOverlayBox);
gtk_overlay_set_overlay_pass_through(GTK_OVERLAY(widgets->RegionMapOverlay),widgets->TimeZoneMapOverlayBox,1); gtk_overlay_set_overlay_pass_through(GTK_OVERLAY(widgets->RegionMapOverlay),widgets->TimeZoneMapOverlayBox,1);
gtk_widget_hide(widgets->TimeZoneMapOverlayBox); gtk_widget_hide(widgets->TimeZoneMapOverlayBox);
g_thread_new("Partitions_thread",(GThreadFunc)yon_partitions_list_load,widgets);
{ {
widgets->EnableRDPMenuItem = gtk_menu_item_new(); widgets->EnableRDPMenuItem = gtk_menu_item_new();
GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);

@ -155,7 +155,7 @@ layout && /description:/ {\
#define disable_rdp_command "ubconfig --target system remove [desktop] AUTOEXEC[@users]" #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_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 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) #define AUTOINSTALL(target) yon_char_unite("AUTOINSTALL[", target, "]", NULL)
@ -288,6 +288,9 @@ layout && /description:/ {\
#define full_log_path "/var/log/ubinstall.log" #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_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" #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; gboolean force_scenario;
char *os_name; char *os_name;
config_str partitions;
int part_size;
} config; } config;
extern config main_config; extern config main_config;
@ -1495,3 +1501,5 @@ gboolean on_map_box_ckicked_skip();
gboolean on_time_zone_status_hover(GtkWidget *, GdkEvent *, main_window *widgets); gboolean on_time_zone_status_hover(GtkWidget *, GdkEvent *, main_window *widgets);
gboolean on_time_zone_status_hover_end(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); 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);
Loading…
Cancel
Save