diff --git a/gresource.xml b/gresource.xml index f7a9968..1f26a40 100644 --- a/gresource.xml +++ b/gresource.xml @@ -8,6 +8,7 @@ ubl-settings-logging-logrotate.glade ubl-settings-logging-journald.glade ubl-settings-logging-rules.glade + ubl-settings-logging-filechooser.glade ubl-settings-logging-logrotate-table.glade diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 24aa362..3edbf50 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -43,6 +43,7 @@ set(DEPENDFILES ../ubl-settings-logging-journald.glade ../ubl-settings-logging-logrotate.glade ../ubl-settings-logging-logrotate-table.glade + ../ubl-settings-logging-filechooser.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 aa1b895..88b0d51 100644 --- a/source/ubl-settings-logging.c +++ b/source/ubl-settings-logging.c @@ -406,6 +406,157 @@ void on_file_amount_checked(GtkToggleButton *self, logrotate_configure_window *w } } +void on_rules_accept(GtkWidget *self, dictionary *dict){ + GtkEntry *entry = yon_dictionary_get_data(dict->first,GtkEntry*); + logrotate_rules_window *window = yon_dictionary_get_data(dict->first->next,logrotate_rules_window*); + int owner_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UserReadCheck)); + int owner_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UserWriteCheck)); + int owner_exec = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UserExecuteCheck)); + + int group_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupReadCheck)); + int group_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupWriteCheck)); + int group_exec = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupExecuteCheck)); + + int public_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PublicReadCheck)); + int public_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PublicWriteCheck)); + int public_exec = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PublicExecuteCheck)); + int owner = owner_read&&owner_write&&owner_exec? 7 : \ + owner_read&&!owner_write&&!owner_exec ? 4 : \ + !owner_read&&owner_write&&!owner_exec ? 2 : \ + !owner_read&&!owner_write&&owner_exec ? 1 : \ + owner_read&&owner_write&&!owner_exec ? 6 : \ + owner_read&&!owner_write&&owner_exec ? 5 : \ + !owner_read&&owner_write&&owner_exec ? 3 : \ + 0; + int group = group_read&&group_write&&group_exec? 7 : \ + group_read&&!group_write&&!group_exec ? 4 : \ + !group_read&&group_write&&!group_exec ? 2 : \ + !group_read&&!group_write&&group_exec ? 1 : \ + group_read&&group_write&&!group_exec ? 6 : \ + group_read&&!group_write&&group_exec ? 5 : \ + !group_read&&group_write&&group_exec ? 3 : \ + 0; + int public = public_read&&public_write&&public_exec? 7 : \ + public_read&&!public_write&&!public_exec ? 4 : \ + !public_read&&public_write&&!public_exec ? 2 : \ + !public_read&&!public_write&&public_exec ? 1 : \ + public_read&&public_write&&!public_exec ? 6 : \ + public_read&&!public_write&&public_exec ? 5 : \ + !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); +} + +void on_rules_update(GtkWidget *self, logrotate_rules_window *window){ + int owner_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UserReadCheck)); + int owner_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UserWriteCheck)); + int owner_exec = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UserExecuteCheck)); + + int group_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupReadCheck)); + int group_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupWriteCheck)); + int group_exec = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupExecuteCheck)); + + int public_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PublicReadCheck)); + int public_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PublicWriteCheck)); + int public_exec = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PublicExecuteCheck)); + int owner = owner_read&&owner_write&&owner_exec? 7 : \ + owner_read&&!owner_write&&!owner_exec ? 4 : \ + !owner_read&&owner_write&&!owner_exec ? 2 : \ + !owner_read&&!owner_write&&owner_exec ? 1 : \ + owner_read&&owner_write&&!owner_exec ? 6 : \ + owner_read&&!owner_write&&owner_exec ? 5 : \ + !owner_read&&owner_write&&owner_exec ? 3 : \ + 0; + int group = group_read&&group_write&&group_exec? 7 : \ + group_read&&!group_write&&!group_exec ? 4 : \ + !group_read&&group_write&&!group_exec ? 2 : \ + !group_read&&!group_write&&group_exec ? 1 : \ + group_read&&group_write&&!group_exec ? 6 : \ + group_read&&!group_write&&group_exec ? 5 : \ + !group_read&&group_write&&group_exec ? 3 : \ + 0; + int public = public_read&&public_write&&public_exec? 7 : \ + public_read&&!public_write&&!public_exec ? 4 : \ + !public_read&&public_write&&!public_exec ? 2 : \ + !public_read&&!public_write&&public_exec ? 1 : \ + public_read&&public_write&&!public_exec ? 6 : \ + public_read&&!public_write&&public_exec ? 5 : \ + !public_read&&public_write&&public_exec ? 3 : \ + 0; + gtk_entry_set_text(GTK_ENTRY(window->FinalEntry),yon_char_unite(yon_char_from_int(owner),yon_char_from_int(group),yon_char_from_int(public),NULL)); +} + +void on_rules_open(GtkWidget *self,GtkEntry *entry){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_rules_path); + logrotate_rules_window *window = malloc(sizeof(logrotate_rules_window)); + window->Window=yon_gtk_builder_get_widget(builder,"MainWindow"); + window->UserReadCheck=yon_gtk_builder_get_widget(builder,"UserReadCheck"); + window->UserWriteCheck=yon_gtk_builder_get_widget(builder,"UserWriteCheck"); + window->UserExecuteCheck=yon_gtk_builder_get_widget(builder,"UserExecuteCheck"); + window->GroupReadCheck=yon_gtk_builder_get_widget(builder,"GroupReadCheck"); + window->GroupWriteCheck=yon_gtk_builder_get_widget(builder,"GroupWriteCheck"); + window->GroupExecuteCheck=yon_gtk_builder_get_widget(builder,"GroupExecuteCheck"); + window->PublicReadCheck=yon_gtk_builder_get_widget(builder,"PublicReadCheck"); + window->PublicWriteCheck=yon_gtk_builder_get_widget(builder,"PublicWriteCheck"); + window->PublicExecuteCheck=yon_gtk_builder_get_widget(builder,"PublicExecuteCheck"); + 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"); + 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->SaveButton),"clicked",G_CALLBACK(on_rules_accept),dict); + + g_signal_connect(G_OBJECT(window->UserReadCheck),"toggled",G_CALLBACK(on_rules_update),window); + g_signal_connect(G_OBJECT(window->UserWriteCheck),"toggled",G_CALLBACK(on_rules_update),window); + g_signal_connect(G_OBJECT(window->UserExecuteCheck),"toggled",G_CALLBACK(on_rules_update),window); + + g_signal_connect(G_OBJECT(window->GroupReadCheck),"toggled",G_CALLBACK(on_rules_update),window); + g_signal_connect(G_OBJECT(window->GroupWriteCheck),"toggled",G_CALLBACK(on_rules_update),window); + g_signal_connect(G_OBJECT(window->GroupExecuteCheck),"toggled",G_CALLBACK(on_rules_update),window); + + g_signal_connect(G_OBJECT(window->PublicReadCheck),"toggled",G_CALLBACK(on_rules_update),window); + g_signal_connect(G_OBJECT(window->PublicWriteCheck),"toggled",G_CALLBACK(on_rules_update),window); + g_signal_connect(G_OBJECT(window->PublicExecuteCheck),"toggled",G_CALLBACK(on_rules_update),window); + gtk_widget_show(window->Window); +} + +void on_filechooser_mode_switch(GtkWidget *self, logrotate_filechooser_window *window){ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->FileOrDirCheck))){ + gtk_file_chooser_set_action(GTK_FILE_CHOOSER(window->FileChooser),GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + } + gtk_file_chooser_set_action(GTK_FILE_CHOOSER(window->FileChooser),GTK_FILE_CHOOSER_ACTION_OPEN); +} + +void on_filechooser_save(GtkWidget *self, dictionary *dict){ + logrotate_configure_window *window = yon_dictionary_get_data(dict->first,logrotate_configure_window*); + 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); +} + +void on_filechooser_open(GtkWidget *self, logrotate_configure_window *window){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_filechooser_path); + logrotate_filechooser_window *dialog = malloc(sizeof(logrotate_filechooser_window)); + dialog->FileChooser = yon_gtk_builder_get_widget(builder,"FileChooser"); + 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"); + + dictionary *dict = NULL; + gtk_window_set_title(GTK_WINDOW(dialog->FileChooser),TITLE_LABEL); + 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->AcceptButton),"clicked",G_CALLBACK(on_filechooser_save),dict); + gtk_widget_show(dialog->FileChooser); +} + 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*); @@ -753,6 +904,11 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_wind g_signal_connect(G_OBJECT(window->EmailCombo),"changed",G_CALLBACK(on_combo_activate_first),window->EmailEntry); g_signal_connect(G_OBJECT(window->EmailCombo),"changed",G_CALLBACK(on_combo_activate_first),window->EmailContentsCombo); + + g_signal_connect(G_OBJECT(window->FileAmountButton),"clicked",G_CALLBACK(on_filechooser_open),window); + + g_signal_connect(G_OBJECT(window->CreateLogButton),"clicked",G_CALLBACK(on_rules_open),window->CreateLogEntry); + int usize=0; config_str users = yon_ubl_get_all_users(&usize); yon_gtk_combo_box_fill(window->CreateLogUserCombo,users,usize); diff --git a/source/ubl-settings-logging.h b/source/ubl-settings-logging.h index 50fd25e..d34a001 100644 --- a/source/ubl-settings-logging.h +++ b/source/ubl-settings-logging.h @@ -25,6 +25,8 @@ #define glade_journald_path "/com/ublinux/ui/ubl-settings-logging-journald.glade" #define glade_logrotate_path "/com/ublinux/ui/ubl-settings-logging-logrotate.glade" #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 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) @@ -204,12 +206,26 @@ char *journal_paths; typedef struct { GtkWidget *Window; - GtkWidget *MainTree; - GtkWidget *ConfiguraButton; + GtkWidget *UserReadCheck; + GtkWidget *UserWriteCheck; + GtkWidget *UserExecuteCheck; + GtkWidget *GroupReadCheck; + GtkWidget *GroupWriteCheck; + GtkWidget *GroupExecuteCheck; + GtkWidget *PublicReadCheck; + GtkWidget *PublicWriteCheck; + GtkWidget *PublicExecuteCheck; + GtkWidget *FinalEntry; GtkWidget *CancelButton; GtkWidget *SaveButton; - GtkListStore *list; -} logrotate_tab_window; +} logrotate_rules_window; + +typedef struct { + GtkWidget *FileChooser; + GtkWidget *FileOrDirCheck; + GtkWidget *CancelButton; + GtkWidget *AcceptButton; +} logrotate_filechooser_window; typedef struct { GtkWidget *Window; diff --git a/ubl-settings-logging-filechooser.glade b/ubl-settings-logging-filechooser.glade index 226d754..28ddce1 100644 --- a/ubl-settings-logging-filechooser.glade +++ b/ubl-settings-logging-filechooser.glade @@ -16,6 +16,7 @@ 800 600 False + True com.ublinux.ubl-settings-logging dialog True diff --git a/ubl-settings-logging-rules.glade b/ubl-settings-logging-rules.glade index 6d5f82a..3b1f097 100644 --- a/ubl-settings-logging-rules.glade +++ b/ubl-settings-logging-rules.glade @@ -12,328 +12,342 @@ False emblem-ok-symbolic - + False + True com.ublinux.ubl-settings-logging - - - True + dialog + + False - 5 - 5 - 5 - 5 vertical - 5 - - - True + 2 + + False - 0.019999999552965164 - in + end - + + Cancel True - False - 5 - 5 - 5 - - - True - False - 5 - - - Read - True - True - False - True - - - False - True - 0 - - - - - Write - True - True - False - True - - - False - True - 1 - - - - - Execute - True - True - False - True - - - False - True - 2 - - - - + True + True + image1 + + False + True + 0 + - - + + + Accept True - False - Owner rules + True + True + image2 + + False + True + 1 + False - True + False 0 - + True False - 0.019999999552965164 - in + 5 + 5 + 5 + 5 + vertical + 5 - + True False - 5 - 5 - 5 + 0.019999999552965164 + in - + True False - 5 + 5 + 5 + 5 - - Read + True - True - False - True + False + 5 + + + Read + True + True + False + True + + + False + True + 0 + + + + + Write + True + True + False + True + + + False + True + 1 + + + + + Execute + True + True + False + True + + + False + True + 2 + + - - False - True - 0 - - - - - Write - True - True - False - True - - - False - True - 1 - - - - - Execute - True - True - False - True - - - False - True - 2 - + + + True + False + Owner rules + + + + False + True + 0 + - - - True - False - Group rules - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - + True False - 5 - 5 - 5 + 0.019999999552965164 + in - + True False - 5 - - - Read - True - True - False - True - - - False - True - 0 - - - - - Write - True - True - False - True - - - False - True - 1 - - + 5 + 5 + 5 - - Execute + True - True - False - True + False + 5 + + + Read + True + True + False + True + + + False + True + 0 + + + + + Write + True + True + False + True + + + False + True + 1 + + + + + Execute + True + True + False + True + + + False + True + 2 + + - - False - True - 2 - - - - - - True - False - Public rules - - - - - False - True - 2 - - - - - True - False - 5 - - - True - False - Value: + + + True + False + Group rules + + False True - 0 - - - - - True - False - - - True - True 1 - - - False - True - 3 - - - - - True - False - end - 5 - - Cancel + True - True - True - image1 + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + False + 5 + + + Read + True + True + False + True + + + False + True + 0 + + + + + Write + True + True + False + True + + + False + True + 1 + + + + + Execute + True + True + False + True + + + False + True + 2 + + + + + + + + + True + False + Public rules + + False True - 0 + 2 - - Accept + True - True - True - image2 + False + 5 + + + True + False + Value: + + + False + True + 0 + + + + + True + False + 3 + 3 + digits + + + True + True + 1 + + False True - 1 + 3 False True - end - 4 + 1 diff --git a/ubl-settings-logging.glade b/ubl-settings-logging.glade index b86e205..ee39e3d 100644 --- a/ubl-settings-logging.glade +++ b/ubl-settings-logging.glade @@ -946,10 +946,8 @@ translated and supported by community. - True fixed - 50 - 50 + 30 Status @@ -961,10 +959,8 @@ translated and supported by community. - True fixed - 70 - 70 + 30 Autostart