diff --git a/source/ubl-settings-logging.c b/source/ubl-settings-logging.c index 70f452b..ac34c9d 100644 --- a/source/ubl-settings-logging.c +++ b/source/ubl-settings-logging.c @@ -125,9 +125,27 @@ int yon_size_get_int_from_letter(char size){ //functions + +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); + for (int i=0;ifirst,logrotate_window*); + logrotate_configure_window *window = yon_dictionary_get_data(dict->first->next,logrotate_configure_window*); char *paths=""; char *period=""; char *size=""; @@ -548,13 +568,17 @@ void on_logrotate_save(GtkWidget *self, logrotate_configure_window *window){ if(!yon_char_is_empty(paths)){ GtkTreeIter iter; yon_config_register(LOGROTATE(paths),"logging",commandline); - gtk_list_store_append(main_config.logrotate_list,&iter); + 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); } } -logrotate_configure_window *yon_logrotate_window_new(char *paths){ +logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_window *dialog){ logrotate_configure_window *window = malloc(sizeof(logrotate_configure_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_logrotate_path); window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow"); @@ -619,8 +643,12 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths){ window->CommandAfterEntry=yon_gtk_builder_get_widget(builder,"CommandAfterEntry"); window->EndworkCommandEntry=yon_gtk_builder_get_widget(builder,"EndworkCommandEntry"); gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL); + + dictionary *dict=NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); + 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_logrotate_save),window); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_logrotate_save),dict); g_signal_connect(G_OBJECT(window->PathCell),"edited",G_CALLBACK(on_path_editing_done),window); g_signal_connect(G_OBJECT(window->PathCell),"editing-canceled",G_CALLBACK(on_path_editing_cancel),window); g_signal_connect(G_OBJECT(window->LogPathAddButton),"clicked",G_CALLBACK(on_logrotate_configuration_path_add),window); @@ -653,6 +681,11 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths){ g_signal_connect(G_OBJECT(window->CreateLogCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->CreateLogEntry); g_signal_connect(G_OBJECT(window->CreateLogCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->CreateLogButton); + int usize=0; + config_str users = yon_ubl_get_all_users(&usize); + yon_gtk_combo_box_fill(window->CreateLogUserCombo,users,usize); + yon_gtk_combo_box_fill(window->RotationAtUserCombo,users,usize); + if (paths){ int size; GtkTreeIter iter; @@ -799,31 +832,34 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths){ return window; } -void on_logrotate_add(GtkWidget *self, main_window *widgets){ - logrotate_configure_window *window = yon_logrotate_window_new(NULL); +void on_logrotate_add(GtkWidget *self, logrotate_window *dialog){ + logrotate_configure_window *window = yon_logrotate_window_new(NULL,NULL); + gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->MainTree))); gtk_widget_show(window->MainWindow); gtk_widget_set_sensitive(window->LogNameEntry,1); gtk_widget_set_sensitive(window->LogDescriptionEntry,1); gtk_label_set_text(GTK_LABEL(window->LogSizeLabel),""); } -void on_logrotate_edit(GtkWidget *self, logrotate_tab_window *window){ +void on_logrotate_edit(GtkWidget *self, logrotate_window *window){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.logrotate_list); GtkTreeIter iter,itar; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){ char *name; int size=0; char *paths; + char *description; gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(window->MainTree)),&iter,1,&paths,-1); config_str path_parsed = yon_char_parse(paths,&size,"\n"); paths=NULL; for (int i=0;iMainWindow); - gtk_tree_model_get(model,&iter,0,&name,1,&paths,-1); + gtk_tree_model_get(model,&iter,0,&name,1,&paths,2,&description,-1); gtk_entry_set_text(GTK_ENTRY(dialog->LogNameEntry),name); + gtk_entry_set_text(GTK_ENTRY(dialog->LogDescriptionEntry),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); @@ -834,11 +870,15 @@ void on_logrotate_edit(GtkWidget *self, logrotate_tab_window *window){ } -void on_logrotate_remove(GtkWidget *self, logrotate_tab_window *window){ +void on_logrotate_remove(GtkWidget *self, logrotate_window *window){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.logrotate_list); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){ + char *paths; + gtk_tree_model_get(model,&iter,1,&paths,-1); gtk_list_store_remove(main_config.logrotate_list,&iter); + yon_char_replace(paths,"\n",","); + yon_config_remove_by_key(paths); } } @@ -871,7 +911,7 @@ void on_log_edit_logrotate_settings(GtkWidget *self, dictionary *dict){ GList *paths = gtk_container_get_children((GtkContainer*)g_list_nth_data(list,i)); pathse=yon_char_unite(pathse ? yon_char_append(pathse,","):"",gtk_entry_get_text((GtkEntry*)g_list_nth_data(paths,1)),NULL); } - logrotate_configure_window *dialog = yon_logrotate_window_new(pathse); + logrotate_configure_window *dialog = yon_logrotate_window_new(pathse,NULL); gtk_widget_show(dialog->MainWindow); gtk_entry_set_text(GTK_ENTRY(dialog->LogNameEntry),name); gtk_entry_set_text(GTK_ENTRY(dialog->LogDescriptionEntry),description); @@ -1611,6 +1651,7 @@ int main(int argc, char *argv[]){ yon_window_config_setup(GTK_WINDOW(widgets->Window)); yon_load_proceed(YON_CONFIG_LOCAL); yon_window_config_load(config_path); + update_loaded_logrotate(); GtkCssProvider *css=gtk_css_provider_new(); gtk_css_provider_load_from_resource(css,CssPath); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), diff --git a/source/ubl-utils.c b/source/ubl-utils.c index ad2664a..32460ab 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -671,9 +671,9 @@ char **yon_char_parse(char *parameters, int *size, char *divider){ i++; if (strcmp(param,paramline)==0) break; } - string=realloc(string,sizeof(char*)*i); - string[i-1]=yon_char_new(paramline); - i++; + // string=realloc(string,sizeof(char*)*i); + // string[i-1]=yon_char_new(paramline); + // i++; // printf("%d\n",i); *size=i-1; return string; @@ -851,6 +851,20 @@ char *yon_ubl_user_get_home_directory(){ return ret; } +config_str yon_ubl_get_all_users(int *user_size){ + struct passwd *user = NULL; + config_str user_list = NULL; + while ((user = getpwent())) { + if (!user_list) + user_list = yon_char_parsed_new(user_size,user->pw_name,NULL); + else { + user_list = yon_char_parsed_append(user_list,user_size,user->pw_name); + } + } + endpwent(); + return user_list; +} + // parsing functions @@ -1875,13 +1889,13 @@ GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname){ // other Gtk functions -/**yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size) +/**yon_gtk_combo_box_fill(GtkWidget *combo, config_str parameters,int size) * [EN] * * [RU] * Добавляет в Комбобокс [combo] все строки из массива строк [parameters] размера [size] */ -int yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size){ +int yon_gtk_combo_box_fill(GtkWidget *combo, config_str parameters,int size){ if (combo&¶meters){ for (int i=0;i Default Send Email - Don't send email + Don't send Email