diff --git a/Makefile b/Makefile index 5e79ef1..a056d11 100644 --- a/Makefile +++ b/Makefile @@ -135,11 +135,18 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.launch-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.important-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lookup-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.edit-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lock-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.sync-time-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.menu-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.properties-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.source-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.save-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy" @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \ update-desktop-database --quiet &>/dev/null || true; \ - [ -d "${DESTDIR}$/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \ + [ -d "${DESTDIR}/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \ fi @echo "Install: OK" diff --git a/gresource.xml b/gresource.xml index b6f2a4b..835a942 100644 --- a/gresource.xml +++ b/gresource.xml @@ -3,7 +3,6 @@ ubl-settings-services.glade ubl-settings-services-terminal.glade - ubl-settings-services-log.glade ubl-settings-services.css diff --git a/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg b/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg new file mode 100644 index 0000000..baba3f9 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg b/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg new file mode 100644 index 0000000..132b656 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg b/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg new file mode 100644 index 0000000..f8e628f --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg b/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg new file mode 100644 index 0000000..93afc13 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.save-symbolic.svg b/icons/com.ublinux.ubl-settings-services.save-symbolic.svg new file mode 100644 index 0000000..69b2ef5 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.save-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.source-symbolic.svg b/icons/com.ublinux.ubl-settings-services.source-symbolic.svg new file mode 100644 index 0000000..b509606 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.source-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg b/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg new file mode 100644 index 0000000..87adb7a --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index dde613a..b4d98a2 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -13,6 +13,11 @@ include_directories(${VTE291_INCLUDE_DIRS}) link_directories(${VTE291_LIBRARY_DIRS}) add_definitions(${VTE291_CFLAGS_OTHER}) +pkg_check_modules(JSON REQUIRED json-c) +include_directories(${JSON_INCLUDE_DIRS}) +link_directories(${JSON_LIBRARY_DIRS}) +add_definitions(${JSON_CFLAGS_OTHER}) + find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) if(WEBKIT_LIBRARIES_FOUND) @@ -32,7 +37,6 @@ add_custom_target(GLADE ubl-settings-services.glade) set(DEPENDFILES ../ubl-settings-services.glade ../ubl-settings-services-terminal.glade - ../ubl-settings-services-log.glade ../gresource.xml ../ubl-settings-services-banner.png ../ubl-settings-services.css @@ -76,7 +80,8 @@ set(LIBRARIES ${GTK_LIBRARIES} ${WEBKIT_LIBRARIES} ${UTILS_LIBRARIES} - ${VTE291_LIBRARIES} + ${VTE291_LIBRARIES} + ${JSON_LIBRARIES} pthread ublsettings ublsettings-gtk3 diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 9e072ef..f9beddf 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -2,19 +2,66 @@ config main_config; -//functions +//saving & loading + +void on_save_done(main_window *widgets, config_str output, int size){ + if (widgets) {}; + char *final_output = yon_char_parsed_to_string(output,size,""); + printf("%s\n",final_output); + free(final_output); + yon_char_parsed_free(output,size); + switch (main_config.save_config){ + case 0: + yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 1: + yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 2: + yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + } +} void yon_load_proceed(YON_CONFIG_TYPE type){ - if (yon_config_load_register(type,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL)){ - - } - + 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 (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,config_get_global_command,NULL); + } else if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_local_command,NULL); + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + textdomain(template_ui_LocaleName); + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + textdomain(LocaleName); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); + gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.ini"); + gtk_file_filter_set_name(filter, "*.ini"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + gtk_widget_show(dialog); + int response = gtk_dialog_run(GTK_DIALOG(dialog)); + if (response == GTK_RESPONSE_ACCEPT){ + char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (!yon_char_is_empty(file)){ + path=file; + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + char *command = yon_config_get_custom_command(path); + yon_config_load_config(type,command,NULL); + } } void on_config_local_load(GtkWidget *self,main_window *widgets){ + if (self){} if (!main_config.update_thread_active){ main_config.update_thread_active=1; - if (self){}; 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); @@ -23,9 +70,9 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){ } void on_config_global_load(GtkWidget *self,main_window *widgets){ + if (self){} if (!main_config.update_thread_active){ main_config.update_thread_active=1; - if (self){}; 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); @@ -34,94 +81,138 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ } +void on_config_custom_load(GtkWidget *self,main_window *widgets){ + if (self){} + yon_load_proceed(YON_CONFIG_CUSTOM); + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + main_config.load_mode=3; + yon_interface_update(widgets); +} + +void on_service_constant_update(){ + +} + void on_config_global_local_save(){ - yon_save_proceed(NULL,YON_CONFIG_BOTH,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL); + main_config.save_config=3; + yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); } void on_config_local_save(){ - yon_save_proceed("system",YON_CONFIG_LOCAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL); + main_config.save_config=1; + yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); } void on_config_global_save(){ - yon_save_proceed("global",YON_CONFIG_GLOBAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL); + main_config.save_config=0; + yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); } +void on_config_custom_save(GtkWidget *self, main_window *widgets){ + if (self&&widgets){} + main_config.save_config=1; + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); + if (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){ + enum YON_UNIT_TYPE final_type=0; + char *type = yon_char_new(unit_name); + int cut = yon_char_find_last(type,'.'); + if (cut>-1){ + free(yon_char_divide(type,cut)); + } + if (!strcmp(type,"service")){ + final_type = YON_UNIT_SERVICE; + } else if (!strcmp(type,"swap")){ + final_type = YON_UNIT_SWAP; + } else if (!strcmp(type,"socket")){ + final_type = YON_UNIT_SOCKET; + } else if (!strcmp(type,"device")){ + final_type = YON_UNIT_DEVICE; + } else if (!strcmp(type,"target")){ + final_type = YON_UNIT_TARGET; + } else if (!strcmp(type,"automount")){ + final_type = YON_UNIT_MOUNT; + } else if (!strcmp(type,"timer")){ + final_type = YON_UNIT_TIMER; + } else if (!strcmp(type,"path")){ + final_type = YON_UNIT_PATH; + } else if (!strcmp(type,"slice")){ + final_type = YON_UNIT_SLICE; + } else if (!strcmp(type,"scope")){ + final_type = YON_UNIT_SCOPE; + } else { + final_type = YON_UNIT_UNRECOGNISED; + } + free(type); + return final_type; +} -static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data) -{ - if (error){}; - if (!terminal) return; - if (pid == -1) printf("Error\n\n\n"); - else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data)); -} - -void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ - char **commands=new_arr(char*,2); - gchar **envp = g_get_environ(); - commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); - commands[1]=NULL; - char **env=new_arr(char*,2); - env[0]=""; - env[1]=NULL; - vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); - VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); - vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); - char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed; ",command," ; sleep 5; stty -echo; unset PS1","\n",NULL); - if(endwork_function) - g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); - vte_terminal_spawn_async(VTE_TERMINAL(terminal), - VTE_PTY_DEFAULT, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - child_ready, - install_command); - vte_pty_spawn_async(pty, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - NULL, - NULL); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); - vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); - vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); - gtk_widget_show_all(terminal); - } - -// standard functions - -void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ +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){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + GtkTreeIter filter_iter; + GtkTreeIter iter; + GtkTreeModel *model; + GtkTreeModel *filter; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + filter = GTK_TREE_MODEL(widgets->SystemFilter); + } else { + model = GTK_TREE_MODEL(widgets->UserList); + filter = GTK_TREE_MODEL(widgets->UserFilter); + } + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); - char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); - free(name); - name=parsed_name; - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,0,!status,-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); char *config_sting = yon_config_get_by_key("SERVICES_ENABLE"); int size; config_str parsed = yon_char_parse(config_sting,&size,","); int place = yon_char_parsed_check_exist(parsed,size,name); if (status==0){ if (place ==-1){ - if (!yon_config_append("SERVICES_ENABLE",name,",")){ - yon_config_register("SERVICES_ENABLE","[system]",name); + if (yon_char_parsed_check_exist(parsed,size,unit)==-1){ + if (!yon_config_append("SERVICES_ENABLE",name,",")){ + yon_config_register("SERVICES_ENABLE",SERVICES_ENABLE_get_command,name); + } + } else { + parsed = yon_char_parsed_rip(parsed,&size,place); + if (parsed) + yon_config_set("SERVICES_ENABLE",yon_char_parsed_to_string(parsed,size,",")); + else yon_config_remove_by_key("SERVICES_ENABLE"); } } } else { @@ -136,26 +227,46 @@ void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ } } -void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ +void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + GtkTreeIter filter_iter; + GtkTreeIter iter; + GtkTreeModel *model; + GtkTreeModel *filter; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + filter = GTK_TREE_MODEL(widgets->SystemFilter); + } else { + model = GTK_TREE_MODEL(widgets->UserList); + filter = GTK_TREE_MODEL(widgets->UserFilter); + } + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); - char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); - free(name); - name=parsed_name; - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,1,!status,-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); char *config_sting = yon_config_get_by_key("SERVICES_DISABLE"); int size; config_str parsed = yon_char_parse(config_sting,&size,","); int place = yon_char_parsed_check_exist(parsed,size,name); if (status==0){ if (place ==-1){ - if (!yon_config_append("SERVICES_DISABLE",name,",")){ - yon_config_register("SERVICES_DISABLE","[system]",name); + if (yon_char_parsed_check_exist(parsed,size,unit)==-1){ + if (!yon_config_append("SERVICES_DISABLE",name,",")){ + yon_config_register("SERVICES_DISABLE",SERVICES_DISABLE_get_command,name); + } + } else { + parsed = yon_char_parsed_rip(parsed,&size,place); + if (parsed) + yon_config_set("SERVICES_DISABLE",yon_char_parsed_to_string(parsed,size,",")); + else yon_config_remove_by_key("SERVICES_DISABLE"); } } } else { @@ -171,26 +282,46 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ } -void on_config_block_clicked(GtkWidget *self, main_window *widgets){ +void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + GtkTreeIter filter_iter; + GtkTreeIter iter; + GtkTreeModel *model; + GtkTreeModel *filter; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + filter = GTK_TREE_MODEL(widgets->SystemFilter); + } else { + model = GTK_TREE_MODEL(widgets->UserList); + filter = GTK_TREE_MODEL(widgets->UserFilter); + } + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); - char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); - free(name); - name=parsed_name; - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,2,!status,-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,2,!status,-1); char *config_sting = yon_config_get_by_key("SERVICES_MASK"); int size; config_str parsed = yon_char_parse(config_sting,&size,","); int place = yon_char_parsed_check_exist(parsed,size,name); if (status==0){ if (place ==-1){ - if (!yon_config_append("SERVICES_MASK",name,",")){ - yon_config_register("SERVICES_MASK","[system]",name); + if (yon_char_parsed_check_exist(parsed,size,unit)==-1){ + if (!yon_config_append("SERVICES_MASK",name,",")){ + yon_config_register("SERVICES_MASK",SERVICES_MASK_get_command,name); + } + } else { + parsed = yon_char_parsed_rip(parsed,&size,place); + if (parsed) + yon_config_set("SERVICES_MASK",yon_char_parsed_to_string(parsed,size,",")); + else yon_config_remove_by_key("SERVICES_MASK"); } } } else { @@ -206,55 +337,146 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ +void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + GtkTreeIter filter_iter; + GtkTreeIter iter; + GtkTreeModel *model; + GtkTreeModel *filter; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + filter = GTK_TREE_MODEL(widgets->SystemFilter); + } else { + model = GTK_TREE_MODEL(widgets->UserList); + filter = GTK_TREE_MODEL(widgets->UserFilter); + } + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1); - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,3,!status,-1); + gtk_list_store_set(GTK_LIST_STORE(model),&iter,3,!status,-1); yon_launch((!status)==1 ? service_enable_command(service_name) : \ service_disable_command(service_name)); } } +gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ + gboolean autostart,autostop,masked,type,loaded,inactive; + char *name; + gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&inactive,-1); + GtkWidget *combo=NULL; + 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){ + 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; + } + int type_filter = 1; + int active_filter = 0; + int loaded_filter = 0; + int name_filter = 1; + + int filter_active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo)); + if (filter_active>0){ + if (filter_active>3){ + char *text = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo)); + if (yon_get_unit_type(text)!=(enum YON_UNIT_TYPE)type) type_filter = 0; + } else { + switch (filter_active){ + case 1: if (!autostart) type_filter=0; + break; + case 2: if (!autostop) type_filter=0; + break; + case 3: if (!masked) type_filter=0; + break; + } + } + } + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(active_check))){ + active_filter=1; + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(loaded_check))) + loaded_filter=1; + } + + 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){ + return 1; + } + return 0; +} + +void on_filter_changed(GtkWidget *self, main_window *widgets){ + if (self){}; + 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); + gtk_tree_model_filter_refilter(widgets->SystemFilter); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); + } else if (page == 1){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL); + gtk_tree_model_filter_refilter(widgets->UserFilter); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); + } +} + void on_system_kill_confirmed(GtkWidget *self,char *service_name){ if (self){}; char *command = service_kill_command(service_name); yon_launch(command); } -void on_system_launch_clicked(GtkWidget *self, main_window *widgets){ +void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets){ if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + GtkTreeIter iter, filter_iter; + GtkTreeModel *model; + GtkTreeModel *filter; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + filter = GTK_TREE_MODEL(widgets->SystemFilter); + } else { + model = GTK_TREE_MODEL(widgets->UserList); + filter = GTK_TREE_MODEL(widgets->UserFilter); + } + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1); - yon_launch((!status)==1 ? service_start_command(service_name) : \ - service_stop_command(service_name)); int size; config_str result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); if (size>0){ if (!strcmp(result[0],"active")){ if (status){ - dialog_confirmation_data data; - data.action_text=STOP_SERVICE_WARMING_LABEL(service_name); - data.function=(void*)(void*)on_system_kill_confirmed; - data.data=service_name; - int answer = yon_confirmation_dialog_call(self,&data); - if (answer) - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,0,-1); - } else { - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,1,-1); + on_system_kill_confirmed(NULL,service_name); + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); } } else { - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,0,-1); + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); + } + yon_launch((!status)==1 ? service_start_command(service_name) : \ + service_stop_command(service_name)); + if (!status) { + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1); } } yon_char_parsed_free(result,size); @@ -262,432 +484,788 @@ void on_system_launch_clicked(GtkWidget *self, main_window *widgets){ } -gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - int type; - gtk_tree_model_get(model,iter,8,&type,-1); - return 1; +void on_system_restart_clicked(GtkWidget *self, main_window *widgets){ + if (self&&widgets){}; } - -gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - int type; - gtk_tree_model_get(model,iter,7,&type,-1); - if (type==1) - return 1; - return 0; +void yon_sessions_update(main_window *widgets){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),NULL); + gtk_list_store_clear(widgets->SessionsList); + int sessions_size; + config_str sessions = yon_config_load(list_of_session_command,&sessions_size); + for (int i=0;i4){ + gtk_list_store_append(widgets->SessionsList,&iter); + gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,parsed[1],2,atoi(parsed[2]),3,parsed[3],4,parsed[4],-1); + } + } + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); } -gboolean on_socket_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - int type; - gtk_tree_model_get(model,iter,7,&type,-1); - if (type==2) - return 1; - return 0; +void on_session_activate(GtkWidget *self, main_window *widgets){ + if (self){}; + 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)){ + int id; + gtk_tree_model_get(model,&iter,0,&id,-1); + char *convert = yon_char_from_int(id); + yon_launch(session_activate_session(convert)); + free(convert); + yon_sessions_update(widgets); + } } -gboolean on_autostart_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,0,&type,-1); - if (type) - return 1; - return 0; +void on_session_end(GtkWidget *self, main_window *widgets){ + if (self){}; + 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)){ + int id; + gtk_tree_model_get(model,&iter,0,&id,-1); + char *convert = yon_char_from_int(id); + yon_launch(session_terminate_session(convert)); + free(convert); + yon_sessions_update(widgets); + } } -gboolean on_stopped_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,1,&type,-1); - if (type) - return 1; - return 0; +void on_session_block(GtkWidget *self, main_window *widgets){ + if (self){}; + 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)){ + int id; + gtk_tree_model_get(model,&iter,0,&id,-1); + char *convert = yon_char_from_int(id); + yon_launch(session_lock_session(convert)); + free(convert); + yon_sessions_update(widgets); + } } -gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,2,&type,-1); - if (type) - return 1; - return 0; +log_window *yon_log_window_new(){ + log_window *window = malloc(sizeof(log_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); + window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); + window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); + window->TerminalScroll = yon_gtk_builder_get_widget(builder,"TerminalScroll"); + window->TextEditor = yon_gtk_builder_get_widget(builder,"TextEditor"); + window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); + window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton"); + window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->target=NULL; + window->adjustment = GTK_ADJUSTMENT(gtk_builder_get_object(builder,"adjustment1")); + yon_gtk_widget_set_scroll_window_for_scroll(window->Window,GTK_SCROLLBAR(window->TerminalScroll)); + GdkRGBA rgba; + vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba); + vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); + yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); + g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),window); + return window; } -gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,8,&type,-1); - if (type) - return 1; - return 0; - -} +void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){ + if (self){}; + if (widgets){ + if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + if (system(reload_systemd_root_command)){ + yon_ubl_status_box_render(SYSTEMD_RELAUNCH_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(SYSTEMD_RELAUNCH_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); -gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,8,&type,-1); - if (!type) - return 1; - return 0; - + } + } else { + if (system(reload_systemd_user_command)){ + yon_ubl_status_box_render(SYSTEMD_RELAUNCH_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(SYSTEMD_RELAUNCH_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + + } + } + } } -void on_type_changed(GtkWidget *self, main_window *widgets){ - if (self){}; - switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){ - case 0: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(widgets->liststore2)); - break; - case 1: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.ServiceFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter)); - break; - case 2: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.SocketFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SocketFilter)); - break; - case 3: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.AutolaunchFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.AutolaunchFilter)); - break; - case 4: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.StoppedFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.StoppedFilter)); - break; - case 5: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.BlockedFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter)); - break; - } - if (main_config.SourceFilter){ - g_object_unref(main_config.SourceFilter); - main_config.SourceFilter=NULL; - } - main_config.SourceFilter = gtk_tree_model_filter_new(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)),NULL); - int active = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceSourceCombo)); - if (active==1){ - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_system_filter,NULL,NULL); - - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter); - } else if (active==2){ - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_user_filter,NULL,NULL); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter); - } - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SourceFilter)); - gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->MainTree),5); -} - -void on_service_update(GtkWidget *self, terminal_window* window){ +void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){ if (self){}; - yon_terminal_integrated_start(window->SystemTerminal,service_info_command(window->target),NULL,NULL); - GdkRGBA rgba; - vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba); - vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); + if (widgets){ + if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + if (system(reexec_systemd_root_command)){ + yon_ubl_status_box_render(SYSTEMD_REEXEC_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(SYSTEMD_REEXEC_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + + } + } else { + if (system(reexec_systemd_user_command)){ + yon_ubl_status_box_render(SYSTEMD_REEXEC_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(SYSTEMD_REEXEC_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + + } + } + } } -terminal_window *yon_terminal_window_new(){ - terminal_window *window = malloc(sizeof(terminal_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_terminal); - window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); - window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); - window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton"); - window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); - window->target=NULL; - yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); +typedef void (*data_function)(void*,void*); - g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_service_update),window); - gtk_widget_show(window->Window); - return window; +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"); + data->data = widgets; + data->function = (data_function)yon_system_systemd_restart; + yon_confirmation_dialog_call(self,data); + } } -void on_info_clicked(GtkWidget *self, main_window *widgets){ - if (self){} - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); +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"); + data->data = widgets; + data->function = (data_function)yon_system_systemd_reexec; + yon_confirmation_dialog_call(self,data); + } + +} + +void on_system_info_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - char *service_name; - gtk_tree_model_get(model,&iter,5,&service_name,-1); - if (!yon_char_is_empty(service_name)){ - terminal_window *window = yon_terminal_window_new(); - window->target=service_name; - char *header = yon_char_unite(STATUS_LABEL," ",service_name,NULL); - gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),header); - gtk_window_set_title(GTK_WINDOW(window->Window),header); - free(header); - on_service_update(NULL,window); - } + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_STATE_TITLE_LABEL(name)); + gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_STATE_TITLE_LABEL(name)); + window->target = service_info_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); } + } + } -log_window *yon_log_window_new(){ - log_window *window = malloc(sizeof(log_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); - window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); - window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); - window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); - window->target=NULL; - yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); - return window; +void on_system_log_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_LOG_TITLE_LABEL(name)); + gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_LOG_TITLE_LABEL(name)); + window->target = get_log_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } + } + } -void on_log_show(GtkWidget *self, main_window *widgets){ +void *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(window->SystemTerminal,window->target,NULL,NULL); + return NULL; +} + +void on_save_clicked(GtkWidget *self, log_window *window){ + if (self){}; + 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); +} + +void on_update_clicked(GtkWidget *self, log_window *window){ if (self){}; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); +} + +void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - log_window *window = yon_log_window_new(); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ char *name; gtk_tree_model_get(model,&iter,5,&name,-1); - yon_terminal_integrated_start(window->SystemTerminal,start_log_command(name),NULL,NULL); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_UNIT_EDIT_TITLE_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_UNIT_EDIT_TITLE_LABEL); + gtk_widget_show(window->SaveButton); + window->target=show_source_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); GdkRGBA rgba; - rgba.alpha=1; - rgba.red=0.95; - rgba.green=0.95; - rgba.blue=0.95; + rgba.blue=1; + rgba.green=1; + rgba.red=1; vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); - vte_terminal_set_color_background(VTE_TERMINAL(window->SystemTerminal),&rgba); - rgba.red=0; - rgba.green=0; - rgba.blue=0; - vte_terminal_set_color_foreground(VTE_TERMINAL(window->SystemTerminal),&rgba); + gtk_widget_set_sensitive(window->SystemTerminal,1); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_save_clicked),window); gtk_widget_show(window->Window); } - + } + } -void *yon_unthreaded_config_load(void *widgets){ - if (main_config.load_mode==1){ - on_config_local_load(NULL,(main_window*)widgets); - } else if (main_config.load_mode==0){ - on_config_global_load(NULL,(main_window*)widgets); +void on_system_status_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),PROPERTIES_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),PROPERTIES_LABEL); + window->target = properties_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); } - return NULL; + + } + } -void on_update(GtkWidget *self,main_window *widgets){ - if (!main_config.update_thread_active){ - if (self){} - yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - if (yon_unthreaded_config_load(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"); + data->data = widgets; + data->function = (data_function)yon_system_systemd_restart; + yon_confirmation_dialog_call(self,data); + } + } -void *update_delay(main_window *widgets){ - on_type_changed(NULL,widgets); - main_config.update_thread_active=0; - textdomain(template_ui_LocaleName); - if (main_config.load_mode){ - yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } else { - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } - textdomain(LocaleName); - return NULL; +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"); + data->data = widgets; + data->function = (data_function)yon_system_systemd_reexec; + yon_confirmation_dialog_call(self,data); + } + } -gboolean yon_interface_update(main_window *widgets){ - gtk_widget_set_sensitive(widgets->UpdateButton,0); - int size; - int size_users; +void on_user_info_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ GtkTreeIter iter; - gtk_list_store_clear(widgets->liststore2); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL); - config_str services = yon_config_load(load_services_command,&size); - char *command = load_user_services_command; - config_str users_services = yon_config_load(command,&size_users); - for (int i=0;iliststore2,&iter); - int type; - char *description = parsed[parsed_size-1]; - if (strstr(parsed[0],".socket")) - type = 2; - else type = 1; - int user_service=0; - gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1); - } - for (int i=0;iliststore2,&iter); - int type; - char *description = parsed[parsed_size-1]; - if (strstr(parsed[0],".socket")) - type = 2; - else type = 1; - int user_service=1; - gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1); - } - - int launched_size; - config_str launched_parsed = yon_config_load(load_launched_command,&launched_size); - int enabled_size; - config_str enabled_parsed = yon_config_load(load_enabled_command,&enabled_size); - yon_char_parsed_divide_search_full(launched_parsed,launched_size,"\n",-1); - yon_char_parsed_divide_search_full(enabled_parsed,enabled_size,"\n",-1); - char *launched = yon_char_parsed_to_string(launched_parsed,launched_size,","); - char *enabled = yon_char_parsed_to_string(enabled_parsed,enabled_size,","); - char *start = yon_config_get_by_key("SERVICES_ENABLE"); - char *stop = yon_config_get_by_key("SERVICES_DISABLE"); - char *block = yon_config_get_by_key("SERVICES_MASK"); - if (!yon_char_is_empty(launched)&&launched[strlen(launched)-1]=='\n') launched[strlen(launched)-1]='\0'; - if (!yon_char_is_empty(enabled)&&enabled[strlen(enabled)-1]=='\n') enabled[strlen(enabled)-1]='\0'; - if (!yon_char_is_empty(start)&&start[strlen(start)-1]=='\n') start[strlen(start)-1]='\0'; - if (!yon_char_is_empty(stop)&&stop[strlen(stop)-1]=='\n') stop[strlen(stop)-1]='\0'; - if (!yon_char_is_empty(block)&&block[strlen(block)-1]=='\n') block[strlen(block)-1]='\0'; - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->liststore2),&iter); - for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->liststore2),&iter)){ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ char *name; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore2),&iter,5,&name,-1); - char *name_copy = yon_char_new(name); - char *name_parsed = yon_char_divide(name_copy,yon_char_find_last(name_copy,'.')); - if (!yon_char_is_empty(start)){ - if (!strcmp(start,name)) - gtk_list_store_set(widgets->liststore2,&iter,0,1,-1); - else if (strstr(start,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,0,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,0,0,-1); - } - if (!yon_char_is_empty(stop)){ - if (strstr(stop,name)) - gtk_list_store_set(widgets->liststore2,&iter,1,1,-1); - else if (strstr(stop,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,1,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,1,0,-1); - } - if (!yon_char_is_empty(block)){ - if (strstr(block,name)) - gtk_list_store_set(widgets->liststore2,&iter,2,1,-1); - else if (strstr(block,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,2,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,2,0,-1); - } - if (!yon_char_is_empty(launched)){ - if (strstr(launched,name)) - gtk_list_store_set(widgets->liststore2,&iter,4,1,-1); - else if (strstr(launched,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,4,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,4,0,-1); - } - if (!yon_char_is_empty(enabled)){ - if (strstr(enabled,name)) - gtk_list_store_set(widgets->liststore2,&iter,3,1,-1); - else if (strstr(enabled,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,3,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,3,0,-1); - } - free(name); - free(name_parsed); - while(gtk_events_pending()) gtk_main_iteration(); - } - update_delay(widgets); - gtk_widget_set_sensitive(widgets->UpdateButton,1); - return 0; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_STATE_TITLE_LABEL(name)); + gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_STATE_TITLE_LABEL(name)); + window->target = user_service_info_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } + } + } -void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){ - if (self||pspec){} - GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree)); - 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)); - g_list_free(list); - gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->MainUpperTree),0),width_configuration); - gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->MainUpperTree),1),width_system); +void on_user_log_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_LOG_TITLE_LABEL(name)); + gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_LOG_TITLE_LABEL(name)); + window->target = user_get_log_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } + } + } -GtkWidget *yon_menu_separator_create() { - GtkWidget *menu_item = gtk_separator_menu_item_new(); +void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_UNIT_EDIT_TITLE_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_UNIT_EDIT_TITLE_LABEL); + gtk_widget_show(window->SaveButton); + window->target=user_show_source_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + GdkRGBA rgba; + rgba.blue=1; + rgba.green=1; + rgba.red=1; + vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); + gtk_widget_set_sensitive(window->SystemTerminal,1); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_save_clicked),window); + gtk_widget_show(window->Window); + } + } - gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"sepat"); - gtk_widget_show(menu_item); - gtk_widget_set_sensitive(menu_item,0); - return menu_item; } -GtkWidget *yon_menu_button_create(char *icon_name, char *text) { - GtkWidget *menu_item = gtk_menu_item_new(); - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); - GtkWidget *icon; - if(icon_name){ - icon = gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_BUTTON); - gtk_box_pack_start(GTK_BOX(box),icon,0,0,5); +void on_user_status_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),PROPERTIES_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),PROPERTIES_LABEL); + window->target = user_properties_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); } - GtkWidget *label = gtk_label_new(text); - gtk_box_pack_start(GTK_BOX(box),label,0,0,5); - gtk_container_add(GTK_CONTAINER(menu_item),box); - gtk_widget_show_all(menu_item); - return menu_item; + + } + } -gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window *widgets){ +void on_config_log_save(GtkWidget *self, log_window *window){ if (self){}; - if (event->button==3){ - main_config.rmb_clicked=1; - menu_obj *menu_object = g_malloc0(sizeof(menu_obj)); - GtkWidget *menu = gtk_menu_new(); - gtk_menu_set_reserve_toggle_size(GTK_MENU(menu),0); - GtkWidget *menu_item_configuration_in_config = yon_menu_button_create(NULL,CONFIG_CONFIGURATION_LABEL); - gtk_widget_set_sensitive(menu_item_configuration_in_config,0); - GtkWidget *menu_item_autostart_config = yon_menu_button_create("media-playback-start-symbolic",AUTOSTART_LABEL); - GtkWidget *menu_item_autostop = yon_menu_button_create("media-playback-stop-symbolic",AUTOSTOP_LABEL); - GtkWidget *menu_item_block = yon_menu_button_create("process-stop-symbolic",BLOCK_LABEL); - GtkWidget *menu_item_separator1 = yon_menu_separator_create(); - GtkWidget *menu_item_configuration_in_system = yon_menu_button_create(NULL,SYSTEM_CONFIGURATION_LABEL); - gtk_widget_set_sensitive(menu_item_configuration_in_system,0); - GtkWidget *menu_item_autostart_system = yon_menu_button_create("media-playback-start-symbolic",AUTOSTART_LABEL); - GtkWidget *menu_item_launched = yon_menu_button_create("emoji-flags-symbolic",SYSTEM_LAUNCH_TOGGLE_LABEL); - GtkWidget *menu_item_separator2 = yon_menu_separator_create(); - GtkWidget *menu_item_reload = yon_menu_button_create("emblem-synchronizing-symbolic",SERVICE_RELOAD_LABEL); - GtkWidget *menu_item_status = yon_menu_button_create("dialog-information-symbolic",STATUS_LABEL); - menu_object->Menu = menu; - menu_object->MenuConfigAutostart = menu_item_autostart_config; - menu_object->MenuConfigAutostop = menu_item_autostop; - menu_object->MenuConfigBlock = menu_item_block; - menu_object->MenuSystemAutostart = menu_item_autostart_system; - menu_object->MenuSystemLaunched = menu_item_launched; - menu_object->MenuReloadConfig = menu_item_reload; - menu_object->MenuStatus = menu_item_status; - g_signal_connect(G_OBJECT(menu_item_autostart_config),"activate",G_CALLBACK(on_config_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_autostop),"activate",G_CALLBACK(on_config_autostop_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_block),"activate",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_autostart_system),"activate",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_launched),"activate",G_CALLBACK(on_system_launch_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_reload),"activate",G_CALLBACK(on_update),widgets); - g_signal_connect(G_OBJECT(menu_item_status),"activate",G_CALLBACK(on_info_clicked),widgets); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_configuration_in_config); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostart_config); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostop); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_block); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_separator1); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_configuration_in_system); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostart_system); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_launched); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_separator2); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_reload); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_status); - widgets->RMBMenu=menu; - widgets->menu=menu_object; - gtk_widget_show_all(widgets->RMBMenu); - gtk_menu_popup_at_pointer(GTK_MENU(menu),NULL); - return 0; + GtkTextIter start, end; + GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor)); + gtk_text_buffer_get_end_iter(buffer,&end); + gtk_text_buffer_get_start_iter(buffer,&start); + char *text = gtk_text_buffer_get_text(buffer,&start,&end,1); + if (text){ + if (yon_file_save(window->target,text)){ + yon_ubl_status_box_render(SAVED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } else { + yon_ubl_status_box_render(ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } } +} + +void on_config_edit_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->ConfigList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ConfigMainTree)),&model,&iter)){ + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),EDIT_CONFIG_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),EDIT_CONFIG_LABEL); + gtk_widget_hide(gtk_widget_get_parent(window->SystemTerminal)); + gtk_widget_show(gtk_widget_get_parent(window->TextEditor)); + gtk_widget_show(window->SaveButton); + char *name; + gtk_tree_model_get(model,&iter,0,&name,-1); + int size; + window->target = name; + config_str parsed = yon_config_load(config_get_command(name),&size); + char *text = yon_char_parsed_to_string(parsed,size,""); + gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor)),text,-1); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_config_log_save),window); + gtk_widget_show(window->Window); + } + + } + +} + +void on_system_services_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SYSTEM_STATUS_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),SYSTEM_STATUS_LABEL); + window->target = system_services_status_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_user_services_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),USER_STATUS_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),USER_STATUS_LABEL); + window->target = user_services_status_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_units_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),INSTALLED_UNIT_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),INSTALLED_UNIT_LABEL); + window->target = installed_units_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_units_list_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),UNITS_LIST_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),UNITS_LIST_LABEL); + window->target = list_of_units_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_sockets_list_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SOCKETS_LIST_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),SOCKETS_LIST_LABEL); + window->target = list_of_sockets_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_timers_list_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),TIMERS_LIST_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),TIMERS_LIST_LABEL); + window->target = list_of_timers_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +gboolean yon_interface_update(main_window *widgets){ + if (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); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),NULL); + gtk_list_store_clear(widgets->SystemList); + gtk_list_store_clear(widgets->UserList); + gtk_list_store_clear(widgets->ConfigList); + gtk_list_store_clear(widgets->TimersList); + 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; + 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]); + for (int i=0; iSystemList,&iter); + gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); + } + + } + for (int i=0; iUserList,&iter); + gtk_list_store_set(widgets->UserList,&iter,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); + } + + } + for (int i=0; i2){ + GtkTreeIter iter; + char *description = ""; + gtk_list_store_append(widgets->ConfigList,&iter); + gtk_list_store_set(widgets->ConfigList,&iter,0,parsed[2],1,parsed[1],2,description,-1); + } + } + yon_sessions_update(widgets); + 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); + next = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + g_date_time_unref(datetime); + } else { + next=""; + } + if (!yon_char_is_empty(left)&&atol(left)!=0){ + datetime = g_date_time_new_from_unix_local(atol(left)/1000000); + GDateTime *now = g_date_time_new_now_local(); + left = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + gint64 left_microseconds = 0; + left_microseconds = g_date_time_difference(datetime,now); + left_microseconds/=1000000; + long days = (long)((left_microseconds/60)/60)/24; + long hours = (long)(left_microseconds/60)/60%60; + long minutes = (long)left_microseconds/60%60; + long seconds = (long)left_microseconds%60; + g_date_time_unref(datetime); + left = yon_char_unite(days?yon_char_from_long(days):"",days?" ":"",days?DAYS_LABEL:"",days?" ":"",hours?yon_char_from_long(hours):"",hours?" ":"",hours?HOURS_LABEL:"",hours?" ":"",minutes?yon_char_from_long(minutes):"",minutes?" ":"",minutes?MINUTES_LABEL:"",minutes?" ":"",seconds?yon_char_from_long(seconds):"",seconds?" ":"",seconds?SECONDS_LABEL:"",NULL); + } else { + left=""; + } + if (!yon_char_is_empty(last)&&atol(last)!=0){ + datetime = g_date_time_new_from_unix_local(atol(last)/1000000); + last = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + g_date_time_unref(datetime); + } else { + last=""; + } + if (!yon_char_is_empty(passed)&&atol(passed)!=0){ + datetime = g_date_time_new_from_unix_local(atol(passed)/1000000); + passed = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + g_date_time_unref(datetime); + } else { + passed=""; + } + gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); + } + } + { + 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); + + 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); + + 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); + } + } + } + { + + 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); + + 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); + + 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); + } + } + } + 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; } +void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){ + if (self||pspec){} + 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)); + g_list_free(list); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),0),width_configuration); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),1),width_system); + + list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->UserUnitsTree)); + 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)); + 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)); + g_list_free(list); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),0),width_configuration); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),1),width_system); +} + /**config_init() * [EN] * @@ -706,41 +1284,91 @@ void config_init(){ main_config.lock_save_local=0; main_config.load_mode=1; main_config.update_thread_active=0; -} - -void on_activate(GtkTreeView *self, main_window *widgets){ +} + +void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeModel *model; + GtkWidget *Tree; GtkTreeIter iter; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)); - char *name=NULL; - char *description=NULL; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - gtk_tree_model_get(model,&iter,5,&name,6,&description,-1); - gtk_label_set_text(GTK_LABEL(widgets->ServiceLabel),name); - gtk_label_set_text(GTK_LABEL(widgets->DescriptionLabel),description); - menu_obj *menu=widgets->menu; - if (main_config.rmb_clicked){ - gtk_menu_popup_at_pointer(GTK_MENU(menu->Menu),NULL); + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + char *name, *descr; + gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1); + gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),name); + gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),descr); + gtk_widget_set_sensitive(widgets->SystemStatusButton,1); + gtk_widget_set_sensitive(widgets->SystemInfoButton,1); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->SystemEditButton,1); + gtk_widget_set_sensitive(widgets->SystemLogButton,1); + + } + } else { + gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),""); + gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),""); + gtk_widget_set_sensitive(widgets->SystemStatusButton,0); + gtk_widget_set_sensitive(widgets->SystemInfoButton,0); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->SystemEditButton,0); + gtk_widget_set_sensitive(widgets->SystemLogButton,0); + } } + } else if (page==1){ + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + char *name, *descr; + gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1); + gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),name); + gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),descr); + gtk_widget_set_sensitive(widgets->UserStatusButton,1); + gtk_widget_set_sensitive(widgets->UserInfoButton,1); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->UserEditButton,1); + gtk_widget_set_sensitive(widgets->UserLogButton,1); + } + } else { + gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),""); + gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),""); + gtk_widget_set_sensitive(widgets->UserStatusButton,0); + gtk_widget_set_sensitive(widgets->UserInfoButton,0); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->UserEditButton,0); + gtk_widget_set_sensitive(widgets->UserLogButton,0); + + } + } + + } + if (getuid()==0){ } - main_config.rmb_clicked=0; } -void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ +void on_root_get_root(char *argline){ + yon_launch(argline); +} + +void on_root_access(GtkWidget *self, main_window *widgets){ if (self){}; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - GtkTreeIter iter; - int switch_status=0; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - switch_status=1; + if (getuid()){ + char *argline = LocaleName; + for (int i=1;iWindow); + } } - gtk_widget_set_sensitive(widgets->ConfigAutostartButton,switch_status); - gtk_widget_set_sensitive(widgets->ConfigAutostopButton,switch_status); - gtk_widget_set_sensitive(widgets->ConfigBlockButton,switch_status); - gtk_widget_set_sensitive(widgets->SystemAutostartButton,switch_status); - gtk_widget_set_sensitive(widgets->SystemLaunchButton,switch_status); - gtk_widget_set_sensitive(widgets->InfoButton,switch_status); - gtk_widget_set_sensitive(widgets->LogButton,switch_status); } /**yon_main_window_complete(main_window *widgets) @@ -754,70 +1382,243 @@ void yon_main_window_complete(main_window *widgets){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0); // Custom widgets configuration - - widgets->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); - widgets->liststore2=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2")); + { + widgets->UserList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UserList")); + widgets->TimersList =GTK_LIST_STORE(gtk_builder_get_object(builder,"TimersList")); + widgets->SessionsList=GTK_LIST_STORE(gtk_builder_get_object(builder,"SessionsList")); + widgets->ConfigList=GTK_LIST_STORE(gtk_builder_get_object(builder,"ConfigList")); + widgets->SystemList=GTK_LIST_STORE(gtk_builder_get_object(builder,"SystemList")); widgets->BoxMain=yon_gtk_builder_get_widget(builder,"BoxMain"); - widgets->ServiceSourceCombo=yon_gtk_builder_get_widget(builder,"ServiceSourceCombo"); - widgets->ServiceTypeCombo=yon_gtk_builder_get_widget(builder,"ServiceTypeCombo"); - widgets->SearchEntry=yon_gtk_builder_get_widget(builder,"SearchEntry"); - widgets->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton"); - widgets->ConfigAutostartButton=yon_gtk_builder_get_widget(builder,"ConfigAutostartButton"); - widgets->ConfigAutostopButton=yon_gtk_builder_get_widget(builder,"ConfigAutostopButton"); - widgets->ConfigBlockButton=yon_gtk_builder_get_widget(builder,"ConfigBlockButton"); - widgets->SystemAutostartButton=yon_gtk_builder_get_widget(builder,"SystemAutostartButton"); - widgets->SystemLaunchButton=yon_gtk_builder_get_widget(builder,"SystemLaunchButton"); - widgets->InfoButton=yon_gtk_builder_get_widget(builder,"InfoButton"); - widgets->LogButton=yon_gtk_builder_get_widget(builder,"LogButton"); - widgets->MainUpperTree=yon_gtk_builder_get_widget(builder,"MainUpperTree"); - widgets->MainTree=yon_gtk_builder_get_widget(builder,"MainTree"); - widgets->DescriptionLabel=yon_gtk_builder_get_widget(builder,"DescriptionLabel"); - widgets->ServiceLabel=yon_gtk_builder_get_widget(builder,"ServiceLabel"); - GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree)); - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->MainTree)); - g_signal_connect(G_OBJECT(widgets->MainTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); - g_signal_connect(G_OBJECT(widgets->ConfigAutostartButton),"clicked",G_CALLBACK(on_config_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->ConfigAutostopButton),"clicked",G_CALLBACK(on_config_autostop_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->ConfigBlockButton),"clicked",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemAutostartButton),"clicked",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemLaunchButton),"clicked",G_CALLBACK(on_system_launch_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update),widgets); - g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->LogButton),"clicked",G_CALLBACK(on_log_show),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_activate),widgets); - g_signal_connect(G_OBJECT(widgets->ServiceTypeCombo),"changed",G_CALLBACK(on_type_changed),widgets); - g_signal_connect(G_OBJECT(widgets->ServiceSourceCombo),"changed",G_CALLBACK(on_type_changed),widgets); + widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry"); + widgets->SystemUpperTree=yon_gtk_builder_get_widget(builder,"SystemUpperTree"); + widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree"); + widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); + + widgets->SystemServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"SystemServicesStatusMenuItem"); + widgets->UserServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"UserServicesStatusMenuItem"); + widgets->InstalledUnitsStatusMenuItem=yon_gtk_builder_get_widget(builder,"InstalledUnitsStatusMenuItem"); + widgets->UnitsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"UnitsStatusListMenuItem"); + widgets->SocketsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"SocketsStatusListMenuItem"); + widgets->TimersStatusListMenuItem=yon_gtk_builder_get_widget(builder,"TimersStatusListMenuItem"); + + widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry"); + widgets->SystemFiltersCombo=yon_gtk_builder_get_widget(builder,"SystemFiltersCombo"); + widgets->SystemInactiveShowCheck=yon_gtk_builder_get_widget(builder,"SystemInactiveShowCheck"); + widgets->SystemUnloadedShowCheck=yon_gtk_builder_get_widget(builder,"SystemUnloadedShowCheck"); + widgets->SystemUpperTree=yon_gtk_builder_get_widget(builder,"SystemUpperTree"); + widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree"); + widgets->SystemPrevButton=yon_gtk_builder_get_widget(builder,"SystemPrevButton"); + widgets->SystemUpdateButton=yon_gtk_builder_get_widget(builder,"SystemUpdateButton"); + widgets->SystemInfoButton=yon_gtk_builder_get_widget(builder,"SystemInfoButton"); + widgets->SystemLogButton=yon_gtk_builder_get_widget(builder,"SystemLogButton"); + widgets->SystemEditButton=yon_gtk_builder_get_widget(builder,"SystemEditButton"); + widgets->SystemPropertiesButton=yon_gtk_builder_get_widget(builder,"SystemPropertiesButton"); + widgets->SystemFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"SystemFilter")); + widgets->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter")); + widgets->SystemStatusButton=yon_gtk_builder_get_widget(builder,"SystemStatusButton"); + widgets->ConfigAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostartCell")); + widgets->ConfigAutostopCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostopCell")); + widgets->ConfigBlockCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigBlockCell")); + widgets->SystemAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"SystemAutostartCell")); + widgets->SystemLaunchedCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"SystemLaunchedCell")); + + widgets->UserConfigAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigAutostartCell")); + widgets->UserConfigAutostopCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigAutostopCell")); + widgets->UserConfigBlockCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigBlockCell")); + widgets->UserSystemAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserSystemAutostartCell")); + widgets->UserSystemLaunchedCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserSystemLaunchedCell")); + widgets->SystemMenu = yon_rmb_menu_setup(widgets->SystemUnitsTree,NULL,NULL, + RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets, + STATUS_LABEL,status_icon_path,on_system_info_clicked,widgets, + SHOW_LOG_LABEL,log_icon_path,on_system_log_clicked,widgets, + SHOW_SOURCE_LABEL,source_icon_path,on_system_edit_clicked,widgets, + PROPERTIES_LABEL,properties_icon_path,on_system_status_clicked,widgets, + NULL); + + widgets->UserSearchEntry=yon_gtk_builder_get_widget(builder,"UserSearchEntry"); + widgets->UserFiltersCombo=yon_gtk_builder_get_widget(builder,"UserFiltersCombo"); + widgets->UserInactiveShowCheck=yon_gtk_builder_get_widget(builder,"UserInactiveShowCheck"); + widgets->UserUnloadedShowCheck=yon_gtk_builder_get_widget(builder,"UserUnloadedShowCheck"); + widgets->UsersUpperTree=yon_gtk_builder_get_widget(builder,"UsersUpperTree"); + widgets->UserUnitsTree=yon_gtk_builder_get_widget(builder,"UserUnitsTree"); + widgets->UserPrevButton=yon_gtk_builder_get_widget(builder,"UserPrevButton"); + widgets->UserUpdateButton=yon_gtk_builder_get_widget(builder,"UserUpdateButton"); + widgets->UserInfoButton=yon_gtk_builder_get_widget(builder,"UserInfoButton"); + widgets->UserLogButton=yon_gtk_builder_get_widget(builder,"UserLogButton"); + widgets->UserEditButton=yon_gtk_builder_get_widget(builder,"UserEditButton"); + widgets->UserStatusButton=yon_gtk_builder_get_widget(builder,"UserStatusButton"); + widgets->UserServiceLabel=yon_gtk_builder_get_widget(builder,"UserServiceLabel"); + widgets->UserDescriptionLabel=yon_gtk_builder_get_widget(builder,"UserDescriptionLabel"); + widgets->UserMenu = yon_rmb_menu_setup(widgets->UserUnitsTree,NULL,NULL, + RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets, + STATUS_LABEL,status_icon_path,on_user_info_clicked,widgets, + SHOW_LOG_LABEL,log_icon_path,on_user_log_clicked,widgets, + SHOW_SOURCE_LABEL,source_icon_path,on_user_edit_clicked,widgets, + PROPERTIES_LABEL,properties_icon_path,on_user_status_clicked,widgets, + NULL); + + widgets->ConfigEditButton=yon_gtk_builder_get_widget(builder,"ConfigEditButton"); + widgets->ConfigMainTree=yon_gtk_builder_get_widget(builder,"ConfigMainTree"); + + widgets->SessionMainTree=yon_gtk_builder_get_widget(builder,"SessionMainTree"); + widgets->SessionStartButton=yon_gtk_builder_get_widget(builder,"SessionStartButton"); + widgets->SessionStopButton=yon_gtk_builder_get_widget(builder,"SessionStopButton"); + widgets->SessionBlockButton=yon_gtk_builder_get_widget(builder,"SessionBlockButton"); + widgets->SessionMenu = yon_rmb_menu_setup(widgets->SessionMainTree,NULL,NULL, + ACTIVATE_SESSION_LABEL,play_icon_path,G_CALLBACK(on_session_activate),widgets, + END_SESSION_LABEL,stop_icon_path,G_CALLBACK(on_session_end),widgets, + BLOCK_SESSION_LABEL,block_icon_path,G_CALLBACK(on_session_block),widgets, + NULL); + { + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->SystemMenu->menu)); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorTop"); + g_list_free(list); + } + { + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->UserMenu->menu)); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorTop"); + g_list_free(list); + } + widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel"); + widgets->SystemDescriptionLabel=yon_gtk_builder_get_widget(builder,"SystemDescriptionLabel"); + } + widgets->TimersMainTree=yon_gtk_builder_get_widget(builder,"TimersMainTree"); + GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree)); + yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree)); + + g_signal_connect(G_OBJECT(widgets->SystemPrevButton),"clicked",G_CALLBACK(on_system_update_hz_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemUpdateButton),"clicked",G_CALLBACK(on_system_update_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInfoButton),"clicked",G_CALLBACK(on_system_info_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemLogButton),"clicked",G_CALLBACK(on_system_log_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemEditButton),"clicked",G_CALLBACK(on_system_edit_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemStatusButton),"clicked",G_CALLBACK(on_system_status_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + + g_signal_connect(G_OBJECT(widgets->UserPrevButton),"clicked",G_CALLBACK(on_user_update_hz_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserUpdateButton),"clicked",G_CALLBACK(on_user_update_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserInfoButton),"clicked",G_CALLBACK(on_user_info_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserLogButton),"clicked",G_CALLBACK(on_user_log_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserEditButton),"clicked",G_CALLBACK(on_user_edit_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserStatusButton),"clicked",G_CALLBACK(on_user_status_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + + g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),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); + + g_signal_connect(G_OBJECT(widgets->SystemServicesStatusMenuItem),"activate",G_CALLBACK(on_system_services_status),widgets); + g_signal_connect(G_OBJECT(widgets->UserServicesStatusMenuItem),"activate",G_CALLBACK(on_user_services_status),widgets); + g_signal_connect(G_OBJECT(widgets->InstalledUnitsStatusMenuItem),"activate",G_CALLBACK(on_units_status),widgets); + g_signal_connect(G_OBJECT(widgets->UnitsStatusListMenuItem),"activate",G_CALLBACK(on_units_list_status),widgets); + g_signal_connect(G_OBJECT(widgets->SocketsStatusListMenuItem),"activate",G_CALLBACK(on_sockets_list_status),widgets); + g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets); + + g_signal_connect(G_OBJECT(widgets->ConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->ConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->ConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); + + g_signal_connect(G_OBJECT(widgets->UserConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); + if (getuid()==0){ + g_signal_connect(G_OBJECT(widgets->SystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + + g_signal_connect(G_OBJECT(widgets->UserSystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserSystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + } else { + gtk_widget_set_sensitive(widgets->SystemUpdateButton,0); + gtk_widget_set_sensitive(widgets->UserUpdateButton,0); + gtk_widget_set_sensitive(widgets->SystemPrevButton,0); + gtk_widget_set_sensitive(widgets->UserPrevButton,0); + } + 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)); + yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SessionMainTree)); + yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->TimersMainTree)); + g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->SystemUnloadedShowCheck); + g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->UserUnloadedShowCheck); + for (unsigned int i=0;iUserUnitsTree)); + for (unsigned int i=0;iConfigMainTree)); + for (unsigned int i=0;iSessionMainTree)); + for (unsigned int i=0;iTimersMainTree)); + for (unsigned int i=0;iLoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); - g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); - g_list_free(list); - main_config.ServiceFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter),(GtkTreeModelFilterVisibleFunc)on_service_filter,NULL,NULL); - main_config.SocketFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SocketFilter),(GtkTreeModelFilterVisibleFunc)on_socket_filter,NULL,NULL); - main_config.AutolaunchFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.AutolaunchFilter),(GtkTreeModelFilterVisibleFunc)on_autostart_filter,NULL,NULL); - main_config.StoppedFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.StoppedFilter),(GtkTreeModelFilterVisibleFunc)on_stopped_filter,NULL,NULL); - main_config.BlockedFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter),(GtkTreeModelFilterVisibleFunc)on_blocked_filter,NULL,NULL); - gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->MainTree),GTK_ENTRY(widgets->SearchEntry)); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); + g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + GtkWidget *root_item = gtk_menu_item_new(); + gtk_style_context_add_class(gtk_widget_get_style_context(root_item),"menuitemtop"); + gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); + gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *root_label = gtk_label_new(ROOT_CHECK_LABEL); + GtkWidget *root_check = gtk_check_button_new(); + gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->DocumentationMenuItem)),root_item); + gtk_box_pack_start(GTK_BOX(box),root_label,1,1,0); + gtk_box_pack_start(GTK_BOX(box),root_check,0,0,0); + gtk_container_add(GTK_CONTAINER(root_item),box); + gtk_widget_show_all(root_item); + g_signal_connect(G_OBJECT(root_item),"activate", G_CALLBACK(on_root_access),widgets); + if (getuid()==0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(root_check),1); + gtk_widget_set_sensitive(root_item,0); + } + gtk_tree_model_filter_set_visible_func(widgets->UserFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); + gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,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); if (!main_config.update_thread_active){ main_config.update_thread_active=1; - gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); + pthread_t tid; + pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); } + yon_save_window_set_postsave_function(on_save_done,widgets); } int main(int argc, char *argv[]){ @@ -833,6 +1634,15 @@ int main(int argc, char *argv[]){ gtk_init(&argc,&argv); template_main_window *widgets = yon_ubl_window_setup(); yon_main_window_complete((main_window*)widgets); + char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); + yon_window_config_load(path); + if (getuid()!=0){ + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + textdomain(LocaleName); + } + main_config.launch_arguments=argv; + main_config.launch_size=argc; gtk_main(); return 0; } \ No newline at end of file diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a98cd69..62429f2 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -13,6 +13,7 @@ #include #include #include +#include #ifdef WEBKIT_FOUND #include #endif @@ -23,8 +24,7 @@ #define _(String) gettext(String) #define glade_path "/com/ublinux/ui/ubl-settings-services.glade" -#define glade_path_terminal "/com/ublinux/ui/ubl-settings-services-terminal.glade" -#define glade_path_log "/com/ublinux/ui/ubl-settings-services-log.glade" +#define glade_path_log "/com/ublinux/ui/ubl-settings-services-terminal.glade" #define banner_path "/com/ublinux/images/ubl-settings-services-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-services.css" @@ -33,20 +33,84 @@ #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-services" -#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' -e 's/running /running;/g' -e 's/inactive /inactive;/g'" -#define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g'",NULL) -#define load_system_services_command "systemctl --system list-units --type=service --type=socket --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 --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:" -#define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" +#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) +#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:" +#define load_launched_command "systemctl list-units --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" #define service_start_command(target) yon_char_append("systemctl start --no-pager ",target) #define service_stop_command(target) yon_char_append("systemctl stop --no-pager ",target) #define service_enable_command(target) yon_char_append("systemctl enable --no-pager ",target) #define service_disable_command(target) yon_char_append("systemctl disable --no-pager ",target) -#define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",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 start_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",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) +#define show_source_command(target) yon_char_append("systemctl edit --full ",target) +#define properties_command(target) yon_char_append("systemctl show --no-pager ",target) + +#define user_service_info_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ status -l --no-pager ",target,NULL) +#define user_get_log_command(target) yon_char_unite("usermod -a -G systemd-journal ",yon_ubl_root_user_get(),";journalctl --user -u --all --no-pager --unit ",target,NULL) +#define user_show_source_command(target) yon_char_unite("systemctl edit --full ",target,NULL) +#define user_properties_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ show --no-pager ",target,NULL) + +#define get_config_files_command "find /etc/systemd -iname *.conf -exec du -sh --time {} \\;|sed -e 's/\t/;/g'" + +#define system_services_status_command "systemctl status --no-pager" +#define user_services_status_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ status --no-pager",NULL) +#define installed_units_states_command "systemctl list-unit-files --no-pager" +#define list_of_units_states_command "systemctl list-units --all --no-pager" +#define list_of_sockets_states_command "systemctl list-sockets --all --no-pager" +#define list_of_timers_states_command "systemctl list-timers --all --no-pager" +#define get_timers_command "systemctl list-timers --all --no-pager --plain --no-legend --output=json" + +#define installed_units_command "systemctl list-unit-files --no-pager| sed -e 's/ */;/g'" +#define list_of_units_command "systemctl list-units --all --no-pager| sed -e 's/ */;/g'" +#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 config_get_command(target) yon_char_append("cat ",target) + +#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_global_only_parameters "" +#define config_get_local_only_parameters "" + +#define SERVICES_ENABLE_get_command "ubconfig --source global get [system] SERVICES_ENABLE" +#define SERVICES_DISABLE_get_command "ubconfig --source global get [system] SERVICES_DISABLE" +#define SERVICES_MASK_get_command "ubconfig --source global get [system] SERVICES_MASK" +#define CONSOLE_FONT_get_command "ubconfig --source global get [locale] CONSOLE_FONT" + +#define play_icon_path "com.ublinux.ubl-settings-services.play-symbolic" +#define stop_icon_path "com.ublinux.ubl-settings-services.stop-symbolic" +#define block_icon_path "com.ublinux.ubl-settings-services.cancel-symbolic" +#define start_icon_path "com.ublinux.ubl-settings-services.launch-symbolic" +#define update_icon_path "com.ublinux.ubl-settings-services.sync-symbolic" +#define launch_icon_path "com.ublinux.ubl-settings-services.check-symbolic" +#define log_icon_path "com.ublinux.ubl-settings-services.lookup-symbolic" +#define source_icon_path "com.ublinux.ubl-settings-services.source-symbolic" +#define properties_icon_path "com.ublinux.ubl-settings-services.properties-symbolic" +#define status_icon_path "com.ublinux.ubl-settings-services.important-symbolic" + +#define reload_systemd_root_command "systemctl daemon-reload" +#define reexec_systemd_root_command "systemctl daemon-reexec" + +#define reload_systemd_user_command "systemctl --user daemon-reload" +#define reexec_systemd_user_command "systemctl --user daemon-reexec" + +#define session_activate_session(target) yon_char_append("loginctl activate ",target) +#define session_terminate_session(target) yon_char_append("loginctl terminate-session ",target) +#define session_lock_session(target) yon_char_append("loginctl lock-session ",target) +#define session_unlock_session(target) yon_char_append("loginctl unlock-session ",target) + +#define SERVICES_ENABLE_PARAMETER "SERVICES_ENABLE" +#define SERVICES_DISABLE_PARAMETER "SERVICES_DISABLE" +#define SERVICES_MASK_PARAMETER "SERVICES_MASK" typedef char* string; string version_application; @@ -54,22 +118,7 @@ string version_application; char *local; typedef struct { -// Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT { - int socket_id; - int load_socket_id; - int save_socket_id; - - int lock_help; - int lock_save_local; - int lock_save_global; - int lock_load_global; - int lock_load_system; - - int load_mode; - - int always_open_documentation; -// } Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT -// Type custom parameters below: + template_config_fields int rmb_clicked; GtkTreeModel *ServiceFilter; GtkTreeModel *SocketFilter; @@ -79,72 +128,86 @@ typedef struct { GtkTreeModel *SourceFilter; int update_thread_active; + config_str launch_arguments; + int launch_size; + int save_config; } config; - -typedef struct { - GtkWidget *Menu; - GtkWidget *MenuConfigAutostart; - GtkWidget *MenuConfigAutostop; - GtkWidget *MenuConfigBlock; - GtkWidget *MenuSystemAutostart; - GtkWidget *MenuSystemLaunched; - GtkWidget *MenuReloadConfig; - GtkWidget *MenuStatus; -} menu_obj; typedef struct { -// Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT { - GtkWidget *Window; - GtkWidget *HeadLabel; - GtkWidget *PlugBox; - - GtkWidget *HeadOverlay; - GtkWidget *HeadImage; - GtkWidget *HeadBox; - GtkWidget *HeadTitleLabel; - GtkWidget *HeadInfoLabel; - - GtkWidget *StatusBox; - GtkWidget *StatusIcon; - GtkWidget *StatusLabel; - - GtkWidget *SaveMenuItem; - GtkWidget *SaveGlobalMenuItem; - GtkWidget *SaveLocalMenuItem; - GtkWidget *RightBox; - - GtkWidget *LoadGlobalMenuItem; - GtkWidget *LoadLocalMenuItem; - GtkWidget *LeftBox; - - GtkWidget *DocumentationMenuItem; - GtkWidget *AboutMenuItem; - - GtkWidget *InterfaceBox; -// } Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT -// Type custom parameters below: - GtkListStore *liststore1; - GtkListStore *liststore2; + template_window_fields + GtkListStore *UserList; + GtkListStore *TimersList; + GtkListStore *SessionsList; + GtkListStore *ConfigList; + GtkListStore *SystemList; GtkWidget *BoxMain; - GtkWidget *ServiceSourceCombo; - GtkWidget *ServiceTypeCombo; - GtkWidget *SearchEntry; - GtkWidget *UpdateButton; - GtkWidget *ConfigAutostartButton; - GtkWidget *ConfigAutostopButton; - GtkWidget *ConfigBlockButton; - GtkWidget *SystemAutostartButton; - GtkWidget *SystemLaunchButton; - GtkWidget *InfoButton; - GtkWidget *LogButton; - GtkWidget *MainUpperTree; - GtkWidget *MainTree; - GtkWidget *RMBMenu; - menu_obj *menu; - GtkWidget *ServiceLabel; - GtkWidget *DescriptionLabel; + + GtkWidget *SystemSearchEntry; + GtkWidget *SystemFiltersCombo; + GtkWidget *SystemInactiveShowCheck; + GtkWidget *SystemUnloadedShowCheck; + GtkWidget *SystemUpperTree; + GtkWidget *SystemUnitsTree; + GtkWidget *SystemPrevButton; + GtkWidget *SystemUpdateButton; + GtkWidget *SystemInfoButton; + GtkWidget *SystemLogButton; + GtkWidget *SystemEditButton; + GtkWidget *SystemPropertiesButton; + GtkWidget *SystemStatusButton; + rmb_menu_window *SystemMenu; + GtkWidget *SystemServiceLabel; + GtkWidget *SystemDescriptionLabel; + + GtkWidget *UserSearchEntry; + GtkWidget *UserFiltersCombo; + GtkWidget *UserInactiveShowCheck; + GtkWidget *UserUnloadedShowCheck; + GtkWidget *UsersUpperTree; + GtkWidget *UserUnitsTree; + GtkWidget *UserPrevButton; + GtkWidget *UserUpdateButton; + GtkWidget *UserInfoButton; + GtkWidget *UserLogButton; + GtkWidget *UserEditButton; + GtkWidget *UserStatusButton; + rmb_menu_window *UserMenu; + GtkWidget *UserServiceLabel; + GtkWidget *UserDescriptionLabel; + + GtkWidget *ConfigEditButton; + GtkWidget *ConfigMainTree; + + GtkWidget *SessionMainTree; + GtkWidget *SessionStartButton; + GtkWidget *SessionStopButton; + GtkWidget *SessionBlockButton; + rmb_menu_window *SessionMenu; + + GtkWidget *TimersMainTree; + GtkWidget *MainNotebook; + + GtkWidget *SystemServicesStatusMenuItem; + GtkWidget *UserServicesStatusMenuItem; + GtkWidget *InstalledUnitsStatusMenuItem; + GtkWidget *UnitsStatusListMenuItem; + GtkWidget *SocketsStatusListMenuItem; + GtkWidget *TimersStatusListMenuItem; + GtkTreeModelFilter *SystemFilter; + GtkTreeModelFilter *UserFilter; + GtkCellRenderer *ConfigAutostartCell; + GtkCellRenderer *ConfigAutostopCell; + GtkCellRenderer *ConfigBlockCell; + GtkCellRenderer *SystemAutostartCell; + GtkCellRenderer *SystemLaunchedCell; + + GtkCellRenderer *UserConfigAutostartCell; + GtkCellRenderer *UserConfigAutostopCell; + GtkCellRenderer *UserConfigBlockCell; + GtkCellRenderer *UserSystemAutostartCell; + GtkCellRenderer *UserSystemLaunchedCell; } main_window; typedef struct { @@ -175,18 +238,16 @@ typedef struct{ GtkWidget *MainTree; } bl_settings_services_window; -typedef struct { - GtkWidget *Window; - GtkWidget *UpdateButton; - GtkWidget *SystemTerminal; - GtkWidget *webHeaderNameLabel; - char *target; -} terminal_window; - typedef struct { GtkWidget *Window; GtkWidget *SystemTerminal; + GtkWidget *TerminalScroll; + GtkWidget *TextEditor; GtkWidget *webHeaderNameLabel; + GtkWidget *UpdateButton; + GtkWidget *SaveButton; + GtkWidget *StatusBox; + GtkAdjustment *adjustment; char *target; } log_window; @@ -194,14 +255,35 @@ void on_config_local_load(GtkWidget *self,main_window *widgets); void on_config_global_load(GtkWidget *self,main_window *widgets); +void on_config_custom_load(GtkWidget *self,main_window *widgets); + void on_config_global_local_save(); void on_config_local_save(); void on_config_global_save(); +void on_config_custom_save(GtkWidget *self, main_window *widgets); + +void on_service_constant_update(); + log_window *yon_log_window_new(); +gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets); +void on_filter_changed(GtkWidget *self, main_window *widgets); + +void on_system_services_status(GtkWidget *self, main_window *widgets); + +void on_user_services_status(GtkWidget *self, main_window *widgets); + +void on_units_status(GtkWidget *self, main_window *widgets); + +void on_units_list_status(GtkWidget *self, main_window *widgets); + +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); GtkWidget *yon_menu_button_create(char *icon_name, char *text); @@ -212,19 +294,70 @@ gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window GtkWidget *yon_menu_separator_create(); -void on_config_autostart_clicked(); +void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets); void on_activate(GtkTreeView *self, main_window *widgets); -void on_config_autostop_clicked(); +void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets); -void on_config_block_clicked(); +void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets); -void on_system_autostart_clicked(); +void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets); void on_system_kill_confirmed(GtkWidget *self,char *service_name); -void on_system_launch_clicked(); +void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets); + +void on_system_restart_clicked(GtkWidget *self, main_window *widgets); + +void on_source_show(); + +void on_properties_show(); + +void yon_sessions_update(main_window *widgets); + +void on_session_activate(); + +void on_session_end(); + +void on_session_block(); + +void yon_system_systemd_restart(GtkWidget *self, main_window *widgets); +void yon_user_systemd_restart(GtkWidget *self, main_window *widgets); + +void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets); + +void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets); + +void on_system_update_clicked(GtkWidget *self, main_window *widgets); + +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); +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); + +void on_filter_changed(GtkWidget *self, main_window *widgets); + +void on_system_status_clicked(GtkWidget *self, main_window *widgets); + +void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets); + +void on_user_update_clicked(GtkWidget *self, main_window *widgets); + +void on_user_info_clicked(GtkWidget *self, main_window *widgets); + +void on_user_log_clicked(GtkWidget *self, main_window *widgets); + +void on_user_edit_clicked(GtkWidget *self, main_window *widgets); + +void on_user_status_clicked(GtkWidget *self, main_window *widgets); + +void on_config_log_save(GtkWidget *self, log_window *window); +void on_config_edit_clicked(GtkWidget *self, main_window *widgets); gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data); @@ -268,6 +401,7 @@ gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); -terminal_window *yon_terminal_window_new(); +void on_root_get_root(char *argline); +void on_root_access(GtkWidget *self, main_window *widgets); -void on_service_update(GtkWidget *self, terminal_window* window); \ No newline at end of file +void on_save_done(main_window *widgets, config_str output, int size); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index ecc6005..971fb69 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -44,6 +44,100 @@ #define LAUNCHED_LABEL _("Launched") #define LIST_LOAD_LABEL _("Service list is loading") #define STATUS_LABEL _("Status") +#define RESTART_LABEL _("Restart with new configuration") +#define SHOW_LOG_LABEL _("Show log") +#define SHOW_SOURCE_LABEL _("Show source") +#define PROPERTIES_LABEL _("Properties") +#define ACTIVATE_SESSION_LABEL _("Activate session") +#define END_SESSION_LABEL _("End session") +#define BLOCK_SESSION_LABEL _("Block session") + +#define SOURCE_UNFOUND_LABEL _("Service source were not loaded") + +#define SAVING_LABEL _("Saving...") +#define SAVED_LABEL _("Saved") +#define ERROR_LABEL _("Error has occured") #define SWITCH_OFF_ERROR_LABEL _("Service were not stopped") -#define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) \ No newline at end of file +#define REEXEC_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to restart "),target,"?\n",_("The system may become unstable."),NULL) +#define RELOAD_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to reload "),target,"?\n",_("The system may become unstable."),NULL) +#define DAYS_LABEL _("Days") +#define HOURS_LABEL _("Hours") +#define MINUTES_LABEL _("Minutes") +#define SECONDS_LABEL _("Seconds") + +#define ACTIVE_LABEL _("Active") +#define INACTIVE_LABEL _("Inactive") + +#define SYSTEM_UNITS_LABEL _("System units") +#define USER_UNITS_LABEL _("User units") +#define CONFIG_FILES_LABEL _("Config files") +#define SESSIONS__LABEL _("Sessions") +#define TIMERS_LABEL _("Timers") + +#define SYSTEM_STATUS_LABEL _("System services status") +#define USER_STATUS_LABEL _("User services status") +#define INSTALLED_UNIT_LABEL _("Installed unit files") +#define UNITS_LIST_LABEL _("Units and status list") +#define SOCKETS_LIST_LABEL _("Sockets and status list") +#define TIMERS_LIST_LABEL _("Timers and status list") + +#define UNIT_LABEL _("Unit") + +#define RELAUNCH_SYSTEMCTL_LABEL _("Relaunch systemctl") +#define REEXEC_SYSTEMCTL_LABEL _("Reexec systemctl") +#define SHOW_SERVICE_INFO_LABEL _("Show service information") +#define SHOW_SERVICE_LOG_LABEL _("Show service log") +#define SHOW_SERVICE_SOURCE_LABEL _("Show service source file") +#define SHOW_SERVICE_PROPERTIES_LABEL _("Show service properties") +#define SHOW_LABEL _("Show...") + +#define EDIT_CONFIG_LABEL _("Edit configuration file") + +#define SHOW_INACTIVE_LABEL _("Show inactive") +#define SHOW_UNLOADED_LABEL _("Show unloaded") + +#define FILE_LABEL _("File") +#define CHANGE_DATE_LABEL _("Change date") +#define DESCRIPTION_TAB_LABEL _("Description") +#define EDIT_LABEL _("Edit") + +#define SESSION_ID_LABEL _("Session ID") +#define USER_ID_LABEL _("User ID") +#define USER_NAME_LABEL _("User name") +#define SEAT_ID_LABEL _("Seat ID") + +#define SESSION_START_LABEL _("Start session") +#define SESSION_END_LABEL _("Stop session") +#define SESSION_LOCK_LABEL _("Lock session") + +#define TIMER_LABEL _("Timer") +#define NEXT_LABEL _("Next") +#define LEFT_LABEL _("Left") +#define LAST_LABEL _("Last") +#define PASSED_LABEL _("Passed") +#define ACTIVATES_LABEL _("Activates") + +#define STATE_ACTIVE_LABEL _("active") +#define STATE_DEAD_LABEL _("dead") +#define STATE_WAITING_LABEL _("waiting") +#define STATE_RUNNING_LABEL _("running") +#define STATE_LISTENING_LABEL _("listening") +#define STATE_EXITED_LABEL _("exited") +#define STATE_MOUNTED_LABEL _("mounted") +#define STATE_PLUGGED_LABEL _("plugged") +#define STATE_ABANDONED_LABEL _("abandoned") + +#define ROOT_CHECK_LABEL _("Upgrade to root") + +#define SERVICE_STATE_TITLE_LABEL(target) yon_char_append(_("State of "),target) +#define SERVICE_LOG_TITLE_LABEL(target) yon_char_unite(_("View")," ",target," ",_("log"),NULL) +#define SERVICE_UNIT_EDIT_TITLE_LABEL _("Edit unit file") + +#define SYSTEMD_REEXEC_ERROR_LABEL _("Failed to re-execute systemd") +#define SYSTEMD_RELAUNCH_ERROR_LABEL _("failed to relaunch systemd") + +#define SYSTEMD_REEXEC_SUCCESS_LABEL _("Systemd has been re-executed") +#define SYSTEMD_RELAUNCH_SUCCESS_LABEL _("Systemd has been relaunched") + +#define SAVE_LABEL _("Save") \ No newline at end of file diff --git a/ubl-settings-services-log.glade b/ubl-settings-services-log.glade deleted file mode 100644 index 9b05667..0000000 --- a/ubl-settings-services-log.glade +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - 100 - 1 - 10 - - - 800 - 600 - False - com.ublinux.ubl-settings-usergroups - - - True - False - 5 - 5 - 5 - 5 - 5 - - - True - False - - - True - True - always - always - in - - - True - False - - - True - False - True - natural - adjustment1 - natural - UTF-8 - True - 0 - True - False - - - - - - - True - True - 0 - - - - - True - True - 1 - - - - - - - True - False - True - - - True - False - Services and processes - service information - - - - - - - - - diff --git a/ubl-settings-services-terminal.glade b/ubl-settings-services-terminal.glade index ba2cd2f..e43daa6 100644 --- a/ubl-settings-services-terminal.glade +++ b/ubl-settings-services-terminal.glade @@ -14,6 +14,12 @@ False com.ublinux.ubl-settings-services.sync-symbolic + + True + False + com.ublinux.ubl-settings-services.save-symbolic + + 800 600 @@ -23,32 +29,14 @@ True False - 5 - 5 - 5 - 5 - 5 + vertical - + True False vertical - - True - True - True - Update - image1 - - - - False - True - 0 - + @@ -61,35 +49,126 @@ True False + 5 + 5 + 5 + 5 5 - + True - False - True - natural - adjustment1 - natural - UTF-8 - 0 - True - False + False + vertical + 5 + + + True + True + True + Update + image1 + + + + False + True + 0 + + + + + True + True + Save + image2 + + + + False + True + 1 + + - True + False True 0 - + True False - vertical - adjustment1 + 5 + + + True + False + + + True + False + True + natural + adjustment1 + natural + UTF-8 + 0 + True + False + + + True + True + 0 + + + + + True + False + vertical + adjustment1 + + + False + True + 1 + + + + + True + True + 0 + + + + + True + in + + + True + True + textbuffer1 + + + + + True + True + 2 + + - False + True True 1 diff --git a/ubl-settings-services.css b/ubl-settings-services.css index fee529c..1ca94fe 100644 --- a/ubl-settings-services.css +++ b/ubl-settings-services.css @@ -118,12 +118,18 @@ background:transparent; border-style:solid; } -.sepat{ +.separatorTop{ border-color: darker (@theme_bg_color); border-top-width:1px; border-style:solid; } +.separatorBottom{ + border-color: darker (@theme_bg_color); + border-bottom-width:1px; + border-style:solid; +} + .marginright image{ margin-right: 2px; } diff --git a/ubl-settings-services.desktop b/ubl-settings-services.desktop index 3df33d6..494dca1 100644 --- a/ubl-settings-services.desktop +++ b/ubl-settings-services.desktop @@ -7,7 +7,7 @@ GenericName[ru]=Службы и процесссы systemd Comment=System cervices and processes configuration Comment[ru]=Настройка работы служб и процессов системы Type=Application -Exec=pkexec ubl-settings-services +Exec=ubl-settings-services Icon=com.ublinux.ubl-settings-services Terminal=false X-XfcePluggable=true diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index ce0ef08..5d0fa4e 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -3,155 +3,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SystemList + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UserList + True False - com.ublinux.ubl-settings-services.play-symbolic + com.ublinux.ubl-settings-services.sync-time-symbolic - + True False com.ublinux.ubl-settings-services.stop-symbolic - + True False - com.ublinux.ubl-settings-services.cancel-uncolored-symbolic + com.ublinux.ubl-settings-services.play-symbolic - + True False - com.ublinux.ubl-settings-services.launch-symbolic + com.ublinux.ubl-settings-services.edit-symbolic - + True False - com.ublinux.ubl-settings-services.check-symbolic + com.ublinux.ubl-settings-services.sync-time-symbolic - + + True + False + com.ublinux.ubl-settings-services.sync-symbolic + + True False com.ublinux.ubl-settings-services.important-symbolic - + + True + False + com.ublinux.ubl-settings-services.lookup-symbolic + + + True + False + com.ublinux.ubl-settings-services.source-symbolic + + + True + False + com.ublinux.ubl-settings-services.properties-symbolic + + + True + False + com.ublinux.ubl-settings-services.important-symbolic + + True False com.ublinux.ubl-settings-services.lookup-symbolic + + True + False + com.ublinux.ubl-settings-services.source-symbolic + + + True + False + com.ublinux.ubl-settings-services.properties-symbolic + True False com.ublinux.ubl-settings-services.sync-symbolic + + True + False + com.ublinux.ubl-settings-services.lock-symbolic + - - - - - - - - - - - - - - - - - - - - - + + + True + False + + + True + False + System services status + True + + + + + True + False + User services status + True + + + + + True + False + Installed unit files + True + + + + + True + False + Units and status list + True + + + + + True + False + Sockets and status list + True + + + + + True + False + Timers and status list + True + + True False vertical - + True - False - 0.019999999552965164 - in + True - + True False - 5 - 5 - 5 + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 5 + + + True + False + 0 + + All + Autolaunch in configuration + Stopped in configuration + Blocked in configuration + service + swap + socket + target + device + automount + timer + slice + path + scope + + + + False + True + 0 + + + + + Show inactive + True + True + False + True + + + False + True + 1 + + + + + Show unloaded + True + False + True + False + True + + + False + True + 2 + + + + + True + True + edit-find-symbolic + False + False + + + True + True + 3 + + + + + False + True + 0 + + True False - vertical 5 True False + vertical 5 - + True - False - 0 - - All services - System services only - User services only - + True + True + Relaunch systemctl + image1 + - True + False True 0 - + True - False - 0 - - All - Services - Sockets - Autolaunch in configuration - Stopped in configuration - Blocked in configuration - + True + True + Reexec systemctl + image8 + - True + False True 1 - + True - True - edit-find-symbolic - False - False + False - True + False True 2 - + True + False True True - Update - image8 + Show service information + image3 @@ -162,179 +414,109 @@ 3 - - - False - True - 0 - - - - - True - False - 5 - + True - False - vertical - 5 - - - True - False - True - True - Toggle autostart at configuration - image1 - - - - False - True - 0 - - - - - True - False - True - True - Toggle autostop at configuration - image2 - - - - False - True - 1 - - - - - True - False - True - True - Toggle service blocking at configuration - image3 - - - - False - True - 2 - - - - - True - False - - - False - True - 3 - - - - - True - False - True - True - Toggle autostart at system - image4 - - - - False - True - 4 - - - - - True - False - True - True - Launch/Stop service - image5 - - - - False - True - 5 - - + False + True + True + Show service log + image4 + + + + False + True + 4 + + + + + True + False + True + True + Show service source file + image5 + + + + False + True + 5 + + + + + True + False + True + True + Show service properties + image7 + + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + True + True + False + True + Show... + menu1 - + True False + com.ublinux.ubl-settings-services.menu-symbolic - - False - True - 6 - - - - - True - False - True - True - Check service status - image6 - - - - False - True - 7 - - - - - True - False - True - True - Check service log - image7 - - - - False - True - 8 - + False True - 0 + 8 + + + False + True + 0 + + + + + True + False + vertical + 5 True @@ -347,7 +529,7 @@ False vertical - + True True liststore1 @@ -385,10 +567,10 @@ True True - + True True - liststore2 + SystemList 5 horizontal @@ -398,9 +580,10 @@ True fixed + 20 Autostart - + 0 @@ -411,9 +594,10 @@ True fixed + 20 Autostop - + 1 @@ -424,9 +608,10 @@ True fixed + 20 Block - + 2 @@ -437,9 +622,10 @@ True fixed + 20 Autostart - + 3 @@ -450,9 +636,10 @@ True fixed + 20 Launched - + 4 @@ -461,7 +648,23 @@ - autosize + True + 10 + 20 + Unit + + + + 11 + + + + + + + True + fixed + 20 @@ -489,54 +692,6 @@ True True - 1 - - - - - True - True - 1 - - - - - True - False - vertical - 5 - - - True - False - 5 - - - True - False - Service: - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - False - True 0 @@ -544,12 +699,36 @@ True False + vertical 5 - + True False - Description: + 5 + + + True + False + Service: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + False @@ -558,10 +737,34 @@ - + True False - True + 5 + + + True + False + Description: + + + False + True + 0 + + + + + True + False + True + + + False + True + 1 + + False @@ -578,28 +781,1029 @@ - False + True True - 2 + 1 + + True + True + 1 + - + True False - Services + System units + + False + - - - True - True - 0 - - + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 5 + + + True + False + 0 + + All + Autolaunch in configuration + Stopped in configuration + Blocked in configuration + service + swap + socket + target + device + automount + timer + path + slice + scope + + + + False + True + 0 + + + + + Show inactive + True + True + False + True + + + False + True + 1 + + + + + Show unloaded + True + False + True + False + True + + + False + True + 2 + + + + + True + True + edit-find-symbolic + False + False + + + True + True + 3 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + vertical + 5 + + + True + True + True + Relaunch systemctl + image13 + + + + False + True + 0 + + + + + True + True + True + Reexec systemctl + image14 + + + + False + True + 1 + + + + + True + False + + + False + True + 2 + + + + + True + False + True + True + Show service information + image15 + + + + False + True + 3 + + + + + True + False + True + True + Show service log + image16 + + + + False + True + 4 + + + + + True + False + True + True + Show service source file + image17 + + + + False + True + 5 + + + + + True + False + True + True + Show service properties + image18 + + + + False + True + 7 + + + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 0.019999999552965164 + in + + + True + False + vertical + + + True + True + liststore1 + + + + + + Configure in configuration + + + + + Configure in system + + + + + Service + + + + + False + True + 0 + + + + + True + True + + + True + True + UserList + 5 + horizontal + + + + + + True + fixed + 20 + Autostart + + + + 0 + + + + + + + True + fixed + 20 + Autostop + + + + 1 + + + + + + + True + fixed + 20 + Block + + + + 2 + + + + + + + True + fixed + 20 + Autostart + + + + 3 + + + + + + + True + fixed + 20 + Launched + + + + 4 + + + + + + + True + 10 + 20 + Unit + + + + 11 + + + + + + + autosize + 20 + + True + + + + 5 + + + + + + + + + True + True + 1 + + + + + + + + + + True + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + Service: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + Description: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 2 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + 1 + + + + + True + False + User units + + + 1 + False + + + + + True + False + 5 + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + Edit configuration file + image12 + + + + False + True + 0 + + + + + False + True + 0 + + + + + True + False + 0 + in + + + True + True + + + True + True + ConfigList + + + + + + True + fixed + 20 + File + 0 + + + + 0 + + + + + + + True + fixed + 20 + Change date + 1 + + + + 1 + + + + + + + 20 + Description + True + 2 + + + + 2 + + + + + + + + + + + + + + True + True + 1 + + + + + 2 + + + + + True + False + Config files + + + 2 + False + + + + + True + False + 5 + 5 + 5 + 5 + 5 + + + True + False + vertical + 5 + + + True + True + True + image11 + + + + False + True + 0 + + + + + True + True + True + image10 + + + + False + True + 1 + + + + + True + True + True + image9 + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + 0 + in + + + True + True + + + True + True + SessionsList + + + + + + True + fixed + 20 + Session ID + 0 + + + + 0 + + + + + + + True + fixed + 20 + Status + 1 + + + + 1 + + + + + + + True + fixed + 20 + User ID + 2 + + + + 2 + + + + + + + True + fixed + 20 + User name + 3 + + + + 3 + + + + + + + 20 + Seat ID + True + 4 + + + + 4 + + + + + + + + + + + + + + True + True + 1 + + + + + 3 + + + + + True + False + Sessions + + + 3 + False + + + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + False + 0.019999999552965164 + in + + + True + True + + + True + True + TimersList + + + + + + True + fixed + 20 + Timer + 0 + + + + 0 + + + + + + + True + fixed + 20 + Next + 1 + + + + 1 + + + + + + + True + fixed + 20 + Left + 2 + + + + 2 + + + + + + + True + fixed + 20 + Last + 3 + + + + 3 + + + + + + + True + fixed + 20 + Passed + 4 + + + + 4 + + + + + + + 20 + Activates + True + 5 + + + + 5 + + + + + + + + + + + + + + True + True + 0 + + + + + 4 + + + + + True + False + Timers + + + 4 + False + + + + + True + True + 0 + + + + + True + False diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 90c1107..04c881f 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -18,199 +18,449 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: source/ubl-strings.h:1 -msgid "Version:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "ubl-settings-services version:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Usage:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "[OPTIONS]" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Options:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Show this help" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Show package version" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock this help menu" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock configuration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock local configration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock global configration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock global configration loading" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Reset application settings" -msgstr "" - -#: source/ubl-strings.h:4 msgid "Services and processes systemd" msgstr "" -#: source/ubl-strings.h:5 +#: source/ubl-strings.h:2 msgid "System services and processes configuration" msgstr "" -#: source/ubl-strings.h:6 +#: source/ubl-strings.h:3 msgid "Services and processes - service information" msgstr "" -#: source/ubl-strings.h:8 source/ubl-strings.h:40 +#: source/ubl-strings.h:5 source/ubl-strings.h:37 msgid "Configure in configuration" msgstr "" -#: source/ubl-strings.h:9 source/ubl-strings.h:44 +#: source/ubl-strings.h:6 source/ubl-strings.h:41 msgid "Autostart" msgstr "" -#: source/ubl-strings.h:10 source/ubl-strings.h:45 +#: source/ubl-strings.h:7 source/ubl-strings.h:42 msgid "Autostop" msgstr "" -#: source/ubl-strings.h:11 source/ubl-strings.h:46 +#: source/ubl-strings.h:8 source/ubl-strings.h:43 msgid "Block" msgstr "" -#: source/ubl-strings.h:12 source/ubl-strings.h:41 +#: source/ubl-strings.h:9 source/ubl-strings.h:38 msgid "Configure in system" msgstr "" -#: source/ubl-strings.h:13 source/ubl-strings.h:47 +#: source/ubl-strings.h:10 source/ubl-strings.h:44 msgid "Launched" msgstr "" -#: source/ubl-strings.h:14 +#: source/ubl-strings.h:11 msgid "Reload" msgstr "" -#: source/ubl-strings.h:15 +#: source/ubl-strings.h:12 msgid "Show status" msgstr "" -#: source/ubl-strings.h:16 +#: source/ubl-strings.h:13 msgid "Update" msgstr "" -#: source/ubl-strings.h:18 +#: source/ubl-strings.h:15 msgid "All services" msgstr "" -#: source/ubl-strings.h:19 +#: source/ubl-strings.h:16 msgid "System services only" msgstr "" -#: source/ubl-strings.h:20 +#: source/ubl-strings.h:17 msgid "User services only" msgstr "" -#: source/ubl-strings.h:22 +#: source/ubl-strings.h:19 msgid "All" msgstr "" -#: source/ubl-strings.h:23 +#: source/ubl-strings.h:20 msgid "Services" msgstr "" -#: source/ubl-strings.h:24 +#: source/ubl-strings.h:21 msgid "Sockets" msgstr "" -#: source/ubl-strings.h:25 +#: source/ubl-strings.h:22 msgid "Autolaunch in configuration" msgstr "" -#: source/ubl-strings.h:26 +#: source/ubl-strings.h:23 msgid "Stopped in configuration" msgstr "" -#: source/ubl-strings.h:27 +#: source/ubl-strings.h:24 msgid "Blocked in configuration" msgstr "" -#: source/ubl-strings.h:29 +#: source/ubl-strings.h:26 msgid "Toggle autostart at configuration" msgstr "" -#: source/ubl-strings.h:30 +#: source/ubl-strings.h:27 msgid "Toggle autostop at configuration" msgstr "" -#: source/ubl-strings.h:31 +#: source/ubl-strings.h:28 msgid "Toggle service blocking at configuration" msgstr "" -#: source/ubl-strings.h:32 +#: source/ubl-strings.h:29 msgid "Toggle autostart at system" msgstr "" -#: source/ubl-strings.h:33 +#: source/ubl-strings.h:30 msgid "Launch/Stop service" msgstr "" -#: source/ubl-strings.h:34 +#: source/ubl-strings.h:31 msgid "Check service status" msgstr "" -#: source/ubl-strings.h:35 +#: source/ubl-strings.h:32 msgid "Check service log" msgstr "" -#: source/ubl-strings.h:37 +#: source/ubl-strings.h:34 msgid "Service:" msgstr "" -#: source/ubl-strings.h:38 +#: source/ubl-strings.h:35 msgid "Description:" msgstr "" -#: source/ubl-strings.h:42 +#: source/ubl-strings.h:39 msgid "Service" msgstr "" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:45 msgid "Service list is loading" msgstr "" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:46 msgid "Status" msgstr "" +#: source/ubl-strings.h:47 +msgid "Restart with new configuration" +msgstr "" + +#: source/ubl-strings.h:48 +msgid "Show log" +msgstr "" + +#: source/ubl-strings.h:49 +msgid "Show source" +msgstr "" + +#: source/ubl-strings.h:50 +msgid "Properties" +msgstr "" + #: source/ubl-strings.h:51 -msgid "Service were not stopped" +msgid "Activate session" msgstr "" #: source/ubl-strings.h:52 -msgid "Are you sure want to stop " +msgid "End session" msgstr "" -#: source/ubl-strings.h:52 -msgid "" -"The stop will be forced.\n" -"The system may become unstable." +#: source/ubl-strings.h:53 +msgid "Block session" +msgstr "" + +#: source/ubl-strings.h:55 +msgid "Service source were not loaded" +msgstr "" + +#: source/ubl-strings.h:57 +msgid "Saving..." +msgstr "" + +#: source/ubl-strings.h:58 +msgid "Saved" +msgstr "" + +#: source/ubl-strings.h:59 +msgid "Error has occured" +msgstr "" + +#: source/ubl-strings.h:61 +msgid "Service were not stopped" +msgstr "" + +#: source/ubl-strings.h:62 +msgid "Are you sure want to restart " +msgstr "" + +#: source/ubl-strings.h:62 source/ubl-strings.h:63 +msgid "The system may become unstable." +msgstr "" + +#: source/ubl-strings.h:63 +msgid "Are you sure want to reload " +msgstr "" + +#: source/ubl-strings.h:64 +msgid "Days" +msgstr "" + +#: source/ubl-strings.h:65 +msgid "Hours" +msgstr "" + +#: source/ubl-strings.h:66 +msgid "Minutes" +msgstr "" + +#: source/ubl-strings.h:67 +msgid "Seconds" +msgstr "" + +#: source/ubl-strings.h:69 +msgid "Active" +msgstr "" + +#: source/ubl-strings.h:70 +msgid "Inactive" +msgstr "" + +#: source/ubl-strings.h:72 +msgid "System units" +msgstr "" + +#: source/ubl-strings.h:73 +msgid "User units" +msgstr "" + +#: source/ubl-strings.h:74 +msgid "Config files" +msgstr "" + +#: source/ubl-strings.h:75 +msgid "Sessions" +msgstr "" + +#: source/ubl-strings.h:76 +msgid "Timers" +msgstr "" + +#: source/ubl-strings.h:78 +msgid "System services status" +msgstr "" + +#: source/ubl-strings.h:79 +msgid "User services status" +msgstr "" + +#: source/ubl-strings.h:80 +msgid "Installed unit files" +msgstr "" + +#: source/ubl-strings.h:81 +msgid "Units and status list" +msgstr "" + +#: source/ubl-strings.h:82 +msgid "Sockets and status list" +msgstr "" + +#: source/ubl-strings.h:83 +msgid "Timers and status list" +msgstr "" + +#: source/ubl-strings.h:85 +msgid "Unit" +msgstr "" + +#: source/ubl-strings.h:87 +msgid "Relaunch systemctl" +msgstr "" + +#: source/ubl-strings.h:88 +msgid "Reexec systemctl" +msgstr "" + +#: source/ubl-strings.h:89 +msgid "Show service information" +msgstr "" + +#: source/ubl-strings.h:90 +msgid "Show service log" +msgstr "" + +#: source/ubl-strings.h:91 +msgid "Show service source file" +msgstr "" + +#: source/ubl-strings.h:92 +msgid "Show service properties" +msgstr "" + +#: source/ubl-strings.h:93 +msgid "Show..." +msgstr "" + +#: source/ubl-strings.h:95 +msgid "Edit configuration file" +msgstr "" + +#: source/ubl-strings.h:97 +msgid "Show inactive" +msgstr "" + +#: source/ubl-strings.h:98 +msgid "Show unloaded" +msgstr "" + +#: source/ubl-strings.h:100 +msgid "File" +msgstr "" + +#: source/ubl-strings.h:101 +msgid "Change date" +msgstr "" + +#: source/ubl-strings.h:102 +msgid "Description" +msgstr "" + +#: source/ubl-strings.h:103 +msgid "Edit" +msgstr "" + +#: source/ubl-strings.h:105 +msgid "Session ID" +msgstr "" + +#: source/ubl-strings.h:106 +msgid "User ID" +msgstr "" + +#: source/ubl-strings.h:107 +msgid "User name" +msgstr "" + +#: source/ubl-strings.h:108 +msgid "Seat ID" +msgstr "" + +#: source/ubl-strings.h:110 +msgid "Start session" +msgstr "" + +#: source/ubl-strings.h:111 +msgid "Stop session" +msgstr "" + +#: source/ubl-strings.h:112 +msgid "Lock session" +msgstr "" + +#: source/ubl-strings.h:114 +msgid "Timer" +msgstr "" + +#: source/ubl-strings.h:115 +msgid "Next" +msgstr "" + +#: source/ubl-strings.h:116 +msgid "Left" +msgstr "" + +#: source/ubl-strings.h:117 +msgid "Last" +msgstr "" + +#: source/ubl-strings.h:118 +msgid "Passed" +msgstr "" + +#: source/ubl-strings.h:119 +msgid "Activates" +msgstr "" + +#: source/ubl-strings.h:121 +msgid "active" +msgstr "" + +#: source/ubl-strings.h:122 +msgid "dead" +msgstr "" + +#: source/ubl-strings.h:123 +msgid "waiting" +msgstr "" + +#: source/ubl-strings.h:124 +msgid "running" +msgstr "" + +#: source/ubl-strings.h:125 +msgid "listening" +msgstr "" + +#: source/ubl-strings.h:126 +msgid "exited" +msgstr "" + +#: source/ubl-strings.h:127 +msgid "mounted" +msgstr "" + +#: source/ubl-strings.h:128 +msgid "plugged" +msgstr "" + +#: source/ubl-strings.h:129 +msgid "abandoned" +msgstr "" + +#: source/ubl-strings.h:131 +msgid "Upgrade to root" +msgstr "" + +#: source/ubl-strings.h:133 +msgid "State of " +msgstr "" + +#: source/ubl-strings.h:134 +msgid "View" +msgstr "" + +#: source/ubl-strings.h:134 +msgid "log" +msgstr "" + +#: source/ubl-strings.h:135 +msgid "Edit unit file" +msgstr "" + +#: source/ubl-strings.h:137 +msgid "Failed to re-execute systemd" +msgstr "" + +#: source/ubl-strings.h:138 +msgid "failed to relaunch systemd" +msgstr "" + +#: source/ubl-strings.h:140 +msgid "Systemd has been re-executed" +msgstr "" + +#: source/ubl-strings.h:141 +msgid "Systemd has been relaunched" +msgstr "" + +#: source/ubl-strings.h:143 +msgid "Save" msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 588e6cb..972937f 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -18,201 +18,450 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: source/ubl-strings.h:1 -msgid "Version:" -msgstr "Версия:" - -#: source/ubl-strings.h:2 -msgid "ubl-settings-services version:" -msgstr "Версия ubl-settings-services: " - -#: source/ubl-strings.h:2 -msgid "Usage:" -msgstr "Использование:" - -#: source/ubl-strings.h:2 -msgid "[OPTIONS]" -msgstr "[АРГУМЕНТЫ]" - -#: source/ubl-strings.h:2 -msgid "Options:" -msgstr "Аргументы:" - -#: source/ubl-strings.h:2 -msgid "Show this help" -msgstr "Показать параметры справки" - -#: source/ubl-strings.h:2 -msgid "Show package version" -msgstr "Показать текущую версию" - -#: source/ubl-strings.h:2 -msgid "Lock this help menu" -msgstr "Блокировка вызова справки" - -#: source/ubl-strings.h:2 -msgid "Lock configuration saving" -msgstr "Блокировка сохранения локальной и глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock local configration saving" -msgstr "Блокировка сохранения локальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock global configration saving" -msgstr "Блокировка сохранения глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock global configration loading" -msgstr "Блокировка загрузки глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Reset application settings" -msgstr "Сбросить настройки утилиты" - -#: source/ubl-strings.h:4 msgid "Services and processes systemd" msgstr "Сервисы и процессы systemd" -#: source/ubl-strings.h:5 +#: source/ubl-strings.h:2 msgid "System services and processes configuration" msgstr "Настройка работы служб и процессов системы" -#: source/ubl-strings.h:6 +#: source/ubl-strings.h:3 msgid "Services and processes - service information" msgstr "Сервисы и процессы - статус" -#: source/ubl-strings.h:8 source/ubl-strings.h:40 +#: source/ubl-strings.h:5 source/ubl-strings.h:37 msgid "Configure in configuration" msgstr "Настройка в конфигурации" -#: source/ubl-strings.h:9 source/ubl-strings.h:44 +#: source/ubl-strings.h:6 source/ubl-strings.h:41 msgid "Autostart" msgstr "Автостарт" -#: source/ubl-strings.h:10 source/ubl-strings.h:45 +#: source/ubl-strings.h:7 source/ubl-strings.h:42 msgid "Autostop" msgstr "Автостоп" -#: source/ubl-strings.h:11 source/ubl-strings.h:46 +#: source/ubl-strings.h:8 source/ubl-strings.h:43 msgid "Block" msgstr "Блокировать" -#: source/ubl-strings.h:12 source/ubl-strings.h:41 +#: source/ubl-strings.h:9 source/ubl-strings.h:38 msgid "Configure in system" msgstr "Настройка в системе" -#: source/ubl-strings.h:13 source/ubl-strings.h:47 +#: source/ubl-strings.h:10 source/ubl-strings.h:44 msgid "Launched" msgstr "Запущено" -#: source/ubl-strings.h:14 +#: source/ubl-strings.h:11 msgid "Reload" msgstr "Перезагрузить" -#: source/ubl-strings.h:15 +#: source/ubl-strings.h:12 msgid "Show status" msgstr "Показать статус" -#: source/ubl-strings.h:16 +#: source/ubl-strings.h:13 msgid "Update" msgstr "Обновить" -#: source/ubl-strings.h:18 +#: source/ubl-strings.h:15 msgid "All services" msgstr "Все сервисы" -#: source/ubl-strings.h:19 +#: source/ubl-strings.h:16 msgid "System services only" msgstr "Только системные сервисы" -#: source/ubl-strings.h:20 +#: source/ubl-strings.h:17 msgid "User services only" msgstr "Только сервисы пользователя" -#: source/ubl-strings.h:22 +#: source/ubl-strings.h:19 msgid "All" msgstr "Все" -#: source/ubl-strings.h:23 +#: source/ubl-strings.h:20 msgid "Services" msgstr "Сервисы" -#: source/ubl-strings.h:24 +#: source/ubl-strings.h:21 msgid "Sockets" msgstr "Сокеты" -#: source/ubl-strings.h:25 +#: source/ubl-strings.h:22 msgid "Autolaunch in configuration" msgstr "Автозапуск в конфигурации" -#: source/ubl-strings.h:26 +#: source/ubl-strings.h:23 msgid "Stopped in configuration" msgstr "Остановлено в конфигурации" -#: source/ubl-strings.h:27 +#: source/ubl-strings.h:24 msgid "Blocked in configuration" msgstr "Заблокированные в конфигурации" -#: source/ubl-strings.h:29 +#: source/ubl-strings.h:26 msgid "Toggle autostart at configuration" msgstr "Переключить автозапуск в конфигурации" -#: source/ubl-strings.h:30 +#: source/ubl-strings.h:27 msgid "Toggle autostop at configuration" msgstr "Переключить автостоп в конфигурации" -#: source/ubl-strings.h:31 +#: source/ubl-strings.h:28 msgid "Toggle service blocking at configuration" msgstr "Переключить блокирование в конфигурации" -#: source/ubl-strings.h:32 +#: source/ubl-strings.h:29 msgid "Toggle autostart at system" msgstr "Переключить автозапуск в системе" -#: source/ubl-strings.h:33 +#: source/ubl-strings.h:30 msgid "Launch/Stop service" msgstr "Запустить/Остановить сервис" -#: source/ubl-strings.h:34 +#: source/ubl-strings.h:31 msgid "Check service status" msgstr "Проверить статус сервиса" -#: source/ubl-strings.h:35 +#: source/ubl-strings.h:32 msgid "Check service log" msgstr "Открыть лог сервиса" -#: source/ubl-strings.h:37 +#: source/ubl-strings.h:34 msgid "Service:" msgstr "Сервис:" -#: source/ubl-strings.h:38 +#: source/ubl-strings.h:35 #, fuzzy msgid "Description:" msgstr "Описание:" -#: source/ubl-strings.h:42 +#: source/ubl-strings.h:39 msgid "Service" msgstr "Сервис" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:45 msgid "Service list is loading" msgstr "Список сервисов загружается" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:46 msgid "Status" msgstr "Статус" +#: source/ubl-strings.h:47 +msgid "Restart with new configuration" +msgstr "Перезагрузить с новой конфигурацией" + +#: source/ubl-strings.h:48 +msgid "Show log" +msgstr "Показать логи" + +#: source/ubl-strings.h:49 +msgid "Show source" +msgstr "Открыть конфигурационный файл" + +#: source/ubl-strings.h:50 +msgid "Properties" +msgstr "Свойства" + #: source/ubl-strings.h:51 +msgid "Activate session" +msgstr "Активировать сессию" + +#: source/ubl-strings.h:52 +msgid "End session" +msgstr "Завершить сессию" + +#: source/ubl-strings.h:53 +msgid "Block session" +msgstr "Заблокировать сессию" + +#: source/ubl-strings.h:55 +msgid "Service source were not loaded" +msgstr "Сервис не был загружен" + +#: source/ubl-strings.h:57 +msgid "Saving..." +msgstr "Сохранение..." + +#: source/ubl-strings.h:58 +msgid "Saved" +msgstr "Сохранено" + +#: source/ubl-strings.h:59 +msgid "Error has occured" +msgstr "Произошла ошибка" + +#: source/ubl-strings.h:61 msgid "Service were not stopped" msgstr "Сервис не был остановлен" -#: source/ubl-strings.h:52 -msgid "Are you sure want to stop " -msgstr "Вы уверены что хотите остановить " +#: source/ubl-strings.h:62 +msgid "Are you sure want to restart " +msgstr "Вы уверены, что хотите перезапустить " -#: source/ubl-strings.h:52 -msgid "" -"The stop will be forced.\n" -"The system may become unstable." -msgstr "Остановка будет произведена принудительно.\n" -"Возможна нестабильная работа системы." +#: source/ubl-strings.h:62 source/ubl-strings.h:63 +msgid "The system may become unstable." +msgstr "Возможна нестабильная работа системы." + +#: source/ubl-strings.h:63 +msgid "Are you sure want to reload " +msgstr "Вы уверены, что хотите перезагрузить " + +#: source/ubl-strings.h:64 +msgid "Days" +msgstr "Дней" + +#: source/ubl-strings.h:65 +msgid "Hours" +msgstr "Часов" + +#: source/ubl-strings.h:66 +msgid "Minutes" +msgstr "Минут" + +#: source/ubl-strings.h:67 +msgid "Seconds" +msgstr "Секунд" + +#: source/ubl-strings.h:69 +msgid "Active" +msgstr "Активна" + +#: source/ubl-strings.h:70 +msgid "Inactive" +msgstr "Неактивна" + +#: source/ubl-strings.h:72 +msgid "System units" +msgstr "Системные юниты" + +#: source/ubl-strings.h:73 +msgid "User units" +msgstr "Пользовательские юниты" + +#: source/ubl-strings.h:74 +msgid "Config files" +msgstr "Конфигурационные файлы" + +#: source/ubl-strings.h:75 +msgid "Sessions" +msgstr "Сессии" + +#: source/ubl-strings.h:76 +msgid "Timers" +msgstr "Таймеры" + +#: source/ubl-strings.h:78 +msgid "System services status" +msgstr "Статус сервисов системы" + +#: source/ubl-strings.h:79 +msgid "User services status" +msgstr "Статус сервисов пользователя" + +#: source/ubl-strings.h:80 +msgid "Installed unit files" +msgstr "Установленные юнит-файлы" + +#: source/ubl-strings.h:81 +msgid "Units and status list" +msgstr "Список юнитов и состояния" + +#: source/ubl-strings.h:82 +msgid "Sockets and status list" +msgstr "Список сокетов и состояния" + +#: source/ubl-strings.h:83 +msgid "Timers and status list" +msgstr "Список таймеров и состояния" + +#: source/ubl-strings.h:85 +msgid "Unit" +msgstr "Юнит" + +#: source/ubl-strings.h:87 +msgid "Relaunch systemctl" +msgstr "Перезагрузить systemctl" + +#: source/ubl-strings.h:88 +msgid "Reexec systemctl" +msgstr "Перезапустить systemctl" + +#: source/ubl-strings.h:89 +msgid "Show service information" +msgstr "Показать информацию о сервисе" + +#: source/ubl-strings.h:90 +msgid "Show service log" +msgstr "Открыть лог сервиса" + +#: source/ubl-strings.h:91 +msgid "Show service source file" +msgstr "Показать конфигурационный файл сервиса" + +#: source/ubl-strings.h:92 +msgid "Show service properties" +msgstr "Открыть свойства сервиса" + +#: source/ubl-strings.h:93 +msgid "Show..." +msgstr "Показать..." + +#: source/ubl-strings.h:95 +msgid "Edit configuration file" +msgstr "Редактировать в конфигурации" + +#: source/ubl-strings.h:97 +msgid "Show inactive" +msgstr "Показать неактивные" + +#: source/ubl-strings.h:98 +msgid "Show unloaded" +msgstr "Показать незагруженные" + +#: source/ubl-strings.h:100 +msgid "File" +msgstr "Файл" + +#: source/ubl-strings.h:101 +msgid "Change date" +msgstr "Изменён" + +#: source/ubl-strings.h:102 +msgid "Description" +msgstr "Описание" + +#: source/ubl-strings.h:103 +msgid "Edit" +msgstr "Редактировать" + +#: source/ubl-strings.h:105 +msgid "Session ID" +msgstr "ID сессии" + +#: source/ubl-strings.h:106 +msgid "User ID" +msgstr "ID пользователя" + +#: source/ubl-strings.h:107 +msgid "User name" +msgstr "Имя пользователя" + +#: source/ubl-strings.h:108 +msgid "Seat ID" +msgstr "Seat ID" + +#: source/ubl-strings.h:110 +msgid "Start session" +msgstr "Запустить сессию" + +#: source/ubl-strings.h:111 +msgid "Stop session" +msgstr "Остановить сессию" + +#: source/ubl-strings.h:112 +msgid "Lock session" +msgstr "Заблокировать сессию" + +#: source/ubl-strings.h:114 +msgid "Timer" +msgstr "Таймер" + +#: source/ubl-strings.h:115 +msgid "Next" +msgstr "Следующий" + +#: source/ubl-strings.h:116 +msgid "Left" +msgstr "Осталось времени" + +#: source/ubl-strings.h:117 +msgid "Last" +msgstr "Последний" + +#: source/ubl-strings.h:118 +msgid "Passed" +msgstr "Пройденный" + +#: source/ubl-strings.h:119 +msgid "Activates" +msgstr "Активируется" + +#: source/ubl-strings.h:121 +msgid "active" +msgstr "активен" + +#: source/ubl-strings.h:122 +msgid "dead" +msgstr "остановлен" + +#: source/ubl-strings.h:123 +msgid "waiting" +msgstr "ожидание" + +#: source/ubl-strings.h:124 +msgid "running" +msgstr "работает" + +#: source/ubl-strings.h:125 +msgid "listening" +msgstr "прослушивание" + +#: source/ubl-strings.h:126 +msgid "exited" +msgstr "завершён" + +#: source/ubl-strings.h:127 +msgid "mounted" +msgstr "примонтирован" + +#: source/ubl-strings.h:128 +msgid "plugged" +msgstr "подключен" + +#: source/ubl-strings.h:129 +msgid "abandoned" +msgstr "заброшен" + +#: source/ubl-strings.h:131 +msgid "Upgrade to root" +msgstr "Повысить права до root" + +#: source/ubl-strings.h:133 +msgid "State of " +msgstr "Состояние сервиса " + +#: source/ubl-strings.h:134 +msgid "View" +msgstr "Просмотр" + +#: source/ubl-strings.h:134 +msgid "log" +msgstr "лога" + +#: source/ubl-strings.h:135 +msgid "Edit unit file" +msgstr "Редактировать юнит-файл" + +#: source/ubl-strings.h:137 +msgid "Failed to re-execute systemd" +msgstr "Ошибка перезагрузки systemd" + +#: source/ubl-strings.h:138 +msgid "failed to relaunch systemd" +msgstr "Ошибка перезапуска systemd" + +#: source/ubl-strings.h:140 +msgid "Systemd has been re-executed" +msgstr "Systemd был успешно перезапущен" + +#: source/ubl-strings.h:141 +msgid "Systemd has been relaunched" +msgstr "Systemd был успешно перезагружен" + +#: source/ubl-strings.h:143 +msgid "Save" +msgstr "Сохранить"