Fixes, improvements

pull/2/head
Ivan Yartsev 2 years ago
parent 1706867e51
commit 2b97316728

@ -125,9 +125,27 @@ int yon_size_get_int_from_letter(char size){
//functions //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;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_char_replace(loaded[i],",","\n");
gtk_list_store_append(main_config.logrotate_list,&iter);
gtk_list_store_set(main_config.logrotate_list,&iter,1,paths,-1);
}
}
int yon_load_proceed(YON_CONFIG_TYPE type){ 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("*"),JOURNALD("*"),NULL)){
update_loaded_logrotate();
return 1; return 1;
}
} }
@ -343,7 +361,9 @@ void on_logrotate_configuration_path_remove(GtkWidget *self, logrotate_configure
} }
} }
void on_logrotate_save(GtkWidget *self, logrotate_configure_window *window){ 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 *paths=""; char *paths="";
char *period=""; char *period="";
char *size=""; char *size="";
@ -548,13 +568,17 @@ void on_logrotate_save(GtkWidget *self, logrotate_configure_window *window){
if(!yon_char_is_empty(paths)){ if(!yon_char_is_empty(paths)){
GtkTreeIter iter; GtkTreeIter iter;
yon_config_register(LOGROTATE(paths),"logging",commandline); 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); 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); 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)); logrotate_configure_window *window = malloc(sizeof(logrotate_configure_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_logrotate_path); GtkBuilder *builder = gtk_builder_new_from_resource(glade_logrotate_path);
window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow"); 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->CommandAfterEntry=yon_gtk_builder_get_widget(builder,"CommandAfterEntry");
window->EndworkCommandEntry=yon_gtk_builder_get_widget(builder,"EndworkCommandEntry"); window->EndworkCommandEntry=yon_gtk_builder_get_widget(builder,"EndworkCommandEntry");
gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL); 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->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),"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->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); 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->CreateLogEntry);
g_signal_connect(G_OBJECT(window->CreateLogCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->CreateLogButton); 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){ if (paths){
int size; int size;
GtkTreeIter iter; GtkTreeIter iter;
@ -799,31 +832,34 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths){
return window; return window;
} }
void on_logrotate_add(GtkWidget *self, main_window *widgets){ void on_logrotate_add(GtkWidget *self, logrotate_window *dialog){
logrotate_configure_window *window = yon_logrotate_window_new(NULL); 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_show(window->MainWindow);
gtk_widget_set_sensitive(window->LogNameEntry,1); gtk_widget_set_sensitive(window->LogNameEntry,1);
gtk_widget_set_sensitive(window->LogDescriptionEntry,1); gtk_widget_set_sensitive(window->LogDescriptionEntry,1);
gtk_label_set_text(GTK_LABEL(window->LogSizeLabel),""); 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); GtkTreeModel *model = GTK_TREE_MODEL(main_config.logrotate_list);
GtkTreeIter iter,itar; GtkTreeIter iter,itar;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){
char *name; char *name;
int size=0; int size=0;
char *paths; char *paths;
char *description;
gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(window->MainTree)),&iter,1,&paths,-1); 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"); config_str path_parsed = yon_char_parse(paths,&size,"\n");
paths=NULL; paths=NULL;
for (int i=0;i<size;i++){ for (int i=0;i<size;i++){
paths=yon_char_unite(paths ? yon_char_append(paths,","):"",path_parsed[i],NULL); paths=yon_char_unite(paths ? yon_char_append(paths,","):"",path_parsed[i],NULL);
} }
logrotate_configure_window *dialog = yon_logrotate_window_new(paths); logrotate_configure_window *dialog = yon_logrotate_window_new(paths,window);
gtk_widget_show(dialog->MainWindow); gtk_widget_show(dialog->MainWindow);
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->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->LogNameEntry,0);
gtk_widget_set_can_focus(dialog->LogDescriptionEntry,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->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); GtkTreeModel *model = GTK_TREE_MODEL(main_config.logrotate_list);
GtkTreeIter iter; GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &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); 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)); 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); 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_widget_show(dialog->MainWindow);
gtk_entry_set_text(GTK_ENTRY(dialog->LogNameEntry),name); gtk_entry_set_text(GTK_ENTRY(dialog->LogNameEntry),name);
gtk_entry_set_text(GTK_ENTRY(dialog->LogDescriptionEntry),description); 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_window_config_setup(GTK_WINDOW(widgets->Window));
yon_load_proceed(YON_CONFIG_LOCAL); yon_load_proceed(YON_CONFIG_LOCAL);
yon_window_config_load(config_path); yon_window_config_load(config_path);
update_loaded_logrotate();
GtkCssProvider *css=gtk_css_provider_new(); GtkCssProvider *css=gtk_css_provider_new();
gtk_css_provider_load_from_resource(css,CssPath); gtk_css_provider_load_from_resource(css,CssPath);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),

@ -671,9 +671,9 @@ char **yon_char_parse(char *parameters, int *size, char *divider){
i++; i++;
if (strcmp(param,paramline)==0) break; if (strcmp(param,paramline)==0) break;
} }
string=realloc(string,sizeof(char*)*i); // string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(paramline); // string[i-1]=yon_char_new(paramline);
i++; // i++;
// printf("%d\n",i); // printf("%d\n",i);
*size=i-1; *size=i-1;
return string; return string;
@ -851,6 +851,20 @@ char *yon_ubl_user_get_home_directory(){
return ret; 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 // parsing functions
@ -1875,13 +1889,13 @@ GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname){
// other Gtk functions // 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] * [EN]
* *
* [RU] * [RU]
* Добавляет в Комбобокс [combo] все строки из массива строк [parameters] размера [size] * Добавляет в Комбобокс [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&&parameters){ if (combo&&parameters){
for (int i=0;i<size;i++){ for (int i=0;i<size;i++){
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo),parameters[i]); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo),parameters[i]);

@ -169,6 +169,8 @@ char *yon_ubl_root_user_get();
char *yon_ubl_user_get_home_directory(); char *yon_ubl_user_get_home_directory();
config_str yon_ubl_get_all_users(int *user_size);
// parsing functions // parsing functions
config_str philos_list_user(int* size); config_str philos_list_user(int* size);

@ -1661,7 +1661,7 @@
<items> <items>
<item translatable="yes">Default</item> <item translatable="yes">Default</item>
<item translatable="yes">Send Email</item> <item translatable="yes">Send Email</item>
<item translatable="yes">Don't send email</item> <item translatable="yes">Don't send Email</item>
</items> </items>
</object> </object>
<packing> <packing>

Loading…
Cancel
Save