Merge pull request 'master' (#93) from YanTheKaller/ubl-settings-services:master into master

Reviewed-on: #93
pull/128/head^2 v2.15
Dmitry Razumov 7 months ago
commit 0fc4f515b1

@ -82,15 +82,19 @@ dictionary *yon_systemd_get_list() {
}
}
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);
char *temp_name = yon_char_new(name);
if (!yon_dictionary_get(&dict,temp_name)){
systemd_struct *u = calloc(1, sizeof(systemd_struct));
free(yon_char_divide(temp_name,yon_char_find_last(temp_name,'/')));
u->name = temp_name;
u->description = yon_char_new("");
u->load = 0;
u->active = 0;
u->state = _("disabled");
u->enable = 0;
yon_dictionary_add_or_create_if_exists_with_data(dict, (char*)temp_name, u);
}
}
sd_bus_message_exit_container(reply);
}

@ -31,9 +31,9 @@ void on_save_done(main_window *, config_str output, int size){
void yon_load_proceed(YON_CONFIG_TYPE type){
if (type!=YON_CONFIG_CUSTOM){
yon_config_clean();
if (!yon_char_is_empty(config_get_default_command))
yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
}
if (!yon_char_is_empty(config_get_default_command))
yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
if (type==YON_CONFIG_GLOBAL){
yon_config_load_config(type,config_get_global_command,NULL);
} else if (type==YON_CONFIG_LOCAL){
@ -57,6 +57,8 @@ void yon_load_proceed(YON_CONFIG_TYPE type){
path=file;
}
yon_config_clean();
if (!yon_char_is_empty(config_get_default_command))
yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
char *command = yon_config_get_custom_command(path);
yon_config_load_config(type,command,NULL);
gtk_widget_destroy(dialog);
@ -72,7 +74,7 @@ void on_config_local_load(GtkWidget *,main_window *widgets){
yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
main_config.load_mode=1;
main_config.load_mode=YON_CONFIG_LOCAL;
}
}
@ -82,7 +84,7 @@ void on_config_global_load(GtkWidget *,main_window *widgets){
yon_load_proceed(YON_CONFIG_GLOBAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
main_config.load_mode=0;
main_config.load_mode=YON_CONFIG_GLOBAL;
}
}
@ -92,7 +94,7 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
main_config.load_mode=3;
main_config.load_mode=YON_CONFIG_CUSTOM;
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
}
@ -184,14 +186,17 @@ void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid
{
gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor);
gboolean status = 0;
gboolean status = 0,autoblock = 0;
char *name;
gtk_tree_model_get(model,&iter,0,&status,5,&name,-1);
gtk_tree_model_get(model,&iter,0,&status,1,&autoblock,5,&name,-1);
char *unit = yon_char_new(name);
char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.'));
free(unit);
unit=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!status,-1);
if (!status&&autoblock){
on_config_autostop_clicked(NULL,path,widgets);
}
char *config_sting = yon_config_get_by_key("SERVICES_ENABLE");
int size;
config_str parsed = yon_char_parse(config_sting,&size,",");
@ -246,14 +251,17 @@ void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widg
{
gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor);
gboolean status = 0;
gboolean status = 0,autostart=0;
char *name;
gtk_tree_model_get(model,&iter,1,&status,5,&name,-1);
gtk_tree_model_get(model,&iter,0,&autostart,1,&status,5,&name,-1);
char *unit = yon_char_new(name);
char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.'));
free(unit);
unit=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(model),&iter,1,!status,-1);
if (!status&&autostart){
on_config_autostart_clicked(NULL,path,widgets);
}
char *config_sting = yon_config_get_by_key("SERVICES_DISABLE");
int size;
config_str parsed = yon_char_parse(config_sting,&size,",");
@ -1149,6 +1157,16 @@ gboolean yon_interface_list_models_disconnect(main_window *widgets){
gtk_list_store_clear(widgets->UserList);
gtk_list_store_clear(widgets->ConfigList);
gtk_list_store_clear(widgets->TimersList);
gtk_spinner_start(GTK_SPINNER(widgets->SystemLoadingSpinner));
gtk_spinner_start(GTK_SPINNER(widgets->UserLoadingSpinner));
gtk_spinner_start(GTK_SPINNER(widgets->ConfigLoadingSpinner));
gtk_spinner_start(GTK_SPINNER(widgets->SessionsLoadingSpinner));
gtk_spinner_start(GTK_SPINNER(widgets->TimersLoadingSpinner));
gtk_widget_show(widgets->SystemLoadingSpinner);
gtk_widget_show(widgets->UserLoadingSpinner);
gtk_widget_show(widgets->ConfigLoadingSpinner);
gtk_widget_show(widgets->SessionsLoadingSpinner);
gtk_widget_show(widgets->TimersLoadingSpinner);
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);
@ -1170,6 +1188,16 @@ gboolean yon_interface_list_models_connect(main_window *widgets){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserSort));
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));
gtk_spinner_stop(GTK_SPINNER(widgets->SystemLoadingSpinner));
gtk_spinner_stop(GTK_SPINNER(widgets->UserLoadingSpinner));
gtk_spinner_stop(GTK_SPINNER(widgets->ConfigLoadingSpinner));
gtk_spinner_stop(GTK_SPINNER(widgets->SessionsLoadingSpinner));
gtk_spinner_stop(GTK_SPINNER(widgets->TimersLoadingSpinner));
gtk_widget_hide(widgets->SystemLoadingSpinner);
gtk_widget_hide(widgets->UserLoadingSpinner);
gtk_widget_hide(widgets->ConfigLoadingSpinner);
gtk_widget_hide(widgets->SessionsLoadingSpinner);
gtk_widget_hide(widgets->TimersLoadingSpinner);
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);
@ -1336,12 +1364,68 @@ gboolean yon_interface_update_finish(main_window *widgets){
}
}
main_config.update_thread_active=0;
char *final = yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ",main_config.load_mode==0?yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),NULL);
char *final = yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ",main_config.load_mode==YON_CONFIG_GLOBAL?yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),NULL);
yon_ubl_status_box_render(final,BACKGROUND_IMAGE_SUCCESS_TYPE);
free(final);
return G_SOURCE_REMOVE;
}
void yon_service_update(main_window *widgets){
int active_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
switch (active_page)
{
case 0:{
GtkTreeModel *model;
GtkTreeIter iter;
gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter);
char *target;
gtk_tree_model_get(model,&iter,5,&target,-1);
int size;
config_str new_info = yon_config_load(load_system_service_single(target),&size);
int parsed_size;
config_str parsed = yon_char_parse(new_info[0],&parsed_size,";");
char *name_temp = yon_char_replace(parsed[0],"\\","\18");
if (name_temp!=parsed[0]) free(parsed[0]);
parsed[0]=yon_char_replace(name_temp,"\18","\\\\");
if (name_temp!=parsed[0]) free(name_temp);
if (parsed){
int enabled = !strcmp(parsed[5],"enabled");
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->SystemList,&iter);
gtk_list_store_set(widgets->SystemList,&iter,3,enabled,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,loaded,11,_(parsed[3]),13,parsed[3],-1);
}
} break;
case 1:{
GtkTreeModel *model;
GtkTreeIter iter;
gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter);
char *target;
gtk_tree_model_get(model,&iter,5,&target,-1);
int size;
config_str new_info = yon_config_load(load_user_service_single(target),&size);
int parsed_size;
config_str parsed = yon_char_parse(new_info[0],&parsed_size,";");
char *name_temp = yon_char_replace(parsed[0],"\\","\18");
if (name_temp!=parsed[0]) free(parsed[0]);
parsed[0]=yon_char_replace(name_temp,"\18","\\\\");
if (name_temp!=parsed[0]) free(name_temp);
if (parsed){
int enabled = !strcmp(parsed[5],"enabled");
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->SystemList,&iter);
gtk_list_store_set(widgets->SystemList,&iter,3,enabled,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,loaded,11,_(parsed[3]),13,parsed[3],-1);
}
} break;
default:
break;
}
}
void* yon_interface_update(main_window *widgets){
// dictionary *dict = yon_systemd_get_list();
// if (dict){}
@ -1349,22 +1433,22 @@ void* yon_interface_update(main_window *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_units_size;
config_str system_units = yon_config_load(load_system_units_command,&system_units_size);
// int system_units_size;
// config_str system_units = yon_config_load(load_system_units_command,&system_units_size);
int user_size;
config_str user_services = yon_config_load(load_user_services_command,&user_size);
int user_units_size;
config_str user_units = yon_config_load(load_user_units_command,&user_units_size);
config_str user_services = yon_config_load(load_user_units_command,&user_size);
// int user_units_size;
// config_str user_units = yon_config_load(load_user_units_command,&user_units_size);
int config_size;
config_str config_files = yon_config_load(get_config_files_command,&config_size);
int timers_size;
config_str timers = yon_config_load(get_timers_command,&timers_size);
struct json_object *jsobject = json_tokener_parse(timers[0]);
int launched_size;
config_str launched = yon_config_load(load_launched_command,&launched_size);
for (int i=0;i<launched_size;i++){
yon_char_remove_last_symbol(launched[i],'\n');
}
// int launched_size;
// config_str launched = yon_config_load(load_launched_command,&launched_size);
// for (int i=0;i<launched_size;i++){
// yon_char_remove_last_symbol(launched[i],'\n');
// }
// dictionary *dact = NULL;
// for_dictionaries(dact,dict){
@ -1394,24 +1478,42 @@ void* yon_interface_update(main_window *widgets){
parsed[0]=yon_char_replace(name_temp,"\18","\\\\");
if (name_temp!=parsed[0]) free(name_temp);
if (parsed){
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->SystemList,&iter);
gtk_list_store_set(widgets->SystemList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1);
int names_size;
config_str names_parsed = yon_char_parse(parsed[0],&names_size," ");
for (int j=0;j<names_size;j++){
int found=0;
for_iter(widgets->SystemList,&iter){
char *target;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->SystemList),&iter,5,&target,-1);
if (!strcmp(target,names_parsed[j])){
found = 1;
break;
}
}
if (!found) {
int enabled = !strcmp(parsed[5],"enabled");
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(names_parsed[j]);
gtk_list_store_append(widgets->SystemList,&iter);
gtk_list_store_set(widgets->SystemList,&iter,3,enabled,4,active,5,names_parsed[j],6,parsed[4],7,type,8,active,9,loaded,11,_(parsed[3]),13,parsed[3],-1);
}
}
yon_char_parsed_free(names_parsed,names_size);
}
}
for (int i=0;i<system_units_size;i++){
yon_char_remove_last_symbol(system_units[i],'\n');
if (!yon_char_parsed_check_exist_begins_with(system_services,system_size,system_units[i])){
GtkTreeIter iter;
gtk_list_store_append(widgets->SystemList,&iter);
enum YON_UNIT_TYPE type = yon_get_unit_type(system_units[i]);
gtk_list_store_set(widgets->SystemList,&iter,0,0,1,0,2,0,3,0,4,0,5,system_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
yon_char_parsed_free(system_services,system_size);
// for (int i=0;i<system_units_size;i++){
// yon_char_remove_last_symbol(system_units[i],'\n');
// if (!yon_char_parsed_check_exist_begins_with(system_services,system_size,system_units[i])){
// GtkTreeIter iter;
// gtk_list_store_append(widgets->SystemList,&iter);
// enum YON_UNIT_TYPE type = yon_get_unit_type(system_units[i]);
// gtk_list_store_set(widgets->SystemList,&iter,0,0,1,0,2,0,3,0,4,0,5,system_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
}
}
// }
// }
// for (int i=0; i<user_size;i++){
// if (user_services[i][strlen(user_services[i])-1]=='\n') user_services[i][strlen(user_services[i])-1] = '\0';
@ -1444,24 +1546,42 @@ void* yon_interface_update(main_window *widgets){
int size;
config_str parsed = yon_char_parse(user_services[i],&size,";");
if (parsed){
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->UserList,&iter);
gtk_list_store_set(widgets->UserList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1);
int names_size;
config_str names_parsed = yon_char_parse(parsed[0],&names_size," ");
for (int j=0;j<names_size;j++){
int found=0;
for_iter(widgets->UserList,&iter){
char *target;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->UserList),&iter,5,&target,-1);
if (!strcmp(target,names_parsed[j])){
found = 1;
break;
}
}
if (found) {
int enabled = !strcmp(parsed[5],"enabled");
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(names_parsed[j]);
gtk_list_store_append(widgets->UserList,&iter);
gtk_list_store_set(widgets->UserList,&iter,3,enabled,4,active,5,names_parsed[j],6,parsed[4],7,type,8,active,9,loaded,11,_(parsed[3]),13,parsed[3],-1);
}
}
yon_char_parsed_free(names_parsed,names_size);
}
}
for (int i=0;i<user_units_size;i++){
yon_char_remove_last_symbol(user_units[i],'\n');
if (!yon_char_parsed_check_exist_begins_with(user_services,user_size,user_units[i])){
GtkTreeIter iter;
gtk_list_store_append(widgets->UserList,&iter);
enum YON_UNIT_TYPE type = yon_get_unit_type(user_units[i]);
gtk_list_store_set(widgets->UserList,&iter,0,0,1,0,2,0,3,0,4,0,5,user_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
yon_char_parsed_free(user_services,user_size);
// for (int i=0;i<user_units_size;i++){
// yon_char_remove_last_symbol(user_units[i],'\n');
// if (!yon_char_parsed_check_exist_begins_with(user_services,user_size,user_units[i])){
// GtkTreeIter iter;
// gtk_list_store_append(widgets->UserList,&iter);
// enum YON_UNIT_TYPE type = yon_get_unit_type(user_units[i]);
// gtk_list_store_set(widgets->UserList,&iter,0,0,1,0,2,0,3,0,4,0,5,user_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
}
}
// }
// }
int descr_size;
config_str config_descr = yon_resource_open_file(systemd_config_path,&descr_size);
@ -1504,6 +1624,7 @@ void* yon_interface_update(main_window *widgets){
}
}
g_idle_add((GSourceFunc)yon_sessions_update,widgets);
yon_char_parsed_free(config_files,config_size);
for (size_t i=0;i<json_object_array_length(jsobject);i++){
struct json_object *item_obj = json_object_array_get_idx(jsobject, i);
@ -1599,6 +1720,7 @@ 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)));
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_INFO_TYPE);
main_config.update_thread_active=1;
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
}
@ -1636,7 +1758,7 @@ void config_init(){
main_config.lock_load_global=0;
main_config.lock_save_global=0;
main_config.lock_save_local=0;
main_config.load_mode=1;
main_config.load_mode=YON_CONFIG_LOCAL;
main_config.update_thread_active=0;
main_config.launch_arguments=NULL;
main_config.launch_size=0;
@ -1822,6 +1944,17 @@ void yon_main_window_complete(main_window *widgets){
widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree");
widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook");
widgets->SystemLoadingOverlay=yon_gtk_builder_get_widget(builder,"SystemLoadingOverlay");
widgets->SystemLoadingSpinner=yon_gtk_builder_get_widget(builder,"SystemLoadingSpinner");
widgets->UserLoadingOverlay=yon_gtk_builder_get_widget(builder,"UserLoadingOverlay");
widgets->UserLoadingSpinner=yon_gtk_builder_get_widget(builder,"UserLoadingSpinner");
widgets->ConfigLoadingOverlay=yon_gtk_builder_get_widget(builder,"ConfigLoadingOverlay");
widgets->ConfigLoadingSpinner=yon_gtk_builder_get_widget(builder,"ConfigLoadingSpinner");
widgets->SessionsLoadingOverlay=yon_gtk_builder_get_widget(builder,"SessionsLoadingOverlay");
widgets->SessionsLoadingSpinner=yon_gtk_builder_get_widget(builder,"SessionsLoadingSpinner");
widgets->TimersLoadingOverlay=yon_gtk_builder_get_widget(builder,"TimersLoadingOverlay");
widgets->TimersLoadingSpinner=yon_gtk_builder_get_widget(builder,"TimersLoadingSpinner");
widgets->TooltipBox=yon_gtk_builder_get_widget(builder,"TooltipBox");
widgets->NameLabel=yon_gtk_builder_get_widget(builder,"NameLabel");
widgets->DescriptionLabel=yon_gtk_builder_get_widget(builder,"DescriptionLabel");
@ -2020,6 +2153,11 @@ void yon_main_window_complete(main_window *widgets){
gtk_widget_set_sensitive(widgets->SystemUpdateButton,0);
gtk_widget_set_sensitive(widgets->SystemPrevButton,0);
}
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->SystemLoadingOverlay),widgets->SystemLoadingSpinner);
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->UserLoadingOverlay),widgets->UserLoadingSpinner);
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->ConfigLoadingOverlay),widgets->ConfigLoadingSpinner);
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->SessionsLoadingOverlay),widgets->SessionsLoadingSpinner);
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TimersLoadingOverlay),widgets->TimersLoadingSpinner);
yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UserUnitsTree));
yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree));
yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->ConfigMainTree));
@ -2077,9 +2215,12 @@ void yon_main_window_complete(main_window *widgets){
gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL);
for (int i=0;i<5;i++){
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),i,(GtkTreeIterCompareFunc)sort_bool,GINT_TO_POINTER(i),NULL);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->UserSort),i,(GtkTreeIterCompareFunc)sort_bool,GINT_TO_POINTER(i),NULL);
}
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),5,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(13),NULL);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),6,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(6),NULL);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),6,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(5),NULL);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->UserSort),5,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(13),NULL);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->UserSort),6,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(5),NULL);
gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->UserUnitsTree),5);
yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);

