diff --git a/gresource.xml b/gresource.xml index 1f26a40..557ead6 100644 --- a/gresource.xml +++ b/gresource.xml @@ -10,6 +10,7 @@ ubl-settings-logging-rules.glade ubl-settings-logging-filechooser.glade ubl-settings-logging-logrotate-table.glade + ubl-settings-logging-terminal.glade ubl-settings-logging.css diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 37ef092..c09ec59 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -49,6 +49,7 @@ set(DEPENDFILES ../ubl-settings-logging-logrotate.glade ../ubl-settings-logging-logrotate-table.glade ../ubl-settings-logging-filechooser.glade + ../ubl-settings-logging-terminal.glade ../gresource.xml ../ubl-settings-logging-banner.png ../ubl-settings-logging.css diff --git a/source/ubl-settings-logging.c b/source/ubl-settings-logging.c index 023f30c..171a4eb 100644 --- a/source/ubl-settings-logging.c +++ b/source/ubl-settings-logging.c @@ -237,66 +237,93 @@ void on_inspector_update(GtkWidget *self, inspector_window *window){ GtkTextIter titer,titerend; config_str output; if (!strcmp(window->journal_name,"journald")){ + GtkWidget *terminal = (GtkWidget*)window->terminals->first->data; if (self==window->UpdateButton){ switch(window->last_mode){ case 0: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_command,NULL,NULL); break; case 1: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_since_boot_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_since_boot_command,NULL,NULL); break; case 2: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_followed_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_followed_command,NULL,NULL); break; case 3: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_kernel_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_kernel_command,NULL,NULL); break; case 4: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_prioritied_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_prioritied_command,NULL,NULL); break; case 5: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_all_boots_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_all_boots_command,NULL,NULL); break; case 6: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_all_units_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_all_units_command,NULL,NULL); break; case 7: - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_init_tree_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_init_tree_command,NULL,NULL); break; } } if (self==window->ShowSinceBootButton){ window->last_mode=1; - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_since_boot_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_since_boot_command,NULL,NULL); } if (self==window->NewMessagesButton){ window->last_mode=2; - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_followed_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_followed_command,NULL,NULL); } if (self==window->ShowKernelButton){ window->last_mode=3; - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_kernel_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_kernel_command,NULL,NULL); } if (self==window->ShowPriorityButton){ window->last_mode=4; - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_output_prioritied_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_output_prioritied_command,NULL,NULL); } if (self==window->ShowAllBootsButton){ window->last_mode=5; - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_all_boots_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_all_boots_command,NULL,NULL); } if (self==window->ShowAllUnitsButton){ window->last_mode=6; - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_all_units_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_all_units_command,NULL,NULL); } if (self==window->ShowInitTreeButton){ window->last_mode=7; - yon_terminal_integrated_start(window->LoggingTerminal, get_journal_init_tree_command,NULL,NULL); + yon_terminal_integrated_start(terminal, get_journal_init_tree_command,NULL,NULL); } } else { - window->journal_paths = yon_char_replace(window->journal_paths,"\n"," "); - yon_terminal_integrated_start(window->LoggingTerminal,yon_char_unite("cat ",window->journal_paths,NULL),NULL,NULL); + if (window->terminals){ + dictionary *dict=NULL; + for_dictionaries (dict,window->terminals){ + GtkWidget *terminal = (GtkWidget*)dict->data; + // window->journal_paths = yon_char_replace(window->journal_paths,"\n"," "); + yon_terminal_integrated_start(terminal,yon_char_unite("cat ",dict->key,NULL),NULL,NULL); + } } + } + +} + +GtkWidget *yon_inspector_add_terminal(inspector_window *window,char *page_name){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_terminal_path); + GtkWidget *box = yon_gtk_builder_get_widget(builder,"TerminalBox"); + GtkWidget *terminal = yon_gtk_builder_get_widget(builder,"LoggingTerminal"); + GtkWidget *label = gtk_label_new(page_name); + gtk_notebook_append_page(GTK_NOTEBOOK(window->LoggingNotebook),box,label); + GdkRGBA rgba; + rgba.alpha=1; + rgba.red=0.95; + rgba.green=0.95; + rgba.blue=0.95; + vte_terminal_set_color_background(VTE_TERMINAL(terminal),&rgba); + rgba.red=0; + rgba.green=0; + rgba.blue=0; + vte_terminal_set_color_foreground(VTE_TERMINAL(terminal),&rgba); + return terminal; } void on_inspector_open(GtkWidget *self, main_window *widgets){ @@ -310,8 +337,8 @@ void on_inspector_open(GtkWidget *self, main_window *widgets){ window->ShowAllBootsButton=yon_gtk_builder_get_widget(builder,"ShowAllBootsButton"); window->ShowAllUnitsButton=yon_gtk_builder_get_widget(builder,"ShowAllUnitsButton"); window->ShowInitTreeButton=yon_gtk_builder_get_widget(builder,"ShowInitTreeButton"); + window->LoggingNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); window->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton"); - window->LoggingTerminal=yon_gtk_builder_get_widget(builder,"LoggingTerminal"); window->JournalActionsBox=yon_gtk_builder_get_widget(builder,"JournalActionsBox"); yon_window_config_custom_window_setup(GTK_WINDOW(window->MainWindow),"InspectorWindow"); gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL); @@ -320,16 +347,6 @@ void on_inspector_open(GtkWidget *self, main_window *widgets){ GtkTreeIter iter; char *name; char *paths; - GdkRGBA rgba; - rgba.alpha=1; - rgba.red=0.95; - rgba.green=0.95; - rgba.blue=0.95; - vte_terminal_set_color_background(VTE_TERMINAL(window->LoggingTerminal),&rgba); - rgba.red=0; - rgba.green=0; - rgba.blue=0; - vte_terminal_set_color_foreground(VTE_TERMINAL(window->LoggingTerminal),&rgba); g_signal_connect(G_OBJECT(window->UpdateButton),"clicked", G_CALLBACK(on_inspector_update),window); g_signal_connect(G_OBJECT(window->ShowKernelButton),"clicked", G_CALLBACK(on_inspector_update),window); g_signal_connect(G_OBJECT(window->NewMessagesButton),"clicked", G_CALLBACK(on_inspector_update),window); @@ -341,14 +358,21 @@ void on_inspector_open(GtkWidget *self, main_window *widgets){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ gtk_tree_model_get(model,&iter,0,&name,1,&paths,-1); + window->journal_name=name; + window->journal_paths=yon_char_parse(paths,&window->journal_size,"\n"); + window->terminals = NULL; if (strcmp(name,"journald")){ window->last_mode=-1; + for (int i=0;ijournal_size;i++){ + if (!access(window->journal_paths[i],F_OK)||!window->terminals) + yon_dictionary_add_or_create_if_exists_with_data(window->terminals,window->journal_paths[i],yon_inspector_add_terminal(window,window->journal_paths[i])); + } gtk_widget_hide(window->JournalActionsBox); } else { window->last_mode=0; + yon_dictionary_add_or_create_if_exists_with_data(window->terminals,"Journald",yon_inspector_add_terminal(window,"Journald")); } - window->journal_name=name; - window->journal_paths=paths; + on_inspector_update(window->UpdateButton,window); gtk_widget_show(window->MainWindow); } diff --git a/source/ubl-settings-logging.h b/source/ubl-settings-logging.h index a518e55..a27d996 100644 --- a/source/ubl-settings-logging.h +++ b/source/ubl-settings-logging.h @@ -31,6 +31,7 @@ #define glade_logrotate_table_path "/com/ublinux/ui/ubl-settings-logging-logrotate-table.glade" #define glade_rules_path "/com/ublinux/ui/ubl-settings-logging-rules.glade" #define glade_filechooser_path "/com/ublinux/ui/ubl-settings-logging-filechooser.glade" +#define glade_terminal_path "/com/ublinux/ui/ubl-settings-logging-terminal.glade" #define banner_path "/com/ublinux/images/ubl-settings-logging-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-logging.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) @@ -197,11 +198,13 @@ GtkWidget *UpdateButton; GtkWidget *ShowAllBootsButton; GtkWidget *ShowAllUnitsButton; GtkWidget *ShowInitTreeButton; -GtkWidget *LoggingTerminal; +GtkWidget *LoggingNotebook; GtkWidget *JournalActionsBox; +dictionary *terminals; int last_mode; char *journal_name; -char *journal_paths; +int journal_size; +config_str journal_paths; } inspector_window; diff --git a/source/ubl-utils.c b/source/ubl-utils.c index 76c5204..6d9e1ce 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -716,11 +716,9 @@ char **yon_char_parse(char *parameters, int *size, char *divider){ string[(*size)]=yon_char_divide(paramline,strlen(paramline)-strlen(param)); *size=(*size)+1; } - if (string){ string = yon_remalloc(string,sizeof(char*)*((*size)+1)); string[(*size)]=paramline; (*size)+=1; - } return string; } diff --git a/ubl-settings-logging-inspector.glade b/ubl-settings-logging-inspector.glade index f935238..bc16007 100644 --- a/ubl-settings-logging-inspector.glade +++ b/ubl-settings-logging-inspector.glade @@ -2,7 +2,6 @@ - 100 @@ -14,11 +13,6 @@ 1 10 - - 100 - 1 - 10 - True False @@ -242,16 +236,10 @@ - + True - False - natural - adjustment3 - natural - UTF-8 - 0 - True - False + True + True True @@ -259,19 +247,6 @@ 1 - - - True - False - vertical - adjustment3 - - - False - True - 2 - - True @@ -321,5 +296,4 @@ - diff --git a/ubl-settings-logging-terminal.glade b/ubl-settings-logging-terminal.glade new file mode 100644 index 0000000..3d2118e --- /dev/null +++ b/ubl-settings-logging-terminal.glade @@ -0,0 +1,44 @@ + + + + + + + True + False + + + True + True + natural + natural + UTF-8 + 0 + True + False + + + True + True + 0 + + + + + True + False + vertical + + + False + True + 1 + + + + + 100 + 1 + 10 + +