From 87282e7e0d5c3587647699160a8bebd9824f5d16 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 26 Mar 2024 18:26:44 +0600 Subject: [PATCH] timers loading test --- source/CMakeLists.txt | 8 +- source/ubl-settings-services.c | 161 +++++++++++++++++++++++++++------ source/ubl-settings-services.h | 8 ++ source/ubl-strings.h | 2 + 4 files changed, 151 insertions(+), 28 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 6469d42..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) @@ -75,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 8b464be..c7db282 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -339,21 +339,26 @@ void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets){ } void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - // log_window *window = yon_log_window_new(); - - // gtk_widget_show(window->Window); - } + if (self){} + if (widgets){ + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = "Are you sure?"; + data->data = widgets; + data->function = (data_function)yon_system_systemd_restart; + yon_confirmation_dialog_call(self,data); + + } } void on_user_update_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = "Are you sure?"; + data->data = widgets; + data->function = (data_function)yon_system_systemd_reexec; + yon_confirmation_dialog_call(self,data); } } @@ -361,9 +366,16 @@ void on_user_update_clicked(GtkWidget *self, main_window *widgets){ void on_user_info_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + 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(); + window->target = user_service_info_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } } } @@ -371,9 +383,16 @@ void on_user_info_clicked(GtkWidget *self, main_window *widgets){ void on_user_log_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + 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(); + window->target = user_get_log_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } } } @@ -381,9 +400,24 @@ void on_user_log_clicked(GtkWidget *self, main_window *widgets){ void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + 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_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); + } } } @@ -391,9 +425,17 @@ void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ void on_user_status_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); + 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(); + window->target = user_properties_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } - gtk_widget_show(window->Window); } } @@ -438,24 +480,43 @@ void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets){ } +void on_config_log_save(GtkWidget *self, log_window *window){ + if (self){}; + 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){ - log_window *window = yon_log_window_new(); - gtk_widget_hide(gtk_widget_get_parent(window->SystemTerminal)); - gtk_widget_show(gtk_widget_get_parent(window->TextEditor)); 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_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); } - gtk_widget_show(window->Window); } } @@ -573,9 +634,9 @@ gboolean yon_interface_update(main_window *widgets){ config_str config_files = yon_config_load(get_config_files_command,&config_size); int sessions_size; config_str sessions = yon_config_load(list_of_session_command,&sessions_size); - // int timers_size; - // config_str timers = yon_config_load(list_of_timers_command,&timers_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; iSessionsList,&iter,0,atoi(parsed[0]),1,atoi(parsed[1]),2,parsed[2],3,parsed[3],4,parsed[4],-1); } } + for (size_t i=0;iTimersList,&iter); + GDateTime *datetime = g_date_time_new_from_unix_local(atoi(next)); + next = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); + g_date_time_unref(datetime); + datetime = g_date_time_new_from_unix_local(atoi(left)); + left = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); + g_date_time_unref(datetime); + datetime = g_date_time_new_from_unix_local(atoi(last)); + last = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); + g_date_time_unref(datetime); + gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); + } } return 0; } diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a5677c3..54f1f32 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 @@ -49,6 +50,11 @@ #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" @@ -57,6 +63,7 @@ #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'" @@ -329,6 +336,7 @@ void on_user_inactive_toggled(GtkWidget *self, main_window *widgets); void on_user_unloaded_toggled(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); void on_session_start_clicked(GtkWidget *self, main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 551fe33..78d001d 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -55,6 +55,8 @@ #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