diff --git a/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg b/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg new file mode 100644 index 0000000..842ceae --- /dev/null +++ b/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/ubinstall-gtk-components.c b/source/ubinstall-gtk-components.c index 21d7b16..de88cf5 100644 --- a/source/ubinstall-gtk-components.c +++ b/source/ubinstall-gtk-components.c @@ -349,8 +349,8 @@ void yon_os_components_init(main_window *widgets){ GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); GList *iter; for (iter=list;iter;iter=iter->next){ - os_row *row = g_object_get_data(iter->data,"kernel_row"); - free(row); + // os_row *row = g_object_get_data(iter->data,"kernel_row"); + // free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); } if (!gtk_widget_get_parent(widgets->OSSpinner)) @@ -484,6 +484,7 @@ gboolean yon_software_insert(struct row_data *row_input){ config_str parsed = yon_char_parse(main_config.modules[i],&parsed_size,";"); yon_char_parsed_add_or_create_if_exists(final,&final_size,parsed[1]); yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } modules_param = yon_char_parsed_to_string(final,final_size,","); } else if (!yon_char_is_empty(modules_prm)){ @@ -496,6 +497,7 @@ gboolean yon_software_insert(struct row_data *row_input){ yon_char_parsed_add_or_create_if_exists(final,&final_size,parsed[1]); } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } modules_param = yon_char_parsed_to_string(final,final_size,","); } @@ -508,7 +510,6 @@ gboolean yon_software_insert(struct row_data *row_input){ } void yon_software_init(main_window *widgets){ - on_status_update(NULL,widgets); if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, packages_parameter,NULL); } @@ -518,6 +519,7 @@ void yon_software_init(main_window *widgets){ os_row *row = g_object_get_data(iter->data,"kernel_row"); free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); + while(gtk_events_pending()) gtk_main_iteration(); } int base_size; config_str base = yon_packages_find(YON_PACKAGES_ALL,"ubm-",(gsize*)&base_size); @@ -548,6 +550,7 @@ void yon_software_init(main_window *widgets){ row->size = size_str; row->widgets=widgets; g_idle_add((GSourceFunc)yon_software_insert,row); + while(gtk_events_pending()) gtk_main_iteration(); } g_idle_add((GSourceFunc)yon_spinner_switch_off,widgets->OSSpinner); yon_char_parsed_free(base,base_size); @@ -585,7 +588,6 @@ int yon_pacman_software_save(main_window *widgets){ } void yon_pacman_init(main_window *widgets){ - on_status_update(NULL,widgets); if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, packages_parameter,NULL); } @@ -606,6 +608,7 @@ void yon_pacman_init(main_window *widgets){ gtk_list_store_append(widgets->PacmanSoftwareChosenList,&iter); gtk_list_store_set(widgets->PacmanSoftwareChosenList,&iter,0,1,1,parsed[i],2,version,3,_(description),4,size_str,6,1,-1); free(size_str); + while(gtk_events_pending()) gtk_main_iteration(); } yon_char_parsed_free(parsed,size); @@ -633,6 +636,7 @@ void yon_pacman_init(main_window *widgets){ } modules_packages = yon_char_parsed_to_string(final,final_size,","); } + while(gtk_events_pending()) gtk_main_iteration(); parsed = yon_char_parse(modules_packages,&size,","); for (int i=1;iPacmanSoftwareChosenList,&iter); gtk_list_store_set(widgets->PacmanSoftwareChosenList,&iter,0,1,1,parsed[i],2,version,3,_(description),4,size_str,6,0,-1); free(size_str); + while(gtk_events_pending()) gtk_main_iteration(); } yon_pacman_software_update_overall_size(widgets); yon_char_parsed_free(parsed,size); diff --git a/source/ubinstall-gtk-config-hub.c b/source/ubinstall-gtk-config-hub.c index a2edd67..83a68e9 100644 --- a/source/ubinstall-gtk-config-hub.c +++ b/source/ubinstall-gtk-config-hub.c @@ -236,6 +236,17 @@ void on_configuration_hub_open(GtkFlowBox *,GtkFlowBoxChild *child, main_window config_hub_icon *cur_icon = g_object_get_data(G_OBJECT(child),"config_hub_icon"); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),cur_icon->page); + switch(cur_icon->page){ + case YON_PAGE_OS_COMPONENTS: + case YON_PAGE_KERNEL: + case YON_PAGE_KERNEL_ADDON: + case YON_PAGE_PACMAN_SOFTWARE: + case YON_PAGE_SOFTWARE: + case YON_PAGE_PACKAGES: + on_status_button_update(NULL,widgets); + break; + default: break; + }; yon_page_init(widgets,cur_icon->page); yon_page_update(widgets); } diff --git a/source/ubinstall-gtk-install-start.c b/source/ubinstall-gtk-install-start.c index ee59796..19caa72 100644 --- a/source/ubinstall-gtk-install-start.c +++ b/source/ubinstall-gtk-install-start.c @@ -3,6 +3,7 @@ int yon_installation_start(main_window *widgets){ gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress)); return !pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); + return 1; } void yon_quick_install(GtkWidget *self, main_window *widgets){ @@ -10,7 +11,7 @@ void yon_quick_install(GtkWidget *self, main_window *widgets){ main_config.save_configured=1; gtk_widget_hide(self); gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress)); - // pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); + pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION); if (!yon_char_is_empty(main_config.config_load_path)){ char *command = quick_install_command(main_config.config_load_path); diff --git a/source/ubinstall-gtk-kernel.c b/source/ubinstall-gtk-kernel.c index de1c5dd..87392f9 100644 --- a/source/ubinstall-gtk-kernel.c +++ b/source/ubinstall-gtk-kernel.c @@ -113,6 +113,7 @@ void yon_kernel_row_setup_tags(kernel_row *row, char *tags){ tag_type = "tag_green"; }; yon_tag_add(GTK_BOX(row->TagsBox),tag_name,tag_type,NULL); + while(gtk_events_pending()) gtk_main_iteration(); } } @@ -127,6 +128,7 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa config_str description_wrapped = yon_char_wrap_to_lines(description_full,3,&size); description_full = yon_char_parsed_to_string(description_wrapped,size,"\n"); yon_char_parsed_free(description_wrapped,size); + while(gtk_events_pending()) gtk_main_iteration(); } int modules_size=0; config_str modules_parsed = yon_char_parse(modules,&modules_size," "); @@ -135,6 +137,7 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa char *temp = yon_char_unite("",modules_parsed[i],"",NULL); free(modules_parsed[i]); modules_parsed[i] = temp; + while(gtk_events_pending()) gtk_main_iteration(); } char *modules_final = yon_char_parsed_to_string(modules_parsed,modules_size,"\n"); gtk_label_set_markup(GTK_LABEL(row->NameLabel),label_markup); @@ -168,6 +171,7 @@ void yon_kernel_resize(main_window *widgets){ gtk_widget_get_preferred_width(row->ModulesLabel,&cur_modules_size,NULL); if (name_sizeKernelNameLabel),name_size,-1); gtk_widget_set_size_request(GTK_WIDGET(widgets->KernelModulesLabel),modules_size,-1); @@ -177,6 +181,7 @@ void yon_kernel_resize(main_window *widgets){ gtk_widget_set_size_request(GTK_WIDGET(row->EnableRadio),enable_size,-1); gtk_widget_set_size_request(row->NameLabel,name_size,-1); gtk_widget_set_size_request(row->ModulesLabel,modules_size,-1); + while(gtk_events_pending()) gtk_main_iteration(); } g_list_free(list); } @@ -208,10 +213,10 @@ void yon_kernel_addon_resize(main_window *widgets){ } void yon_kernel_init(main_window *widgets){ - on_status_update(NULL,widgets); if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, packages_parameter,KERNEL_BOOT_parameter,NULL); } + while(gtk_events_pending()) gtk_main_iteration(); GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelListBox)); GList *iter; for (iter = list; iter; iter = iter->next){ @@ -222,6 +227,7 @@ void yon_kernel_init(main_window *widgets){ free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); } + while(gtk_events_pending()) gtk_main_iteration(); } g_list_free(list); @@ -234,6 +240,7 @@ void yon_kernel_init(main_window *widgets){ modules_parsed = yon_char_parse(modules,&modules_size,","); } + while(gtk_events_pending()) gtk_main_iteration(); int size; config_str kernels = yon_resource_open_file(kernel_list_path,&size); gtk_size_group_add_widget(widgets->KernelSizeGroup,widgets->KernelTagsLabel); @@ -256,6 +263,7 @@ void yon_kernel_init(main_window *widgets){ yon_kernel_row_setup(row,name,modules,package,tags,description); + while(gtk_events_pending()) gtk_main_iteration(); if (yon_char_parsed_check_exist(modules_parsed,modules_size,parsed[1])>-1){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),1); } else { @@ -269,6 +277,7 @@ void yon_kernel_init(main_window *widgets){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->EnableRadio),1); } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } yon_kernel_resize(widgets); @@ -419,11 +428,11 @@ void yon_kernel_addon_row_setup(kernel_addon_row *row, char *name, char *modules } void yon_kernel_addon_init(main_window *widgets){ - on_status_update(NULL,widgets); yon_config_remove_by_args(packages_parameter,NULL); char *command = yon_config_parameter_prepare_command(packages_parameter_command,main_config.config_load_path,NULL,NULL); yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); free(command); + while(gtk_events_pending()) gtk_main_iteration(); GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelAddonListBox)); GList *iter; for (iter = list; iter; iter = iter->next){ @@ -434,6 +443,7 @@ void yon_kernel_addon_init(main_window *widgets){ free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); } + while(gtk_events_pending()) gtk_main_iteration(); } g_list_free(list); @@ -478,6 +488,7 @@ void yon_kernel_addon_init(main_window *widgets){ gtk_widget_set_sensitive(row->InstallCheck,0); } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } yon_kernel_addon_resize(widgets); diff --git a/source/ubinstall-gtk-log.c b/source/ubinstall-gtk-log.c index dd183c4..d0f6dbb 100644 --- a/source/ubinstall-gtk-log.c +++ b/source/ubinstall-gtk-log.c @@ -96,7 +96,11 @@ void on_process_log_view(GtkWidget *,main_window *widgets){ yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,INSTALL_LOG_LABEL,icon_path,"log_viewer"); window->command = yon_char_new(short_log_path); GFile *file = g_file_new_for_path(window->command); - window->monitor = g_file_monitor_file(file,G_FILE_MONITOR_NONE,NULL,NULL); + GError *err = NULL; + window->monitor = g_file_monitor_file(file,G_FILE_MONITOR_NONE,NULL,&err); + if (err){ + printf("%s\n",err->message); + } g_signal_connect(G_OBJECT(window->monitor),"changed",G_CALLBACK(yon_read_log),window); g_object_unref(file); yon_read_log(NULL,NULL,NULL,G_FILE_MONITOR_EVENT_CHANGED,window); @@ -149,7 +153,6 @@ void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonito double fraction = atof(parsed[3]) / 100; gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->PackageInstallationProgress), fraction); gtk_label_set_text(GTK_LABEL(widgets->PackageInstallationLabel), yon_char_parsed_to_string(parsed, size, " ")); - // yon_char_parsed_free(parsed,size); } if (!yon_char_is_empty(current_copy)) free(current_copy); } @@ -162,9 +165,14 @@ void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonito gboolean yon_progress_bar_start(main_window *widgets){ GFile *file_desc = g_file_new_for_path(progress_path); - widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,NULL); + GError *err = NULL; + widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,&err); + if (err){ + printf("%s\n",err->message); + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),err->message,5,BACKGROUND_IMAGE_FAIL_TYPE); + return G_SOURCE_REMOVE; + } g_signal_connect(G_OBJECT(widgets->install_info_monitor),"changed",G_CALLBACK(yon_installation_progress_update),widgets); - // g_thread_new("progress",(GThreadFunc)yon_progress_thread_test,widgets); g_object_unref(file_desc); if (access(progress_path,F_OK)){ FILE *file = fopen(progress_path,"w"); diff --git a/source/ubinstall-gtk-packages.c b/source/ubinstall-gtk-packages.c index 850c855..e12b92d 100644 --- a/source/ubinstall-gtk-packages.c +++ b/source/ubinstall-gtk-packages.c @@ -117,6 +117,7 @@ void yon_packages_tab_init(main_window *widgets){ yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); free(command); } + while(gtk_events_pending()) gtk_main_iteration(); gtk_tree_store_clear(widgets->PackagesList); char *modules = config(modules_parameter); if (modules&&!strcmp(modules,"auto")){ @@ -142,6 +143,7 @@ void yon_packages_tab_init(main_window *widgets){ } modules = yon_char_parsed_to_string(final,final_size,","); } + while(gtk_events_pending()) gtk_main_iteration(); int size; char *config_packages = config(packages_parameter); @@ -163,6 +165,7 @@ void yon_packages_tab_init(main_window *widgets){ } yon_char_parsed_add_or_create_if_exists(final,&final_size,modules_parsed[j]); } + while(gtk_events_pending()) gtk_main_iteration(); yon_char_parsed_free(modules_parsed,modules_parsed_size); char *modules_string = yon_char_parsed_to_string(final,final_size,"\t"); if (empty && !yon_char_check_elements(modules,modules_string,",")) continue; @@ -218,6 +221,7 @@ void yon_packages_tab_init(main_window *widgets){ free(full_string); } } + while(gtk_events_pending()) gtk_main_iteration(); } yon_packages_remove_empty_groups(widgets); if (!yon_char_is_empty(modules)) free(modules); diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 9f815eb..e0d4fbe 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -8,16 +8,26 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){ case YON_PAGE_WELCOME: return YON_PAGE_LICENCE; break; case YON_PAGE_LICENCE: return YON_PAGE_SECTIONS; break; case YON_PAGE_SECTIONS: return yon_sections_get_next_page(widgets); break; - case YON_PAGE_OS_COMPONENTS: return main_config.configure_mode?YON_PAGE_CONFIG_HUB: strcmp(config(AUTOINSTALL_TYPE_INSTALL),"system_only") ? YON_PAGE_INSTALLATION_BEGIN : YON_PAGE_RECOVERY_BEGIN; break; + case YON_PAGE_OS_COMPONENTS: { + char *install_mode = config(AUTOINSTALL_TYPE_INSTALL); + if (main_config.configure_mode&&strcmp(install_mode,"system_only")&&strcmp(install_mode,"grub_install")&&strcmp(install_mode,"grub_update")){ + return YON_PAGE_CONFIG_HUB; + } else if (strcmp(install_mode,"system_only")){ + return YON_PAGE_INSTALLATION_BEGIN; + } else { + return YON_PAGE_RECOVERY_BEGIN; + } + } case YON_PAGE_INSTALLATION_BEGIN: return YON_PAGE_CONFIG_HUB; break; case YON_PAGE_SOFTWARE: return YON_PAGE_CONFIG_HUB; break; case YON_PAGE_CONFIG_HUB: { + char *install_mode = config(AUTOINSTALL_TYPE_INSTALL); if (main_config.configure_mode){ return YON_PAGE_CONFIGURE_END; - } else if (strcmp(config(AUTOINSTALL_TYPE_INSTALL),"data_only")){ + } else if (strcmp(install_mode,"data_only")){ return YON_PAGE_INSTALLATION; } else { - return YON_PAGE_RECOVERY_PROCESS; + return YON_PAGE_RECOVERY_BEGIN; } } break; case YON_PAGE_KERNEL: return YON_PAGE_CONFIG_HUB; break; @@ -37,11 +47,11 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){ case YON_PAGE_INSTALL_SAME_PARTITION: return YON_PAGE_OS_COMPONENTS; break; case YON_PAGE_INSTALL_ADVANCED: return YON_PAGE_OS_COMPONENTS; break; case YON_PAGE_INSTALL_RECOVERY: return yon_recovery_get_next(widgets); break; - case YON_PAGE_RECOVERY_GRUB_INSTALL: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break; - case YON_PAGE_RECOVERY_GRUB_UPDATE: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break; - case YON_PAGE_RECOVERY_OS_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_OS_COMPONENTS; break; - case YON_PAGE_RECOVERY_USRDATA_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break; - case YON_PAGE_RECOVERY_BEGIN: main_config.save_configured = 1; return strcmp(config(AUTOINSTALL_TYPE_INSTALL),"data_only") ? YON_PAGE_RECOVERY_PROCESS: YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_GRUB_INSTALL: return YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_GRUB_UPDATE: return YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_OS_ONLY: return YON_PAGE_OS_COMPONENTS; break; + case YON_PAGE_RECOVERY_USRDATA_ONLY: return YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_BEGIN: main_config.save_configured = 1; return YON_PAGE_RECOVERY_PROCESS; break; case YON_PAGE_RECOVERY_PROCESS: return YON_PAGE_RECOVERY_COMPLETION; break; case YON_PAGE_INSTALLATION: return YON_PAGE_COMPLETION; break; case YON_PAGE_CONFIGURE_SAVE: @@ -419,6 +429,28 @@ void yon_switch_page_render(main_window *widgets){ g_list_free(list); } +void yon_container_start_loading(GtkWidget *target){ + GtkWidget *parent = gtk_widget_get_parent(target); + g_object_ref(target); + gtk_container_remove(GTK_CONTAINER(parent),target); + GtkWidget *overlay = gtk_overlay_new(); + g_object_set_data(G_OBJECT(parent),"loader_overlay",overlay); + g_object_set_data(G_OBJECT(target),"parent",parent); + gtk_overlay_add_overlay(GTK_OVERLAY(overlay),target); + gtk_widget_show(overlay); +} + +void yon_container_stop_loading(GtkWidget *target){ + g_object_ref(target); + GtkWidget *parent = g_object_get_data(G_OBJECT(target),"loader_overlay"); + GtkWidget *overlay = g_object_get_data(G_OBJECT(parent),"loader_overlay"); + gtk_container_remove(GTK_CONTAINER(overlay),target); + gtk_container_add(GTK_CONTAINER(parent),target); + gtk_widget_destroy(overlay); + gtk_widget_show(overlay); + g_object_set_data(G_OBJECT(parent),"loader_overlay",NULL); + g_object_set_data(G_OBJECT(target),"parent",NULL); +} void yon_configuration_mode_check(main_window *widgets){ enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); @@ -470,18 +502,23 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_configuration_hub_init(widgets); break; case YON_PAGE_OS_COMPONENTS: + // on_status_update(NULL,widgets); yon_os_components_init(widgets); break; case YON_PAGE_KERNEL: + // on_status_update(NULL,widgets); yon_kernel_init(widgets); break; case YON_PAGE_KERNEL_ADDON: + // on_status_update(NULL,widgets); yon_kernel_addon_init(widgets); break; case YON_PAGE_SOFTWARE: + // on_status_update(NULL,widgets); yon_software_init(widgets); break; case YON_PAGE_PACMAN_SOFTWARE: + // on_status_update(NULL,widgets); yon_pacman_init(widgets); break; case YON_PAGE_REGION: @@ -509,6 +546,7 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_network_init(widgets); break; case YON_PAGE_PACKAGES: + // on_status_update(NULL,widgets); yon_packages_tab_init(widgets); break; case YON_PAGE_INSTALL_ADVANCED: @@ -564,6 +602,16 @@ void on_page_next_clicked(GtkWidget *, main_window *widgets){ page = yon_page_get_next(widgets,page); if ((int)page!=-1){ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page); + switch(page){ + case YON_PAGE_KERNEL: + case YON_PAGE_KERNEL_ADDON: + case YON_PAGE_PACMAN_SOFTWARE: + case YON_PAGE_SOFTWARE: + case YON_PAGE_PACKAGES: + on_status_button_update(NULL,widgets); + break; + default: break; + }; yon_page_init(widgets,page); } yon_page_update(widgets); @@ -578,7 +626,7 @@ void on_page_prev_clicked(GtkWidget *, main_window *widgets){ yon_page_update(widgets); } -#include +// #include void on_page_cancel_clicked(GtkWidget *, main_window *widgets){ enum YON_PAGES cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index 98b126c..f5f0efd 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -156,6 +156,29 @@ enum INSTALL_TYPE yon_ubl_get_install_mode(){ return INSTALL_ERROR; } +void on_config_install_success(GtkWidget *, int state, main_window *widgets){ + if (state){ + gdk_threads_add_idle((GSourceFunc)on_install_error,widgets); + g_mutex_lock(&main_config.install_mutex); + main_config.install_complete=1; + g_mutex_unlock(&main_config.install_mutex); + return; + } + g_mutex_lock(&main_config.install_mutex); + if (!main_config.install_complete){ + 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); + } else if (main_config.save_done&&main_config.save_configured){ + g_idle_add((GSourceFunc)on_install_success,widgets); + + } else { + main_config.save_done=1; + } +} + void *on_config_save(void *data){ main_window *widgets = (main_window*)data; @@ -178,7 +201,6 @@ void *on_config_save(void *data){ 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); } } else { yon_launch("ubconfig --source system get /"); @@ -190,97 +212,16 @@ void *on_setup_system_configuration(void * data){ yon_debug_output("%s\n","Entered thread"); main_window *widgets = (main_window*)data; if (widgets){}; - int size; - config_str all_parameters = yon_config_get_selection_by_key(&size, - root_password_parameter, - autologin_parameter, - xkbmodel_parameter, - xkblayout_parameter, - xkbvariant_parameter, - xkboptions_parameter, - hostname_parameter, - zone_parameter, - lang_parameter, - locale_parameter, - SERVICES_ENABLE_parameter, - GRUB_DEFAULT_parameter, - GRUB_TIMEOUT_parameter, - AUTOLOGINUSER_parameter, - GRUB_SUPERUSERS_parameter, - DOMAIN_parameter, - DOMAIN_admanger_parameter, - NTPSERVERS_parameter, - packages_parameter, - KERNEL_BOOT_parameter, - packages_parameter, - NULL); - int user_size=0; - config_str users = yon_config_get_all_by_key(USERADD_parameter_search,&user_size); - if (user_size){ - int final_size; - config_str final = yon_char_parsed_merge(all_parameters,size,users,user_size,&final_size); - // yon_char_parsed_free(users,user_size); - if (size) yon_char_parsed_free(all_parameters,size); - all_parameters = final; - size = final_size; - } - users = yon_config_get_all_by_key(GRUB_PASSWORD_parameter_search,&user_size); - if (users){ - int final_size; - config_str final = yon_char_parsed_merge(all_parameters,size,users,user_size,&final_size); - // yon_char_parsed_free(users,user_size); - if (size) yon_char_parsed_free(all_parameters,size); - all_parameters = final; - size = final_size; - } - int network_size; - config_str networks = yon_config_get_all_by_key(NETWORK_parameter_search,&network_size); - if (network_size){ - int final_size; - config_str final = yon_char_parsed_merge(all_parameters,size,networks,network_size,&final_size); - // yon_char_parsed_free(networks,network_size); - if (size) yon_char_parsed_free(all_parameters,size); - all_parameters = final; - size = final_size; - } - - if (all_parameters){ - for (int i=0;iMainWindow),"pacman -Sy",SUCCESS_LABEL,FAIL_LABEL); -// yon_terminal_integrated_start_shell(widgets->InstallTerminal,yon_debug_output("%s\n",pacman_update_command),NULL,NULL); -// g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_db_update_done),widgets); -// gtk_button_clicked(GTK_BUTTON(widgets->MoreButton)); -// gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MenusTab),1); -// } - -void on_status_update(GtkWidget *,main_window *widgets){ - // on_database_update(NULL,widgets); - yon_window *window = yon_window_new(); - GtkWidget *terminal = vte_terminal_new(); - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),DB_UPDATE_LABEL,icon_path,NULL); - gtk_widget_show(terminal); - gtk_box_pack_start(GTK_BOX(window->MainBox),terminal,1,1,0); - yon_terminal_integrated_start_shell(terminal,"pacman -Sy",NULL,NULL); - gtk_widget_show(window->Window); - // yon_terminal_window_launch(GTK_WINDOW(widgets->MainWindow),"pacman -Sy",SUCCESS_LABEL,FAIL_LABEL); +void yon_update_page(main_window *widgets){ + enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); yon_packages_update(); + while(gtk_events_pending()) gtk_main_iteration(); + yon_page_init(widgets,page); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->db_lock_monitor),G_CALLBACK(yon_db_unlock_update),widgets); + on_status_update(NULL,widgets); +} +void *yon_db_update(main_window *widgets){ + yon_launch("pacsync --updated"); + g_idle_add_once((GSourceOnceFunc)yon_update_page,widgets); + pthread_exit(NULL); +} + +void on_status_button_update(GtkWidget *, main_window *widgets){ + g_signal_handlers_block_by_func(G_OBJECT(widgets->db_lock_monitor),G_CALLBACK(yon_db_unlock_update),widgets); + pthread_t tid=0; + pthread_create(&tid,NULL,(void*(*)(void*))yon_db_update,widgets); + +} + +void yon_status_thread_update_inactive(main_window *widgets){ + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),UNACCESSED_LABEL); +} + +void yon_status_thread_update_active(main_window *widgets){ + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),ACCESSED_LABEL); +} +void *yon_status_thread_update(main_window *widgets){ if (system(yon_check_database_command)){ - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),UNACCESSED_LABEL); + g_idle_add_once((GSourceOnceFunc)yon_status_thread_update_inactive,widgets); } else { - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),ACCESSED_LABEL); + g_idle_add_once((GSourceOnceFunc)yon_status_thread_update_active,widgets); } - enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); - page = yon_page_get_next(widgets,page); - yon_page_init(widgets,page); + pthread_exit(NULL); +} + +void on_status_update(GtkWidget *,main_window *widgets){ + pthread_t tid=0; + pthread_create(&tid,NULL,(void*(*)(void*))yon_status_thread_update,widgets); } @@ -376,6 +388,24 @@ void yon_scroll_block_for_builder(GtkBuilder *builder){ g_slist_free(list); } +void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets){ + if (!access(pacman_lock_path,F_OK)){ + gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,0); + gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,0); + gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,0); + gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,0); + } +} + +void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets){ + if (access(pacman_lock_path,F_OK)){ + gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,1); + gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,1); + gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,1); + gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,1); + } +} + void yon_main_window_create(main_window *widgets){ __attribute__((unused)) char *locale = setlocale(LC_ALL, "en_US.UTF-8"); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); @@ -702,11 +732,22 @@ void yon_main_window_create(main_window *widgets){ widgets->NextInstallationSliderImage = yon_gtk_builder_get_widget(builder,"NextInstallationSliderImage"); widgets->PrevInstallationSliderImage = yon_gtk_builder_get_widget(builder,"PrevInstallationSliderImage"); + widgets->network_connections = NULL; widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL); main_config.status_box = widgets->StatusBox; + + GError *err = NULL; + GFile *file_desc = g_file_new_for_path(pacman_lock_dir_path); + widgets->db_lock_monitor = g_file_monitor_directory(file_desc,G_FILE_MONITOR_NONE,NULL,&err); + if (err){ + printf("%s\n",err->message); + } + g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_lock_update),widgets); + g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_unlock_update),widgets); } + g_signal_connect(G_OBJECT(widgets->MainWindow),"delete-event",G_CALLBACK(on_yon_exit),widgets); GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); @@ -723,11 +764,11 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LoadLocalConfigurationMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadExternalConfigurationMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); - g_signal_connect(G_OBJECT(widgets->PackagesStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->AdditionalComponentsStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->KernelAddonPacmanStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->PacmanSoftwareStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); + g_signal_connect(G_OBJECT(widgets->PackagesStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->AdditionalComponentsStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->KernelAddonPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->PacmanSoftwareStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); g_signal_connect(G_OBJECT(widgets->ReadFullLogButton),"clicked",G_CALLBACK(on_process_log_view),widgets); g_signal_connect(G_OBJECT(widgets->ReadShortLogButton),"clicked",G_CALLBACK(on_summary_log_view),widgets); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 1cf8735..f279cfc 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -13,6 +13,7 @@ #include #include #include +// #define VTE_INCLUDE #ifdef WEBKIT_INCLUDE #include #endif @@ -95,6 +96,9 @@ #define arrow_left_icon_path "com.ublinux.ubinstall-gtk.arrow-left-symbolic" #define arrow_right_icon_path "com.ublinux.ubinstall-gtk.arrow-right-symbolic" +#define pacman_lock_path "/var/lib/pacman/db.lck" +#define pacman_lock_dir_path "/var/lib/pacman/" + #define slide_repeat_path "/com/ublinux/images/slide-1.png", \ "/com/ublinux/images/slide-2.png", \ "/com/ublinux/images/slide-3.png", \ @@ -153,7 +157,7 @@ layout && /description:/ {\ #define yon_check_database_command "pacman -Syy >/dev/null" #define internet_tomezone_check_command "curl -s ipinfo.io/timezone" -#define ubinstall_dry_run_command "ubinstall --dry-run" +#define ubinstall_dry_run_command "/usr/bin/bash -c \"ubinstall --dry-run" #define os_name_get_command "sed -En 's/^PRETTY_NAME=[\"]*([^\"]+)[\"]*/\\1/p' /etc/os-release" #define get_keyboard_layout_change_command "grep \"grp:\" /usr/share/X11/xkb/rules/base.lst | awk '{$1=$1; sub(/^!.*$/, \"\"); if ($1 ~ /^grp:/) {opt=$1; $1=\"\"; print opt \"|\" substr($0,2)}}'" @@ -292,7 +296,7 @@ layout && /description:/ {\ #define get_localisation_command "ubconfig -ea --source global get [autoinstall] AUTOINSTALL[installer_locale] -- get [autoinstall] AUTOINSTALL['ubconfig set [locale] LANG'] -- get [locale] LANG" -#define save_config_command yon_char_unite("nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --noautoconfig --noinstall_extra", NULL) +#define save_config_command yon_char_unite("/usr/bin/bash -c \"nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --noautoconfig --noinstall_extra\"", NULL) #define quick_install_command(path) yon_char_unite("nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --config='",path,"' --noautoconfig --noinstall_extra", NULL) #define set_user_config_command yon_char_unite("nice ubinstall autoconfig",main_config.debug_mode?" --debug":""," install_extra", NULL) @@ -304,8 +308,6 @@ layout && /description:/ {\ #define PASSWORD_DEFAULT "ublinux" -#define start_fast_install_command "ubinstall --autoinstall" - #define progress_path "/var/log/ubinstall_progress.log" #define password_limits_path "/etc/security/pwquiality.conf" @@ -314,9 +316,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 get_modules_command "ubinstall show --lsmodules" +#define get_devices_command "/usr/bin/bash -c \"ubinstall show --lsdevices\"" +#define get_parts_for_device_command "/usr/bin/bash -c \"ubinstall show --lsparts\"" +#define get_modules_command "/usr/bin/bash -c \"ubinstall show --lsmodules\"" #define ubconfig_file_create_pkexec(target) yon_char_unite("pkexec ubconfig --target \"",target,"\" create",NULL) #define config_get_command(target) yon_char_unite("ubconfig -ea --conarg --source ", target, " get [autoinstall] AUTOINSTALL[*] ADDADM -- get [locale] LANG", NULL) @@ -852,6 +854,8 @@ typedef struct GtkWidget *root_button; GtkWidget *debug_button; + GFileMonitor *db_lock_monitor; + } main_window; enum ADVANCED_PART_TYPE @@ -1627,4 +1631,15 @@ gboolean on_os_components_info(GtkWidget *, GdkEventButton *, os_row *row); void on_software_info(GtkWidget*, main_window *widgets); void yon_packages_remove_empty_groups(main_window *widgets); void yon_config_mode_start(main_window *widgets); -void on_bootloader_selected(GtkTreeView *,main_window *widgets); \ No newline at end of file +void on_bootloader_selected(GtkTreeView *,main_window *widgets); +void yon_update_page(main_window *widgets); +void *yon_db_update(main_window *widgets); +void on_status_button_update(GtkWidget *, main_window *widgets); +void yon_container_start_loading(GtkWidget *target); +void yon_container_stop_loading(GtkWidget *target); +void yon_status_thread_update_inactive(main_window *widgets); +void yon_status_thread_update_active(main_window *widgets); +void *yon_status_thread_update(main_window *widgets); +void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); +void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); +void on_config_install_success(GtkWidget *self, int state, main_window *widgets); \ No newline at end of file diff --git a/ubinstall-gtk-kernel-row.glade b/ubinstall-gtk-kernel-row.glade index feb2178..0145396 100644 --- a/ubinstall-gtk-kernel-row.glade +++ b/ubinstall-gtk-kernel-row.glade @@ -134,6 +134,7 @@ True False 5 + False 0 0 diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index fe4b481..d1ea92e 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -5914,22 +5914,22 @@ Select a different installation sources. - Service + Unit - 2 + 1 - Unit + Service - 1 + 2