From 9607f59ffb82014aa0d0846dac31b8d0ee9f8c01 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 10 Mar 2025 11:48:01 +0600 Subject: [PATCH 1/7] Config file description was added --- gresource.xml | 3 +++ source/CMakeLists.txt | 1 + source/ubl-settings-services.c | 24 ++++++++++++++++++++++++ source/ubl-settings-services.h | 4 +++- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/gresource.xml b/gresource.xml index 835a942..3cbac51 100644 --- a/gresource.xml +++ b/gresource.xml @@ -7,6 +7,9 @@ ubl-settings-services.css + + systemd_conf.csv + ubl-settings-services-banner.png diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 3bea421..f7a7eab 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -36,6 +36,7 @@ add_custom_target(GLADE ubl-settings-services.glade) set(DEPENDFILES ../ubl-settings-services.glade + ../systemd_conf.csv ../ubl-settings-services-terminal.glade ../gresource.xml ../ubl-settings-services-banner.png diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 4e167e9..0a69dd4 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -1143,6 +1143,8 @@ gboolean yon_interface_update(main_window *widgets){ } } + int descr_size; + config_str config_descr = yon_resource_open_file(systemd_config_path,&descr_size); for (int i=0; i2){ GtkTreeIter iter; char *description = ""; + { + for (int k=0;kConfigList,&iter); gtk_list_store_set(widgets->ConfigList,&iter,0,parsed[2],1,parsed[1],2,description,-1); } diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 6f2887d..a005427 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -31,7 +31,9 @@ #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define LocalePath "/usr/share/locale" -#define LocaleName "ubl-settings-services" +#define LocaleName "ubl-settings-services" + +#define systemd_config_path "resource:///com/ublinux/csv/systemd_conf.csv" #define load_services_command "systemctl list-units --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'" #define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'",NULL) -- 2.35.1 From ec16ac90f1a6ed861da2d215266c8fbb14f837de Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 9 Apr 2025 11:29:51 +0600 Subject: [PATCH 2/7] Fixed thread memory errors --- source/ubl-settings-services.c | 32 +++++++++++++++++++++----------- source/ubl-settings-services.h | 2 +- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 0a69dd4..6f665c1 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -73,7 +73,7 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); main_config.load_mode=1; } } @@ -84,7 +84,7 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_GLOBAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); main_config.load_mode=0; } @@ -97,7 +97,7 @@ void on_config_custom_load(GtkWidget *self,main_window *widgets){ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=3; - yon_interface_update(widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); } void on_service_constant_update(){ @@ -780,12 +780,12 @@ void on_system_log_clicked(GtkWidget *self, main_window *widgets){ } -void *on_terminal_relaunch(log_window *window){ +gboolean on_terminal_relaunch(log_window *window){ gtk_widget_set_sensitive(window->SystemTerminal,0); sleep(1); gtk_widget_set_sensitive(window->SystemTerminal,1); yon_terminal_integrated_start_shell(window->SystemTerminal,window->target,NULL,NULL); - return NULL; + return G_SOURCE_REMOVE; } void on_save_clicked(GtkWidget *self, log_window *window){ @@ -793,7 +793,7 @@ void on_save_clicked(GtkWidget *self, log_window *window){ vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"\30",-1); vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"Y\r",-1); gtk_widget_grab_focus(window->SystemTerminal); - g_thread_new(NULL,(GThreadFunc)on_terminal_relaunch,window); + g_idle_add((GSourceFunc)on_terminal_relaunch,window); } void on_update_clicked(GtkWidget *self, log_window *window){ @@ -1097,6 +1097,7 @@ gboolean yon_interface_update(main_window *widgets){ gtk_list_store_clear(widgets->UserList); gtk_list_store_clear(widgets->ConfigList); gtk_list_store_clear(widgets->TimersList); + while(gtk_events_pending()) gtk_main_iteration(); int system_size; config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; @@ -1129,6 +1130,7 @@ gboolean yon_interface_update(main_window *widgets){ } } + while(gtk_events_pending()) gtk_main_iteration(); for (int i=0; iTimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); } } + while(gtk_events_pending()) gtk_main_iteration(); { int parsed_size; char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); @@ -1284,6 +1289,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); parsed = yon_char_parse(disabled,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1302,6 +1308,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); parsed = yon_char_parse(masked,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1319,6 +1326,7 @@ gboolean yon_interface_update(main_window *widgets){ } } } + while(gtk_events_pending()) gtk_main_iteration(); { int parsed_size; @@ -1343,6 +1351,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); parsed = yon_char_parse(disabled,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1361,6 +1370,7 @@ gboolean yon_interface_update(main_window *widgets){ } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); parsed = yon_char_parse(masked,&parsed_size,","); valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1378,12 +1388,13 @@ gboolean yon_interface_update(main_window *widgets){ } } } + while(gtk_events_pending()) gtk_main_iteration(); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); main_config.update_thread_active=0; - return 0; + return G_SOURCE_REMOVE; } void on_interface_update(GtkWidget *self, main_window *widgets){ @@ -1392,8 +1403,7 @@ void on_interface_update(GtkWidget *self, main_window *widgets){ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree))); gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree))); main_config.update_thread_active=1; - pthread_t tid; - pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); } } @@ -1851,8 +1861,8 @@ void yon_main_window_complete(main_window *widgets){ yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); if (!main_config.update_thread_active){ main_config.update_thread_active=1; - pthread_t tid; - pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); + g_idle_add((GSourceFunc)yon_interface_update,widgets); + } yon_save_window_set_postsave_function(on_save_done,widgets); } diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a005427..1b5c73d 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -377,7 +377,7 @@ void on_system_info_clicked(GtkWidget *self, main_window *widgets); void on_system_log_clicked(GtkWidget *self, main_window *widgets); -void *on_terminal_relaunch(log_window *window); +gboolean on_terminal_relaunch(log_window *window); void on_save_clicked(GtkWidget *self, log_window *window); void on_update_clicked(GtkWidget *self, log_window *window); void on_system_edit_clicked(GtkWidget *self, main_window *widgets); -- 2.35.1 From 258a4be06d9d1333458add94ea2b30fa19f2a761 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 9 Apr 2025 15:00:53 +0600 Subject: [PATCH 3/7] Fixed session update button --- source/ubl-settings-services.c | 147 +++++++++++---------------------- ubl-settings-services.glade | 12 +-- 2 files changed, 56 insertions(+), 103 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 6f665c1..00a3d1f 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -4,8 +4,7 @@ config main_config; //saving & loading -void on_save_done(main_window *widgets, config_str output, int size){ - if (widgets) {}; +void on_save_done(main_window *, config_str output, int size){ char *final_output = yon_char_parsed_to_string(output,size,""); if (!yon_char_is_empty(final_output)){ printf("%s\n",final_output); @@ -67,8 +66,7 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ } } -void on_config_local_load(GtkWidget *self,main_window *widgets){ - if (self){} +void on_config_local_load(GtkWidget *,main_window *widgets){ if (!main_config.update_thread_active){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_LOCAL); @@ -78,8 +76,7 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){ } } -void on_config_global_load(GtkWidget *self,main_window *widgets){ - if (self){} +void on_config_global_load(GtkWidget *,main_window *widgets){ if (!main_config.update_thread_active){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_GLOBAL); @@ -90,8 +87,7 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ } -void on_config_custom_load(GtkWidget *self,main_window *widgets){ - if (self){} +void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_load_proceed(YON_CONFIG_CUSTOM); textdomain(template_ui_LocaleName); yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); @@ -121,8 +117,7 @@ void on_config_global_save(){ } -void on_config_custom_save(GtkWidget *self, main_window *widgets){ - if (self&&widgets){} +void on_config_custom_save(GtkWidget *, main_window *){ main_config.save_config=1; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL); if (window){}; @@ -183,8 +178,7 @@ void on_activate(GtkTreeView *self, main_window *widgets){ if (self&&widgets){}; } -void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ - if (self){}; +void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; @@ -242,8 +236,7 @@ void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window } } -void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ - if (self){}; +void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; @@ -302,8 +295,7 @@ void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window * } -void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ - if (self){}; +void on_config_block_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; @@ -362,13 +354,11 @@ void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *wid } -void on_system_autostart_confirmed(GtkWidget *self,char *service_command){ - if (self){}; +void on_system_autostart_confirmed(GtkWidget *,char *service_command){ yon_launch_app_with_arguments(service_command,""); } -void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ - if (self){}; +void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; @@ -408,17 +398,17 @@ gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets GtkWidget *loaded_check=NULL; GtkWidget *active_check=NULL; GtkWidget *name_entry = NULL; - int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); - if (page == 0){ + if (model == GTK_TREE_MODEL(widgets->SystemList)){ combo = widgets->SystemFiltersCombo; loaded_check = widgets->SystemUnloadedShowCheck; active_check = widgets->SystemInactiveShowCheck; name_entry = widgets->SystemSearchEntry; - } else if (page == 1){ - combo = widgets->UserFiltersCombo; - loaded_check = widgets->UserUnloadedShowCheck; - active_check = widgets->UserInactiveShowCheck; - name_entry = widgets->UserSearchEntry; + } + if (model == GTK_TREE_MODEL(widgets->UserList)){ + combo = widgets->UserFiltersCombo; + loaded_check = widgets->UserUnloadedShowCheck; + active_check = widgets->UserInactiveShowCheck; + name_entry = widgets->UserSearchEntry; } int type_filter = 1; int active_filter = 0; @@ -458,8 +448,7 @@ gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets return 0; } -void on_filter_changed(GtkWidget *self, main_window *widgets){ - if (self){}; +void on_filter_changed(GtkWidget *, main_window *widgets){ int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); if (page == 0){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL); @@ -472,13 +461,11 @@ void on_filter_changed(GtkWidget *self, main_window *widgets){ } } -void on_system_kill_confirmed(GtkWidget *self,char *service_name){ - if (self){}; +void on_system_kill_confirmed(GtkWidget *,char *service_name){ yon_launch(service_name); } -void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets){ - if (self){}; +void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){ GtkTreeIter iter, filter_iter; GtkTreeModel *model; GtkTreeModel *filter; @@ -548,8 +535,7 @@ void on_service_restart_confirmed(GtkWidget *self,char *service_name){ yon_launch_app_with_arguments(command,""); } -void on_system_restart_clicked(GtkWidget *self, main_window *widgets){ - if (self&&widgets){}; +void on_system_restart_clicked(GtkWidget *, main_window *widgets){ GtkWidget *target_tree; switch(gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ case 0:target_tree=widgets->SystemUnitsTree; @@ -574,8 +560,7 @@ void on_system_restart_clicked(GtkWidget *self, main_window *widgets){ } } -void on_sessions_selection_changed(GtkWidget *self, main_window *widgets){ - if (self){}; +void on_sessions_selection_changed(GtkWidget *, main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ @@ -609,8 +594,7 @@ void yon_sessions_update(main_window *widgets){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); } -void on_session_activate(GtkWidget *self, main_window *widgets){ - if (self){}; +void on_session_activate(GtkWidget *, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ @@ -623,8 +607,7 @@ void on_session_activate(GtkWidget *self, main_window *widgets){ } } -void on_session_end(GtkWidget *self, main_window *widgets){ - if (self){}; +void on_session_end(GtkWidget *, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ @@ -637,8 +620,7 @@ void on_session_end(GtkWidget *self, main_window *widgets){ } } -void on_session_block(GtkWidget *self, main_window *widgets){ - if (self){}; +void on_session_block(GtkWidget *, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ @@ -674,8 +656,7 @@ log_window *yon_log_window_new(){ return window; } -void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){ - if (self){}; +void yon_system_systemd_restart(GtkWidget *, main_window *widgets){ if (widgets){ if (!getuid()&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ if (system(reload_systemd_root_command)){ @@ -695,8 +676,7 @@ void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){ } } -void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){ - if (self){}; +void yon_system_systemd_reexec(GtkWidget *, main_window *widgets){ if (widgets){ if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ if (system(reexec_systemd_root_command)){ @@ -719,7 +699,6 @@ void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){ typedef void (*data_function)(void*,void*); void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ - if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd"); @@ -731,7 +710,6 @@ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ } void on_system_update_clicked(GtkWidget *self, main_window *widgets){ - if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd"); @@ -742,8 +720,7 @@ void on_system_update_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_info_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_system_info_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); @@ -761,8 +738,7 @@ void on_system_info_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_log_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_system_log_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); @@ -788,21 +764,18 @@ gboolean on_terminal_relaunch(log_window *window){ return G_SOURCE_REMOVE; } -void on_save_clicked(GtkWidget *self, log_window *window){ - if (self){}; +void on_save_clicked(GtkWidget *, log_window *window){ vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"\30",-1); vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"Y\r",-1); gtk_widget_grab_focus(window->SystemTerminal); g_idle_add((GSourceFunc)on_terminal_relaunch,window); } -void on_update_clicked(GtkWidget *self, log_window *window){ - if (self){}; +void on_update_clicked(GtkWidget *, log_window *window){ yon_terminal_integrated_start_shell(window->SystemTerminal,window->target,NULL,NULL); } -void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_system_edit_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); @@ -828,8 +801,7 @@ void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_status_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_system_status_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); @@ -849,7 +821,6 @@ void on_system_status_clicked(GtkWidget *self, main_window *widgets){ } void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ - if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd"); @@ -862,7 +833,6 @@ void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ } void on_user_update_clicked(GtkWidget *self, main_window *widgets){ - if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd"); @@ -873,8 +843,7 @@ void on_user_update_clicked(GtkWidget *self, main_window *widgets){ } -void on_user_info_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_user_info_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); @@ -892,8 +861,7 @@ void on_user_info_clicked(GtkWidget *self, main_window *widgets){ } -void on_user_log_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_user_log_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); @@ -911,8 +879,7 @@ void on_user_log_clicked(GtkWidget *self, main_window *widgets){ } -void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_user_edit_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); @@ -938,8 +905,7 @@ void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ } -void on_user_status_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_user_status_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); @@ -958,8 +924,7 @@ void on_user_status_clicked(GtkWidget *self, main_window *widgets){ } -void on_config_log_save(GtkWidget *self, log_window *window){ - if (self){}; +void on_config_log_save(GtkWidget *, log_window *window){ GtkTextIter start, end; GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor)); gtk_text_buffer_get_end_iter(buffer,&end); @@ -974,8 +939,7 @@ void on_config_log_save(GtkWidget *self, log_window *window){ } } -void on_config_edit_clicked(GtkWidget *self, main_window *widgets){ - if (self){} +void on_config_edit_clicked(GtkWidget *, main_window *widgets){ if (widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->ConfigList); @@ -1003,8 +967,7 @@ void on_config_edit_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_services_status(GtkWidget *self, main_window *widgets){ - if (self){} +void on_system_services_status(GtkWidget *, main_window *widgets){ if (widgets){ log_window *window = yon_log_window_new(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SYSTEM_STATUS_LABEL); @@ -1017,8 +980,7 @@ void on_system_services_status(GtkWidget *self, main_window *widgets){ } -void on_user_services_status(GtkWidget *self, main_window *widgets){ - if (self){} +void on_user_services_status(GtkWidget *, main_window *widgets){ if (widgets){ log_window *window = yon_log_window_new(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),USER_STATUS_LABEL); @@ -1031,8 +993,7 @@ void on_user_services_status(GtkWidget *self, main_window *widgets){ } -void on_units_status(GtkWidget *self, main_window *widgets){ - if (self){} +void on_units_status(GtkWidget *, main_window *widgets){ if (widgets){ log_window *window = yon_log_window_new(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),INSTALLED_UNIT_LABEL); @@ -1045,8 +1006,7 @@ void on_units_status(GtkWidget *self, main_window *widgets){ } -void on_units_list_status(GtkWidget *self, main_window *widgets){ - if (self){} +void on_units_list_status(GtkWidget *, main_window *widgets){ if (widgets){ log_window *window = yon_log_window_new(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),UNITS_LIST_LABEL); @@ -1059,8 +1019,7 @@ void on_units_list_status(GtkWidget *self, main_window *widgets){ } -void on_sockets_list_status(GtkWidget *self, main_window *widgets){ - if (self){} +void on_sockets_list_status(GtkWidget *, main_window *widgets){ if (widgets){ log_window *window = yon_log_window_new(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SOCKETS_LIST_LABEL); @@ -1073,8 +1032,7 @@ void on_sockets_list_status(GtkWidget *self, main_window *widgets){ } -void on_timers_list_status(GtkWidget *self, main_window *widgets){ - if (self){} +void on_timers_list_status(GtkWidget *, main_window *widgets){ if (widgets){ log_window *window = yon_log_window_new(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),TIMERS_LIST_LABEL); @@ -1397,8 +1355,7 @@ gboolean yon_interface_update(main_window *widgets){ return G_SOURCE_REMOVE; } -void on_interface_update(GtkWidget *self, main_window *widgets){ - if (self){}; +void on_interface_update(GtkWidget *, main_window *widgets){ if (!main_config.update_thread_active){ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree))); gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree))); @@ -1407,8 +1364,7 @@ void on_interface_update(GtkWidget *self, main_window *widgets){ } } -void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){ - if (self||pspec){} +void on_column_resize(GtkTreeViewColumn *,GParamSpec *,main_window *widgets){ GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree)); int width_configuration = gtk_tree_view_column_get_width(g_list_nth_data(list,0))+gtk_tree_view_column_get_width(g_list_nth_data(list,1))+gtk_tree_view_column_get_width(g_list_nth_data(list,2)); int width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4))+gtk_tree_view_column_get_width(g_list_nth_data(list,5)); @@ -1446,8 +1402,7 @@ void config_init(){ main_config.launch_size=0; } -void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ - if (self){}; +void on_tree_selection_changed(GtkWidget *, main_window *widgets){ GtkTreeModel *model; GtkWidget *Tree; GtkTreeIter iter; @@ -1512,9 +1467,7 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ } } -gboolean on_tooltip_show(GtkWidget* self, gint x, gint y, gboolean keyboard_mode, GtkTooltip* tooltip, main_window *widgets) { - if (self || x || y || keyboard_mode) {}; - +gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* tooltip, main_window *widgets) { gtk_tooltip_set_custom(tooltip,widgets->TooltipBox); GtkWidget *tree = NULL; GtkTreeModel *model = NULL; @@ -1763,7 +1716,7 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),widgets); - // g_signal_connect(G_OBJECT(widgets->SessionRestartButton),"clicked",G_CALLBACK(on_interface_update),widgets); + g_signal_connect(G_OBJECT(widgets->SessionRestartButton),"clicked",G_CALLBACK(on_interface_update),widgets); g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_activate),widgets); g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_end),widgets); g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_block),widgets); diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 93a428e..860abb8 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -407,11 +407,6 @@ False com.ublinux.ubl-settings-services.properties-symbolic - - True - False - com.ublinux.ubl-settings-services.sync-symbolic - True False @@ -427,6 +422,11 @@ False com.ublinux.ubl-settings-services.arrow-round-symbolic + + True + False + com.ublinux.ubl-settings-services.sync-symbolic + True False @@ -1916,7 +1916,7 @@ True True Update - image19 + image22 -- 2.35.1 From 564b63d508f350c907d8a5727230d3e81b2f3bf2 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 9 Apr 2025 17:46:51 +0600 Subject: [PATCH 4/7] Changed tooltip for services --- source/ubl-settings-services.c | 45 +++++++++++++++++++++------------- source/ubl-settings-services.h | 2 +- ubl-settings-services.glade | 16 +++++++----- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 00a3d1f..3d1fc8a 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -1487,7 +1487,6 @@ gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* toolt GtkTreeIter iter; if (gtk_tree_model_get_iter(model, &iter, path)) { gchar *name, *description, *state, *name_target; - gint64 activa, deactiva; int size; gtk_tree_model_get(model, &iter, 5, &name, 6, &description, 11, &state, -1); name_target = yon_char_new(name); @@ -1503,8 +1502,6 @@ gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* toolt yon_char_remove_last_symbol(target[1], '\n'); free(yon_char_divide_search(target[2], "=", -1)); yon_char_remove_last_symbol(target[2], '\n'); - activa = g_ascii_strtoll(target[1], NULL, 10); - deactiva = g_ascii_strtoll(target[1], NULL, 10); gtk_label_set_text(GTK_LABEL(widgets->UnitLabel), target[0]); } gtk_label_set_text(GTK_LABEL(widgets->NameLabel), name); @@ -1516,21 +1513,35 @@ gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* toolt free(state); if (target){ - gchar *formatted_activa = NULL; - gchar *formatted_deactiva = NULL; - if (activa) { - GDateTime *datetime = g_date_time_new_from_unix_local(activa); - formatted_activa = g_date_time_format(datetime, "%d:%m:%Y %T"); - g_date_time_unref(datetime); - } else { - formatted_activa = g_strdup(NULL_LABEL); + gchar *formatted_activa = g_strdup(NULL_LABEL);//!yon_char_is_empty(target[1])&&strcmp(target[1],"0")?target[1]:g_strdup(NULL_LABEL); + gchar *formatted_deactiva = g_strdup(NULL_LABEL);//!yon_char_is_empty(target[2])&&strcmp(target[2],"0")?target[2]:g_strdup(NULL_LABEL); + if (strcmp(target[1],"0")){ + int activated_size; + config_str activated_parsed = yon_char_parse(target[1],&activated_size," "); + int date_size; + config_str date_parsed = yon_char_parse(activated_parsed[1],&date_size,"-"); + if (date_size>2){ + char *temp = date_parsed[0]; + date_parsed[0]=date_parsed[2]; + date_parsed[2]=temp; + formatted_deactiva = yon_char_unite(date_parsed?yon_char_parsed_to_string(date_parsed,date_size,"."):""," ",activated_parsed[2],NULL); + if (date_size) yon_char_parsed_free(date_parsed,date_size); + } + if (activated_size) yon_char_parsed_free(activated_parsed,activated_size); } - if (deactiva) { - GDateTime *datetime = g_date_time_new_from_unix_local(deactiva); - formatted_deactiva = g_date_time_format(datetime, "%d:%m:%Y %T"); - g_date_time_unref(datetime); - } else { - formatted_deactiva = g_strdup(NULL_LABEL); + if (strcmp(target[2],"0")){ + int deactivated_size; + config_str deactivated_parsed = yon_char_parse(target[2],&deactivated_size," "); + int date_size; + config_str date_parsed = yon_char_parse(deactivated_parsed[1],&date_size,"-"); + if (date_size>=2){ + char *temp = date_parsed[0]; + date_parsed[0]=date_parsed[2]; + date_parsed[2]=temp; + formatted_deactiva = yon_char_unite(date_parsed?yon_char_parsed_to_string(date_parsed,date_size,"."):""," ",deactivated_parsed[2],NULL); + if (date_size) yon_char_parsed_free(date_parsed,date_size); + } + if (deactivated_size) yon_char_parsed_free(deactivated_parsed,deactivated_size); } gtk_label_set_text(GTK_LABEL(widgets->ActivateLabel), formatted_activa); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 1b5c73d..f5ab444 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -77,7 +77,7 @@ #define list_of_sockets_command "systemctl list-sockets --all --no-pager| sed -e 's/ */;/g'" #define list_of_timers_command "systemctl list-timers --all --no-pager| sed -e 's/ */;/g'" #define list_of_session_command "while IFS=\" \" read -r GET_SESSION GET_UID GET_USER GET_SEAT GET_TTY; do echo -e \"${GET_SESSION} $(loginctl session-status ${GET_SESSION} --no-page | sed -Enr \"s/^\\s*State: (.*)$/\1/p\") ${GET_UID} ${GET_USER} ${GET_SEAT} ${GET_TTY}\"; done < <(loginctl list-sessions --no-legend)" -#define get_activate_deactivate_times(target) yon_char_append("systemctl show -p ActiveEnterTimestampMonotonic -p InactiveEnterTimestampMonotonic -p Names ",target) +#define get_activate_deactivate_times(target) yon_char_append("systemctl show --timestamp=utc -p Names -p ActiveEnterTimestamp -p InactiveEnterTimestampMonotonic ",target) #define config_get_command(target) yon_char_append("cat ",target) diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 860abb8..3a2b971 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -15,15 +15,19 @@ - + - + - + - + - + + + + + @@ -2081,7 +2085,7 @@ 20 - Seat ID + Seat ID | TTY True 4 -- 2.35.1 From 28f01c8772fb04242b210be5d692a3da73a90a95 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 10 Apr 2025 16:43:53 +0600 Subject: [PATCH 5/7] Test fix for service filtering --- source/ubl-settings-services.c | 429 +++++++++++++++++++-------------- source/ubl-settings-services.h | 72 +++++- 2 files changed, 320 insertions(+), 181 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 3d1fc8a..cfe313f 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -71,7 +71,7 @@ void on_config_local_load(GtkWidget *,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); main_config.load_mode=1; } } @@ -81,7 +81,7 @@ void on_config_global_load(GtkWidget *,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_GLOBAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); main_config.load_mode=0; } @@ -93,7 +93,7 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=3; - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); } void on_service_constant_update(){ @@ -124,20 +124,6 @@ void on_config_custom_save(GtkWidget *, main_window *){ } // functions - -enum YON_UNIT_TYPE { - YON_UNIT_SERVICE=0, - YON_UNIT_SWAP, - YON_UNIT_SOCKET, - YON_UNIT_DEVICE, - YON_UNIT_TARGET, - YON_UNIT_MOUNT, - YON_UNIT_TIMER, - YON_UNIT_PATH, - YON_UNIT_SLICE, - YON_UNIT_SCOPE, - YON_UNIT_UNRECOGNISED -}; enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name); enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name){ @@ -391,9 +377,9 @@ void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid } gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ - gboolean autostart,autostop,masked,type,loaded,inactive; + gboolean autostart,autostop,masked,type,loaded,active; char *name; - gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&inactive,-1); + gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&active,-1); GtkWidget *combo=NULL; GtkWidget *loaded_check=NULL; GtkWidget *active_check=NULL; @@ -442,7 +428,7 @@ gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets char *name_text = (char*)gtk_entry_get_text(GTK_ENTRY(name_entry)); if (name&&!yon_char_is_empty(name_text)&&!strstr(name,name_text)) name_filter=0; - if (type_filter&&(active_filter||inactive)&&(loaded_filter||loaded)&&name_filter){ + if (type_filter&&(active_filter||active)&&(loaded_filter||loaded)&&name_filter){ return 1; } return 0; @@ -1045,8 +1031,8 @@ void on_timers_list_status(GtkWidget *, main_window *widgets){ } -gboolean yon_interface_update(main_window *widgets){ - if (widgets){ +gboolean yon_interface_list_models_disconnect(main_window *widgets){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),NULL); @@ -1055,7 +1041,191 @@ gboolean yon_interface_update(main_window *widgets){ gtk_list_store_clear(widgets->UserList); gtk_list_store_clear(widgets->ConfigList); gtk_list_store_clear(widgets->TimersList); + + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserFiltersCombo),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserSearchEntry),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserInactiveShowCheck),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserUnloadedShowCheck),G_CALLBACK(on_filter_changed),widgets); + return G_SOURCE_REMOVE; +} + +gboolean yon_interface_list_models_connect(main_window *widgets){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); + + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserFiltersCombo),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserSearchEntry),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserInactiveShowCheck),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserUnloadedShowCheck),G_CALLBACK(on_filter_changed),widgets); + return G_SOURCE_REMOVE; +} + +gboolean yon_system_set(struct system_services_data *data){ + GtkTreeIter iter; + gtk_list_store_append(data->widgets->SystemList,&iter); + gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1); + return G_SOURCE_REMOVE; +} + +gboolean yon_user_set(struct system_user_data *data){ + GtkTreeIter iter; + gtk_list_store_append(data->widgets->UserList,&iter); + gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1); + return G_SOURCE_REMOVE; +} + +gboolean yon_system_config_set(struct system_config_data *data){ + GtkTreeIter iter; + gtk_list_store_append(data->widgets->ConfigList,&iter); + gtk_list_store_set(data->widgets->ConfigList,&iter,0,data->Name,1,data->Date,2,data->Descr,-1); + return G_SOURCE_REMOVE; +} + +gboolean yon_timers_set(struct system_timers_data *data){ + GtkTreeIter iter; + gtk_list_store_append(data->widgets->TimersList,&iter); + gtk_list_store_set(data->widgets->TimersList,&iter,0,data->unit,1,data->next,2,data->left,3,data->last,4,data->passed,5,data->activates,-1); + return G_SOURCE_REMOVE; +} + +gboolean yon_interface_update_finish(main_window *widgets){ + { + int parsed_size; + char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); + config_str parsed = yon_char_parse(enabled,&parsed_size,","); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + + int valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->SystemList,&iter,0,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iSystemList,&iter,0,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); + char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); + parsed = yon_char_parse(disabled,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->SystemList,&iter,1,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iSystemList,&iter,1,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + + while(gtk_events_pending()) gtk_main_iteration(); + char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); + parsed = yon_char_parse(masked,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->SystemList,&iter,2,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iSystemList,&iter,2,1,-1); + } + } + } + while(gtk_events_pending()) gtk_main_iteration(); + { + + int parsed_size; + char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); + config_str parsed = yon_char_parse(enabled,&parsed_size,","); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + + int valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,0,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,0,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + + while(gtk_events_pending()) gtk_main_iteration(); + char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); + parsed = yon_char_parse(disabled,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,1,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,1,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + + while(gtk_events_pending()) gtk_main_iteration(); + char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); + parsed = yon_char_parse(masked,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,2,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,2,1,-1); + } + } + } + main_config.update_thread_active=0; + return G_SOURCE_REMOVE; +} + +void* yon_interface_update(main_window *widgets){ + if (widgets){ + g_idle_add((GSourceFunc)yon_interface_list_models_disconnect,widgets); int system_size; config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; @@ -1071,8 +1241,7 @@ gboolean yon_interface_update(main_window *widgets){ yon_char_remove_last_symbol(launched[i],'\n'); } for (int i=0; iSystemList,&iter); - gtk_list_store_set(widgets->SystemList,&iter,3,yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); + struct system_services_data *data = malloc(sizeof(struct system_services_data)); + { + data->widgets=widgets; + data->SystemAutostart=loaded; + data->SystemLaunched=active; + data->Name=parsed[0]; + data->Descr=parsed[4]; + data->Type = type; + data->Loaded=strcmp(parsed[1],"loaded")?0:1; + data->Active=strcmp(parsed[2],"active")?0:1; + data->State=_(parsed[3]); + } + g_idle_add((GSourceFunc)yon_system_set,data); } } - while(gtk_events_pending()) gtk_main_iteration(); + for (int i=0; iUserList,&iter); - gtk_list_store_set(widgets->UserList,&iter,3,yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); + int loaded = !system(check_enabled_command(parsed[0])); + int active = !system(service_check_active_command(parsed[0])); + enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); + struct system_user_data *data = malloc(sizeof(struct system_user_data)); + { + data->widgets=widgets; + data->SystemAutostart=yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1; + data->SystemLaunched=strcmp(parsed[2],"active")?0:1; + data->Name=parsed[0]; + data->Descr=parsed[4]; + data->Type = type; + data->Loaded=loaded; + data->Active=active; + data->State=_(parsed[3]); + } + g_idle_add((GSourceFunc)yon_user_set,data); } } - while(gtk_events_pending()) gtk_main_iteration(); + int descr_size; config_str config_descr = yon_resource_open_file(systemd_config_path,&descr_size); for (int i=0; i2){ - GtkTreeIter iter; char *description = ""; { for (int k=0;kConfigList,&iter); - gtk_list_store_set(widgets->ConfigList,&iter,0,parsed[2],1,parsed[1],2,description,-1); + struct system_config_data *data = malloc(sizeof(struct system_config_data)); + { + data->widgets=widgets; + data->Name=parsed[2]; + data->Descr=parsed[1]; + data->Date = description; + } + g_idle_add((GSourceFunc)yon_system_config_set,data); } } yon_sessions_update(widgets); - while(gtk_events_pending()) gtk_main_iteration(); + for (size_t i=0;iTimersList,&iter); GDateTime *datetime=NULL; if (!yon_char_is_empty(next)&&atol(next)!=0){ datetime = g_date_time_new_from_unix_local(atol(next)/1000000); @@ -1214,145 +1407,23 @@ gboolean yon_interface_update(main_window *widgets){ } else { passed=""; } - gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); - } - } - while(gtk_events_pending()) gtk_main_iteration(); - { - int parsed_size; - char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); - config_str parsed = yon_char_parse(enabled,&parsed_size,","); - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); - - int valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - gtk_list_store_set(widgets->SystemList,&iter,0,0,-1); - } - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - char *name; - gtk_tree_model_get(model,&iter,5,&name,-1); - for (int i=0;iwidgets=widgets; + data->unit=unit; + data->next=next; + data->left=left; + data->last=last; + data->passed=passed; + data->activates=activates; } - if (!strcmp(name,parsed[i])) - gtk_list_store_set(widgets->SystemList,&iter,0,1,-1); - } - } - yon_char_parsed_free(parsed,parsed_size); - - while(gtk_events_pending()) gtk_main_iteration(); - char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); - parsed = yon_char_parse(disabled,&parsed_size,","); - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - gtk_list_store_set(widgets->SystemList,&iter,1,0,-1); - } - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - char *name; - gtk_tree_model_get(model,&iter,5,&name,-1); - for (int i=0;iSystemList,&iter,1,1,-1); - } - } - yon_char_parsed_free(parsed,parsed_size); - - while(gtk_events_pending()) gtk_main_iteration(); - char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); - parsed = yon_char_parse(masked,&parsed_size,","); - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - gtk_list_store_set(widgets->SystemList,&iter,2,0,-1); - } - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - char *name; - gtk_tree_model_get(model,&iter,5,&name,-1); - for (int i=0;iSystemList,&iter,2,1,-1); - } + g_idle_add((GSourceFunc)yon_timers_set,data); } } - while(gtk_events_pending()) gtk_main_iteration(); - { - - int parsed_size; - char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); - config_str parsed = yon_char_parse(enabled,&parsed_size,","); - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); - - int valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - gtk_list_store_set(widgets->UserList,&iter,0,0,-1); - } - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - char *name; - gtk_tree_model_get(model,&iter,5,&name,-1); - for (int i=0;iUserList,&iter,0,1,-1); - } - } - yon_char_parsed_free(parsed,parsed_size); - while(gtk_events_pending()) gtk_main_iteration(); - char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); - parsed = yon_char_parse(disabled,&parsed_size,","); - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - gtk_list_store_set(widgets->UserList,&iter,1,0,-1); - } - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - char *name; - gtk_tree_model_get(model,&iter,5,&name,-1); - for (int i=0;iUserList,&iter,1,1,-1); - } - } - yon_char_parsed_free(parsed,parsed_size); - - while(gtk_events_pending()) gtk_main_iteration(); - char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); - parsed = yon_char_parse(masked,&parsed_size,","); - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - gtk_list_store_set(widgets->UserList,&iter,2,0,-1); - } - valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) - { - char *name; - gtk_tree_model_get(model,&iter,5,&name,-1); - for (int i=0;iUserList,&iter,2,1,-1); - } - } - } - while(gtk_events_pending()) gtk_main_iteration(); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); - main_config.update_thread_active=0; - return G_SOURCE_REMOVE; + g_idle_add((GSourceFunc)yon_interface_update_finish,widgets); + g_idle_add((GSourceFunc)yon_interface_list_models_connect,widgets); + return NULL; } void on_interface_update(GtkWidget *, main_window *widgets){ @@ -1360,7 +1431,7 @@ void on_interface_update(GtkWidget *, main_window *widgets){ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree))); gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree))); main_config.update_thread_active=1; - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); } } @@ -1825,7 +1896,7 @@ void yon_main_window_complete(main_window *widgets){ yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); if (!main_config.update_thread_active){ main_config.update_thread_active=1; - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); } yon_save_window_set_postsave_function(on_save_done,widgets); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index f5ab444..735e49b 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -46,6 +46,7 @@ #define service_disable_command(target) yon_char_append("systemctl disable ",target) #define service_kill_command(target) yon_char_append("systemctl kill ",target) #define service_check_active_command(target) yon_char_append("systemctl is-active ",target) +#define check_enabled_command(target) yon_char_append("systemctl is-enabled ",target) #define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target) #define get_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) @@ -318,7 +319,7 @@ void on_sockets_list_status(GtkWidget *self, main_window *widgets); void on_timers_list_status(GtkWidget *self, main_window *widgets); -gboolean yon_interface_update(main_window *widgets); +void* yon_interface_update(main_window *widgets); void on_interface_update(GtkWidget *self, main_window *widgets); @@ -446,4 +447,71 @@ gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *da void on_root_get_root(char *argline); void on_root_access(GtkWidget *self, main_window *widgets); -void on_save_done(main_window *widgets, config_str output, int size); \ No newline at end of file +void on_save_done(main_window *widgets, config_str output, int size); + +enum YON_UNIT_TYPE { + YON_UNIT_SERVICE=0, + YON_UNIT_SWAP, + YON_UNIT_SOCKET, + YON_UNIT_DEVICE, + YON_UNIT_TARGET, + YON_UNIT_MOUNT, + YON_UNIT_TIMER, + YON_UNIT_PATH, + YON_UNIT_SLICE, + YON_UNIT_SCOPE, + YON_UNIT_UNRECOGNISED +}; + +struct system_services_data{ + main_window *widgets; + int SystemAutostart; + int SystemLaunched; + char *Name; + char *Descr; + enum YON_UNIT_TYPE Type; + int Loaded; + int Active; + char *State; + +}; + +struct system_user_data{ + main_window *widgets; + int SystemAutostart; + int SystemLaunched; + char *Name; + char *Descr; + enum YON_UNIT_TYPE Type; + int Loaded; + int Active; + char *State; + +}; + +struct system_config_data{ + main_window *widgets; + char *Name; + char *Descr; + char *Date; + +}; + +struct system_timers_data{ + main_window *widgets; + const char *unit; + const char *next; + const char *left; + const char *last; + const char *passed; + const char *activates; + +}; + +gboolean yon_interface_update_finish(main_window *widgets); +gboolean yon_timers_set(struct system_timers_data *data); +gboolean yon_system_config_set(struct system_config_data *data); +gboolean yon_user_set(struct system_user_data *data); +gboolean yon_system_set(struct system_services_data *data); +gboolean yon_interface_list_models_connect(main_window *widgets); +gboolean yon_interface_list_models_disconnect(main_window *widgets); \ No newline at end of file -- 2.35.1 From 996cce94a235cda6c0fd933c8c4b7a27cdf8f87d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 11 Apr 2025 10:16:48 +0600 Subject: [PATCH 6/7] Fixed user services filter --- source/ubl-settings-services.c | 31 ++++++++------- source/ubl-settings-services.h | 2 + ubl-settings-services.pot | 64 ++++++++++++++++++++++++++++++ ubl-settings-services_ru.po | 71 ++++++++++++++++++++++++++++++++++ 4 files changed, 153 insertions(+), 15 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index cfe313f..da040f6 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -1257,8 +1257,8 @@ void* yon_interface_update(main_window *widgets){ data->widgets=widgets; data->SystemAutostart=loaded; data->SystemLaunched=active; - data->Name=parsed[0]; - data->Descr=parsed[4]; + data->Name=yon_char_new(parsed[0]); + data->Descr=yon_char_new(parsed[4]); data->Type = type; data->Loaded=strcmp(parsed[1],"loaded")?0:1; data->Active=strcmp(parsed[2],"active")?0:1; @@ -1266,6 +1266,7 @@ void* yon_interface_update(main_window *widgets){ } g_idle_add((GSourceFunc)yon_system_set,data); } + yon_char_parsed_free(parsed,size); } @@ -1274,24 +1275,24 @@ void* yon_interface_update(main_window *widgets){ int size; config_str parsed = yon_char_parse(user_services[i],&size,";"); if (parsed){ - int loaded = !system(check_enabled_command(parsed[0])); - int active = !system(service_check_active_command(parsed[0])); + int loaded = !system(user_check_enabled_command(parsed[0])); + int active = !system(user_check_active_command(parsed[0])); enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); struct system_user_data *data = malloc(sizeof(struct system_user_data)); { data->widgets=widgets; - data->SystemAutostart=yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1; - data->SystemLaunched=strcmp(parsed[2],"active")?0:1; - data->Name=parsed[0]; - data->Descr=parsed[4]; + data->SystemAutostart=loaded; + data->SystemLaunched=active; + data->Name=yon_char_new(parsed[0]); + data->Descr=yon_char_new(parsed[4]); data->Type = type; - data->Loaded=loaded; - data->Active=active; - data->State=_(parsed[3]); + data->Loaded=strcmp(parsed[1],"loaded")?0:1; + data->Active=strcmp(parsed[2],"active")?0:1; + data->State=yon_char_new(_(parsed[3])); } g_idle_add((GSourceFunc)yon_user_set,data); } - + yon_char_parsed_free(parsed,size); } int descr_size; @@ -1327,9 +1328,9 @@ void* yon_interface_update(main_window *widgets){ struct system_config_data *data = malloc(sizeof(struct system_config_data)); { data->widgets=widgets; - data->Name=parsed[2]; - data->Descr=parsed[1]; - data->Date = description; + data->Name=yon_char_new(parsed[2]); + data->Descr=yon_char_new(parsed[1]); + data->Date = _(description); } g_idle_add((GSourceFunc)yon_system_config_set,data); } diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 735e49b..1690b8d 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -47,6 +47,8 @@ #define service_kill_command(target) yon_char_append("systemctl kill ",target) #define service_check_active_command(target) yon_char_append("systemctl is-active ",target) #define check_enabled_command(target) yon_char_append("systemctl is-enabled ",target) +#define user_check_active_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ is-active ",target,NULL) +#define user_check_enabled_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ is-enabled ",target,NULL) #define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target) #define get_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 7039a8e..8b3735c 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -517,3 +517,67 @@ msgstr "" #: source/ubl-strings.h:159 msgid "Status:" msgstr "" + +#: source/ubl-strings.h:159 +msgid "UBLinux OS configuration files" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "System Debug Dump Configuration" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuring various systemd log service options" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuring various systemd-journal-upload.service parameters" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuring Global Network Settings" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuration file for systemd-pstore, a tool for archiving the contents of the pstore persistent storage file system" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Workstation hibernation options" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Systemd configuration" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "User Configuration" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Settings management configuration for user account home directories created and managed by systemd-homed.service" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuration files for various systemd-journal-remote.service parameters" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuration files for various systemd login manager options" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuration files for various out-of-memory (OOM) killer parameters in systemd user space" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Local DNS and LLMNR name resolution management configuration files" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "System swap file management configuration files" +msgstr "" + +#: source/ubl-strings.h:159 +msgid "Configuration file controlling NTP network time synchronization" +msgstr "" \ No newline at end of file diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 0907abe..c35278a 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -520,3 +520,74 @@ msgstr "Деактивирован:" #: source/ubl-strings.h:159 msgid "Status:" msgstr "Статус:" + +#: source/ubl-strings.h:159 +msgid "UBLinux OS configuration files" +msgstr "Файлы конфигурации ОС UBLinux" + +#: source/ubl-strings.h:159 +msgid "System Debug Dump Configuration" +msgstr "Конфигурация системного отладочного дампа" + +#: source/ubl-strings.h:159 +msgid "Configuring various systemd log service options" +msgstr "Настройка различных параметров службы журнала systemd" + +#: source/ubl-strings.h:159 +msgid "Configuring various systemd-journal-upload.service parameters" +msgstr "Настройка различных параметров systemd-journal-upload.service" + +#: source/ubl-strings.h:159 +msgid "Configuring Global Network Settings" +msgstr "Настройка глобальных сетевых параметров" + +#: source/ubl-strings.h:159 +msgid "" +"Configuration file for systemd-pstore, a tool for archiving the contents of " +"the pstore persistent storage file system" +msgstr "Файл конфигурации для systemd-pstore, инструмента для архивирования содержимого постоянной файловой системы хранения pstore" + +#: source/ubl-strings.h:159 +msgid "Workstation hibernation options" +msgstr "Параметры спящего режима рабочей станции" + +#: source/ubl-strings.h:159 +msgid "Systemd configuration" +msgstr "Системная конфигурация" + +#: source/ubl-strings.h:159 +msgid "User Configuration" +msgstr "Конфигурация пользователя" + +#: source/ubl-strings.h:159 +msgid "" +"Settings management configuration for user account home directories created " +"and managed by systemd-homed.service" +msgstr "Конфигурация управления настройками для домашних каталогов учетных записей пользователей, созданная и управляемая systemd-homed.service" + +#: source/ubl-strings.h:159 +msgid "" +"Configuration files for various systemd-journal-remote.service parameters" +msgstr "Файлы конфигурации для различных параметров systemd-journal-remote.service" + +#: source/ubl-strings.h:159 +msgid "Configuration files for various systemd login manager options" +msgstr "Файлы конфигурации для различных опций менеджера входа в систему systemd" + +#: source/ubl-strings.h:159 +msgid "" +"Configuration files for various out-of-memory (OOM) killer parameters in " +"systemd user space" +msgstr "Файлы конфигурации для различных параметров исключения нехватки памяти (OOM) в пользовательском пространстве systemd" + +#: source/ubl-strings.h:159 +msgid "Local DNS and LLMNR name resolution management configuration files" +msgstr "Файлы конфигурации управления разрешением имен локального DNS и LLMNR" + +#: source/ubl-strings.h:159 +msgid "System swap file management configuration files" +msgstr "Файлы конфигурации управления файлами подкачки системы" + +#: source/ubl-strings.h:159 +msgid "Configuration file controlling NTP network time synchronization" +msgstr "Файл конфигурации, управляющий синхронизацией времени сети NTP" -- 2.35.1 From 948213947c094825ca91c174c22ef754c82e5cef Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 11 Apr 2025 18:35:26 +0600 Subject: [PATCH 7/7] WIP services optimisation --- source/CMakeLists.txt | 11 ++- source/ubl-settings-services-systemd.c | 123 +++++++++++++++++++++++++ source/ubl-settings-services-systemd.h | 8 ++ source/ubl-settings-services.c | 53 +++++------ source/ubl-settings-services.h | 45 ++++++--- 5 files changed, 192 insertions(+), 48 deletions(-) create mode 100644 source/ubl-settings-services-systemd.c create mode 100644 source/ubl-settings-services-systemd.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index f7a7eab..154f798 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -70,12 +70,18 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -Wformat -Werror=format-security \ -fstack-clash-protection -fcf-protection") -string(FIND "${CMAKE_CXX_FLAGS}" "-D_FORTIFY_SOURCE" FORTIFY_FOUND) + string(FIND "${CMAKE_CXX_FLAGS}" "-D_FORTIFY_SOURCE" FORTIFY_FOUND) + + if(FORTIFY_FOUND EQUAL -1) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wp,-D_FORTIFY_SOURCE=2") + endif() set(SOURCE_FILES ubl-settings-services.c ubl-settings-services.h + ubl-settings-services-systemd.c + ubl-settings-services-systemd.h ubl-strings.h ) @@ -88,7 +94,8 @@ set(LIBRARIES pthread ublsettings ublsettings-gtk3 - ublsettingsui-gtk3) + ublsettingsui-gtk3 + systemd) add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) diff --git a/source/ubl-settings-services-systemd.c b/source/ubl-settings-services-systemd.c new file mode 100644 index 0000000..86e8b5e --- /dev/null +++ b/source/ubl-settings-services-systemd.c @@ -0,0 +1,123 @@ +#include "ubl-settings-services-systemd.h" + + +void at_exit_cleanup(); +sd_bus *global_bus=NULL; +void at_exit_cleanup(){ + if (global_bus) { + sd_bus_unref(global_bus); + } +} + +dictionary *yon_systemd_get_list() { + sd_bus *bus = NULL; + sd_bus_message *reply = NULL; + int r; + + r = sd_bus_open_system(&bus); + if (r < 0) return NULL; + + dictionary *dict = NULL; + + r = sd_bus_call_method(bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "ListUnits", + NULL, + &reply, + ""); + if (r < 0) {if (bus) sd_bus_unref(bus);return NULL;} + + sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ssssssouso)"); + while (sd_bus_message_enter_container(reply, SD_BUS_TYPE_STRUCT, "ssssssouso") > 0) { + const char *name, *description; + const char *load_state, *active_state, *sub_state; + const char *following, *unit_path; + unsigned int job_id; + const char *job_type, *job_path; + + sd_bus_message_read(reply, "ssssssouso", + &name, &description, + &load_state, &active_state, + &sub_state, &following, + &unit_path, &job_id, + &job_type, &job_path); + + systemd_struct *u = calloc(1, sizeof(systemd_struct)); + u->name = yon_char_new(name); + u->description = yon_char_new(description); + u->load = !strcmp(load_state,"loaded"); + u->active = !strcmp(active_state, "active"); + u->state = yon_char_new(sub_state); + u->enable = 0; + + yon_dictionary_add_or_create_if_exists_with_data(dict, (char*)name, u); + + sd_bus_message_exit_container(reply); + } + sd_bus_message_unref(reply); + reply = NULL; + + r = sd_bus_call_method(bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "ListUnitFiles", + NULL, + &reply, + ""); + if (r < 0) {if (bus) sd_bus_unref(bus); return NULL;} + + sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ss)"); + while (sd_bus_message_enter_container(reply, SD_BUS_TYPE_STRUCT, "ss") > 0) { + const char *name, *file_state; + sd_bus_message_read(reply, "ss", &name, &file_state); + + dictionary *found = NULL; + for (dictionary *it = dict; it; it = it->next) { + if (strcmp(it->key, name) == 0) { + found = it; + break; + } + } + if (!found) { + systemd_struct *u = calloc(1, sizeof(systemd_struct)); + u->name = yon_char_new(name); + u->description = yon_char_new(""); + u->load = 0; + u->active = 0; + u->state = yon_char_new(""); + u->enable = 0; + + yon_dictionary_add_or_create_if_exists_with_data(dict, (char*)name, u); + } + sd_bus_message_exit_container(reply); + } + sd_bus_message_unref(reply); + reply = NULL; + + dictionary *it; + for_dictionaries(it, dict) { + systemd_struct *u = (systemd_struct*)it->data; + r = sd_bus_call_method(bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "GetUnitFileState", + NULL, + &reply, + "s", u->name); + if (r >= 0) { + const char *status; + sd_bus_message_read(reply, "s", &status); + u->enable = (strcmp(status, "enabled") == 0); + } + sd_bus_message_unref(reply); + reply = NULL; + } + + if (reply) sd_bus_message_unref(reply); + if (bus) sd_bus_unref(bus); + return dict; +} \ No newline at end of file diff --git a/source/ubl-settings-services-systemd.h b/source/ubl-settings-services-systemd.h new file mode 100644 index 0000000..b2c7603 --- /dev/null +++ b/source/ubl-settings-services-systemd.h @@ -0,0 +1,8 @@ +#ifndef UBL_SETTINGS_SERVICES_SYSTEMD_H +#define UBL_SETTINGS_SERVICES_SYSTEMD_H + +#include "ubl-settings-services.h" +#include + +dictionary *yon_systemd_get_list(); +#endif \ No newline at end of file diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index da040f6..06810d7 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -1224,10 +1224,12 @@ gboolean yon_interface_update_finish(main_window *widgets){ } void* yon_interface_update(main_window *widgets){ + dictionary *dict = yon_systemd_get_list(); + if (dict){} if (widgets){ g_idle_add((GSourceFunc)yon_interface_list_models_disconnect,widgets); - int system_size; - config_str system_services = yon_config_load(load_services_command,&system_size); + // int system_size; + // config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; config_str user_services = yon_config_load(load_user_services_command,&user_size); int config_size; @@ -1240,34 +1242,23 @@ void* yon_interface_update(main_window *widgets){ for (int i=0;idata)->name); struct system_services_data *data = malloc(sizeof(struct system_services_data)); { data->widgets=widgets; - data->SystemAutostart=loaded; - data->SystemLaunched=active; - data->Name=yon_char_new(parsed[0]); - data->Descr=yon_char_new(parsed[4]); + data->SystemAutostart=((systemd_struct*)dact->data)->enable; + data->SystemLaunched=((systemd_struct*)dact->data)->active; + data->Name=((systemd_struct*)dact->data)->name; + data->Descr=((systemd_struct*)dact->data)->description; data->Type = type; - data->Loaded=strcmp(parsed[1],"loaded")?0:1; - data->Active=strcmp(parsed[2],"active")?0:1; - data->State=_(parsed[3]); + data->Loaded=((systemd_struct*)dact->data)->load; + data->Active=((systemd_struct*)dact->data)->active; + data->State=((systemd_struct*)dact->data)->state; } g_idle_add((GSourceFunc)yon_system_set,data); - } - yon_char_parsed_free(parsed,size); - } for (int i=0; iwidgets=widgets; - data->SystemAutostart=loaded; - data->SystemLaunched=active; + data->SystemAutostart=0;//loaded; + data->SystemLaunched=0;//active; data->Name=yon_char_new(parsed[0]); data->Descr=yon_char_new(parsed[4]); data->Type = type; @@ -1605,7 +1596,7 @@ gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* toolt int deactivated_size; config_str deactivated_parsed = yon_char_parse(target[2],&deactivated_size," "); int date_size; - config_str date_parsed = yon_char_parse(deactivated_parsed[1],&date_size,"-"); + config_str date_parsed = yon_char_parse(deactivated_parsed[0],&date_size,"-"); if (date_size>=2){ char *temp = date_parsed[0]; date_parsed[0]=date_parsed[2]; @@ -1903,8 +1894,8 @@ void yon_main_window_complete(main_window *widgets){ yon_save_window_set_postsave_function(on_save_done,widgets); } -int main(int argc, char *argv[]){ - local=setlocale(LC_ALL, ""); +int main(int argc, char *argv[]){ + setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 1690b8d..20638f6 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -1,3 +1,5 @@ +#ifndef UBL_SETTINGS_SERVICES_H +#define UBL_SETTINGS_SERVICES_H #include #include #include @@ -12,6 +14,7 @@ #include #include #include +#include "ubl-settings-services-systemd.h" #include #include #ifdef WEBKIT_FOUND @@ -127,9 +130,33 @@ #define SERVICES_MASK_PARAMETER "SERVICES_MASK" typedef char* string; + +__attribute__((unused)) static \ string version_application; -char *local; +enum YON_UNIT_TYPE { + YON_UNIT_SERVICE=0, + YON_UNIT_SWAP, + YON_UNIT_SOCKET, + YON_UNIT_DEVICE, + YON_UNIT_TARGET, + YON_UNIT_MOUNT, + YON_UNIT_TIMER, + YON_UNIT_PATH, + YON_UNIT_SLICE, + YON_UNIT_SCOPE, + YON_UNIT_UNRECOGNISED +}; + +typedef struct systemd_struct{ + char *name; + char *description; + int enable; + int active; + char *state; + int load; +}systemd_struct; + typedef struct { template_config_fields @@ -451,19 +478,6 @@ void on_root_access(GtkWidget *self, main_window *widgets); void on_save_done(main_window *widgets, config_str output, int size); -enum YON_UNIT_TYPE { - YON_UNIT_SERVICE=0, - YON_UNIT_SWAP, - YON_UNIT_SOCKET, - YON_UNIT_DEVICE, - YON_UNIT_TARGET, - YON_UNIT_MOUNT, - YON_UNIT_TIMER, - YON_UNIT_PATH, - YON_UNIT_SLICE, - YON_UNIT_SCOPE, - YON_UNIT_UNRECOGNISED -}; struct system_services_data{ main_window *widgets; @@ -516,4 +530,5 @@ gboolean yon_system_config_set(struct system_config_data *data); gboolean yon_user_set(struct system_user_data *data); gboolean yon_system_set(struct system_services_data *data); gboolean yon_interface_list_models_connect(main_window *widgets); -gboolean yon_interface_list_models_disconnect(main_window *widgets); \ No newline at end of file +gboolean yon_interface_list_models_disconnect(main_window *widgets); +#endif \ No newline at end of file -- 2.35.1