diff --git a/Makefile b/Makefile
index e333928..d23ee79 100644
--- a/Makefile
+++ b/Makefile
@@ -133,6 +133,8 @@ install: check uninstall
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.decrease-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.profile-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.edit-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.check-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.uncheck-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/${PKGNAME}/csv/" "journals_list.csv"
@install -Dm644 -t "${DESTDIR}/usr/share/${PKGNAME}/csv/" "logging_services.csv"
@install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy"
diff --git a/icons/com.ublinux.ubl-settings-logging.check-symbolic.svg b/icons/com.ublinux.ubl-settings-logging.check-symbolic.svg
new file mode 100644
index 0000000..a49c2d1
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-logging.check-symbolic.svg
@@ -0,0 +1,43 @@
+
+
diff --git a/icons/com.ublinux.ubl-settings-logging.uncheck-symbolic.svg b/icons/com.ublinux.ubl-settings-logging.uncheck-symbolic.svg
new file mode 100644
index 0000000..305416e
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-logging.uncheck-symbolic.svg
@@ -0,0 +1,38 @@
+
+
diff --git a/source/ubl-settings-logging.c b/source/ubl-settings-logging.c
index f034761..46baf09 100644
--- a/source/ubl-settings-logging.c
+++ b/source/ubl-settings-logging.c
@@ -660,6 +660,28 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_wind
window->EndworkCommandEntry=yon_gtk_builder_get_widget(builder,"EndworkCommandEntry");
gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL);
+ if (paths){
+ int sz;
+ float finalsize=0.0;
+ char *temp_paths = yon_char_new(paths);
+ config_str parsed_paths = yon_char_parse(temp_paths,&sz,",");
+ free(temp_paths);
+ temp_paths=NULL;
+ for (int i=0;iLogSizeLabel),yon_char_append(fin,yon_size_get_letter_from_int(sizenumber)));
+
+ }
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);
@@ -1144,6 +1166,11 @@ 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");
+ {
+ int sz;
+ config_str logsize = yon_config_load(journald_size_command,&sz);
+ 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);
@@ -1251,7 +1278,23 @@ void on_journald_open(GtkWidget *self, main_window *widgets){
// Log adding menu
-add_log_window *on_add_open(){
+void on_log_save(GtkWidget *self, dictionary *dict){
+ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
+ add_log_window *window = yon_dictionary_get_data(dict->first->next,add_log_window*);
+ GList *list = gtk_container_get_children(GTK_CONTAINER(window->LogPathsBox));
+ char *pathse=NULL;
+ for (int i=0;ilist,&iter);
+ gtk_list_store_set(widgets->list,&iter,1,pathse,-1);
+ on_close_subwindow(self);
+}
+
+add_log_window *on_add_open(main_window *widgets){
add_log_window *window = malloc(sizeof(add_log_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_add_path);
window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow");
@@ -1271,8 +1314,11 @@ add_log_window *on_add_open(){
window->ControlSectionBox=yon_gtk_builder_get_widget(builder,"ControlSectionBox");
window->LogPathsBox=yon_gtk_builder_get_widget(builder,"LogPathsBox");
gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL);
+ 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_close_subwindow),NULL);
+ g_signal_connect(G_OBJECT(window->SaveButton),"clicked", G_CALLBACK(on_log_save),dict);
return window;
}
@@ -1338,7 +1384,7 @@ void on_log_path_append(GtkWidget *self, add_log_window *window){
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();
+ add_log_window *window = on_add_open(widgets);
gtk_widget_show(window->MainWindow);
gtk_widget_hide(window->StatisticsFrame);
gtk_widget_hide(window->ControlSectionBox);
@@ -1349,7 +1395,7 @@ void on_log_edit(GtkWidget *self,main_window *widgets){
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)){
- add_log_window *window = on_add_open();
+ add_log_window *window = on_add_open(widgets);
gtk_widget_show(window->MainWindow);
gtk_widget_hide(window->StatisticsFrame);
char *name;
@@ -1420,6 +1466,98 @@ void on_service_edit(GtkWidget *self,main_window *widgets){
}
}
+void on_main_window_tree_selection_changed(GtkWidget *self,main_window *widgets){
+ 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)){
+ gtk_widget_set_sensitive(widgets->AddButton,1);
+ gtk_widget_set_sensitive(widgets->RemoveButton,1);
+ gtk_widget_set_sensitive(widgets->InspectButton,1);
+ gtk_widget_set_sensitive(widgets->ConfigureButton,1);
+ } else {
+ gtk_widget_set_sensitive(widgets->AddButton,0);
+ gtk_widget_set_sensitive(widgets->RemoveButton,0);
+ gtk_widget_set_sensitive(widgets->InspectButton,0);
+ gtk_widget_set_sensitive(widgets->ConfigureButton,0);
+ }
+}
+
+void on_main_window_services_tree_selection_changed(GtkWidget *self,main_window *widgets){
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->ServicesList);
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ServicesTree)),&model,&iter)){
+ gboolean is_active;
+ gboolean is_enabled;
+ char *name;
+ gtk_tree_model_get(model,&iter,0,&is_active,1,&is_enabled,2,&name,-1);
+ if (is_active){
+ gtk_widget_set_sensitive(widgets->ServicesEditButton,1);
+ gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,1);
+ gtk_widget_set_sensitive(widgets->ServicesStartStopButton,1);
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesStartStopButton))),stop_icon_name,GTK_ICON_SIZE_BUTTON);
+ } else {
+ gtk_widget_set_sensitive(widgets->ServicesEditButton,0);
+ gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,1);
+ gtk_widget_set_sensitive(widgets->ServicesStartStopButton,1);
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesStartStopButton))),start_icon_name,GTK_ICON_SIZE_BUTTON);
+ }
+ if (is_enabled){
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesEnableDisableButton))),disable_icon_name,GTK_ICON_SIZE_BUTTON);
+ } else {
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesEnableDisableButton))),enable_icon_name,GTK_ICON_SIZE_BUTTON);
+
+ }
+ if (!strcmp(name,"journald")){
+ gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,0);
+ gtk_widget_set_sensitive(widgets->ServicesStartStopButton,0);
+ }
+ } else {
+ gtk_widget_set_sensitive(widgets->ServicesEditButton,0);
+ gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,0);
+ gtk_widget_set_sensitive(widgets->ServicesStartStopButton,0);
+ }
+}
+
+void on_start_stop_clicked(GtkButton *self, main_window *widgets){
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->ServicesList);
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ServicesTree)),&model,&iter)){
+ char *start_command;
+ char *stop_command;
+ gboolean is_started;
+ gtk_tree_model_get(model,&iter,0,&is_started,5,&start_command,6,&stop_command,-1);
+ if (is_started){
+ yon_launch(stop_command);
+ gtk_list_store_set(widgets->ServicesList,&iter,0,0,-1);
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),start_icon_name,GTK_ICON_SIZE_BUTTON);
+ } else {
+ yon_launch(start_command);
+ gtk_list_store_set(widgets->ServicesList,&iter,0,1,-1);
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),stop_icon_name,GTK_ICON_SIZE_BUTTON);
+ }
+ }
+}
+
+void on_enable_disable_clicked(GtkButton *self, main_window *widgets){
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->ServicesList);
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ServicesTree)),&model,&iter)){
+ char *start_command;
+ char *stop_command;
+ gboolean is_started;
+ gtk_tree_model_get(model,&iter,1,&is_started,7,&start_command,8,&stop_command,-1);
+ if (is_started){
+ yon_launch(stop_command);
+ gtk_list_store_set(widgets->ServicesList,&iter,1,0,-1);
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),start_icon_name,GTK_ICON_SIZE_BUTTON);
+ } else {
+ yon_launch(start_command);
+ gtk_list_store_set(widgets->ServicesList,&iter,1,1,-1);
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),stop_icon_name,GTK_ICON_SIZE_BUTTON);
+ }
+ }
+}
+
// standard functions
void config_init(){
@@ -1478,6 +1616,8 @@ main_window *setup_window(){
widgets->RemoveButton = yon_gtk_builder_get_widget(builder,"MainRemoveButton");
widgets->Notebook = yon_gtk_builder_get_widget(builder,"MainNotebook");
widgets->ServicesEditButton = yon_gtk_builder_get_widget(builder,"ServicesEditButton");
+ widgets->ServicesStartStopButton = yon_gtk_builder_get_widget(builder,"ServicesStartStopButton");
+ widgets->ServicesEnableDisableButton = yon_gtk_builder_get_widget(builder,"ServicesEnableDisableButton");
widgets->ServicesTree = yon_gtk_builder_get_widget(builder,"ServicesTree");
widgets->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
widgets->ServicesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"ServicesList"));
@@ -1523,7 +1663,7 @@ 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);
- gtk_list_store_set(widgets->ServicesList,&iter,0,1,1,1,2,log[0],3,log[1],-1);
+ 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);
}
}
config_str dirs = yon_config_load(logrotate_config_command,&dirs_size);
@@ -1579,7 +1719,12 @@ 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->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);
+ g_signal_connect(G_OBJECT(widgets->ServicesStartStopButton),"clicked",G_CALLBACK(on_start_stop_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->ServicesEnableDisableButton),"clicked",G_CALLBACK(on_enable_disable_clicked),widgets);
gtk_widget_show(widgets->Window);
return widgets;
diff --git a/source/ubl-settings-logging.h b/source/ubl-settings-logging.h
index b560b95..50fd25e 100644
--- a/source/ubl-settings-logging.h
+++ b/source/ubl-settings-logging.h
@@ -31,6 +31,8 @@
#define journals_list_path "/usr/share/ubl-settings-logging/csv/journals_list.csv"
#define services_list_path "/usr/share/ubl-settings-logging/csv/logging_services.csv"
#define logrotate_config_command "ls /etc/logrotate.d/ |sed -e 's/ */\\n/g'"
+#define journald_size_command "journalctl --disk-usage | grep -oE \"[0-9]{1,}.[0-9]{1,}[A-Z]\""
+#define logrotate_size_command(paths) yon_char_unite("du ",paths," |grep -oE '^[0-9]{1,}'",NULL)
#define logrotate_config_path "/etc/logrotate.d/"
#define LocalePath "/usr/share/locale"
@@ -45,6 +47,11 @@
#define get_journal_output_kernel_command "journalctl --no-pager -k"
#define get_journal_output_prioritied_command "journalctl --no-pager -p err..alert"
+#define start_icon_name "com.ublinux.ubl-settings-logging.play-symbolic"
+#define stop_icon_name "com.ublinux.ubl-settings-logging.stop-symbolic"
+#define enable_icon_name "com.ublinux.ubl-settings-logging.check-symbolic"
+#define disable_icon_name "com.ublinux.ubl-settings-logging.uncheck-symbolic"
+
#define yon_add_space_if_exists(string) yon_char_is_empty(string) ? "" : yon_char_append(",",string)
typedef char* string;
string version_application;
@@ -113,6 +120,8 @@ typedef struct {
GtkWidget *Notebook;
GtkWidget *ServicesTree;
GtkWidget *ServicesEditButton;
+ GtkWidget *ServicesStartStopButton;
+ GtkWidget *ServicesEnableDisableButton;
GtkListStore *list;
GtkListStore *ServicesList;
// Custom
diff --git a/source/ubl-utils.c b/source/ubl-utils.c
index 29373da..a50de19 100644
--- a/source/ubl-utils.c
+++ b/source/ubl-utils.c
@@ -607,12 +607,32 @@ char *yon_char_from_int(int int_to_convert)
return ch;
}
+/**yon_char_from_float(int int_to_convert)
+ * [EN]
+ * converts float to char*.
+ *
+ * [RU]
+ * Конвертирует float в char*
+ */
+char *yon_char_from_float(float int_to_convert)
+{
+ int i = 1;
+ float convert_check = (float)int_to_convert;
+ for (i = 1; convert_check >= 10; i++)
+ {
+ convert_check = convert_check / 10;
+ }
+ char *ch = g_malloc0(i * sizeof(char) + 1);
+ sprintf(ch, "%f", int_to_convert);
+ return ch;
+}
+
/**yon_char_from_long(int int_to_convert)
* [EN]
- * converts int to char*.
+ * converts long to char*.
*
* [RU]
- * Конвертирует int в char*
+ * Конвертирует long в char*
*/
char *yon_char_from_long(long int_to_convert)
{
@@ -867,6 +887,23 @@ config_str yon_ubl_get_all_users(int *user_size){
// parsing functions
+/** yon_size_convert_automatic(int bytes, int *size)
+ * [EN]
+ *
+ * [RU]
+ *
+*/
+float yon_size_convert_automatic(int bytes, int *size){
+ float byte_float=bytes;
+ for (*size=-1;byte_float>1024;*size=*size+1){
+ byte_float=byte_float/1024;
+ }
+ if (*size==-1) {
+ *size=0;
+ byte_float=byte_float/1024;
+ }
+ return byte_float;
+}
apps *yon_apps_scan_and_parse_desktops(int *sizef)
{
diff --git a/source/ubl-utils.h b/source/ubl-utils.h
index 0ed953b..79dcf00 100644
--- a/source/ubl-utils.h
+++ b/source/ubl-utils.h
@@ -141,6 +141,8 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider);
char *yon_char_from_int(int int_to_convert);
+char *yon_char_from_float(float int_to_convert);
+
char *yon_char_from_long(long int_to_convert);
char *yon_char_replace(char *source, char *find, char*replace);
@@ -173,6 +175,8 @@ config_str yon_ubl_get_all_users(int *user_size);
// parsing functions
+float yon_size_convert_automatic(int bytes, int *size);
+
config_str philos_list_user(int* size);
apps *yon_apps_scan_and_parse_desktops(int *sizef);
diff --git a/ubl-settings-logging-add.glade b/ubl-settings-logging-add.glade
index f7d8eec..e9a1efe 100644
--- a/ubl-settings-logging-add.glade
+++ b/ubl-settings-logging-add.glade
@@ -50,6 +50,7 @@
@@ -232,12 +242,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
True
False
- com.ublinux.ubl-settings-logging.stop-symbolic
+ com.ublinux.ubl-settings-logging.play-symbolic
True
False
- com.ublinux.ubl-settings-logging.play-symbolic
+ com.ublinux.ubl-settings-logging.check-symbolic
True
@@ -682,6 +692,7 @@ translated and supported by community.
True
+ False
True
True
Inspect log
@@ -699,6 +710,7 @@ translated and supported by community.
True
+ False
True
True
Configure log
@@ -716,6 +728,7 @@ translated and supported by community.
True
+ False
True
True
Add log
@@ -733,6 +746,7 @@ translated and supported by community.
True
+ False
True
True
Remove log
@@ -856,8 +870,9 @@ translated and supported by community.
vertical
5
-
+
True
+ False
True
True
Stop service
@@ -873,8 +888,9 @@ translated and supported by community.
-
+
True
+ False
True
True
Start service
@@ -892,6 +908,7 @@ translated and supported by community.
True
+ False
True
True
Configure service