@ -10,7 +10,9 @@ config main_config;
* [ RU ]
* З а к р ы в а е т о к н о , в к о т о р о м р а с п о л о ж е н в и д ж е т [ self ] .
*/
void on_close_subwindow ( GtkWidget * self ) {
void on_close_subwindow ( GtkWidget * self , char * window ) {
if ( window )
yon_window_config_custom_window_set ( GTK_WINDOW ( gtk_widget_get_toplevel ( self ) ) , window ) ;
gtk_widget_destroy ( gtk_widget_get_toplevel ( self ) ) ;
}
@ -125,25 +127,59 @@ int yon_size_get_int_from_letter(char size){
//functions
void yon_polkit_authorized_action ( GCallback * func ) {
}
void yon_logs_custom_save ( main_window * widgets ) {
GtkTreeIter iter ;
char * name ;
char * description ;
char * paths ;
int standard ;
int standard_paths ;
int size = 0 ;
int valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( widgets - > list ) , & iter ) ;
char * final_strings = NULL ;
for ( ; valid ; valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( widgets - > list ) , & iter ) ) {
gtk_tree_model_get ( GTK_TREE_MODEL ( widgets - > list ) , & iter , 0 , & name , 1 , & paths , 2 , & description , 3 , & standard , 4 , & standard_paths , - 1 ) ;
if ( paths ) {
if ( standard ! = 1 ) {
for ( int i = 0 ; i < standard_paths ; i + + )
free ( yon_char_divide_search ( paths , " , " , - 1 ) ) ;
paths = yon_char_replace ( paths , " \n " , " , " ) ;
final_strings = yon_char_unite ( final_strings ? yon_char_append ( final_strings , " \n " ) : " " , name ? name : " " , " ; " , paths ? paths : " " , " ; " , description ? description : " " , NULL ) ;
}
}
free ( paths ) ;
}
FILE * fl = fopen ( custom_logs_saving_file_path , " w " ) ;
if ( final_strings )
fputs ( final_strings , fl ) ;
fclose ( fl ) ;
}
void update_loaded_logrotate ( ) {
int size = 0 ;
gtk_list_store_clear ( main_config . logrotate_list ) ;
GtkTreeIter iter ;
config_str loaded = yon_config_get_all_by_key ( " LOGROTATE[ " , & size ) ;
char * desc ;
char * name ;
for ( int i = 0 ; i < size ; i + + ) {
char * paths = yon_char_divide_search ( loaded [ i ] , " = " , - 1 ) ;
yon_char_divide ( paths , strlen ( " LOGROTATE " ) ) ;
yon_char_divide_search_self ( paths , " ] " , - 1 ) ;
yon_window_config_get_parameter ( " description " , paths , & desc , YON_TYPE_STRING ) ;
yon_window_config_get_parameter ( " render_name " , paths , & name , YON_TYPE_STRING ) ;
paths = yon_char_replace ( paths , " , " , " \n " ) ;
gtk_list_store_append ( main_config . logrotate_list , & iter ) ;
gtk_list_store_set ( main_config . logrotate_list , & iter , 1 , paths , 2 , desc ? desc : " " , - 1 ) ;
gtk_list_store_set ( main_config . logrotate_list , & iter , 0, name , 1, paths , 2 , desc ? desc : " " , - 1 ) ;
}
}
int yon_load_proceed ( YON_CONFIG_TYPE type ) {
if ( yon_config_load_register ( type , " logging " , LOGROTATE ( " * " ) , JOURNALD ( " * " ) , NULL ) ) {
if ( yon_config_load_register ( type , " logging " , LOGROTATE ( " * " ) , " logging " , JOURNALD ( " * " ) , NULL ) ) {
update_loaded_logrotate ( ) ;
return 1 ;
}
@ -200,71 +236,161 @@ void on_save_local(){
// Inspector functions
void on_inspector_update ( GtkWidget * self , inspector_window * window ) {
int size ;
GtkTextIter titer , titerend ;
config_str output ;
if ( ! strcmp ( window - > journal_name , " journald " ) ) {
if ( self = = window - > UpdateButton ) {
void on_inspector_jornald_read_async ( inspector_window * window ) {
FILE * fl ;
switch ( window - > last_mode ) {
case 0 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_command , NULL , NULL ) ;
fl = popen ( get_journal_output_command , " r " ) ;
break ;
case 1 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_since_boot_command , NULL , NULL ) ;
fl = popen ( get_journal_output_since_boot_command , " r " ) ;
break ;
case 2 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_followed_command , NULL , NULL ) ;
fl = popen ( get_journal_output_followed_command , " r " ) ;
break ;
case 3 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_kernel_command , NULL , NULL ) ;
fl = popen ( get_journal_output_kernel_command , " r " ) ;
break ;
case 4 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_prioritied_command , NULL , NULL ) ;
fl = popen ( get_journal_output_prioritied_command , " r " ) ;
break ;
case 5 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_all_boots_command , NULL , NULL ) ;
fl = popen ( get_journal_all_boots_command , " r " ) ;
break ;
case 6 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_all_units_command , NULL , NULL ) ;
fl = popen ( get_journal_all_units_command , " r " ) ;
break ;
case 7 :
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_init_tree_command , NULL , NULL ) ;
fl = popen ( get_journal_init_tree_command , " r " ) ;
break ;
}
char * output = g_malloc0 ( sizeof ( char ) * 4096 ) ;
GtkTreeIter iter ;
main_config . remove_thread = 0 ;
fd_set fds ;
struct timeval tv ;
int fd = fileno ( fl ) ;
while ( main_config . remove_thread = = 0 ) {
FD_ZERO ( & fds ) ;
FD_SET ( fd , & fds ) ;
tv . tv_sec = 1 ;
tv . tv_usec = 0 ;
if ( select ( fd + 1 , & fds , NULL , NULL , & tv ) ) {
output = fgets ( output , 4092 , fl ) ;
if ( ( output ) ) {
if ( strcmp ( output , " " ) ) {
gtk_list_store_append ( window - > list , & iter ) ;
char * identifier = " " ;
char * temp = yon_char_new ( output ) ;
char * log = temp ;
if ( strstr ( log , " \033 [H \033 [2J \033 [3 " ) )
yon_char_divide ( log , strlen ( " \033 [H \033 [2J \033 [3 " ) ) ;
log = yon_char_divide_search ( log , " \n " , - 1 ) ;
if ( window - > last_mode < 5 ) {
identifier = log ;
log = strstr ( log , " : " ) + 1 ;
log = strstr ( log , " : " ) + 1 ;
log = strstr ( log , " : " ) + 1 ;
char * iden = yon_char_new ( identifier ) ;
identifier = yon_char_divide ( iden , strlen ( identifier ) - strlen ( log ) - 1 ) ;
free ( iden ) ;
}
gtk_list_store_set ( window - > list , & iter , 0 , identifier , 1 , log , - 1 ) ;
free ( temp ) ;
}
}
}
}
main_config . inspector_thread = 0 ;
pclose ( fl ) ;
}
void on_inspector_update ( GtkWidget * self , inspector_window * window ) {
int size ;
GtkTextIter titer , titerend ;
config_str output ;
if ( ! strcmp ( window - > journal_name , " journald " ) ) {
GtkWidget * terminal = ( GtkWidget * ) window - > terminals - > first - > data ;
gtk_widget_hide ( window - > LoggingNotebook ) ;
gtk_widget_show ( gtk_widget_get_parent ( window - > JournaldTree ) ) ;
if ( self = = window - > ShowSinceBootButton ) {
window - > last_mode = 1 ;
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_since_boot_command , NULL , NULL ) ;
}
if ( self = = window - > NewMessagesButton ) {
else if ( self = = window - > NewMessagesButton ) {
window - > last_mode = 2 ;
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_followed_command , NULL , NULL ) ;
}
if ( self = = window - > ShowKernelButton ) {
else if ( self = = window - > ShowKernelButton ) {
window - > last_mode = 3 ;
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_kernel_command , NULL , NULL ) ;
}
if ( self = = window - > ShowPriorityButton ) {
else if ( self = = window - > ShowPriorityButton ) {
window - > last_mode = 4 ;
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_output_prioritied_command , NULL , NULL ) ;
}
if ( self = = window - > ShowAllBootsButton ) {
else if ( self = = window - > ShowAllBootsButton ) {
window - > last_mode = 5 ;
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_all_boots_command , NULL , NULL ) ;
}
if ( self = = window - > ShowAllUnitsButton ) {
else if ( self = = window - > ShowAllUnitsButton ) {
window - > last_mode = 6 ;
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_all_units_command , NULL , NULL ) ;
}
if ( self = = window - > ShowInitTreeButton ) {
else if ( self = = window - > ShowInitTreeButton ) {
window - > last_mode = 7 ;
yon_terminal_integrated_start ( window - > LoggingTerminal , get_journal_init_tree_command , NULL , NULL ) ;
}
main_config . remove_thread = 0 ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( window - > JournaldTree ) , GTK_TREE_MODEL ( window - > list ) ) ;
gtk_list_store_clear ( window - > list ) ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( window - > JournaldTree ) , GTK_TREE_MODEL ( window - > list ) ) ;
if ( main_config . inspector_thread ) {
main_config . remove_thread = 1 ;
pthread_join ( main_config . inspector_thread , NULL ) ;
}
pthread_create ( & main_config . inspector_thread , NULL , ( void * ) on_inspector_jornald_read_async , window ) ;
} else {
if ( window - > terminals ) {
gtk_widget_hide ( gtk_widget_get_parent ( window - > JournaldTree ) ) ;
gtk_widget_show ( window - > LoggingNotebook ) ;
dictionary * dict = NULL ;
for_dictionaries ( dict , window - > terminals ) {
GtkWidget * terminal = ( GtkWidget * ) dict - > data ;
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 , int mode ) {
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 * unfound_label = yon_gtk_builder_get_widget ( builder , " UnfoundLabel " ) ;
GtkWidget * label = gtk_label_new ( page_name ) ;
gtk_notebook_append_page ( GTK_NOTEBOOK ( window - > LoggingNotebook ) , box , label ) ;
if ( mode ) {
GdkRGBA rgba ;
rgba . alpha = 1 ;
rgba . red = 0.95 ;
rgba . green = 0.95 ;
rgba . blue = 0.95 ;
vte_terminal_set_color_cursor ( VTE_TERMINAL ( terminal ) , & rgba ) ;
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 ;
} 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 ) ;
gtk_widget_destroy ( terminal ) ;
gtk_widget_show ( unfound_label ) ;
char * label_text = yon_char_append ( page_name , PATH_NOT_FOUND_LABEL ) ;
gtk_label_set_text ( GTK_LABEL ( unfound_label ) , label_text ) ;
return NULL ;
}
}
void on_inspector_close ( GtkWidget * self ) {
main_config . remove_thread + + ;
}
void on_inspector_open ( GtkWidget * self , main_window * widgets ) {
@ -278,25 +404,19 @@ 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 " ) ;
window - > JournaldTree = yon_gtk_builder_get_widget ( builder , " JournaldTree " ) ;
window - > list = GTK_LIST_STORE ( gtk_builder_get_object ( builder , " liststore1 " ) ) ;
yon_window_config_custom_window_setup ( GTK_WINDOW ( window - > MainWindow ) , " InspectorWindow " ) ;
gtk_window_set_title ( GTK_WINDOW ( window - > MainWindow ) , TITLE_LABEL ) ;
gtk_window_set_transient_for ( GTK_WINDOW ( window - > MainWindow ) , GTK_WINDOW ( widgets - > Window ) ) ;
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > list ) ;
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 - > MainWindow ) , " destroy " , G_CALLBACK ( on_inspector_close ) , window ) ;
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 ) ;
@ -305,16 +425,30 @@ void on_inspector_open(GtkWidget *self, main_window *widgets){
g_signal_connect ( G_OBJECT ( window - > ShowAllBootsButton ) , " clicked " , G_CALLBACK ( on_inspector_update ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > ShowAllUnitsButton ) , " clicked " , G_CALLBACK ( on_inspector_update ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > ShowInitTreeButton ) , " clicked " , G_CALLBACK ( on_inspector_update ) , window ) ;
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 ; i < window - > journal_size ; i + + ) {
if ( ! access ( window - > journal_paths [ i ] , F_OK ) ) {
yon_dictionary_add_or_create_if_exists_with_data ( window - > terminals , window - > journal_paths [ i ] , yon_inspector_add_terminal ( window , window - > journal_paths [ i ] , 1 ) ) ;
}
else {
GtkWidget * terminal = yon_inspector_add_terminal ( window , window - > journal_paths [ i ] , 0 ) ;
if ( terminal )
yon_dictionary_add_or_create_if_exists_with_data ( window - > terminals , window - > journal_paths [ i ] , terminal ) ;
}
}
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 " , 1 ) ) ;
}
window - > journal_name = name ;
window - > journal_paths = paths ;
on_inspector_update ( window - > UpdateButton , window ) ;
gtk_widget_show ( window - > MainWindow ) ;
}
@ -337,15 +471,31 @@ void on_logrotate_configuration_path_add(GtkWidget *self, logrotate_configure_wi
}
void on_path_editing_done ( GtkCellRendererText * self , gchar * path , gchar * new_text , logrotate_configure_window * window ) {
GtkTreeIter iter ;
GtkTreeIter iter , itar ;
char * cur_path ;
gtk_tree_model_get_iter ( GTK_TREE_MODEL ( window - > list ) , & iter , gtk_tree_path_new_from_string ( path ) ) ;
gtk_tree_model_get ( GTK_TREE_MODEL ( window - > list ) , & iter , 0 , & cur_path , - 1 ) ;
if ( cur_path & & ! strcmp ( cur_path , " " ) && ! strcmp ( new_text , " " ) )
if ( ! strcmp ( new_text , " " ) || cur_path && ! strcmp ( cur_path , " " ) )
gtk_list_store_remove ( window - > list , & iter ) ;
else if ( new_text & & strcmp ( new_text , " " ) )
else if ( new_text & & strcmp ( new_text , " " ) ) {
int deleted = 0 ;
int valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( window - > list ) , & itar ) ;
for ( ; valid ; valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( window - > list ) , & itar ) ) {
char * path ;
gtk_tree_model_get ( GTK_TREE_MODEL ( window - > list ) , & itar , 0 , & path , - 1 ) ;
if ( path & & new_text )
if ( ! strcmp ( path , new_text ) ) {
yon_ubl_status_list_store_highlight_incorrect ( window - > list , gtk_tree_iter_copy ( & itar ) ) ;
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , REPEAT_PATHS_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
gtk_list_store_remove ( window - > list , & iter ) ;
deleted = 1 ;
}
}
if ( ! deleted )
gtk_list_store_set ( window - > list , & iter , 0 , new_text , - 1 ) ;
}
GValue * val = g_malloc0 ( sizeof ( GValue ) ) ;
g_object_get_property ( G_OBJECT ( self ) , " editable " , val ) ;
g_value_set_boolean ( val , 0 ) ;
@ -455,7 +605,7 @@ void on_rules_accept(GtkWidget *self, dictionary *dict){
! public_read & & public_write & & public_exec ? 3 : \
0 ;
gtk_entry_set_text ( entry , yon_char_unite ( yon_char_from_int ( owner ) , yon_char_from_int ( group ) , yon_char_from_int ( public ) , NULL ) ) ;
gtk_widget_destroy ( window - > Window ) ;
on_close_subwindow ( window - > Window , " RulesWindow " ) ;
}
void on_rules_update ( GtkWidget * self , logrotate_rules_window * window ) {
@ -513,11 +663,12 @@ void on_rules_open(GtkWidget *self,GtkEntry *entry){
window - > FinalEntry = yon_gtk_builder_get_widget ( builder , " FinalEntry " ) ;
window - > CancelButton = yon_gtk_builder_get_widget ( builder , " CancelButton " ) ;
window - > SaveButton = yon_gtk_builder_get_widget ( builder , " SaveButton " ) ;
yon_window_config_custom_window_set ( GTK_WINDOW ( window - > Window ) , " RulesWindow " ) ;
gtk_window_set_title ( GTK_WINDOW ( window - > Window ) , TITLE_LABEL ) ;
dictionary * dict = NULL ;
yon_dictionary_add_or_create_if_exists_with_data ( dict , " entry " , entry ) ;
yon_dictionary_add_or_create_if_exists_with_data ( dict , " window " , window ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , " RulesWindow " ) ;
g_signal_connect ( G_OBJECT ( window - > SaveButton ) , " clicked " , G_CALLBACK ( on_rules_accept ) , dict ) ;
g_signal_connect ( G_OBJECT ( window - > UserReadCheck ) , " toggled " , G_CALLBACK ( on_rules_update ) , window ) ;
@ -546,7 +697,7 @@ void on_filechooser_save(GtkWidget *self, dictionary *dict){
logrotate_filechooser_window * dialog = yon_dictionary_get_data ( dict - > first - > next , logrotate_filechooser_window * ) ;
char * filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( dialog - > FileChooser ) ) ;
gtk_entry_set_text ( GTK_ENTRY ( window - > FileAmountEntry ) , filename ) ;
gtk_widget_destroy ( dialog - > FileChooser ) ;
on_close_subwindow ( dialog - > FileChooser , " FileDialog " ) ;
}
void on_filechooser_open ( GtkWidget * self , logrotate_configure_window * window ) {
@ -556,6 +707,7 @@ void on_filechooser_open(GtkWidget *self, logrotate_configure_window *window){
dialog - > FileOrDirCheck = yon_gtk_builder_get_widget ( builder , " FileOrDirCheck " ) ;
dialog - > CancelButton = yon_gtk_builder_get_widget ( builder , " CancelButton " ) ;
dialog - > AcceptButton = yon_gtk_builder_get_widget ( builder , " AcceptButton " ) ;
yon_window_config_custom_window_set ( GTK_WINDOW ( dialog - > FileChooser ) , " FileDialog " ) ;
gtk_window_set_transient_for ( GTK_WINDOW ( window - > MainWindow ) , GTK_WINDOW ( window - > MainWindow ) ) ;
dictionary * dict = NULL ;
@ -563,7 +715,7 @@ void on_filechooser_open(GtkWidget *self, logrotate_configure_window *window){
yon_dictionary_add_or_create_if_exists_with_data ( dict , " window " , window ) ;
yon_dictionary_add_or_create_if_exists_with_data ( dict , " dialog " , dialog ) ;
g_signal_connect ( G_OBJECT ( dialog - > FileOrDirCheck ) , " toggled " , G_CALLBACK ( on_filechooser_mode_switch ) , dialog ) ;
g_signal_connect ( G_OBJECT ( dialog - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
g_signal_connect ( G_OBJECT ( dialog - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , " FileDialog " ) ;
g_signal_connect ( G_OBJECT ( dialog - > AcceptButton ) , " clicked " , G_CALLBACK ( on_filechooser_save ) , dict ) ;
gtk_widget_show ( dialog - > FileChooser ) ;
}
@ -582,6 +734,7 @@ void on_logrotate_period_check_toggled(GtkToggleButton *self,logrotate_configure
void on_logrotate_save ( GtkWidget * self , dictionary * dict ) {
logrotate_window * dialog = yon_dictionary_get_data ( dict - > first , logrotate_window * ) ;
logrotate_configure_window * window = yon_dictionary_get_data ( dict - > first - > next , logrotate_configure_window * ) ;
char * log_name = " " ;
char * paths = " " ;
char * period = " " ;
char * size = " " ;
@ -618,6 +771,13 @@ void on_logrotate_save(GtkWidget *self, dictionary *dict){
config_str found_paths_list = NULL ;
int found_paths = 0 ;
char * cur_check_paths ;
log_name = ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > LogNameEntry ) ) ;
if ( ! strcmp ( log_name , " " ) ) {
yon_ubl_status_highlight_incorrect ( window - > LogNameEntry ) ;
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , EMPTY_IMPORTANT_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
int valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( main_config . logrotate_list ) , & iter ) ;
for ( ; valid ; valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( main_config . logrotate_list ) , & iter ) ) {
gtk_tree_model_get ( GTK_TREE_MODEL ( main_config . logrotate_list ) , & iter , 1 , & cur_check_paths , - 1 ) ;
@ -625,6 +785,13 @@ void on_logrotate_save(GtkWidget *self, dictionary *dict){
else found_paths_list = yon_char_parsed_append ( found_paths_list , & found_paths , cur_check_paths ) ;
}
valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( window - > list ) , & iter ) ;
if ( ! valid ) {
yon_ubl_status_highlight_incorrect ( gtk_widget_get_parent ( window - > LogPathsTree ) ) ;
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , EMPTY_IMPORTANT_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
GtkTreeIter * lastiter ;
GtkTreeIter * lastitar ;
for ( ; valid ; valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( window - > list ) , & iter ) ) {
char * cur_path ;
gtk_tree_model_get ( GTK_TREE_MODEL ( window - > list ) , & iter , 0 , & cur_path , - 1 ) ;
@ -633,13 +800,16 @@ void on_logrotate_save(GtkWidget *self, dictionary *dict){
}
path_amount + + ;
paths = yon_char_unite ( paths , strcmp ( paths , " " ) ? " , " : " " , cur_path , NULL ) ;
lastiter = gtk_tree_iter_copy ( & iter ) ;
lastitar = gtk_tree_iter_copy ( & iter ) ;
}
if ( ! window - > paths )
if ( ! window - > paths ) {
if ( matched = = path_amount ) {
yon_ubl_status_highlight_incorrect ( gtk_widget_get_parent ( window - > LogPathsTree ) ) ;
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , REPEATED_PATHS_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
}
if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( window - > RotationPeriodCheck ) ) ) {
int active = gtk_combo_box_get_active ( GTK_COMBO_BOX ( window - > RotationPeriodMainCombo ) ) ;
switch ( active ) {
@ -720,11 +890,6 @@ void on_logrotate_save(GtkWidget *self, dictionary *dict){
maxsize = yon_char_unite ( " maxsize " , yon_char_from_long ( value ) , yon_size_get_letter_from_int ( last ) , NULL ) ;
}
// int create_log_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->CreateLogCombo));
// if (create_log_active){
// if (create_log_active==2)
// }
copytruncate = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( window - > CutCheck ) ) ? " copytruncate " : " " ;
int compression_active = gtk_combo_box_get_active ( GTK_COMBO_BOX ( window - > CompressionCombo ) ) ;
@ -829,13 +994,14 @@ void on_logrotate_save(GtkWidget *self, dictionary *dict){
GtkTreeIter iter ;
yon_config_register ( LOGROTATE ( paths ) , " logging " , commandline ) ;
yon_window_config_add_custom_parameter ( paths , " description " , yon_char_new ( ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > LogDescriptionEntry ) ) ) , YON_TYPE_STRING ) ;
yon_window_config_add_custom_parameter ( paths , " render_name " , yon_char_new ( ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > LogNameEntry ) ) ) , YON_TYPE_STRING ) ;
GtkTreeModel * model = GTK_TREE_MODEL ( main_config . logrotate_list ) ;
if ( ! dialog | | ! gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( dialog - > MainTree ) ) , & model , & iter ) ) {
gtk_list_store_append ( main_config . logrotate_list , & iter ) ;
}
paths = yon_char_replace ( paths , " , " , " \n " ) ;
gtk_list_store_set ( main_config . logrotate_list , & iter , 0 , gtk_entry_get_text ( GTK_ENTRY ( window - > LogNameEntry ) ) , 1 , paths , 2 , gtk_entry_get_text ( GTK_ENTRY ( window - > LogDescriptionEntry ) ) , - 1 ) ;
on_close_subwindow ( window - > MainWindow );
gtk_list_store_set ( main_config . logrotate_list , & iter , 0 , log_name , 1 , paths , 2 , gtk_entry_get_text ( GTK_ENTRY ( window - > LogDescriptionEntry ) ) , - 1 ) ;
on_close_subwindow ( window - > MainWindow ," LogrotateWindow " );
}
}
@ -904,6 +1070,8 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_wind
window - > CommandAfterEntry = yon_gtk_builder_get_widget ( builder , " CommandAfterEntry " ) ;
window - > EndworkCommandEntry = yon_gtk_builder_get_widget ( builder , " EndworkCommandEntry " ) ;
window - > StatusBox = yon_gtk_builder_get_widget ( builder , " StatusBox " ) ;
yon_window_config_custom_window_get ( GTK_WINDOW ( window - > MainWindow ) , " LogrotateWindow " ) ;
gtk_window_set_title ( GTK_WINDOW ( window - > MainWindow ) , TITLE_LABEL ) ;
if ( dialog )
gtk_window_set_transient_for ( GTK_WINDOW ( window - > MainWindow ) , GTK_WINDOW ( dialog - > Window ) ) ;
@ -926,8 +1094,6 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_wind
int sizenumber = 0 ;
finalsize = yon_size_convert_automatic ( finalsize , & sizenumber ) ;
char * fin = yon_char_from_float ( finalsize ) ;
char * unw = strstr ( fin , " , " ) + 3 ;
fin = yon_char_divide ( fin , strlen ( fin ) - strlen ( unw ) ) ;
gtk_label_set_text ( GTK_LABEL ( window - > LogSizeLabel ) , yon_char_append ( fin , yon_size_get_letter_from_int ( sizenumber ) ) ) ;
}
@ -1058,10 +1224,6 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_wind
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > RotateSizeMaxBeforeTimeSpin ) , atol ( value ) ) ;
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( window - > RotateSizeMaxBeforeTimeCheck ) , 1 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > RotateSizeMaxBeforeTimeCombo ) , yon_size_get_int_from_letter ( value [ strlen ( value ) - 1 ] ) ) ;
// }else if (!strcmp(parsed[i],"create")){
//
// }else if (!strcmp(parsed[i],"nocreate")){
//
} else if ( strstr ( parsed [ i ] , " size " ) ) {
int sizemod = yon_size_get_int_from_letter ( parsed [ i ] [ strlen ( parsed [ i ] ) - 1 ] ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > JournalMaxSizeSpin ) , atol ( strstr ( parsed [ i ] , " " ) + 1 ) ) ;
@ -1163,9 +1325,7 @@ void on_logrotate_edit(GtkWidget *self, logrotate_window *window){
gtk_entry_set_text ( GTK_ENTRY ( dialog - > LogNameEntry ) , name ? name : " " ) ;
gtk_entry_set_text ( GTK_ENTRY ( dialog - > LogDescriptionEntry ) , description ? description : " " ) ;
gtk_widget_set_can_focus ( dialog - > LogNameEntry , 0 ) ;
// gtk_widget_set_can_focus(dialog->LogDescriptionEntry,0);
gtk_entry_set_has_frame ( GTK_ENTRY ( dialog - > LogNameEntry ) , 0 ) ;
// gtk_entry_set_has_frame(GTK_ENTRY(dialog->LogDescriptionEntry),0);
gtk_style_context_add_class ( gtk_widget_get_style_context ( dialog - > LogNameEntry ) , " nobackground " ) ;
gtk_style_context_add_class ( gtk_widget_get_style_context ( dialog - > LogDescriptionEntry ) , " nobackground " ) ;
}
@ -1289,13 +1449,14 @@ void on_logrotate_tab_open(GtkWidget *self, main_window *widgets){
window - > AddButton = yon_gtk_builder_get_widget ( builder , " AddButton " ) ;
window - > RemoveButton = yon_gtk_builder_get_widget ( builder , " RemoveButton " ) ;
window - > StatusBox = yon_gtk_builder_get_widget ( builder , " StatusBox " ) ;
yon_window_config_custom_window_get ( GTK_WINDOW ( window - > Window ) , " LogrotateTabWindow " ) ;
gtk_window_set_title ( GTK_WINDOW ( window - > Window ) , TITLE_LABEL ) ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( window - > MainTree ) , GTK_TREE_MODEL ( main_config . logrotate_list ) ) ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( window - > AppsMainTree ) , GTK_TREE_MODEL ( main_config . logrotate_apps_list ) ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > SaveButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , " LogrotateTabWindow " ) ;
g_signal_connect ( G_OBJECT ( window - > SaveButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , " LogrotateTabWindow " ) ;
g_signal_connect ( G_OBJECT ( window - > AddButton ) , " clicked " , G_CALLBACK ( on_logrotate_add ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > RemoveButton ) , " clicked " , G_CALLBACK ( on_logrotate_remove ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > ConfigureButton ) , " clicked " , G_CALLBACK ( on_logrotate_edit ) , window ) ;
@ -1318,6 +1479,36 @@ void yon_combo_compress_check(GtkComboBox *self, journald_window *window){
}
}
void on_journald_reset ( GtkWidget * self , journald_window * window ) {
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LogStorageCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LogCompressionCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > RedirectCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LowerSizeCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LowerTimeCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LogStorageCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LogFreeSpaceCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > ForwardedTypeCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > RotationSizeMaxCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LogCompressionSizeCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > DivideJournalFilesCombo ) , 0 ) ;
gtk_combo_box_set_active ( GTK_COMBO_BOX ( window - > LogSizeMaxCombo ) , 0 ) ;
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( window - > LogSizeMaxCheck ) , 0 ) ;
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( window - > LogIntervalCheck ) , 0 ) ;
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( window - > LogFreeSpaceCheck ) , 0 ) ;
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( window - > RotationSizeMaxCheck ) , 0 ) ;
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( window - > LogIntervalAmountCheck ) , 0 ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > LogSizeMaxSpin ) , 0 ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > LogIntervalSpin ) , 0 ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > LogFreeSpaceSpin ) , 0 ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > RotationSizeMaxSpin ) , 0 ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > LogIntervalAmountSpin ) , 0 ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > LogCompressionEntry ) , 0 ) ;
gtk_entry_set_text ( GTK_ENTRY ( window - > RedirectTTYEntry ) , " " ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > LowerSizeEntry ) , 0 ) ;
gtk_spin_button_set_value ( GTK_SPIN_BUTTON ( window - > LowerTimeEntry ) , 0 ) ;
}
void on_journald_save ( GtkWidget * self , journald_window * window ) {
char * storage ;
int storage_active = gtk_combo_box_get_active ( GTK_COMBO_BOX ( window - > LogStorageCombo ) ) ;
@ -1374,18 +1565,10 @@ void on_journald_save(GtkWidget *self, journald_window *window){
}
if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( window - > LogSizeMaxCheck ) ) ) {
long logssize = - 1 ;
long logssize = 0 ;
logssize = gtk_spin_button_get_value ( GTK_SPIN_BUTTON ( window - > LogSizeMaxSpin ) ) ;
int log_size_mod = gtk_combo_box_get_active ( GTK_COMBO_BOX ( window - > LogSizeMaxCombo ) ) ;
for ( int i = 0 ; i < log_size_mod + 1 ; i + + ) {
logssize = logssize * 1024 ;
}
if ( logssize > 0 ) {
float val ;
int size ;
val = yon_size_convert_automatic ( logssize , & size ) ;
yon_config_register ( JOURNALD ( " SystemMaxUse " ) , " logging " , yon_char_append ( yon_char_from_float ( val ) , yon_size_get_letter_from_int ( size ) ) ) ;
}
yon_config_register ( JOURNALD ( " SystemMaxUse " ) , " logging " , yon_char_append ( yon_char_from_long ( logssize ) , yon_size_get_letter_from_int ( log_size_mod ) ) ) ;
} else
yon_config_remove_by_key ( JOURNALD ( " SystemMaxUse " ) ) ;
@ -1417,7 +1600,7 @@ void on_journald_save(GtkWidget *self, journald_window *window){
char * TTY = NULL ;
if ( consoleforwardactive = = 1 ) {
confor = " yes " ;
TTY = ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > RedirectTTYEntry ) ) ;
TTY = yon_char_new ( ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > RedirectTTYEntry ) ) ) ;
if ( yon_char_is_empty ( TTY ) )
consoleforwardactive = 0 ;
}
@ -1439,15 +1622,18 @@ void on_journald_save(GtkWidget *self, journald_window *window){
yon_config_register ( JOURNALD ( " SplitMode " ) , " logging " , splitmode ) ;
else
yon_config_remove_by_key ( JOURNALD ( " SplitMode " ) ) ;
if ( consoleforwardactive ! = 0 )
if ( consoleforwardactive ! = 0 ) {
yon_config_register ( JOURNALD ( " ForwardToConsole " ) , " logging " , confor ) ;
else
yon_config_register ( JOURNALD ( " TTYPath " ) , " logging " , TTY ) ;
} else {
yon_config_remove_by_key ( JOURNALD ( " ForwardToConsole " ) ) ;
yon_config_register ( JOURNALD ( " TTYPath " ) , " logging " , TTY ) ;
}
if ( forwardempty ! = 0 )
yon_config_register ( JOURNALD ( " MaxLevelConsole " ) , " logging " , yon_char_from_int ( forwardempty - 1 ) ) ;
else
yon_config_remove_by_key ( JOURNALD ( " MaxLevelConsole " ) ) ;
on_close_subwindow ( window - > MainWindow );
on_close_subwindow ( window - > MainWindow ," JournaldWindow " );
}
journald_window * yon_journald_open ( GtkWidget * self , main_window * widgets ) {
@ -1456,6 +1642,7 @@ journald_window *yon_journald_open(GtkWidget *self, main_window *widgets){
window - > MainWindow = yon_gtk_builder_get_widget ( builder , " MainWindow " ) ;
window - > CancelButton = yon_gtk_builder_get_widget ( builder , " CancelButton " ) ;
window - > SaveButton = yon_gtk_builder_get_widget ( builder , " SaveButton " ) ;
window - > ResetButton = yon_gtk_builder_get_widget ( builder , " ResetButton " ) ;
window - > LogNameLabel = yon_gtk_builder_get_widget ( builder , " LogNameEntry " ) ;
window - > LogDescriptionLabel = yon_gtk_builder_get_widget ( builder , " LogDescriptionEntry " ) ;
window - > LogStorageCombo = yon_gtk_builder_get_widget ( builder , " LogStorageCombo " ) ;
@ -1488,16 +1675,20 @@ journald_window *yon_journald_open(GtkWidget *self, main_window *widgets){
window - > LowerTimeButton = yon_gtk_builder_get_widget ( builder , " LowerTimeButton " ) ;
window - > headerTopic = yon_gtk_builder_get_widget ( builder , " headerTopic " ) ;
yon_window_config_custom_window_get ( GTK_WINDOW ( window - > MainWindow ) , " JournaldWindow " ) ;
gtk_window_set_transient_for ( GTK_WINDOW ( window - > MainWindow ) , GTK_WINDOW ( widgets - > Window ) ) ;
{
int sz ;
config_str logsize = yon_config_load ( journald_size_command , & sz ) ;
if ( logsize )
gtk_label_set_text ( GTK_LABEL ( window - > LogSizeLabel ) , logsize [ 0 ] ) ;
}
gtk_window_set_title ( GTK_WINDOW ( window - > MainWindow ) , TITLE_LABEL ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , " JournaldWindow " ) ;
g_signal_connect ( G_OBJECT ( window - > SaveButton ) , " clicked " , G_CALLBACK ( on_journald_save ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > ResetButton ) , " clicked " , G_CALLBACK ( on_journald_reset ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > LogIntervalCheck ) , " toggled " , G_CALLBACK ( yon_gtk_widget_set_sensitive_from_toggle_button ) , window - > LogIntervalSpin ) ;
g_signal_connect ( G_OBJECT ( window - > LogIntervalCheck ) , " toggled " , G_CALLBACK ( yon_gtk_widget_set_sensitive_from_toggle_button ) , window - > LogIntervalAmountCheck ) ;
@ -1608,7 +1799,26 @@ void on_log_save(GtkWidget *self, dictionary *dict){
char * pathse = NULL ;
for ( int i = 0 ; i < g_list_length ( list ) ; i + + ) {
GList * paths = gtk_container_get_children ( ( GtkContainer * ) g_list_nth_data ( list , i ) ) ;
pathse = yon_char_unite ( pathse ? yon_char_append ( pathse , " \n " ) : " " , gtk_entry_get_text ( ( GtkEntry * ) g_list_nth_data ( paths , 1 ) ) , NULL ) ;
char * cur = ( char * ) gtk_entry_get_text ( ( GtkEntry * ) g_list_nth_data ( paths , 1 ) ) ;
if ( strcmp ( cur , " " ) )
pathse = yon_char_unite ( pathse ? yon_char_append ( pathse , " \n " ) : " " , cur , NULL ) ;
}
int fo = 0 ;
int so = 0 ;
int paths_size ;
if ( ! pathse ) {
yon_ubl_status_highlight_incorrect ( window - > LogPathsBox ) ;
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , EMPTY_IMPORTANT_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
config_str paths_parsed = yon_char_parse ( pathse , & paths_size , " \n " ) ;
if ( yon_char_parsed_check_repeats ( paths_parsed , paths_size , & fo , & so ) ) {
GList * list = gtk_container_get_children ( GTK_CONTAINER ( window - > LogPathsBox ) ) ;
yon_ubl_status_highlight_incorrect ( ( GtkWidget * ) g_list_nth_data ( list , so ) ) ;
yon_ubl_status_highlight_incorrect ( ( GtkWidget * ) g_list_nth_data ( list , fo ) ) ;
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , REPEAT_PATHS_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
GtkTreeIter iter ;
char * name = ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > NameEntry ) ) ;
@ -1616,11 +1826,44 @@ void on_log_save(GtkWidget *self, dictionary *dict){
if ( ! yon_char_is_empty ( name ) ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > list ) ;
GtkTreeIter iter ;
if ( ! gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > MainTree ) ) , & model , & iter ) )
int stat ;
if ( ! gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > MainTree ) ) , & model , & iter ) ) {
int valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( widgets - > list ) , & iter ) ;
for ( ; valid ; valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( widgets - > list ) , & iter ) ) {
char * paths = NULL ;
char * name ;
gtk_tree_model_get ( GTK_TREE_MODEL ( widgets - > list ) , & iter , 0 , & name , 1 , & paths , - 1 ) ;
if ( ! strcmp ( gtk_entry_get_text ( GTK_ENTRY ( window - > NameEntry ) ) , name ) ) {
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , REPEATED_PATHS_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
yon_ubl_status_highlight_incorrect ( window - > NameEntry ) ;
return ;
}
int paths_size = 0 ;
config_str paths_parsed = yon_char_parse ( paths , & paths_size , " \n " ) ;
int pathse_size = 0 ;
config_str pathse_parsed = yon_char_parse ( pathse , & pathse_size , " \n " ) ;
if ( yon_char_parsed_includes_char_parsed ( pathse_parsed , paths_parsed , pathse_size , paths_size ) ) {
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , REPEATED_PATHS_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
}
gtk_list_store_append ( widgets - > list , & iter ) ;
gtk_list_store_set ( widgets - > list , & iter , 3 , 0 , - 1 ) ;
gtk_list_store_set ( widgets - > list , & iter , 0 , name , 1 , pathse , 2 , & desc ? desc : " " , 3 , 0 , - 1 ) ;
yon_window_config_custom_window_set ( GTK_WINDOW ( window - > MainWindow ) , " AddWindow " ) ;
} else {
yon_window_config_custom_window_set ( GTK_WINDOW ( window - > MainWindow ) , " EditWindow " ) ;
gtk_tree_model_get ( GTK_TREE_MODEL ( widgets - > list ) , & iter , 3 , & stat , - 1 ) ;
gtk_list_store_set ( widgets - > list , & iter , 3 , stat = = 0 ? 0 : stat = = 1 ? 2 : 2 , - 1 ) ;
}
gtk_list_store_set ( widgets - > list , & iter , 0 , name , 1 , pathse , 2 , & desc ? desc : " " , - 1 ) ;
} else {
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , WRITE_IMPORTANT_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
yon_ubl_status_highlight_incorrect ( window - > NameEntry ) ;
return ;
}
on_close_subwindow ( self ) ;
yon_logs_custom_save ( widgets ) ;
on_close_subwindow ( self , NULL ) ;
}
add_log_window * on_add_open ( main_window * widgets ) {
@ -1640,12 +1883,12 @@ add_log_window *on_add_open(main_window *widgets){
window - > ControlSectionBox = yon_gtk_builder_get_widget ( builder , " ControlSectionBox " ) ;
window - > LogPathsBox = yon_gtk_builder_get_widget ( builder , " LogPathsBox " ) ;
window - > NameEntry = yon_gtk_builder_get_widget ( builder , " NameEntry " ) ;
window - > StatusBox = yon_gtk_builder_get_widget ( builder , " StatusBox " ) ;
gtk_window_set_title ( GTK_WINDOW ( window - > MainWindow ) , TITLE_LABEL ) ;
gtk_window_set_transient_for ( GTK_WINDOW ( window - > MainWindow ) , GTK_WINDOW ( widgets - > Window ) ) ;
dictionary * dict = NULL ;
yon_dictionary_add_or_create_if_exists_with_data ( dict , " widgets " , widgets ) ;
yon_dictionary_add_or_create_if_exists_with_data ( dict , " window " , window ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > SaveButton ) , " clicked " , G_CALLBACK ( on_log_save ) , dict ) ;
return window ;
}
@ -1713,6 +1956,8 @@ void on_log_add(GtkWidget *self, main_window *widgets){
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > list ) ;
GtkTreeIter iter ;
add_log_window * window = on_add_open ( widgets ) ;
yon_window_config_custom_window_get ( GTK_WINDOW ( window - > MainWindow ) , " AddWindow " ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , " AddWindow " ) ;
gtk_tree_selection_unselect_all ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > MainTree ) ) ) ;
gtk_widget_show ( window - > MainWindow ) ;
gtk_widget_hide ( window - > StatisticsFrame ) ;
@ -1725,6 +1970,8 @@ void on_log_edit(GtkWidget *self,main_window *widgets){
GtkTreeIter iter ;
if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > MainTree ) ) , & model , & iter ) ) {
add_log_window * window = on_add_open ( widgets ) ;
g_signal_connect ( G_OBJECT ( window - > CancelButton ) , " clicked " , G_CALLBACK ( on_close_subwindow ) , " EditWindow " ) ;
yon_window_config_custom_window_get ( GTK_WINDOW ( window - > MainWindow ) , " EditWindow " ) ;
gtk_widget_show ( window - > MainWindow ) ;
gtk_widget_hide ( window - > StatisticsFrame ) ;
char * name ;
@ -1735,13 +1982,21 @@ void on_log_edit(GtkWidget *self,main_window *widgets){
int protect ;
gtk_tree_model_get ( model , & iter , 0 , & name , 1 , & paths , 2 , & description , 3 , & is_standard , 4 , & protect , - 1 ) ;
gtk_entry_set_text ( GTK_ENTRY ( window - > NameEntry ) , name ) ;
if ( getuid ( ) ! = 0 ) {
gtk_widget_set_sensitive ( window - > SyslogButton , 0 ) ;
gtk_widget_set_sensitive ( window - > MetalogButton , 0 ) ;
gtk_widget_set_sensitive ( window - > JournaldButton , 0 ) ;
gtk_widget_set_sensitive ( window - > LogrotateButton , 0 ) ;
}
if ( ! strcmp ( name , " journald " ) ) {
gtk_widget_hide ( window - > LogrotateButton ) ;
gtk_widget_hide ( window - > MetalogButton ) ;
gtk_widget_hide ( window - > SyslogButton ) ;
gtk_widget_show ( window - > StatisticsFrame ) ;
int sz ;
config_str logsize = yon_config_load ( journald_size_command , & sz ) ;
if ( logsize )
gtk_label_set_text ( GTK_LABEL ( window - > LogSizeLabel ) , logsize [ 0 ] ) ;
g_signal_connect ( G_OBJECT ( window - > JournaldButton ) , " clicked " , G_CALLBACK ( on_journald_open ) , widgets ) ;
} else {
@ -1750,8 +2005,6 @@ void on_log_edit(GtkWidget *self,main_window *widgets){
yon_dictionary_add_or_create_if_exists_with_data ( dict , " widgets " , widgets ) ;
yon_dictionary_add_or_create_if_exists_with_data ( dict , " window " , window ) ;
g_signal_connect ( G_OBJECT ( window - > LogrotateButton ) , " clicked " , G_CALLBACK ( on_log_edit_logrotate_settings ) , dict ) ;
// g_signal_connect(G_OBJECT(window->MetalogButton),"clicked", G_CALLBACK(on_log),widgets);
// g_signal_connect(G_OBJECT(window->SyslogButton),"clicked", G_CALLBACK(yon_journald_open),widgets);
}
window - > log_name = name ;
gtk_entry_set_text ( GTK_ENTRY ( window - > LogDescriptionEntry ) , description ? description : " " ) ;
@ -1767,14 +2020,17 @@ void on_log_edit(GtkWidget *self,main_window *widgets){
GtkWidget * RemoveButton = yon_gtk_builder_get_widget ( builder , " RemoveButton " ) ;
if ( protected < protect ) {
gtk_widget_set_sensitive ( RemoveButton , 0 ) ;
gtk_widget_set_sensitive ( entry , 0 ) ;
gtk_widget_set_sensitive ( SearchButton , 0 ) ;
protected + + ;
} else {
g_signal_connect ( G_OBJECT ( RemoveButton ) , " clicked " , G_CALLBACK ( on_log_path_remove ) , window ) ;
g_signal_connect ( G_OBJECT ( SearchButton ) , " clicked " , G_CALLBACK ( on_log_path_choose ) , window ) ;
}
if ( ! strcmp ( name , " journald " ) ) {
gtk_widget_hide ( AppendButton ) ;
gtk_widget_hide ( RemoveButton ) ;
}
gtk_widget_set_sensitive ( entry , 0 ) ;
gtk_widget_set_sensitive ( SearchButton , 0 ) ;
gtk_entry_set_text ( GTK_ENTRY ( entry ) , paths_parsed [ i ] ) ;
gtk_box_pack_start ( GTK_BOX ( window - > LogPathsBox ) , box , 0 , 0 , 5 ) ;
last = AppendButton ;
@ -1847,6 +2103,13 @@ void on_main_window_tree_selection_changed(GtkWidget *self,main_window *widgets)
void on_main_window_services_tree_selection_changed ( GtkWidget * self , main_window * widgets ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > ServicesList ) ;
GtkTreeIter iter ;
if ( getuid ( ) ! = 0 ) {
gtk_widget_set_sensitive ( widgets - > ServicesEditButton , 0 ) ;
gtk_widget_set_sensitive ( widgets - > ServicesEnableDisableButton , 0 ) ;
gtk_widget_set_sensitive ( widgets - > ServicesStartStopButton , 0 ) ;
return ;
}
if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( widgets - > ServicesTree ) ) , & model , & iter ) ) {
gboolean is_active ;
gboolean is_enabled ;
@ -1934,6 +2197,57 @@ void on_enable_disable_clicked(GtkButton *self, main_window *widgets){
// standard functions
void on_permissions_changed ( ) {
if ( g_permission_get_allowed ( main_config . permissions ) ) {
PolkitAuthority * auth = polkit_authority_get_sync ( NULL , NULL ) ;
PolkitSubject * subject ;
pid_t parent_pid ;
parent_pid = getppid ( ) ;
subject = polkit_unix_process_new_for_owner ( parent_pid , 0 , getuid ( ) ) ;
PolkitDetails * dets = polkit_details_new ( ) ;
if ( polkit_authority_check_authorization_sync ( auth , subject , " com.ublinux.ubl-settings-logging " , dets , POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION , NULL , NULL ) ) {
printf ( " Allowed \n " ) ;
char * command [ ] = { " /bin/pkexec " , " /bin/echo " , " 1 " , NULL } ;
gchar * standard_output = NULL ;
gchar * standard_error = NULL ;
gint exit_status = - 1 ;
GError * error = NULL ;
gboolean success = g_spawn_sync (
NULL ,
command ,
NULL ,
G_SPAWN_DEFAULT ,
NULL ,
NULL ,
& standard_output ,
& standard_error ,
NULL ,
& error
) ;
if ( success ) {
if ( standard_output ! = NULL ) {
printf ( " Output: %s \n " , standard_output ) ;
g_free ( standard_output ) ;
}
if ( standard_error ! = NULL ) {
printf ( " Error output: %s \n " , standard_error ) ;
g_free ( standard_error ) ;
}
printf ( " Exit status: %d \n " , exit_status ) ;
} else {
g_printerr ( " Error running command: %s \n " , error - > message ) ;
g_error_free ( error ) ;
}
} else {
if ( g_permission_get_can_acquire ( main_config . permissions ) ) {
g_permission_acquire ( main_config . permissions , NULL , NULL ) ;
}
}
}
}
void config_init ( ) {
main_config . always_open_documentation = 0 ;
main_config . win_height = 0 ;
@ -1950,6 +2264,19 @@ void config_init(){
main_config . lock_save_local = 0 ;
main_config . logrotate_list = gtk_list_store_new ( 3 , G_TYPE_STRING , G_TYPE_STRING , G_TYPE_STRING ) ;
main_config . logrotate_apps_list = gtk_list_store_new ( 3 , G_TYPE_STRING , G_TYPE_STRING , G_TYPE_STRING ) ;
main_config . remove_thread = - 1 ;
PolkitSubject * subject = NULL ;
pid_t parent_pid ;
parent_pid = getppid ( ) ;
if ( parent_pid = = 1 )
{
g_printerr ( " Parent process was reaped by init(1) \n " ) ;
}
subject = polkit_unix_process_new_for_owner ( parent_pid , 0 , getuid ( ) ) ;
main_config . permissions = polkit_permission_new_sync ( " com.ublinux.ubl-settings-logging " , subject , NULL , NULL ) ;
g_signal_connect ( G_OBJECT ( main_config . permissions ) , " notify::allowed " , G_CALLBACK ( on_permissions_changed ) , NULL ) ;
}
main_window * setup_window ( ) {
@ -1996,6 +2323,8 @@ main_window *setup_window(){
widgets - > list = GTK_LIST_STORE ( gtk_builder_get_object ( builder , " liststore1 " ) ) ;
widgets - > ServicesList = GTK_LIST_STORE ( gtk_builder_get_object ( builder , " ServicesList " ) ) ;
widgets - > UpgradePermissionsMenuItem = yon_gtk_builder_get_widget ( builder , " UpgradePermissionsMenuItem " ) ;
widgets - > MainTree = yon_gtk_builder_get_widget ( builder , " MainTree " ) ;
gtk_window_set_title ( GTK_WINDOW ( widgets - > Window ) , TITLE_LABEL ) ;
@ -2029,7 +2358,9 @@ main_window *setup_window(){
config_str log = yon_char_parse ( journals [ i ] , & log_size , " ; " ) ;
log [ 1 ] = yon_char_replace ( log [ 1 ] , " , " , " \n " ) ;
gtk_list_store_append ( widgets - > list , & iter ) ;
free ( yon_char_parse ( log [ 1 ] , & psize , " \n " ) ) ;
config_str sfafa = yon_char_parse ( log [ 1 ] , & psize , " \n " ) ;
if ( sfafa )
free ( sfafa ) ;
gtk_list_store_set ( widgets - > list , & iter , 0 , log [ 0 ] , 1 , log [ 1 ] , 2 , _ ( log [ 2 ] ) , 3 , 1 , 4 , psize , - 1 ) ;
}
config_str services = yon_file_open ( services_list_path , & service_size ) ;
@ -2039,7 +2370,6 @@ main_window *setup_window(){
services [ i ] = yon_char_divide_search ( services [ i ] , " \n " , - 1 ) ;
config_str log = yon_char_parse ( services [ i ] , & log_size , " ; " ) ;
gtk_list_store_append ( widgets - > ServicesList , & iter ) ;
// yon_config_load
gtk_list_store_set ( widgets - > ServicesList , & iter , 0 , 1 , 1 , 1 , 2 , log [ 0 ] , 3 , _ ( log [ 1 ] ) , 4 , log [ 2 ] , 5 , log [ 3 ] , 6 , log [ 4 ] , 7 , log [ 5 ] , 8 , log [ 6 ] , - 1 ) ;
}
}
@ -2082,13 +2412,11 @@ main_window *setup_window(){
GList * list = gtk_tree_view_get_columns ( GTK_TREE_VIEW ( widgets - > MainTree ) ) ;
for ( int i = 0 ; i < g_list_length ( list ) ; i + + ) {
yon_window_config_add_listener ( g_list_nth_data ( list , i ) , yon_char_append ( " column " , yon_char_from_int ( i ) ) , " fixed-width " , YON_TYPE_INT ) ;
// yon_gtk_column_minimal_fixed_size_set((GtkTreeViewColumn*)g_list_nth_data(list,i));
}
g_list_free ( list ) ;
list = gtk_tree_view_get_columns ( GTK_TREE_VIEW ( widgets - > ServicesTree ) ) ;
for ( int i = 0 ; i < g_list_length ( list ) ; i + + ) {
yon_window_config_add_listener ( g_list_nth_data ( list , i ) , yon_char_append ( " servicecolumn " , yon_char_from_int ( i ) ) , " fixed-width " , YON_TYPE_INT ) ;
// yon_gtk_column_minimal_fixed_size_set((GtkTreeViewColumn*)g_list_nth_data(list,i));
}
main_config . groups = yon_file_open ( group_list_path , & main_config . groups_size ) ;
@ -2096,6 +2424,39 @@ main_window *setup_window(){
yon_char_divide_search_self ( main_config . groups [ i ] , " : " , - 1 ) ;
}
size = 0 ;
config_str custom_watchers = yon_file_open ( custom_logs_saving_file_path , & size ) ;
if ( custom_watchers ) {
GtkTreeIter itar ;
for ( int i = 0 ; i < size ; i + + ) {
int cur_size = 0 ;
config_str cur_watcher = yon_char_parse ( custom_watchers [ i ] , & cur_size , " ; " ) ;
if ( cur_watcher ) {
cur_watcher = yon_char_parsed_append ( cur_watcher , & cur_size , NULL ) ;
char * cur_name ;
int found = 0 ;
int valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( widgets - > list ) , & iter ) ;
for ( ; valid ; valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( widgets - > list ) , & iter ) ) {
gtk_tree_model_get ( GTK_TREE_MODEL ( widgets - > list ) , & iter , 0 , & cur_name , - 1 ) ;
if ( ! strcmp ( cur_name , cur_watcher [ 0 ] ) ) {
found = 1 ;
break ;
}
}
if ( ! found )
gtk_list_store_append ( widgets - > list , & iter ) ;
cur_watcher [ 1 ] = yon_char_replace ( cur_watcher [ 1 ] , " , " , " \n " ) ;
gtk_list_store_set ( widgets - > list , & iter , 0 , cur_watcher [ 0 ] , 1 , cur_watcher [ 1 ] , 2 , cur_watcher [ 2 ] ? cur_watcher [ 2 ] : " " , - 1 ) ;
yon_char_parsed_free ( cur_watcher , cur_size ) ;
}
}
} else {
if ( access ( custom_logs_saving_file_path , F_OK ) ) {
yon_file_create_full_path ( custom_logs_saving_file_path , 0777 ) ;
}
FILE * fl = fopen ( custom_logs_saving_file_path , " w " ) ;
fclose ( fl ) ;
}
/* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */
// yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING);
@ -2116,6 +2477,8 @@ main_window *setup_window(){
g_signal_connect ( G_OBJECT ( widgets - > LoadGlobalMenuItem ) , " activate " , G_CALLBACK ( on_load_global ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > LoadLocalMenuItem ) , " activate " , G_CALLBACK ( on_load_local ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > UpgradePermissionsMenuItem ) , " activate " , G_CALLBACK ( on_permissions_changed ) , NULL ) ;
g_signal_connect ( G_OBJECT ( widgets - > MainTree ) , " cursor-changed " , G_CALLBACK ( on_main_window_tree_selection_changed ) , widgets ) ;
g_signal_connect ( G_OBJECT ( widgets - > ServicesTree ) , " cursor-changed " , G_CALLBACK ( on_main_window_services_tree_selection_changed ) , widgets ) ;
@ -2126,10 +2489,11 @@ main_window *setup_window(){
return widgets ;
}
int main ( int argc , char * argv [ ] ){
int main ( int argc , char * argv [ ] , char * * envp ){
local = setlocale ( LC_ALL , " " ) ;
textdomain ( LocaleName ) ;
config_init ( ) ;
main_config . envp = envp ;
int option_index = 0 ;
int show_help = 0 ;
int debug_mode = 0 ;
@ -2149,7 +2513,7 @@ int main(int argc, char *argv[]){
{ NULL , 0 , NULL , 0 }
} ;
for ( int i = 0 ; i < argc ; i + + ) {
int argument = getopt_long ( argc , argv , " hVvs:e:t: " , long_options , & option_index ) ;
int argument = getopt_long ( argc , argv , " hVvs:e:t: c " , long_options , & option_index ) ;
switch ( argument ) {
case ' h ' :
show_help = 1 ;
@ -2172,6 +2536,7 @@ int main(int argc, char *argv[]){
main_config . load_socket_id = atoi ( optarg ) ;
break ;
case ' c ' : system ( yon_char_unite ( " rm -rfd " , yon_ubl_user_get_home_directory ( ) , " /.config/ " , LocaleName , " / " , NULL ) ) ;
mkdir ( yon_char_unite ( yon_ubl_user_get_home_directory ( ) , " /.config/ " , LocaleName , " / " , NULL ) , 0777 ) ;
break ;
case 1 :
main_config . lock_help = 1 ;