@ -38,9 +38,30 @@
#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_services_command \
"systemctl --property=Names,Description,LoadState,ActiveState,SubState,UnitFileState,ActiveEnterTimestampMonotonic,InactiveEnterTimestampMonotonic " \
"--no-pager --all --no-legend show -- $( { " \
"systemctl list-units --no-pager --all --plain --no-legend | sed -E 's/^([^ ]+).*/\\1/'; " \
"systemctl list-unit-files --no-pager --no-legend | sed -E 's/^([^ ]+).*/\\1/'; " \
"} | sed '/@\\./d' | sort -u ) | " \
"awk 'BEGIN { RS=\"\"; FS=\"\\n\" } " \
"{ for (i=1; i<=NF; i++) { split($i, kv, \"=\"); val[kv[1]] = kv[2]; } " \
"print val[\"Names\"] \";\" val[\"LoadState\"] \";\" val[\"ActiveState\"] \";\" val[\"SubState\"] \";\" " \
"val[\"Description\"] \";\" val[\"UnitFileState\"] \";\" val[\"ActiveEnterTimestampMonotonic\"] \";\" " \
"val[\"InactiveEnterTimestampMonotonic\"]; delete val }'"
#define load_system_units_command "systemctl list-unit-files --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)(.*)/\\1/'"
#define load_user_units_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-unit-files --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)(.*)/\\1;\\2;\\3;/'",NULL)
#define load_user_units_command yon_char_unite(\
"systemctl --property=Names,Description,LoadState,ActiveState,SubState,UnitFileState,ActiveEnterTimestampMonotonic,InactiveEnterTimestampMonotonic " \
"--no-pager --all --no-legend show -- $( { " \
"systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --no-pager --all --plain --no-legend | sed -E 's/^([^ ]+).*/\\1/'; " \
"systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-unit-files --no-pager --no-legend | sed -E 's/^([^ ]+).*/\\1/'; " \
"} | sed '/@\\./d' | sort -u ) | " \
"awk 'BEGIN { RS=\"\"; FS=\"\\n\" } " \
"{ for (i=1; i<=NF; i++) { split($i, kv, \"=\"); val[kv[1]] = kv[2]; } " \
"print val[\"Names\"] \";\" val[\"LoadState\"] \";\" val[\"ActiveState\"] \";\" val[\"SubState\"] \";\" " \
"val[\"Description\"] \";\" val[\"UnitFileState\"] \";\" val[\"ActiveEnterTimestampMonotonic\"] \";\" " \
"val[\"InactiveEnterTimestampMonotonic\"]; delete val }'",NULL)
#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)
#define load_system_services_command "systemctl --system list-units --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'"
#define load_enabled_command "systemctl list-unit-files --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:"
@ -55,6 +76,19 @@
#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 load_system_service_single(target) yon_char_unite("systemctl --property=Names,Description,LoadState,ActiveState,SubState,UnitFileState,ActiveEnterTimestampMonotonic,InactiveEnterTimestampMonotonic --no-pager --all --no-legend show -- ",target,\
"awk 'BEGIN { RS=\"\"; FS=\"\\n\" } " \
"{ for (i=1; i<=NF; i++) { split($i, kv, \"=\"); val[kv[1]] = kv[2]; } " \
"print val[\"Names\"] \";\" val[\"LoadState\"] \";\" val[\"ActiveState\"] \";\" val[\"SubState\"] \";\" " \
"val[\"Description\"] \";\" val[\"UnitFileState\"] \";\" val[\"ActiveEnterTimestampMonotonic\"] \";\" " \
"val[\"InactiveEnterTimestampMonotonic\"]; delete val }'",NULL)
#define load_user_service_single(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ --property=Names,Description,LoadState,ActiveState,SubState,UnitFileState,ActiveEnterTimestampMonotonic,InactiveEnterTimestampMonotonic --no-pager --all --no-legend show -- ",target,\
"awk 'BEGIN { RS=\"\"; FS=\"\\n\" } " \
"{ for (i=1; i<=NF; i++) { split($i, kv, \"=\"); val[kv[1]] = kv[2]; } " \
"print val[\"Names\"] \";\" val[\"LoadState\"] \";\" val[\"ActiveState\"] \";\" val[\"SubState\"] \";\" " \
"val[\"Description\"] \";\" val[\"UnitFileState\"] \";\" val[\"ActiveEnterTimestampMonotonic\"] \";\" " \
"val[\"InactiveEnterTimestampMonotonic\"]; delete val }'",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)
#define show_source_command(target) yon_char_append("systemctl edit --full ",target)
@ -92,7 +126,7 @@
#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL)
#define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK"
#define config_get_global_command yon_char_new("ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK")
#define config_get_default_command ""
#define config_get_default_command "ubconfig --source default get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK"
#define config_get_global_only_parameters ""
#define config_get_local_only_parameters ""
@ -207,6 +241,16 @@ typedef struct {
rmb_menu_window *SystemMenu;
GtkWidget *SystemServiceLabel;
GtkWidget *SystemDescriptionLabel;
GtkWidget *SystemLoadingOverlay;
GtkWidget *SystemLoadingSpinner;
GtkWidget *UserLoadingOverlay;
GtkWidget *UserLoadingSpinner;
GtkWidget *ConfigLoadingOverlay;
GtkWidget *ConfigLoadingSpinner;
GtkWidget *SessionsLoadingOverlay;
GtkWidget *SessionsLoadingSpinner;
GtkWidget *TimersLoadingOverlay;
GtkWidget *TimersLoadingSpinner;
GtkWidget *UserSearchEntry;
GtkWidget *UserFiltersCombo;
@ -546,4 +590,5 @@ gboolean yon_interface_list_models_disconnect(main_window *widgets);
void on_sort_activate(GtkTreeViewColumn *self, main_window *widgets);
gboolean sort_bool(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col);
gboolean sort_string(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col);
void yon_service_update(main_window *widgets);
#endif

File diff suppressed because it is too large Load Diff

@ -269,7 +269,7 @@ msgid ""
"If this is your active session, you will be taken to the login screen. Make "
"sure to save all files before performing this operation."
msgstr ""
"Если это ваша активная сессия, вы будете выведены в экран входа. Убедитесь, "
"Если это ваша активная сессия, вы будете переключены на экран входа. Убедитесь, "
"что сохранили все файлы перед выполнением этой операции."
#: source/ubl-strings.h:77
@ -298,7 +298,7 @@ msgstr "Отключение автообновления юнита"
#: source/ubl-strings.h:85
msgid "Switching to session"
msgstr "Переключение на сессию"
msgstr "Переключиться на сессию"
#: source/ubl-strings.h:86
msgid "Session locking"

Loading…
Cancel
Save