diff --git a/.gitignore b/.gitignore index 5a6c163..5b114da 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,8 @@ source/ubl-cmake.h ubl-settings-resourcequota build/ compile -vgcore.* \ No newline at end of file +vgcore.* +*~* +*#* +terminal-commands/ +.install.sh \ No newline at end of file diff --git a/Makefile b/Makefile index 1b531a5..4f59d1c 100644 --- a/Makefile +++ b/Makefile @@ -120,7 +120,7 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" - @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.funnel.svg" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.funnel-symbolic.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" @install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" @install -Dm644 "com.ublinux.${PKGNAME}.policy" "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy" diff --git a/com.ublinux.ubl-settings-resourcequota.funnel.svg b/com.ublinux.ubl-settings-resourcequota.funnel-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-resourcequota.funnel.svg rename to com.ublinux.ubl-settings-resourcequota.funnel-symbolic.svg diff --git a/gresource.xml b/gresource.xml index ed4693e..329188e 100644 --- a/gresource.xml +++ b/gresource.xml @@ -2,6 +2,8 @@ ubl-settings-resourcequota.glade + ubl-settings-resourcequota-filters.glade + ubl-settings-resourcequota-quota.glade ubl-settings-resourcequota.css diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 5202797..5774811 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -36,6 +36,8 @@ add_custom_target(GLADE ubl-settings-resourcequota.glade) set(DEPENDFILES ../ubl-settings-resourcequota.glade + ../ubl-settings-resourcequota-filters.glade + ../ubl-settings-resourcequota-quota.glade ../gresource.xml ../ubl-settings-resourcequota-banner.png ../ubl-settings-resourcequota.css @@ -72,20 +74,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin set(SOURCE_FILES ubl-settings-resourcequota.c ubl-settings-resourcequota.h - my_device.c - my_device.h - filters.c - filters.h - view_add.c - view_add.h - view_edit.c - view_edit.h - ubl-strings.h - ubl-utils.h ubl-utils.c - ubl-cmake.h - philos_utils.c - philos_utils.h + ubl-utils.h ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h ) diff --git a/source/filters.c b/source/filters.c deleted file mode 100644 index f4397b9..0000000 --- a/source/filters.c +++ /dev/null @@ -1,90 +0,0 @@ -#include "filters.h" - -filters_window *filters_widgets = NULL; -gboolean flag_filters[8]; -filters_window *filters_setup_window(char* glade_path){ - if (filters_widgets == NULL) { - filters_widgets = malloc(sizeof(filters_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); - filters_widgets->Window = yon_gtk_builder_get_widget(builder,"wndFilters"); - filters_widgets->chbFilterTypeQouota = yon_gtk_builder_get_widget(builder,"chbFilterTypeQouota"); - filters_widgets->chbQuotaVolume = yon_gtk_builder_get_widget(builder,"chbQuotaVolume"); - filters_widgets->chbSoftLimit = yon_gtk_builder_get_widget(builder,"chbSoftLimit"); - filters_widgets->chbHardLimit = yon_gtk_builder_get_widget(builder,"chbHardLimit"); - filters_widgets->chbSwapFileLimit = yon_gtk_builder_get_widget(builder,"chbSwapFileLimit"); - filters_widgets->chbIOLimitWrite = yon_gtk_builder_get_widget(builder,"chbIOLimitWrite"); - filters_widgets->chbCPULimit = yon_gtk_builder_get_widget(builder,"chbCPULimit"); - filters_widgets->chbIOLimitRead = yon_gtk_builder_get_widget(builder,"chbIOLimitRead"); - filters_widgets->btnFiltersCancel = yon_gtk_builder_get_widget(builder,"btnFiltersCancel"); - filters_widgets->btnFiltersSave = yon_gtk_builder_get_widget(builder,"btnFiltersSave"); - filters_event(filters_widgets); - } - filters_set_flag(); - return filters_widgets; -} - -void filters_event(filters_window *widgets) { - g_signal_connect(G_OBJECT(widgets->btnFiltersCancel), "clicked",G_CALLBACK(filters_on_hide_subwindow),NULL); - g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(filters_destroy), NULL); -} - -void filters_destroy(GtkWidget *self) { - filters_widgets = NULL; -} - -void filters_localization(filters_window *widgets) { - -} - -void filters_on_hide_subwindow(GtkWidget *self) { - gtk_widget_destroy(gtk_widget_get_toplevel(self)); - filters_widgets = NULL; -} - -filters_window *get_widget_filters() { - return filters_widgets; -} - -void filters_show(GtkWidget *self, char* glade_path) { - if (filters_widgets != NULL) { - gtk_widget_show_all(filters_widgets->Window); - } - else { - filters_setup_window(glade_path); - gtk_widget_show_all(filters_widgets->Window); - } -} - -gboolean* filters_get_flag() { - flag_filters[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterTypeQouota)); - flag_filters[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbQuotaVolume)); - flag_filters[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSoftLimit)); - flag_filters[3] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbHardLimit)); - flag_filters[4] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSwapFileLimit)); - flag_filters[5] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbCPULimit)); - flag_filters[6] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitWrite)); - flag_filters[7] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitRead)); - return flag_filters; -} - -void filters_init_flag() { - flag_filters[0] = 1; - flag_filters[1] = 1; - flag_filters[2] = 1; - flag_filters[3] = 1; - flag_filters[4] = 1; - flag_filters[5] = 1; - flag_filters[6] = 1; - flag_filters[7] = 1; -} - -void filters_set_flag() { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterTypeQouota),flag_filters[0] ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbQuotaVolume), flag_filters[1]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSoftLimit), flag_filters[2]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbHardLimit), flag_filters[3]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSwapFileLimit), flag_filters[4]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbCPULimit), flag_filters[5]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitWrite), flag_filters[6]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitRead), flag_filters[7]); -} \ No newline at end of file diff --git a/source/filters.h b/source/filters.h deleted file mode 100644 index 8dd6a40..0000000 --- a/source/filters.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef FILTERS_H -#define FILTERS_H -#include -#include -#include "ubl-utils.h" -#include "ubl-strings.h" -#include -#include -#include -#include -#include -#include -#include -#include "philos_utils.h" - -// Переменные -typedef struct { - GtkWidget* Window; - GtkWidget* btnFiltersSave; - GtkWidget* btnFiltersCancel; - GtkWidget* chbFilterTypeQouota; - GtkWidget* chbCPULimit; - GtkWidget* chbIOLimitRead; - GtkWidget* chbIOLimitWrite; - GtkWidget* chbSwapFileLimit; - GtkWidget* chbHardLimit; - GtkWidget* chbSoftLimit; - GtkWidget* chbQuotaVolume; -} filters_window; - -// Функции -filters_window *filters_setup_window(char* glade_path); -void filters_event(filters_window *widgets); -void filters_localization(filters_window *widgets); -void filters_on_hide_subwindow(GtkWidget *self); -filters_window *get_widget_filters(); -void filters_show(GtkWidget *self, char* glade_path); -void filters_destroy(GtkWidget *self); -int* filters_get_flag(); -void filters_init_flag(); -void filters_set_flag(); -#endif \ No newline at end of file diff --git a/source/my_device.c b/source/my_device.c deleted file mode 100644 index 614a3ff..0000000 --- a/source/my_device.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "my_device.h" - -device_config obj_device_config; - -device_config* get_device_cfg() { - return &obj_device_config; -} - -void device_disk_parsed() { - char* cmd = "lsblk --fs --raw --output PATH,FSTYPE --exclude 7,11,253"; - int size = 0; - char** responce = yon_config_load(cmd, &size); - obj_device_config.size_disk = 0; - char* split_simvol = " "; - for (int index = 1; index < size; index++ ) { - char* disk = yon_char_divide_search(responce[index], "\n", -1); - if (yon_char_find_count(disk, " ") != 0) { - char* name_disk = yon_char_divide_search(disk, " ", -1); - obj_device_config.name_disk = yon_char_parsed_append(obj_device_config.name_disk, &obj_device_config.size_disk, name_disk); - obj_device_config.size_disk--; - obj_device_config.file_system = yon_char_parsed_append(obj_device_config.file_system, &obj_device_config.size_disk, disk); - obj_device_config.size_disk--; - obj_device_config.mounted = yon_char_parsed_append(obj_device_config.mounted, &obj_device_config.size_disk, ""); - obj_device_config.size_disk--; - obj_device_config.type_dick = yon_char_parsed_append(obj_device_config.type_dick, &obj_device_config.size_disk, ""); - obj_device_config.size_disk--; - disk = yon_char_replace(disk," ", ""); - if (strlen(disk)!=0) { - char* description_disk = yon_char_unite(name_disk, - split_simvol, - disk, - NULL); - obj_device_config.description_disk = yon_char_parsed_append(obj_device_config.description_disk, &obj_device_config.size_disk, description_disk); - free(description_disk); - - } - free(name_disk); - } - free(disk); - } - philos_free_string_array(&responce, size); - -} -void device_fill_disk(GtkWidget* combo_box_text) { - for (int index = 0; index < obj_device_config.size_disk; index++) { - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box_text), obj_device_config.description_disk[index]); - } -} - - diff --git a/source/my_device.h b/source/my_device.h deleted file mode 100644 index c2ef0e6..0000000 --- a/source/my_device.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef MY_DEVICE_H -#define MY_DEVICE_H -#include "ubl-utils.h" -#include -#include -#include -#include "philos_utils.h" -typedef struct { - char** name_disk; - char** file_system; - char** mounted; - char** type_dick; - char** description_disk; - int size_disk; -} device_config; - -void device_disk_parsed(); -device_config* get_device_cfg(); -void device_fill_disk(GtkWidget* combo_box_text); -size_t get_mem_total(); -float get_size_pow_memory(size_t size_memory, int size); -size_t get_resurs_total(char* cmd); - -#endif \ No newline at end of file diff --git a/source/philos_utils.c b/source/philos_utils.c deleted file mode 100644 index b32822e..0000000 --- a/source/philos_utils.c +++ /dev/null @@ -1,1138 +0,0 @@ -#include "philos_utils.h" - -void philos_array_string_remove_char(char*** array, char* str_remove, int size) { - for (int index = 0; index < size; index++) { - (*array)[index] = yon_char_divide_search((*array)[index], str_remove, -1); - } - -} - -void philos_set_pow_size_memory(char* str_find, int** array_size,int index, char** array_size_pow) { - char* STR_KB = array_size_pow[0]; - char* STR_MB = array_size_pow[1]; - char* STR_GB = array_size_pow[2]; - char* STR_TB = array_size_pow[3]; - size_t length = strlen(str_find); - if (strstr(str_find,"K") != NULL) { - *array_size = philos_int_append(*array_size, &index, 0); - str_find = yon_char_divide(str_find, length-1); - str_find = yon_char_unite(str_find, " ", STR_KB, NULL); - index--; - } - else if (strstr(str_find,"M") != NULL) { - *array_size = philos_int_append(*array_size, &index, 1); - str_find = yon_char_divide(str_find, length-1); - str_find = yon_char_unite(str_find," ", STR_MB, NULL); - index--; - } - else if (strstr(str_find,"G") != NULL) { - *array_size = philos_int_append(*array_size, &index, 2); - str_find = yon_char_divide(str_find, length-1); - str_find = yon_char_unite(str_find," ", STR_GB, NULL); - index--; - } - else if (strstr(str_find,"T") != NULL) { - *array_size = philos_int_append(*array_size, &index, 3); - str_find = yon_char_divide(str_find, length-1); - - str_find = yon_char_unite(str_find," ", STR_TB, NULL); - index--; - } - else if (strstr(str_find,"%%") != NULL) { - *array_size = philos_int_append(*array_size, &index, -1); - str_find = yon_char_divide(str_find, length-1); - index--; - } - else if (strstr(str_find,"-") != NULL) { - *array_size = philos_int_append(*array_size, &index, -1); - index--; - } - -} -void philos_set_pow_size_memory_device(char* str_find, int** array_size,int index, char** array_size_pow) { - char* STR_KB = array_size_pow[0]; - char* STR_MB = array_size_pow[1]; - char* STR_GB = array_size_pow[2]; - char* STR_TB = array_size_pow[3]; - size_t length = strlen(str_find); - if (strstr(str_find,"K") != NULL) { - (*array_size)[index] = 0; - str_find = yon_char_divide(str_find, length-1); - str_find = yon_char_unite(str_find, " ", STR_KB, NULL); - index--; - } - else if (strstr(str_find,"M") != NULL) { - (*array_size)[index] = 1; - str_find = yon_char_divide(str_find, length-1); - str_find = yon_char_unite(str_find," ", STR_MB, NULL); - index--; - } - else if (strstr(str_find,"G") != NULL) { - (*array_size)[index] = 2; - str_find = yon_char_divide(str_find, length-1); - str_find = yon_char_unite(str_find," ", STR_GB, NULL); - index--; - } - else if (strstr(str_find,"T") != NULL) { - (*array_size)[index] = 3; - str_find = yon_char_divide(str_find, length-1); - - str_find = yon_char_unite(str_find," ", STR_TB, NULL); - index--; - } - else if (strstr(str_find,"%%") != NULL) { - (*array_size)[index] = -1; - str_find = yon_char_divide(str_find, length-1); - index--; - } - else if (strstr(str_find,"-") != NULL) { - (*array_size)[index] = -1; - index--; - } - -} -void philos_set_size_memory_integer_char(char* str_find, char*** array_data, int index) { - char* simv_del_array[10] = {"K","M","G","T","k","m","g","t"," ","%"}; - for (size_t i = 0; i < 10; i++) { - if (strstr(str_find, simv_del_array[i])) { - str_find = yon_char_divide_search(str_find, simv_del_array[i], -1); - } - } - if (strstr(str_find, " ") != NULL) { - char* mem_s = yon_char_new(str_find); - yon_char_divide_search(mem_s, " ", -1); - *array_data = yon_char_parsed_append(*array_data, &index, mem_s); - } - if (strstr(str_find, "-") != NULL) { - *array_data = yon_char_parsed_append(*array_data, &index, "-"); - } - else { - if (str_find[0] == '\"') { - yon_char_divide(str_find, 0); - size_t length = strlen(str_find); - str_find = yon_char_divide(str_find, length-2); - } - if (strstr(str_find, " ") == NULL) { - *array_data = yon_char_parsed_append(*array_data, &index, str_find); - } - - } -} - -void philos_free_string_array(char ***array, int size) { - if ((*array) == NULL) { - return; - } - for (int i = 0; i < size; i++){ - free((*array)[i]); - } - if (size!= 0) { - free(*array); - (*array) = NULL; - } -} - -void philos_free_string_array_n3(char ****array, int size) { - if ((*array) == NULL || size == 0) { - return; - } - int index_to_l2 = 0; - for (int i = 0; i < size; i++){ - index_to_l2 = 0; - if ((*array)[i]!=NULL) { - while ((*array)[i][index_to_l2] != NULL) { - if ((*array)[i][index_to_l2] != NULL) { - free((*array)[i][index_to_l2]); - index_to_l2++; - } - - } - } - free((*array)[i]); - - } - if (size!= 0) { - free(*array); - (*array) = NULL; - } -} - -void philos_free_int_array(int **array, int size) { - if (size!= 0) { - free(*array); - *array = NULL; - } -} -void philos_free_int_array_n2(int ***array, int size) { - if ((*array) == NULL || size == 0) { - return; - } - for (int i = 0; i < size; i++){ - free((*array)[i]); - } - if (size!= 0) { - free(*array); - (*array) = NULL; - } -} - -config_str philos_list_group(int* size) { - char* str_uid_min = "UID_MIN"; - char* str_uid_max = "UID_MAX"; - unsigned short uid_min = philos_read_uid_min_max(file_source_login_min_max, str_uid_min); - unsigned short uid_max = philos_read_uid_min_max(file_source_login_min_max, str_uid_max); - config_str str_users = malloc(1); - while (1) { - errno = 0; - struct passwd* entry = getpwent(); - if (!entry) { - if (errno) { - return str_users; - } - break; - } - if ((entry->pw_uid >= uid_min && entry->pw_uid < uid_max) || entry->pw_uid == 0) { - str_users = yon_char_parsed_append(str_users, size, entry->pw_name); - } - } - endpwent(); - return str_users; -} - -unsigned short philos_read_uid_min_max(char* filename, char* search) { - int uid = 0; - char* remove_tab = "\t"; - char* remove_space = " "; - char* search_uid_min = "UID_MIN"; - int buff_size = 255; - char* line = g_malloc0(buff_size); - char* search_true = yon_char_get_augumented("SYS_", search); - FILE *fp = fopen(filename, "r"); - if(fp) { - while((fgets(line, buff_size, fp)) != NULL) { - try{ - if (yon_char_find_count(line, search) != 0 && yon_char_find_count(line, search_true) == 0) { - line = philos_str_remove(line, search); - line = philos_str_remove(line, remove_space); - line = philos_str_remove(line, remove_tab); - uid = atoi(line); - - } - } - catch (...) { - if (yon_char_find_count(search, search_uid_min) != 0){ - uid = 1000; - } - else{ - uid = 65534; - } - } - } - } - else{ - if (yon_char_find_count(search, search_uid_min) != 0) { - uid = 1000; - } - else{ - uid = 65534; - } - } - fclose(fp); - free(line); - free(search_true); - return uid; - -} - - -config_str philos_list_user(int* size) { - char* str_uid_min = "UID_MIN"; - char* str_uid_max = "UID_MAX"; - unsigned short uid_min = philos_read_uid_min_max(file_source_login_min_max, str_uid_min); - unsigned short uid_max = philos_read_uid_min_max(file_source_login_min_max, str_uid_max); - config_str str_users = malloc(1); - while (1) { - errno = 0; - struct passwd* entry = getpwent(); - if (!entry) { - if (errno) { - return str_users; - } - break; - } - str_users = yon_char_parsed_append(str_users, size, entry->pw_name); - } - endpwent(); - return str_users; -} - -char* philos_str_size_pow_byte(GtkWidget *combo_box_text) { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box_text)); - if (menu_id == 0) { - return "K"; - } - else if (menu_id == 1) { - return "M"; - } - else if (menu_id == 2) { - return "G"; - } - else if (menu_id == 3) { - return "T"; - } - else { - return " "; - } -} - -char* philos_str_remove(char *str, const char *sub) { - size_t len = strlen(sub); - if (len > 0) { - char *p = str; - size_t size = 0; - while ((p = strstr(p, sub)) != NULL) { - size = (size == 0) ? (p - str) + strlen(p + len) + 1 : size - len; - memmove(p, p + len, size - (p - str)); - } - } - return str; -} - - -void philos_split_size_memory(char* str_value, int* size, char* pow_memory) { - (*size) = atoi(yon_char_divide_search(pow_memory, " ", -1)); -} - -char* philos_format_cfg_str_size_memory(char* str_key, int value, int pow_size_memory) { - if (value == -1 || value == -3 || pow_size_memory == -3) { - return yon_char_new("-"); - } - char* str_value = yon_char_from_int(value); - if (pow_size_memory==0) { - return yon_char_unite(str_key, str_value, "K" ,NULL); - } - else if (pow_size_memory==1) { - return yon_char_unite(str_key, str_value, "M" ,NULL); - } - else if (pow_size_memory==2){ - return yon_char_unite(str_key, str_value, "G" ,NULL); - } - else if (pow_size_memory== 3) { - return yon_char_unite(str_key, str_value, "T" ,NULL); - } - else if (pow_size_memory== -1) { - return yon_char_unite(str_key, str_value, "%" ,NULL); - } - else if (pow_size_memory== -3) { - return yon_char_new("-"); - } - else { - return yon_char_new("-"); - } -} - -char** philos_str_split(char *parameters, int *size, char *divider) { - char** array_split = NULL; - char* ch= NULL; - ch = strtok(parameters, divider); - if (ch != NULL) { - array_split = yon_char_parsed_append(array_split, size, ch); - while (ch != NULL) { - ch = strtok(NULL, divider); - array_split = yon_char_parsed_append(array_split, size, ch); - } - } - (*size) -= 1; - return array_split; -} - -void philos_array_str_copy(char*** source, char*** copy) { - int index = 0; - if (copy == NULL || source == NULL) { - return; - } - while (1) { - if ((*copy)[index] != NULL) { - (*source) = yon_char_parsed_append((*source), &index, yon_char_new((*copy)[index])); - } - else { - break; - } - } -} -void philos_array_int_copy(int** source, int** copy) { - int * new_int = g_malloc0(sizeof(int)*2); - if ((*copy)[0] != -2) { - new_int[0] = (*copy)[0]; - new_int[1] = -2; - int i = 2; - for (i=1;(*copy)[i]!=-2;i++) { - yon_int_array_append(&new_int,(*copy)[i]); - } - *source=new_int; - } - else { - new_int[0] = (*copy)[0]; - *source=new_int; - } - -} -char** philos_pars_terminal_systemd_cgls(char* CMD_GET_SLICE_SERVICE, char* str_find, int* size_array_data) { - int size = 0; - char** terminal_print = yon_config_load(CMD_GET_SLICE_SERVICE, &size); - char** array_data = NULL; - for (int index = 0; index < size; index++) { - if (strstr(terminal_print[index], str_find) != NULL) { - yon_char_divide_search(terminal_print[index],"─",-1); - terminal_print[index] = yon_char_divide_search(terminal_print[index]," ", -1); - yon_char_divide(terminal_print[index],1); - array_data = yon_char_parsed_append(array_data, size_array_data, terminal_print[index]); - - } - } - return array_data; -} -char* philos_pard_array_add_cmd(char* cmd, temp_config* _config, char* key, int* array_io, int* array_io_pow_size, char** disk, int size) { - char* split_simvol = g_malloc0(sizeof(char)*2); - int flag_format = 0; - char* cmd_old = yon_char_new(cmd); - char* cmd_new = ""; - if (disk && size && array_io && array_io_pow_size) { - int index_find = 0; - for (int index = 0; index < size; index++) { - if (array_io_pow_size[index] >= 0 && array_io[index]>= 0 && !strstr(disk[index], "-")) { - char* num_and_pow_size = philos_format_cfg_str_size_memory(" ", array_io[index], array_io_pow_size[index]); - if (!strstr(num_and_pow_size, "-")) { - cmd_new = yon_char_unite(cmd_new, - split_simvol, - disk[index], - num_and_pow_size, NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - flag_format = 1; - } - free(num_and_pow_size); - } - } - } - free(split_simvol); - if (flag_format) { - if (strlen(cmd_new)>2) { - if (strlen(cmd_old) > 3) { - cmd = yon_char_unite(cmd_old, ",", key, cmd_new, NULL); - } - else { - cmd = yon_char_unite(key, cmd_new, NULL); - } - - } - return cmd; - } - else { - return cmd_old; - } - -} -int philos_check_activ_disk(temp_set_window *widgets, temp_config* _config) { - char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice)); - disk = yon_char_divide_search(disk," ", -1); - if (disk == NULL) { - return 0; - } - return 1; -} - -void philos_temp_generate_cmd(temp_set_window *widgets, temp_config* _config) { - char* str_cmd = ""; - char* split_simvol = g_malloc0(sizeof(char)*2); - int size_bite = 0; - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkSoftRestrictionTemp))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spiSevereRestrictionTemp)); - str_cmd = yon_char_unite(str_cmd, - "MemoryHigh=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(widgets->cmSevereRestrictionTemp), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkSevereRestrictionTemp))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinSevereRestrictionTemp)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "MemoryMax=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(widgets->cmbSevereRestrictionTemp), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkPaddingFLTemp))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinPaddingFLTemp)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "MemorySwapMax=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(widgets->cmbPaddingFLTemp), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkCPULimitTemp))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinCPULimitTemp)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "CPUQuota=", - yon_char_from_int(size_bite), - "%", NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempDevice))!=-1) { - if (_config->size_disk!=0) { - str_cmd = philos_pard_array_add_cmd(str_cmd, _config, "IOReadBandwidthMax=", _config->i_o_limit_read, _config->i_o_limit_read_size, _config->disk_read, _config->size_disk); - - } - if (_config->size_disk!=0) { - str_cmd = philos_pard_array_add_cmd(str_cmd, _config, "IOWriteBandwidthMax=", _config->i_o_limit_write, _config->i_o_limit_write_size, _config->disk_write, _config->size_disk); - } - - } - gtk_entry_set_text(GTK_ENTRY(widgets->entryTempCmd), str_cmd); - free(split_simvol); -} -// flag_check_array = 0 READ -// flag_check_array = 1 WRITE -void philos_temp_del_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array) { - char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice)); - disk = yon_char_divide_search(disk, " ", -1); - int bool_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead)); - int bool_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite)); - char** ptr_disk = NULL; - int size = 0; - - if (flag_check_array == 0) { - size = _config->size_disk; - if (philos_check_activ_disk(widgets, _config) == 0) { - return; - } - ptr_disk = _config->disk_read; - } - else if (flag_check_array == 1) { - size = _config->size_disk; - if (philos_check_activ_disk(widgets, _config) == 0) { - return; - } - ptr_disk = _config->disk_write; - } - int index_find = -1; - if (ptr_disk) { - for (int index = 0; index < size; index++) { - char* disk_cfg = ptr_disk[index]; - if (disk_cfg) { - if (strstr(disk_cfg, disk) != NULL) { - index_find = index; - break; - } - } - } - } - - if ((bool_read == 0 && bool_write == 0 && index_find != -1)) { - ptr_disk[index_find] = yon_char_new("-"); - _config->i_o_limit_read_size[index_find] = -3; - _config->i_o_limit_write_size[index_find] = -3; - _config->i_o_limit_read[index_find] = -3; - _config->i_o_limit_write[index_find] = -3; - } - if (flag_check_array == 0) { - if (ptr_disk) { - yon_char_parsed_copy(&_config->disk_read, &ptr_disk); - } - } - else if (flag_check_array == 1) { - if (ptr_disk) { - yon_char_parsed_copy(&_config->disk_write, &ptr_disk); - } - } -} - -void philos_temp_config_init(temp_config* _config) { - if (_config->size_disk != 0) { - philos_free_string_array(&_config->disk_read, _config->size_disk); - philos_free_int_array(&_config->i_o_limit_read, _config->size_disk); - philos_free_int_array(&_config->i_o_limit_read_size, _config->size_disk); - } - else if (_config->size_disk != 0) { - philos_free_string_array(&_config->disk_write, _config->size_disk); - philos_free_int_array(&_config->i_o_limit_write, _config->size_disk); - philos_free_int_array(&_config->i_o_limit_write_size, _config->size_disk); - } - _config->disk_read = NULL; - _config->disk_write = NULL; - _config->i_o_limit_read = NULL; - _config->i_o_limit_write = NULL; - _config->i_o_limit_read_size = NULL; - _config->i_o_limit_write_size = NULL; - _config->size_disk = 0; - _config->size_disk = 0; -} - -// flag_check_array = 0 READ -// flag_check_array = 1 WRITE -void philos_update_device_to_entry(temp_set_window *widgets, temp_config* _config, int flag_check_array) { - int disk_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempDevice)); - char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice)); - disk = yon_char_divide_search(disk, " ", -1); - if (disk_id != -1) { - int index_find = -1; - if (flag_check_array == 0) { - if (_config->disk_read) { - for (int index = 0; index < _config->size_disk; index++) { - char* disk_cfg = _config->disk_read[index]; - if (disk_cfg) { - if (strstr(disk_cfg, disk)) { - index_find = index; - break; - } - } - } - } - } - else if (flag_check_array == 1) { - if (_config->disk_write) { - for (int index = 0; index < _config->size_disk; index++) { - char* disk_cfg = _config->disk_write[index]; - if (disk_cfg) { - if (strstr(disk_cfg, disk)) { - index_find = index; - break; - } - } - } - } - } - if (index_find != -1) { - if (flag_check_array==0) { - if (_config->i_o_limit_read[index_find]<0 || _config->i_o_limit_read_size[index_find]<0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0); - } - else { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), _config->i_o_limit_read[index_find]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 1); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), _config->i_o_limit_read_size[index_find]); - - } - } - else if (flag_check_array==1) { - if (_config->i_o_limit_write[index_find]<0 || _config->i_o_limit_write_size[index_find]<0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0); - } - else { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), _config->i_o_limit_write[index_find]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 1); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), _config->i_o_limit_write_size[index_find]); - } - } - else { - if (flag_check_array==0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0); - } - else if (flag_check_array==1) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0); - } - } - } - else { - if (flag_check_array==0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0); - } - else if (flag_check_array==1) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0); - } - } - } - else { - if (flag_check_array==0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0); - } - else if (flag_check_array==1) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0); - } - } -} -// flag_check_array = 0 READ -// flag_check_array = 1 WRITE -void philos_temp_add_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array) { - char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice)); - disk = yon_char_divide_search(disk, " ", -1); - int disk_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempDevice)); - int bool_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead)); - int bool_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite)); - char** ptr_disk = NULL; - int size = 0; - if (flag_check_array == 0) { - ptr_disk = _config->disk_read; - size = _config->size_disk; - } - else if (flag_check_array == 1) { - ptr_disk = _config->disk_write; - size = _config->size_disk; - } - if (disk_id >= 0 && size !=0) { - int index_find = -1; - if (ptr_disk){ - for (int index = 0; index < size; index++) { - char* disk_cfg = ptr_disk[index]; - if (disk_cfg) { - if (strstr(disk_cfg, disk) != NULL) { - index_find = index; - break; - } - } - } - } - - if (index_find == -1 || index_find>=0) { - if (index_find == -1) { - index_find = find_null_array(_config); - } - // Редактирование - if (flag_check_array == 0) { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead))) { - ptr_disk[index_find] = yon_char_new(disk); - _config->i_o_limit_read_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempRead)); - _config->i_o_limit_read[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempRead)); - } - else { - ptr_disk[index_find] = yon_char_new("-"); - _config->i_o_limit_read_size[index_find] = -3; - _config->i_o_limit_read[index_find] = -3; - } - } - if (flag_check_array == 1) { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite))) { - ptr_disk[index_find] = yon_char_new(disk); - _config->i_o_limit_write_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempWrite)); - _config->i_o_limit_write[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempWrite)); - } - else { - _config->i_o_limit_write_size[index_find] = -3; - _config->i_o_limit_write[index_find] = -3; - ptr_disk[index_find] = yon_char_new("-"); - } - } - } - } - else { - if (bool_read == 1 || bool_write == 1) { - int index_find = find_null_array(_config); - if (flag_check_array == 0) { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead))) { - ptr_disk[index_find] = yon_char_new(disk); - _config->i_o_limit_read_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempRead)); - _config->i_o_limit_read[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempRead)); - - } - } - if (flag_check_array == 1) { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite))) { - ptr_disk[index_find] = yon_char_new(disk); - _config->i_o_limit_write_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempWrite)); - _config->i_o_limit_write[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempWrite)); - } - } - } - } - if (flag_check_array == 0) { - if (ptr_disk) { - yon_char_parsed_copy(&_config->disk_read, &ptr_disk); - - } - } - else if (flag_check_array == 1) { - if (ptr_disk) { - yon_char_parsed_copy(&_config->disk_write, &ptr_disk); - } - } -} -int find_null_array(temp_config* _config) { - int index = 0; - for (index = 0; (_config->disk_read[index]!=NULL && _config->disk_write[index]!=NULL); index++) { - if (strcmp(_config->disk_read[index], "-") == 0 && strcmp(_config->disk_write[index], "-") == 0) { - break; - } - } - return index; - - -} -int* philos_int_append(int* array, int* size, int value) { - array = yon_remalloc(array, (*size+1)*sizeof(int)); - array[(*size)] = value; - (*size)++; - return array; - -} - -int* remove_element_int_array(int* array, int* size, int item_to_delete) { - int *new_int_parsed=NULL; - new_int_parsed=malloc(sizeof(int)*((*size)-1)); - int flag = 0; - for (int i=0;i < (*size);i++){ - if (i==item_to_delete) { - flag = 1; - } - if (flag == 0) { - memcpy(&(new_int_parsed[i]),&(array[i]),sizeof(int)); - } - else if (flag == 1 && i!=item_to_delete) { - memcpy(&(new_int_parsed[i-1]),&(array[i]),sizeof(int)); - } - } - (*size)=(*size)-1; - return new_int_parsed; -} - -int** remove_element_int_array_n3(int** array, int* size, int item_to_delete) { - int **new_int_parsed=NULL; - new_int_parsed=malloc(sizeof(int*)*((*size)-1)); - int flag = 0; - for (int i=0;i < (*size);i++){ - if (i==item_to_delete) { - flag = 1; - } - if (flag == 0) { - philos_array_int_copy(&new_int_parsed[i],&array[i]); - } - else if (flag == 1 && i!=item_to_delete) { - philos_array_int_copy(&new_int_parsed[i-1],&array[i]); - } - } - (*size)=(*size)-1; - return new_int_parsed; -} -char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text) { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_button))) { - char* size_prifics = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box_text)); - int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); - char* str_size_bute = yon_char_unite(yon_char_from_int(size_bite), " ", size_prifics, NULL); - return str_size_bute; - } - else { - char* str = (char*)malloc(sizeof(char*)*2); - str[0] = '-'; - str[1] = '\0'; - return str; - } -} -void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size) { - for (int index = 0; index < size; index++) { - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cbt), list_data[index]); - } -} - -void philos_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value) { - gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)); - guint value_spin = gtk_spin_button_get_digits(GTK_SPIN_BUTTON(spin)); - if (active != -1) { - GtkAdjustment* adjustment = NULL; - adjustment = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin)); - gtk_adjustment_set_lower(adjustment, 0.0); - gtk_adjustment_set_page_increment(adjustment, 1.0); - if (combo == NULL) { - gtk_adjustment_set_upper(adjustment, (gdouble)(value*100)); - if ((value*100)0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),1); - } - else if (active == 0) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 0); - } - if (flag_cpu == 0) { - philos_set_spin_adjustment(check, spin, combo, resurs); - if (value_spin>resurs) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), resurs); - } - } - else { - philos_set_spin_adjustment(check, spin, NULL, resurs); - } - -} - -size_t get_resurs_total(char* cmd) { - int size = 0; - size_t size_memory = 0; - char **responce = yon_config_load(cmd, &size); - for (int index = 0; index < size; index++ ) { - char* mem_size_kb = yon_char_divide_search(responce[index], "\n", -1); - size_memory = atoll(mem_size_kb); - free(mem_size_kb); - } - philos_free_string_array(&responce, size); - return size_memory; -} - -float get_size_pow_memory(size_t size_memory, int size) { - float res = size_memory; - for (size_t index = 0; index < size; index++) { - res = res/1024; - } - return res; -} - -void philos_set_active_widgets_device_io(GtkWidget* combo_to_l2,GtkWidget *check, GtkWidget *spin, GtkWidget *combo) { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_to_l2)); - if (menu_id != -1) { - gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)); - if (active == 0) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 0); - } - else if (gtk_spin_button_get_digits(GTK_SPIN_BUTTON(spin))>0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),1); - } - gtk_widget_set_sensitive(spin, active); - gtk_widget_set_sensitive(combo, active); - } - else { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 0); - gtk_widget_set_sensitive(spin, 0); - gtk_widget_set_sensitive(combo, 0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), 0); - } - philos_set_spin_adjustment(check, spin, combo, 12582912); -} -char *yon_char_get_augumented(char *source, char *append) -{ - if (source && append) - { - int size = strlen(source) + strlen(append) + 1; - char *final = malloc(size); - memset(final, 0, size); - if (strstr(source, "%%")) - sprintf(final, source, append); - else - sprintf(final, "%s%s", source, append); - return final; - } - else - return NULL; -} -dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data) { - dictionary *dct = yon_dictionary_create_conneced(dict); - dct->key = yon_char_new(key); - dct->data = data; - dct->data_type = DICTIONARY_OTHER_TYPE; - return dct; -} -char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete) { - char **new_char_parsed=NULL; - new_char_parsed=malloc(sizeof(char*)*((*size)-1)); - int flag = 0; - for (int i=0;i < (*size);i++){ - if (i==item_to_delete) { - flag = 1; - } - if (flag == 0) { - new_char_parsed[i]=yon_char_new(char_string[i]); - } - else if (flag == 1 && i!=item_to_delete) { - new_char_parsed[i-1]=yon_char_new(char_string[i]); - } - } - (*size)=(*size)-1; - return new_char_parsed; -} -char*** yon_char_parsed_shrink_n3(char ***char_string, int *size, int item_to_delete) { - char ***new_char_parsed=NULL; - new_char_parsed=malloc(sizeof(char**)*((*size)-1)); - int flag = 0; - for (int i=0;i < (*size);i++){ - if (i==item_to_delete) { - flag = 1; - } - if (flag == 0) { - yon_char_parsed_copy(&new_char_parsed[i],&char_string[i]); - } - else if (flag == 1 && i!=item_to_delete) { - yon_char_parsed_copy(&new_char_parsed[i-1], &char_string[i]); - } - } - (*size)=(*size)-1; - return new_char_parsed; -} -dictionary *yon_dictionary_create_empty() { - dictionary *dict = malloc(sizeof(dictionary)); - dict->data = NULL; - dict->key = NULL; - dict->next = NULL; - dict->prev = NULL; - dict->first = dict; - dict->data_type = DICTIONARY_OTHER_TYPE; - return dict; -} -void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ - char **commands=new_arr(char*,2); - gchar **envp = g_get_environ(); - commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); - commands[1]=NULL; - char **env=new_arr(char*,2); - env[0]=""; - env[1]=NULL; - vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); - VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); - vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); - char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command, "; exit 0\n",NULL); - if(endwork_function) - g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); - vte_terminal_spawn_async(VTE_TERMINAL(terminal), - VTE_PTY_DEFAULT, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - child_ready, - install_command); - vte_pty_spawn_async(pty, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - NULL, - NULL); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); - vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); - vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); - gtk_widget_show_all(terminal); -} -dictionary *yon_dictionary_create_conneced(dictionary *targetdict) -{ - targetdict = yon_dictionary_get_last(targetdict); - targetdict->next = yon_dictionary_create_empty(); - targetdict->next->prev = targetdict; - targetdict->next->first = targetdict->first; - targetdict->next->data_type = DICTIONARY_OTHER_TYPE; - return targetdict->next; -} -void yon_int_array_append(int **source, int append){ - int size=0; - for (size=0;(*source)[size]!=-2;size++); - *source = realloc(*source,(size+2)*sizeof(int)); - (*source)[size] = append; - (*source)[size+1] = -2; -} -static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data) -{ - if (!terminal) return; - if (pid == -1) printf("Error\n\n\n"); - else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data)); -} -/**[EN] - * int yon_config_save(char *command) - * Saves config with [command] - * [RU] -*/ -int philos_config_save(char *command) -{ - FILE *output = popen(command, "r"); - return 1; -} - -void philos_array_int_pars_to(int** array, int to) { - int flag = 0; - int i = 0; - for (i = 0; (*array)[i] != -2; i++) { - if ((*array)[i]==-3) { - (*array)[i] = to; - flag = 1; - break; - } - } -} - -void philos_array_char_pars_to(char*** array, char* to) { - int flag = 0; - int i = 0; - for (i = 0; (*array)[i] != NULL; i++) { - if (strcmp((*array)[i], "-") == 0) { - (*array)[i] = yon_char_new(to); - flag = 1; - break; - } - } -} -void init_device_disk(temp_config* _config) { - for (int index = 0;index< (get_device_cfg()->size_disk*2);index++){ - _config->disk_read = yon_char_parsed_append(_config->disk_read,&_config->size_disk, "-"); - _config->size_disk--; - _config->i_o_limit_write_size = philos_int_append(_config->i_o_limit_write_size, &_config->size_disk, -3); - _config->size_disk--; - _config->i_o_limit_write = philos_int_append(_config->i_o_limit_write, &_config->size_disk, -3); - _config->size_disk--; - _config->i_o_limit_read_size = philos_int_append(_config->i_o_limit_read_size, &_config->size_disk, -3); - _config->size_disk--; - _config->disk_write = yon_char_parsed_append(_config->disk_write,&_config->size_disk, "-"); - _config->size_disk--; - _config->i_o_limit_read = philos_int_append(_config->i_o_limit_read, &_config->size_disk, -3); - } - _config->i_o_limit_write_size = philos_int_append(_config->i_o_limit_write_size, &_config->size_disk, -2); - _config->size_disk--; - _config->disk_write = yon_char_parsed_append(_config->disk_write, &_config->size_disk, NULL); - _config->size_disk--; - _config->disk_read = yon_char_parsed_append(_config->disk_read, &_config->size_disk, NULL); - _config->size_disk--; - _config->i_o_limit_write = philos_int_append(_config->i_o_limit_write, &_config->size_disk, -2); - _config->size_disk--; - _config->i_o_limit_read = philos_int_append(_config->i_o_limit_read, &_config->size_disk, -2); - _config->size_disk--; - _config->i_o_limit_read_size = philos_int_append(_config->i_o_limit_read_size, &_config->size_disk, -2); -} \ No newline at end of file diff --git a/source/philos_utils.h b/source/philos_utils.h deleted file mode 100644 index 4fc2a97..0000000 --- a/source/philos_utils.h +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef PHILOS_UTILS_H -#define PHILOS_UTILS_H -#include "ubl-utils.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "my_device.h" - -#define catch(x) ExitJmp:if(__HadError) -#define throw(x) {__HadError=true;goto ExitJmp;} -#define file_source_login_min_max "/etc/login.defs" -static char** array_size_pow; -typedef struct { - char** disk_read; - char** disk_write; - int* i_o_limit_read; - int* i_o_limit_write; - int* i_o_limit_read_size; - int* i_o_limit_write_size; - int size; - int size_disk; -} temp_config; - -typedef struct { - - GtkWidget* Window; - GtkWidget* btnSaveTempSave; - GtkWidget* btnTempCancel; - - GtkWidget* entryTempCmd; - GtkWidget* chbTempRead; - GtkWidget* spinTempRead; - GtkWidget* cbtTempRead; - - GtkWidget* chbTempWrite; - GtkWidget* spinTempWrite; - GtkWidget* cbtTempWrite; - - GtkWidget* chkSoftRestrictionTemp; - GtkWidget* spiSevereRestrictionTemp; - GtkWidget* cmSevereRestrictionTemp; - - GtkWidget* chkSevereRestrictionTemp; - GtkWidget* spinSevereRestrictionTemp; - GtkWidget* cmbSevereRestrictionTemp; - - GtkWidget* chkPaddingFLTemp; - GtkWidget* spinPaddingFLTemp; - GtkWidget* cmbPaddingFLTemp; - - GtkWidget* chkCPULimitTemp; - GtkWidget* spinCPULimitTemp; - GtkWidget* lblCPULimitTemp; - - GtkWidget* cbtTempDevice; - GtkWidget* cbxTempQuotaObj; - GtkWidget* cbxTempQuotaLevel2; - GtkWidget* boxBlockGui; - GtkWidget* lblInfoObjQuotas; -} temp_set_window; -void philos_array_string_remove_char(char*** array, char* str_remove, int size); -void philos_set_pow_size_memory(char* str_find, int** array_size,int index, char** array_size_pow); -void philos_set_size_memory_integer_char(char* str_find, char*** array_data, int index); -void philos_free_string_array(char ***array, int size); -void philos_free_string_array_n3(char ****array, int size); -void philos_free_int_array(int **array, int size); -void philos_free_int_array_n2(int ***array, int size); -config_str philos_list_group(int* size); -unsigned short philos_read_uid_min_max(char* filename, char* search); -config_str philos_list_user(int* size); -char* philos_str_size_pow_byte(GtkWidget *combo_box_text); -char* philos_str_remove(char *str, const char *sub); -void philos_split_size_memory(char* str_value, int* size, char* pow_memory); -char* philos_format_cfg_str_size_memory(char* str_key, int value, int pow_size_memory); -char** philos_str_split(char *parameters, int *size, char *divider); -void philos_array_str_copy(char*** source, char*** copy); -void philos_set_pow_size_memory_device(char* str_find, int** array_size,int index, char** array_size_pow); -void philos_array_int_copy(int** source, int** copy); -char** philos_pars_terminal_systemd_cgls(char* CMD_GET_SLICE_SERVICE, char* str_find, int* size_array_data); -char* philos_pard_array_add_cmd(char* cmd, temp_config* _config, char* key, int* array_io, int* array_io_pow_size, char** disk, int size); -int philos_check_activ_disk(temp_set_window *widgets, temp_config* _config); -void philos_temp_generate_cmd(temp_set_window *widgets, temp_config* _config); -void philos_temp_del_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array); -void philos_temp_config_init(temp_config* _config); -void philos_update_device_to_entry(temp_set_window *widgets, temp_config* _config, int flag_check_array); -void philos_temp_add_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array); -int* philos_int_append(int* array, int* size, int value); -int* remove_element_int_array(int* array, int* size, int item_to_delete); -int** remove_element_int_array_n3(int** array, int* size, int item_to_delete); -char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text); -void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size); -void philos_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value); -void philos_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd); -size_t get_resurs_total(char* cmd); -float get_size_pow_memory(size_t size_memory, int size); -void philos_set_active_widgets_device_io(GtkWidget* combo_to_l2,GtkWidget *check, GtkWidget *spin, GtkWidget *combo); -char *yon_char_get_augumented(char *source, char *append); -dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data); -char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete); -char*** yon_char_parsed_shrink_n3(char ***char_string, int *size, int item_to_delete); -dictionary *yon_dictionary_create_empty(); -void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); -dictionary *yon_dictionary_create_conneced(dictionary *targetdict); -void yon_int_array_append(int **source, int append); -static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data); -int philos_config_save(char *command); -void philos_array_int_pars_to(int** array, int to); -void philos_array_char_pars_to(char*** array, char* to); -int find_null_array(temp_config* _config); -void init_device_disk(temp_config* _config); -#endif \ No newline at end of file diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c index 89ae76f..5b26c45 100644 --- a/source/ubl-settings-resourcequota.c +++ b/source/ubl-settings-resourcequota.c @@ -1,8 +1,9 @@ #include "ubl-settings-resourcequota.h" -#include "ubl-utils.h" config main_config; -main_window *widgets; + +//signal emmit handlers - no header initialization + /**on_close_subwindow(GtkWidget *self) * [EN] * Closes window in which [self] is contained. @@ -91,6 +92,7 @@ void on_about(){ GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application); gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),PROJECT_HOME_LABEL); + gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL); gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL); g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL); gtk_widget_set_visible(hideButtonBox,0); @@ -98,1172 +100,1111 @@ void on_about(){ gtk_widget_show(window); } -void config_init(){ - main_config.always_open_documentation=0; - main_config.win_height=0; - main_config.win_width=0; - main_config.win_pos_x=0; - main_config.win_pos_y=0; - main_config.socket_id=-1; - main_config.save_socket_id=-1; - main_config.load_socket_id=-1; - main_config.lock_help=0; - main_config.lock_help=0; - main_config.lock_load_global=0; - main_config.lock_save_global=0; - main_config.lock_save_local=0; - main_config.size_tree_view = 0; - main_config.flag_load = 0; - main_config.size_array_del_line = 0; - main_config.flag_set_data = 0; - main_config.flag_save=0; - main_config.i_o_limit_read_size=NULL; - main_config.i_o_limit_write_size=NULL; - main_config.i_o_limit_write=NULL; - main_config.i_o_limit_read=NULL; -} - -main_window *setup_window(){ - /* Widgets getting | Получение виджетов */ - widgets = malloc(sizeof(main_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); - widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); - - widgets->btnDelQuotas = yon_gtk_builder_get_widget(builder,"btnDelQuotas"); - widgets->treeViewMain = yon_gtk_builder_get_widget(builder,"treeViewMain"); - widgets->tvc0 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc0")); - widgets->tvc1 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc1")); - widgets->tvc2 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc2")); - widgets->tvc3 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc3")); - widgets->tvc4 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc4")); - widgets->tvc5 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc5")); - widgets->tvc6 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc6")); - widgets->tvc7 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc7")); - - widgets->scrollDispatcher = yon_gtk_builder_get_widget(builder,"scrollDispatcher"); - widgets->btnMainShowAllEmpty = yon_gtk_builder_get_widget(builder,"btnMainShowAllEmpty"); - widgets->btnMainShowCoreStream = yon_gtk_builder_get_widget(builder,"btnMainShowCoreStream"); - - main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore")); - widgets->vteInformation = yon_gtk_builder_get_widget(builder,"vteInformation"); - widgets->vteDispatcher = yon_gtk_builder_get_widget(builder,"vteDispatcher"); - widgets->vteProcesses = yon_gtk_builder_get_widget(builder,"vteProcesses"); - widgets->cbtMainInfo = yon_gtk_builder_get_widget(builder,"cbtMainInfo"); - widgets->cbtMainInfoLevel2 = yon_gtk_builder_get_widget(builder,"cbtMainInfoLevel2"); - widgets->spinUpdateDispatcher = yon_gtk_builder_get_widget(builder,"spinUpdateDispatcher"); - widgets->btnUpdateDispatcher = yon_gtk_builder_get_widget(builder,"btnUpdateDispatcher"); - widgets->btnSaveCfg = yon_gtk_builder_get_widget(builder,"btnSaveCfg"); - widgets->notebookMain = yon_gtk_builder_get_widget(builder,"notebookMain"); - - widgets->btnEdit = yon_gtk_builder_get_widget(builder,"btnEdit"); - widgets->btnAdd = yon_gtk_builder_get_widget(builder,"btnAdd"); - widgets->btnInfo = yon_gtk_builder_get_widget(builder,"btnInfo"); - widgets->HatLabel = yon_gtk_builder_get_widget(builder,"headerTopic"); - widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox"); - - widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"HeadOverlay"); - widgets->HeadImage = yon_gtk_builder_get_widget(builder,"HeadBackgroundImage"); - widgets->HeadBox = yon_gtk_builder_get_widget(builder,"HeaderBox"); - widgets->HeadTitleLabel = yon_gtk_builder_get_widget(builder,"HeaderTitleLabel"); - widgets->HeadInfoLabel = yon_gtk_builder_get_widget(builder,"HeaderInfoLabel"); - - widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox"); - widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon"); - widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel"); - - widgets->SaveLabel = yon_gtk_builder_get_widget(builder,"headerSaveConfigLabel"); - widgets->SaveMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalLocalConfigurationMenuItem"); - widgets->SaveGlobalMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalConfigurationMenuItem"); - widgets->SaveLocalMenuItem = yon_gtk_builder_get_widget(builder,"SaveLocalConfigurationMenuItem"); - widgets->RightBox = yon_gtk_builder_get_widget(builder,"HeaderRightBox"); - - widgets->LoadLabel = yon_gtk_builder_get_widget(builder,"headerLoadConfigLabel"); - widgets->LoadGlobalMenuItem = yon_gtk_builder_get_widget(builder,"LoadGlobalConfigurationMenuItem"); - widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem"); - widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox"); - - widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL); - widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL); - GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menuAbout"); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem); - - widgets->btnShowFilters = yon_gtk_builder_get_widget(builder,"btnShowFilters"); - if (main_config.lock_load_global == 1){ - gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); - } - if (main_config.lock_save_global == 1){ - gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0); - gtk_widget_set_sensitive(widgets->SaveMenuItem,0); - } - if (main_config.lock_save_local == 1){ - gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0); - gtk_widget_set_sensitive(widgets->SaveMenuItem,0); - } - if (main_config.lock_save_global == 1 && main_config.lock_save_local == 1) { - gtk_widget_set_sensitive(widgets->btnSaveCfg,0); - gtk_widget_set_sensitive(widgets->btnAdd,0); - } - gtk_widget_show_all(widgets->Window); - return widgets; -} - -void main_update_dispatcher() { - int second = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->spinUpdateDispatcher)); - if (second>0) { - char* str_second = yon_char_from_int(second); - char *cmd = yon_char_get_augumented("systemd-cgtop -d ", str_second); - yon_terminal_integrated_launch(widgets->vteDispatcher, cmd, NULL, NULL); - free(str_second); - free(cmd); - } - -} - -void main_update_processes() { - char* cmd = NULL; - gboolean active_all_empty = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->btnMainShowAllEmpty)); - gboolean active_core_stream = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->btnMainShowCoreStream)); - if (active_core_stream == 1) { - cmd = "systemd-cgls --no-page -l"; - } - else if (active_all_empty == 1) { - cmd = "systemd-cgls --no-page -k"; - } - else if (active_all_empty == 1 && active_core_stream == 1) { - cmd = "systemd-cgls --no-page -l -k"; - } - else { - cmd = "systemd-cgls --no-page"; - } - yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL); -} - -void main_update_information() { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtMainInfo)); - char* cmd = NULL; - config_str fill_cmb_2 = NULL; - int size = 0; - if (menu_id == 0) { - fill_cmb_2 = philos_list_user(&size); +//functions +char *get_size_mod(GtkComboBox *combo){ + char *size_modifier = NULL; + switch (gtk_combo_box_get_active(combo)){ + case 0: size_modifier = "K"; + break; + case 1: size_modifier = "M"; + break; + case 2: size_modifier = "G"; + break; + case 3: size_modifier = "T"; + break; } - else if (menu_id == 1) { - fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".service", &size); - philos_array_string_remove_char(&fill_cmb_2, "\n", size); - } - else if (menu_id == 2) { - fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".slice", &size); - philos_array_string_remove_char(&fill_cmb_2, "\n", size); - } - if (menu_id >= 0) { - g_signal_handlers_disconnect_by_func(G_OBJECT(widgets->cbtMainInfoLevel2), main_cbx_2_event, NULL); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfoLevel2)); - philos_fill_combo_box_text(widgets->cbtMainInfoLevel2, fill_cmb_2, size); - g_signal_connect(G_OBJECT(widgets->cbtMainInfoLevel2),"changed",G_CALLBACK(main_cbx_2_event), NULL); - } + return size_modifier; } -void load_system_cfg() { - main_config.flag_load = 0; - template_load_cfg(CMD_LOAD_SYSTEM); - yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS, BACKGROUND_IMAGE_SUCCESS_TYPE); +void on_device_limits_update(GtkWidget *self, quota_window *window){ + if (window->devices->data){ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DeviceLimitReadCheck))) + yon_dictionary_get_data(window->devices,device_limits*)->read=yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->DeviceLimitReadSpin))),get_size_mod(GTK_COMBO_BOX(window->DeviceLimitReadCombo))); + else yon_dictionary_get_data(window->devices,device_limits*)->read = NULL; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DeviceLimitWriteCheck))) + yon_dictionary_get_data(window->devices,device_limits*)->write=yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->DeviceLimitWriteSpin))),get_size_mod(GTK_COMBO_BOX(window->DeviceLimitWriteCombo))); + else yon_dictionary_get_data(window->devices,device_limits*)->write = NULL; + } } -void load_global_cfg() { - main_config.flag_load = 1; - template_load_cfg(CMD_LOAD_GLOBAL); - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); +void on_quota_configuration_update(GtkWidget *self, quota_window *window){ + char *output_line = NULL; + char *size_modifier=NULL; + on_device_limits_update(self,window); + char *soft_limit = yon_char_unite("MemoryHigh=",yon_char_from_long((long)gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->SoftRestrictionSpin))),get_size_mod(GTK_COMBO_BOX(window->SoftRestrictionCombo)),NULL); + char *hard_limit = yon_char_unite("MemoryMax=",yon_char_from_long((long)gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin))),get_size_mod(GTK_COMBO_BOX(window->HardRestrictionCombo)),NULL); + char *paging_limit = yon_char_unite("MemorySwapMax=",yon_char_from_long((long)gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->PagingLimitSpin))),get_size_mod(GTK_COMBO_BOX(window->PagingLimitCombo)),NULL); + char *cpu_limit = yon_char_unite("CPUQuota=",yon_char_from_long((long)gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->CpuLimitSpin))),"%",NULL); + + char *read_limit = ""; + char *read_devices = ""; + dictionary *dict; + for_dictionaries(dict,window->devices){ + if (dict->data&&yon_dictionary_get_data(dict,device_limits*)->read) + read_devices = yon_char_unite(read_devices,"IOReadBandwidthMax=",yon_char_divide_search(yon_char_new(dict->key)," ",-1)," ",yon_dictionary_get_data(dict,device_limits*)->read,",",NULL); + } + if (read_devices[strlen(read_devices)-1]==',') read_devices[strlen(read_devices)-1]='\0'; + read_limit = yon_char_unite(read_limit,read_devices,NULL); + + + char *write_limit = ""; + char *write_devices = ""; + for_dictionaries(dict,window->devices){ + if (dict->data&&yon_dictionary_get_data(dict,device_limits*)->write) + write_devices = yon_char_unite(write_devices,"IOWriteBandwidthMax=",yon_char_divide_search(yon_char_new(dict->key)," ",-1)," ",yon_dictionary_get_data(dict,device_limits*)->write,",",NULL); + } + if (write_devices[strlen(write_devices)-1]==',') write_devices[strlen(write_devices)-1]='\0'; + write_limit = yon_char_unite(write_limit,write_devices,NULL); + + output_line = yon_char_unite(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck))? yon_char_append(soft_limit,","): "", + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck))? yon_char_append(hard_limit,","):"", + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck))? yon_char_append(paging_limit,","):"", + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->CpuLimitCheck))? yon_char_append(cpu_limit,","):"", + (read_devices && strcmp(read_devices,"")!=0 ) ? yon_char_append(read_limit,","):"", + (write_devices && strcmp(write_devices,"")!=0 ) ? yon_char_append(write_limit,","):"",NULL); + if (output_line&&strcmp(output_line,"")!=0&&output_line[strlen(output_line)-1] == ',') output_line[strlen(output_line)-1] = '\0'; + gtk_entry_set_text(GTK_ENTRY(window->ManualInputEntry),output_line); } -void clear_array() { - philos_free_string_array(&main_config.type_quota, main_config.size_tree_view); - philos_free_string_array(&main_config.quota_volume , main_config.size_tree_view); - philos_free_int_array(&main_config.soft_raw_limit, main_config.size_tree_view); - philos_free_int_array(&main_config.hard_raw_limit, main_config.size_tree_view); - philos_free_int_array(&main_config.swap , main_config.size_tree_view); - philos_free_int_array(&main_config.cpu_limit, main_config.size_tree_view); - philos_free_int_array_n2(&main_config.i_o_limit_read, main_config.size_tree_view); - philos_free_int_array_n2(&main_config.i_o_limit_write, main_config.size_tree_view); - philos_free_string_array_n3(&main_config.disk_read, main_config.size_tree_view); - philos_free_string_array_n3(&main_config.disk_write, main_config.size_tree_view); - - philos_free_string_array(&main_config.array_del_line, main_config.size_array_del_line); - main_config.size_array_del_line = 0; - - philos_free_int_array(&main_config.type_quota_size, main_config.size_tree_view); - philos_free_int_array(&main_config.quota_volume_size, main_config.size_tree_view); - philos_free_int_array(&main_config.soft_raw_limit_size, main_config.size_tree_view); - philos_free_int_array(&main_config.hard_raw_limit_size, main_config.size_tree_view); - philos_free_int_array(&main_config.swap_size, main_config.size_tree_view); - philos_free_int_array(&main_config.cpu_limit_size, main_config.size_tree_view); - philos_free_int_array_n2(&main_config.i_o_limit_read_size, main_config.size_tree_view); - philos_free_int_array_n2(&main_config.i_o_limit_write_size, main_config.size_tree_view); - gtk_list_store_clear(main_config.list); - main_config.i_o_limit_read = NULL; - main_config.i_o_limit_read_size = NULL; - main_config.i_o_limit_write = NULL; - main_config.i_o_limit_write_size = NULL; - main_config.disk_write = NULL; - main_config.disk_read = NULL; - - main_config.size_tree_view = 0; +void on_limit_manual_input(GtkWidget *self, double *new_value, quota_window *window){ + on_quota_configuration_update(self, window); } -void template_load_cfg(char* cmd) { - clear_array(); - int size = 0; - char** cfg = yon_config_load(cmd, &size); - philos_array_string_remove_char(&cfg, "\n", size); - for (int index = 0; index < size; index++) { - char* str_key_value = yon_char_new(cfg[index]); - char* str_key = yon_char_divide_search(str_key_value, "=",-1); - if (yon_char_find_count(str_key, "CGROUP_QUOTA") != 0) { - if (str_key_value[0] == '\"') { - yon_char_divide(str_key_value, 0); - size_t length = strlen(str_key_value); - str_key_value = yon_char_divide(str_key_value, length-1); +void on_check_maximum(GtkWidget *self, GtkWidget *pair){ + if (GTK_IS_SPIN_BUTTON(self)){ + if (GTK_IS_COMBO_BOX(pair)){ + int required_size = gtk_combo_box_get_active(GTK_COMBO_BOX(pair)); + if (main_config.avaliable_ram==0){ + struct sysinfo inf; + sysinfo(&inf); + main_config.avaliable_ram=inf.totalram; + main_config.avaliable_swap=inf.totalswap; } - str_split_value(str_key_value, main_config.size_tree_view); - str_split_key(str_key, main_config.size_tree_view); - main_config.size_tree_view++; + double cur_ram = main_config.avaliable_ram; + double cur_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(self)); + for (int i=0;icur_ram) + gtk_adjustment_set_value(adj,cur_ram); } - } - - if (main_config.size_tree_view != 0) { - fill_tree_view(0, main_config.size_tree_view, 0); - } - main_config.flag_set_data = 0; + } else if (GTK_IS_SPIN_BUTTON(pair)){ + if (GTK_IS_COMBO_BOX(self)){ + int required_size = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); + if (main_config.avaliable_ram==0){ + struct sysinfo inf; + sysinfo(&inf); + main_config.avaliable_ram=inf.totalram; + main_config.avaliable_swap=inf.totalswap; + } + double cur_ram = main_config.avaliable_ram; + double cur_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(pair)); + for (int i=0;icur_ram) + gtk_adjustment_set_value(adj,cur_ram); + } + } } -void init_cfg_array(int index) { - philos_set_pow_size_memory("-", &main_config.type_quota_size, index, array_size_pow); - philos_set_size_memory_integer_char("-", &main_config.type_quota, index); - - philos_set_pow_size_memory("-", &main_config.quota_volume_size, index, array_size_pow); - philos_set_size_memory_integer_char("-", &main_config.quota_volume, index); - - philos_set_pow_size_memory("-", &main_config.cpu_limit_size, index, array_size_pow); - set_size_memory_integer("-", &main_config.cpu_limit, index); - - philos_set_pow_size_memory("-", &main_config.soft_raw_limit_size, index, array_size_pow); - set_size_memory_integer("-", &main_config.soft_raw_limit, index); - - philos_set_pow_size_memory("-", &main_config.hard_raw_limit_size, index, array_size_pow); - set_size_memory_integer("-", &main_config.hard_raw_limit, index); - - philos_set_pow_size_memory("-", &main_config.swap_size, index, array_size_pow); - set_size_memory_integer("-",&main_config.swap , index); - - int* array_limit = NULL; - char** array_disk = NULL; - int index_n2 = 0; - for (int index = 0; index < (get_device_cfg()->size_disk*2); index++) { - array_limit = philos_int_append(array_limit, &index_n2, -3); - } - array_limit = philos_int_append(array_limit, &index_n2, -2); - index_n2 = 0; - for (int index = 0; index < (get_device_cfg()->size_disk*2); index++) { - array_disk = yon_char_parsed_append(array_disk, &index_n2, "-"); - } - array_disk = yon_char_parsed_append(array_disk, &index_n2, NULL); - index_n2 = 0; - main_config.i_o_limit_read = yon_remalloc(main_config.i_o_limit_read, (index + 1) * sizeof(int*)); - main_config.i_o_limit_read_size = yon_remalloc(main_config.i_o_limit_read_size, (index + 1) * sizeof(int*)); - main_config.i_o_limit_write = yon_remalloc(main_config.i_o_limit_write, (index + 1) * sizeof(int*)); - main_config.i_o_limit_write_size = yon_remalloc(main_config.i_o_limit_write_size, (index + 1) * sizeof(int*)); - main_config.disk_write = yon_remalloc(main_config.disk_write, (index + 1) * sizeof(char**)); - main_config.disk_read = yon_remalloc(main_config.disk_read, (index + 1) * sizeof(char**)); - philos_array_int_copy(&main_config.i_o_limit_read[index], &array_limit); - philos_array_int_copy(&main_config.i_o_limit_read_size[index], &array_limit); - yon_char_parsed_copy(&main_config.disk_read[index], &array_disk); - philos_array_int_copy(&main_config.i_o_limit_write[index], &array_limit); - philos_array_int_copy(&main_config.i_o_limit_write_size[index], &array_limit); - yon_char_parsed_copy(&main_config.disk_write[index], &array_disk); - philos_free_int_array(&array_limit, 1); - philos_free_string_array(&array_disk, 1); +void on_check_maximum_cpu(GtkWidget *self, GtkWidget *pair){ + if (GTK_IS_SPIN_BUTTON(self)){ + if (GTK_IS_COMBO_BOX(pair)){ + int required_size = gtk_combo_box_get_active(GTK_COMBO_BOX(pair)); + if (main_config.avaliable_ram==0){ + struct sysinfo inf; + sysinfo(&inf); + main_config.avaliable_swap=inf.totalswap; + } + double cur_ram = main_config.avaliable_swap; + double cur_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(self)); + for (int i=0;icur_ram) + gtk_adjustment_set_value(adj,cur_ram); + } + } else if (GTK_IS_SPIN_BUTTON(pair)){ + if (GTK_IS_COMBO_BOX(self)){ + int required_size = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); + if (main_config.avaliable_swap==0){ + struct sysinfo inf; + sysinfo(&inf); + main_config.avaliable_swap=inf.totalswap; + } + double cur_ram = main_config.avaliable_swap; + double cur_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(pair)); + for (int i=0;icur_ram) + gtk_adjustment_set_value(adj,cur_ram); + } + } } -void str_split_key(char* source_value, int index) { - char* value = yon_char_new(source_value); - yon_char_divide_search(value, "[", -1); - value = yon_char_divide_search(value, "]", -1); - if (strstr(value, ".") != NULL) { - if (strstr(value, ".slice") != NULL) { - main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value); - index--; - main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 2); - index--; - main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_SLICE); - index--; - } - else if (strstr(value, ".service") != NULL) { - main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value); - index--; - main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 1); - index--; - main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_PROCESS); - index--; +void on_quota_target_type_changed(GtkWidget *self, quota_window *window){ + int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); + if (active == 0) { + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->TargetCombo)); + for (int i=0; iTargetCombo),main_config.users[i]); } - else { - main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value); - index--; - main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, "-"); - index--; + } + if (active == 1) { + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->TargetCombo)); + for (int i=0; iTargetCombo),main_config.processes[i]); } - } - else { - int user_size = 0; - char** arr_users = philos_list_user(&user_size); - for (int user_index = 0; user_index < user_size; user_index++) { - // Пользователь - if (strstr(arr_users[user_index], value) != NULL) { - main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 0); - index--; - main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value); - index--; - main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_USER); - index--; - } + if (active == 2) { + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->TargetCombo)); + for (int i=0; iTargetCombo),main_config.slices[i]); } } +} - +void on_target_check_chosen(GtkWidget *self, quota_window *window){ + if (gtk_combo_box_get_active(GTK_COMBO_BOX(self))!=-1) + gtk_widget_set_sensitive(window->BlockUiBox,1); + else + gtk_widget_set_sensitive(window->BlockUiBox,0); } -void str_split_value(char* values, int index) { - char* new_value = yon_char_new(values); - int size = 0; - char* key = NULL; - char* value = NULL; - char** arr_values = philos_str_split(new_value, &size, ","); - if (arr_values == NULL) { - return; - } - init_cfg_array(index); - char* value_i = NULL; - int index_1 = 0; - int read_index = -1; - int write_index = -1; - for (index_1=0; index_1 < size; index_1++) { - value = yon_char_new(arr_values[index_1]); - key = yon_char_divide_search(value, "=", -1); - if (strstr(key, "IOReadBandwidthMax")) { - read_index = index_1; - } - if (strstr(key, "IOWriteBandwidthMax")) { - write_index = index_1; - } - if (yon_char_find_count(key, "MemoryHigh") != 0) { - philos_set_pow_size_memory(yon_char_new(value), &main_config.soft_raw_limit_size, index, array_size_pow); - set_size_memory_integer(yon_char_new(value), &main_config.soft_raw_limit, index); - } - if (yon_char_find_count(key, "MemoryMax") != 0) { - philos_set_pow_size_memory(yon_char_new(value), &main_config.hard_raw_limit_size, index, array_size_pow); - set_size_memory_integer(yon_char_new(value), &main_config.hard_raw_limit, index); - } - if (yon_char_find_count(key, "MemorySwapMax") != 0) { - philos_set_pow_size_memory(yon_char_new(value), &main_config.swap_size, index, array_size_pow); - set_size_memory_integer(yon_char_new(value), &main_config.swap, index); - } - if (yon_char_find_count(key, "CPUQuota") != 0) { - philos_set_pow_size_memory(yon_char_new(value), &main_config.cpu_limit_size, index, array_size_pow); - set_size_memory_integer(yon_char_new(value), &main_config.cpu_limit, index); - } + +void yon_get_devices(quota_window *window){ + int size=0; + config_str devices_parsed = yon_config_load(get_devices_command,&size); + yon_char_parsed_remove_newline_symbols(devices_parsed,&size); + for (int i=0; idevices,devices_parsed[i],NULL); } - if (read_index != -1 || write_index != -1) { - if (read_index != -1 && write_index != -1) { - if (write_index > read_index) { - get_param_io_limit(arr_values, read_index, write_index, index, "IOReadBandwidthMax"); - get_param_io_limit(arr_values, write_index, size , index, "IOWriteBandwidthMax"); - +} + +void on_device_current_changed(GtkWidget *self, quota_window *window){ + char *chosen = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->DeviceLimitCombo)); + if (!window->devices->data){ + printf("%s\n",gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->DeviceLimitCombo))); + yon_dictionary_get(&window->devices,chosen); + if (!window->devices->data) + window->devices->data = g_malloc0(sizeof(device_limits)); + } else { + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DeviceLimitReadCheck))) + yon_dictionary_get_data(window->devices,device_limits*)->read=yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->DeviceLimitReadSpin))),get_size_mod(GTK_COMBO_BOX(window->DeviceLimitReadCombo))); + else yon_dictionary_get_data(window->devices,device_limits*)->read = NULL; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DeviceLimitWriteCheck))) + yon_dictionary_get_data(window->devices,device_limits*)->write=yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->DeviceLimitWriteSpin))),get_size_mod(GTK_COMBO_BOX(window->DeviceLimitWriteCombo))); + else yon_dictionary_get_data(window->devices,device_limits*)->write = NULL; + yon_dictionary_get(&window->devices,chosen); + if (!window->devices->data) + window->devices->data = g_malloc0(sizeof(device_limits)); + char *read = yon_dictionary_get_data(window->devices,device_limits*)->read; + char *write = yon_dictionary_get_data(window->devices,device_limits*)->write; + if (read) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->DeviceLimitReadSpin),atoi(read)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitReadCheck),1); + switch (read[strlen(read)-1]){ + case 'K': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),0); + break; + case 'M': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),1); + break; + case 'G': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),2); + break; + case 'T': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),3); + break; + } + } else { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->DeviceLimitReadSpin),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitReadCheck),0); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),0); } - else { - get_param_io_limit(arr_values, write_index, read_index,index, "IOWriteBandwidthMax"); - get_param_io_limit(arr_values, read_index, size , index, "IOReadBandwidthMax"); + if (write) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->DeviceLimitWriteSpin),atoi(write)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitWriteCheck),1); + switch (write[strlen(write)-1]){ + case 'K': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),0); + break; + case 'M': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),1); + break; + case 'G': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),2); + break; + case 'T': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),3); + break; + } + } else { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->DeviceLimitWriteSpin),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitWriteCheck),0); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),0); } - } - else if (read_index != -1) { - get_param_io_limit(arr_values, read_index, size,index, "IOReadBandwidthMax"); - } - else if (write_index != -1) { - get_param_io_limit(arr_values, write_index, size,index, "IOWriteBandwidthMax"); - } } +} + +void on_quotas_save(GtkWidget *self, dictionary *windows){ + quota_window *window = yon_dictionary_get_data(windows->first,quota_window*); + main_window *widgets = yon_dictionary_get_data(windows->first->next,main_window*); + GtkTreeIter iter; + const char *string = gtk_entry_get_text(GTK_ENTRY(window->ManualInputEntry)); + const char *type = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->TargetTypeCombo)); + const char *target = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->TargetCombo)); + char *soft = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck)) ? yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->SoftRestrictionSpin))),get_size_mod(GTK_COMBO_BOX(window->SoftRestrictionCombo))) : NULL; + char *hard = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck)) ? yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin))),get_size_mod(GTK_COMBO_BOX(window->HardRestrictionCombo))) : NULL; + char *paging = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck)) ? yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->PagingLimitSpin))),get_size_mod(GTK_COMBO_BOX(window->PagingLimitCombo))) : NULL; + char *cpu = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->CpuLimitCheck)) ? yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->CpuLimitSpin))) : NULL; + char *read_limit = ""; + char *read_devices = ""; + dictionary *dict; + for_dictionaries(dict,window->devices){ + if (dict->data&&yon_dictionary_get_data(dict,device_limits*)->read) + read_devices = yon_char_unite(read_devices,"",yon_char_divide_search(yon_char_new(dict->key)," ",-1)," ",yon_dictionary_get_data(dict,device_limits*)->read,"\n",NULL); + } + if (read_devices[strlen(read_devices)-1]=='\n') read_devices[strlen(read_devices)-1]='\0'; + read_limit = yon_char_unite(read_limit,read_devices,NULL); - + char *write_limit = ""; + char *write_devices = ""; + for_dictionaries(dict,window->devices){ + if (dict->data&&yon_dictionary_get_data(dict,device_limits*)->write) + write_devices = yon_char_unite(write_devices,"",yon_char_divide_search(yon_char_new(dict->key)," ",-1)," ",yon_dictionary_get_data(dict,device_limits*)->write,"\n",NULL); + } + if (write_devices[strlen(write_devices)-1]=='\n') write_devices[strlen(write_devices)-1]='\0'; + write_limit = yon_char_unite(write_limit,write_devices,NULL); + gtk_list_store_append(main_config.list,&iter); + gtk_list_store_set(main_config.list,&iter,0,type,1,target,2,soft,3,hard,4,paging,5,cpu,6,read_limit,7,write_limit,8,string,-1); + yon_config_register(CGROUP_QUOTA((char*)target),yon_char_new((char*)string)); + on_close_subwindow(self); + yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } -void write_value_and_null_config(int index_n1, int* index_n2, char* key_find, char* str_disk) { - char* array_disk = NULL; - if (strstr(key_find, "IOReadBandwidthMax")!=NULL) { - array_disk = main_config.disk_write[index_n1][*index_n2]; - if (strcmp(array_disk, str_disk)!=0 && strcmp(array_disk, "-")!=0) { - (*index_n2)++; - } - } - else if (strstr(key_find, "IOWriteBandwidthMax")!=NULL) { - array_disk = main_config.disk_read[index_n1][*index_n2]; - if (strcmp(array_disk, str_disk)!=0 && strcmp(array_disk, "-")!=0) { - (*index_n2)++; - } +int yon_get_size_request_from_letter(char size){ + switch (size){ + case 'K': return 0; + break; + case 'M': return 1; + break; + case 'G': return 2; + break; + case 'T': return 0; + break; + default: return -1; + break; } } -void get_param_io_limit(char** arr_values, int index_start, int size, int index_n1, char *key_find) { - int* array_limit = NULL; - char** array_disk = NULL; - int* array_limit_size = NULL; - if (strstr(key_find, "IOReadBandwidthMax")!=NULL) { - array_limit = main_config.i_o_limit_read[index_n1]; - array_limit_size = main_config.i_o_limit_read_size[index_n1]; - array_disk = main_config.disk_read[index_n1]; - } - else if (strstr(key_find, "IOWriteBandwidthMax")!=NULL) { - array_limit = main_config.i_o_limit_write[index_n1]; - array_limit_size = main_config.i_o_limit_write_size[index_n1]; - array_disk = main_config.disk_write[index_n1]; - } - else { - return; - } - int index_n2 = 0; - int flag_parsed = 0; - int flag_exit = 0; - for (int i = index_start; i < size; i++) { - if (strstr(arr_values[i], "BandwidthMax")!=NULL ) { - char* value = yon_char_new(arr_values[i]); - yon_char_divide_search(value, "=", -1); - if (strstr(arr_values[i], key_find)!=NULL) { - // Найден ключ в массив - char* disk = yon_char_divide_search(yon_char_new(value), " ", -1); - write_value_and_null_config(index_n1,&index_n2,key_find, disk); - array_disk[index_n2] = yon_char_new(disk); - philos_set_pow_size_memory_device(yon_char_new(value), &array_limit_size, index_n2, array_size_pow); - set_size_memory_integer_device(yon_char_new(value), &array_limit, index_n2); - flag_parsed = 1; - index_n2++; - } - else if (strstr(arr_values[i], "BandwidthMax")!=NULL && - strstr(arr_values[i], key_find)==NULL && flag_parsed == 1) { - // Найден ключ в массив, но не тот - flag_exit = 1; - } - free(value); - } - else if (flag_parsed == 1) { - char* disk = yon_char_divide_search(yon_char_new(arr_values[i]), " ", -1); - write_value_and_null_config(index_n1,&index_n2,key_find, disk); - array_disk[index_n2] = yon_char_new(disk); - philos_set_pow_size_memory_device(yon_char_new(arr_values[i]), &array_limit_size, index_n2, array_size_pow); - set_size_memory_integer_device(yon_char_new(arr_values[i]), &array_limit, index_n2); - index_n2++; - } - else if (flag_exit == 1) { - break; - } - } - if (index_n2 != 0) { - if (strstr(key_find, "BandwidthMax")!=NULL) { - if (strstr(key_find, "IOReadBandwidthMax")!=NULL) { - philos_array_int_copy(&main_config.i_o_limit_read[index_n1], &array_limit); - philos_array_int_copy(&main_config.i_o_limit_read_size[index_n1], &array_limit_size); - yon_char_parsed_copy(&main_config.disk_read[index_n1], &array_disk); - } - else if (strstr(key_find, "IOWriteBandwidthMax")!=NULL) { - philos_array_int_copy(&main_config.i_o_limit_write[index_n1], &array_limit); - philos_array_int_copy(&main_config.i_o_limit_write_size[index_n1], &array_limit_size); - yon_char_parsed_copy(&main_config.disk_write[index_n1], &array_disk); +void yon_load_proceed(char *command){ + gtk_list_store_clear(main_config.list); + if (yon_config_load_register(command)){ + config_str rtn = yon_config_get_all(); + char *quota = NULL; + for (int i=0;rtn[i];i++){ + quota=yon_char_new(rtn[i]); + char *name = yon_char_divide_search(quota,"=",-1); + if (quota[0]=='\"') yon_char_divide(quota,0); + if (quota[strlen(quota)-1]=='\"') quota[strlen(quota)-1]='\0'; + yon_char_divide_search(name,"[",-1); + name = yon_char_divide_search(name,"]",-1); + name = yon_char_divide_search(name,"=",-1); + char *type = NULL; + if (strstr(name,".service")) type=STR_PROCESS; + else if (strstr(name,".slice")) type=STR_SLICE; + else type=STR_USER; + int size=0; + char *high = NULL; + char *max = NULL; + char *swap = NULL; + char *cpu = NULL; + char *read = ""; + char *write = ""; + config_str single_quota = yon_char_parse(quota,&size,","); + if (!single_quota) {single_quota = g_malloc0(sizeof(char*));single_quota[0]=quota;} + for (int j = 0; j < (size==0 ? 1 : size); j++){ + if (strstr(single_quota[j],"MemoryHigh")){ + high=yon_char_new(single_quota[j]); + yon_char_divide_search(high,"=",-1); + } + if (strstr(single_quota[j],"MemoryMax")){ + max=yon_char_new(single_quota[j]); + yon_char_divide_search(max,"=",-1); + } + if (strstr(single_quota[j],"MemorySwapMax")){ + swap=yon_char_new(single_quota[j]); + yon_char_divide_search(swap,"=",-1); + } + if (strstr(single_quota[j],"CPUQuota")){ + cpu=yon_char_new(single_quota[j]); + yon_char_divide_search(cpu,"=",-1); + } + if (strstr(single_quota[j],"IOReadBandwidthMax")){ + char *qta = yon_char_new(single_quota[j]); + yon_char_divide_search(qta,"=",-1); + read=yon_char_unite(strcmp(read,"")!=0 ? yon_char_append(read,"\n"):read,qta,NULL); + free(qta); + } + if (strstr(single_quota[j],"IOWriteBandwidthMax")){ + char *qta = yon_char_new(single_quota[j]); + yon_char_divide_search(qta,"=",-1); + write=yon_char_unite(strcmp(write,"")!=0 ? yon_char_append(write,"\n"):write,qta,NULL); + free(qta); + } } + GtkTreeIter iter; + gtk_list_store_append(main_config.list,&iter); + gtk_list_store_set(main_config.list,&iter,0,type,1,name,2,high,3,max,4,swap,5,cpu,6,read,7,write,8,quota,-1); } - philos_free_int_array(&array_limit, index_n2); - philos_free_string_array(&array_disk, index_n2); - philos_free_int_array(&array_limit_size, index_n2); - } - else { - } } -void set_size_memory_integer(char* str_find, int** array_data, int index) { - if (strstr(str_find, " ")) { - yon_char_divide_search(str_find, " ", -1); - } - char* simv_del_array[9] = {"K","M","G","T","k","m","g","t","%"}; - for (size_t i = 0; i < 9; i++) { - if (strstr(str_find, simv_del_array[i])) { - str_find = yon_char_divide_search(str_find, simv_del_array[i], -1); - } - } - if (strstr(str_find, "-")==NULL) { - *array_data = philos_int_append(*array_data, &index, atoi(str_find)); - } - else { - *array_data = philos_int_append(*array_data, &index, -1); - } +void on_config_load_global(){ + yon_load_proceed(load_global_command); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); } -void set_size_memory_integer_device(char* str_find, int** array_data, int index) { - if (strstr(str_find, " ")) { - yon_char_divide_search(str_find, " ", -1); - } - char* simv_del_array[9] = {"K","M","G","T","k","m","g","t","%"}; - for (size_t i = 0; i < 9; i++) { - if (strstr(str_find, simv_del_array[i])) { - str_find = yon_char_divide_search(str_find, simv_del_array[i], -1); - } - } - if (strstr(str_find, "-")==NULL) { - (*array_data)[index] = atoi(str_find); - } - else { - (*array_data)[index] = -1; - } +void on_config_load_local(){ + yon_load_proceed(load_local_command); + yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } -void main_cbx_2_event() { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtMainInfoLevel2)); - char* cmd_text_param = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfoLevel2)); - char* cmd = NULL; - if (menu_id >= 0) { - cmd = yon_char_unite("systemctl status ", cmd_text_param ," --no-pager", NULL); - yon_terminal_integrated_launch(widgets->vteInformation, cmd, NULL, NULL); +void yon_save_proceed(char *path, char *section){ + yon_config_save_registered(path,section); - } - if (menu_id >= 0) { - free(cmd_text_param); - free(cmd); - } } -void tree_view_select(GtkWidget *self, main_window *widgets) { - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain)); - if(gtk_tree_selection_get_selected(selection, &model, &iter)) { - gtk_widget_set_sensitive(widgets->btnAdd,1); - gtk_widget_set_sensitive(widgets->btnDelQuotas,1); - gtk_widget_set_sensitive(widgets->btnEdit,1); - gtk_widget_set_sensitive(widgets->btnInfo,1); - } - else { - if (main_config.lock_save_global == 0 || main_config.lock_save_local == 0) { - gtk_widget_set_sensitive(widgets->btnAdd,1); - } - gtk_widget_set_sensitive(widgets->btnDelQuotas,0); - gtk_widget_set_sensitive(widgets->btnEdit,0); - gtk_widget_set_sensitive(widgets->btnInfo,0); - } +void on_config_save(){ + yon_save_proceed(NULL,"security"); + yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); } -void tree_view_add(int index) { - init_cfg_array(index); - main_config.type_quota_size[index] = add_get_quota_object_size(); - main_config.quota_volume_size[index] = -1; - main_config.type_quota[index] = add_get_quota_object(); - main_config.quota_volume[index] = add_get_select_device_to_level_2(); - - main_config.soft_raw_limit[index] = add_get_soft(); - main_config.hard_raw_limit[index] = add_get_hard(); - main_config.swap[index] = add_get_limit_swap(); - main_config.cpu_limit[index] = add_get_limit_cpu(); - main_config.soft_raw_limit_size[index] = add_get_soft_size(); - main_config.hard_raw_limit_size[index] = add_get_hard_size(); - main_config.quota_volume_size[index] = add_get_index_volume_quota(); - main_config.type_quota_size[index] = add_get_index_type_quota(); - main_config.swap_size[index] = add_get_limit_swap_size(); - main_config.cpu_limit_size[index] = add_get_limit_cpu_size(); - philos_free_string_array(&main_config.disk_read[index],(get_device_cfg()->size_disk*2)); - philos_free_string_array(&main_config.disk_write[index],(get_device_cfg()->size_disk*2)); - philos_free_int_array(&main_config.i_o_limit_write[index],(get_device_cfg()->size_disk*2)); - philos_free_int_array(&main_config.i_o_limit_read[index],(get_device_cfg()->size_disk*2)); - philos_free_int_array(&main_config.i_o_limit_read_size[index],(get_device_cfg()->size_disk*2)); - philos_free_int_array(&main_config.i_o_limit_write_size[index],(get_device_cfg()->size_disk*2)); - - philos_array_int_copy(&main_config.i_o_limit_read[index], add_get_read_device()); - philos_array_int_copy(&main_config.i_o_limit_write[index], add_get_write_device()); - philos_array_int_copy(&main_config.i_o_limit_read_size[index], add_get_read_device_size_pow()); - philos_array_int_copy(&main_config.i_o_limit_write_size[index], add_get_write_device_size_pow()); - yon_char_parsed_copy(&main_config.disk_read[index], add_get_select_read_device()); - yon_char_parsed_copy(&main_config.disk_write[index], add_get_select_write_device()); - main_config.size_tree_view += 1; - fill_tree_view(main_config.size_tree_view-1, main_config.size_tree_view, 1); - main_config.flag_set_data = 1; - main_config.flag_save = 2; - +void on_config_save_global(){ + yon_save_proceed("global","security"); + yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); + } -void fill_tree_view(int start, int size, int flag_gui_add) { - GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); - if (flag_gui_add == 0) { - g_object_ref(main_config.list); - gtk_list_store_clear(main_config.list); - } - for (int index = start; index < size; index++) { - GtkTreeIter iter; - gtk_list_store_append(main_config.list,&iter); - char* str_io_read = format_io_limit_in_tree_view(main_config.disk_read, main_config.i_o_limit_read, main_config.i_o_limit_read_size, index); - char* str_io_write = format_io_limit_in_tree_view(main_config.disk_write, main_config.i_o_limit_write, main_config.i_o_limit_write_size, index); - gtk_list_store_set(main_config.list,&iter, - 0,main_config.type_quota[index], - 1,main_config.quota_volume[index], - 2,philos_format_cfg_str_size_memory("", main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]), - 3,philos_format_cfg_str_size_memory("", main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]), - 4,philos_format_cfg_str_size_memory("", main_config.swap[index],main_config.swap_size[index]), - 5,philos_format_cfg_str_size_memory("", main_config.cpu_limit[index], -1), - 6,str_io_read, - 7,str_io_write,-1); - free(str_io_read); - free(str_io_write); - } - if (flag_gui_add != 0) { - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), model); - } +void on_config_save_local(){ + yon_save_proceed("system","security"); + yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } -char* format_io_limit_in_tree_view(config_str* disk, int** i_o_limit, int** i_o_limit_size, int index) { - int index_to_n2 = 0; - char* str = ""; - while (1) { - if (i_o_limit == NULL) {break;} - if (i_o_limit[index]!= NULL) { - if (i_o_limit[index][index_to_n2] != -2) { - if (index_to_n2!=0) { - if (!strstr(str, "-")) { - char* num_and_pow_size = philos_format_cfg_str_size_memory(" ", i_o_limit[index][index_to_n2] , i_o_limit_size[index][index_to_n2]); - if (!strstr(num_and_pow_size, "-")) { - if (strlen(str)>3) { - str = yon_char_unite(str, ",", - disk[index][index_to_n2], - num_and_pow_size, NULL); - } - else { - str = yon_char_unite(disk[index][index_to_n2], - num_and_pow_size, NULL); - } - - } - free(num_and_pow_size); - } - - } - else { - if (!strstr(str, "-")) { - char* num_and_pow_size = philos_format_cfg_str_size_memory(" ", i_o_limit[index][index_to_n2], i_o_limit_size[index][index_to_n2]); - if (!strstr(num_and_pow_size, "-")) { - str = yon_char_unite(str, - disk[index][index_to_n2], - num_and_pow_size, NULL); - } - free(num_and_pow_size); - } - } - - } +void on_apply_filters(GtkWidget *self, dictionary *dict){ + GList *columns = yon_dictionary_get_data(dict->first,GList*); + GList *checks = yon_dictionary_get_data(dict->first->next,GList*); + if (g_list_length(columns)==g_list_length(checks)){ + for (int i=0;itreeViewMain)); - if(gtk_tree_selection_get_selected(selection, &model, &iter)) { - main_config.flag_set_data = 1; - main_config.flag_save = 2; - char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter); - index = atoi(str_iter); - main_config.soft_raw_limit[index] = edit_get_soft(); - main_config.hard_raw_limit[index] = edit_get_hard(); - main_config.swap[index] = edit_get_limit_swap(); - main_config.cpu_limit[index] = edit_get_limit_cpu(); - - philos_array_int_copy(&main_config.i_o_limit_read[index], edit_get_read_device()); - philos_array_int_copy(&main_config.i_o_limit_read_size[index], edit_get_read_device_size_pow()); - yon_char_parsed_copy(&main_config.disk_read[index], edit_get_select_read_device()); - yon_char_parsed_copy(&main_config.disk_write[index], edit_get_select_write_device()); - - philos_array_int_copy(&main_config.i_o_limit_write[index], edit_get_write_device()); - philos_array_int_copy(&main_config.i_o_limit_write_size[index], edit_get_write_device_size_pow()); - - main_config.soft_raw_limit_size[index] = edit_get_soft_size(); - main_config.hard_raw_limit_size[index] = edit_get_hard_size(); - main_config.swap_size[index] = edit_get_limit_swap_size(); - main_config.cpu_limit_size[index] = edit_get_limit_cpu_size(); - - char* str_io_read = format_io_limit_in_tree_view(main_config.disk_read, main_config.i_o_limit_read, main_config.i_o_limit_read_size, index); - char* str_io_write = format_io_limit_in_tree_view(main_config.disk_write, main_config.i_o_limit_write, main_config.i_o_limit_write_size, index); - gtk_list_store_set(main_config.list,&iter, - 0,main_config.type_quota[index], - 1,main_config.quota_volume[index], - 2,philos_format_cfg_str_size_memory("",main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]), - 3,philos_format_cfg_str_size_memory("",main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]), - 4,philos_format_cfg_str_size_memory("",main_config.swap[index],main_config.swap_size[index]), - 5,philos_format_cfg_str_size_memory("",main_config.cpu_limit[index], -1), - 6,str_io_read, - 7,str_io_write,-1); - return 1; - } - else { - return 0; +void on_filters_opened(GtkWidget *self, main_window *widgets) { + GtkBuilder *builder = gtk_builder_new_from_resource(glade_filters_path); + filters_window *window = g_malloc0(sizeof(filters_window)); + + window->Window = yon_gtk_builder_get_widget(builder, "FiltersWindow"); + window->QuotaTypeCheck = yon_gtk_builder_get_widget(builder, "QuotaTypeCheck"); + window->QuotaTargetCheck = yon_gtk_builder_get_widget(builder, "QuotaTargetCheck"); + window->SoftRamLimitCheck = yon_gtk_builder_get_widget(builder, "SoftRamLimitCheck"); + window->HardRamLimitCheck = yon_gtk_builder_get_widget(builder, "HardRamLimitCheck"); + window->PagingLimitCheck = yon_gtk_builder_get_widget(builder, "PagingLimitCheck"); + window->CpuLimitCheck = yon_gtk_builder_get_widget(builder, "CpuLimitCheck"); + window->ReadLimitCheck = yon_gtk_builder_get_widget(builder, "ReadLimitCheck"); + window->WriteLimitCheck = yon_gtk_builder_get_widget(builder, "WriteLimitCheck"); + + window->CancelButton = yon_gtk_builder_get_widget(builder, "CancelButton"); + window->AcceptButton = yon_gtk_builder_get_widget(builder, "AcceptButton"); + + GList *columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree)); + GList *checks = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(window->QuotaTypeCheck))); + if (g_list_length(columns)==g_list_length(checks)){ + for (int i=0;itvc0, flags_filters[0]); - gtk_tree_view_column_set_visible(widgets->tvc1, flags_filters[1]); - gtk_tree_view_column_set_visible(widgets->tvc2, flags_filters[2]); - gtk_tree_view_column_set_visible(widgets->tvc3, flags_filters[3]); - gtk_tree_view_column_set_visible(widgets->tvc4, flags_filters[4]); - gtk_tree_view_column_set_visible(widgets->tvc5, flags_filters[5]); - gtk_tree_view_column_set_visible(widgets->tvc6, flags_filters[6]); - gtk_tree_view_column_set_visible(widgets->tvc7, flags_filters[7]); - filters_on_hide_subwindow(self); -} -void info_show(GtkWidget *self) { - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain)); - if(gtk_tree_selection_get_selected(selection, &model, &iter)) { - char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter); - int index = atoi(str_iter); - char* t_quota = main_config.type_quota[index]; - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtMainInfo), main_config.type_quota_size[index]); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtMainInfoLevel2), main_config.quota_volume_size[index]); - } - - gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->notebookMain), 3); -} + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"columns",columns); + yon_dictionary_add_or_create_if_exists_with_data(dict,"checks",checks); -void event_all(main_window *widgets) { + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_apply_filters),dict); + gtk_window_set_title(GTK_WINDOW(window->Window),TITLE_LABEL); + gtk_widget_show(window->Window); } -void fn_scroll(GdkEventScroll self) { - +void on_add_open(GtkWidget *self, main_window *widgets){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_quota_path); + quota_window *window = g_malloc0(sizeof(quota_window)); + + window->Window = yon_gtk_builder_get_widget(builder,"QuotasWindow"); + + window->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel"); + window->BlockUiBox = yon_gtk_builder_get_widget(builder,"BlockUiBox"); + window->TargetTypeCombo = yon_gtk_builder_get_widget(builder,"TargetTypeCombo"); + window->AddQuotaTargetBox = yon_gtk_builder_get_widget(builder,"AddQuotaTargetBox"); + window->EditQuotaTargetBox = yon_gtk_builder_get_widget(builder,"EditQuotaTargetBox"); + window->TargetCombo = yon_gtk_builder_get_widget(builder,"TargetCombo"); + window->TargetLabel = yon_gtk_builder_get_widget(builder,"TargetLabel"); + + window->SoftRestrictionCheck = yon_gtk_builder_get_widget(builder,"SoftRestrictionCheck"); + window->SoftRestrictionSpin = yon_gtk_builder_get_widget(builder,"SoftRestrictionSpin"); + window->SoftRestrictionCombo = yon_gtk_builder_get_widget(builder,"SoftRestrictionCombo"); + + window->HardRestrictionCheck = yon_gtk_builder_get_widget(builder,"HardRestrictionCheck"); + window->HardRestrictionSpin = yon_gtk_builder_get_widget(builder,"HardRestrictionSpin"); + window->HardRestrictionCombo = yon_gtk_builder_get_widget(builder,"HardRestrictionCombo"); + + window->PagingLimitCheck = yon_gtk_builder_get_widget(builder,"PagingLimitCheck"); + window->PagingLimitSpin = yon_gtk_builder_get_widget(builder,"PagingLimitSpin"); + window->PagingLimitCombo = yon_gtk_builder_get_widget(builder,"PagingLimitCombo"); + + window->CpuLimitCheck = yon_gtk_builder_get_widget(builder,"CpuLimitCheck"); + window->CpuLimitSpin = yon_gtk_builder_get_widget(builder,"CpuLimitSpin"); + + window->DeviceLimitCombo = yon_gtk_builder_get_widget(builder,"DeviceLimitCombo"); + + window->DeviceLimitReadCheck = yon_gtk_builder_get_widget(builder,"DeviceLimitReadCheck"); + window->DeviceLimitReadSpin = yon_gtk_builder_get_widget(builder,"DeviceLimitReadSpin"); + window->DeviceLimitReadCombo = yon_gtk_builder_get_widget(builder,"DeviceLimitReadCombo"); + + window->DeviceLimitWriteCheck = yon_gtk_builder_get_widget(builder,"DeviceLimitWriteCheck"); + window->DeviceLimitWriteSpin = yon_gtk_builder_get_widget(builder,"DeviceLimitWriteSpin"); + window->DeviceLimitWriteCombo = yon_gtk_builder_get_widget(builder,"DeviceLimitWriteCombo"); + window->ApplyChangesButton = yon_gtk_builder_get_widget(builder,"ApplyChangesButton"); + window->ManualInputEntry = yon_gtk_builder_get_widget(builder,"ManualInputEntry"); + + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); + + window->devices = NULL; + + gtk_window_set_title(GTK_WINDOW(window->Window),TITLE_LABEL); + + struct sysinfo inf; + sysinfo(&inf); + main_config.avaliable_ram=inf.totalram; + main_config.avaliable_swap=inf.totalswap; + main_config.cores = sysconf(_SC_NPROCESSORS_ONLN); + dictionary *windows = NULL; + yon_dictionary_add_or_create_if_exists_with_data(windows,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(windows,"widgets",widgets); + 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_quotas_save),windows); + + g_signal_connect(G_OBJECT(window->TargetTypeCombo),"changed",G_CALLBACK(on_quota_target_type_changed),window); + + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->SoftRestrictionSpin)),main_config.avaliable_ram); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->HardRestrictionSpin)),main_config.avaliable_ram); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->PagingLimitSpin)),main_config.avaliable_swap); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->CpuLimitSpin)),main_config.cores*100); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->DeviceLimitReadSpin)),main_config.avaliable_ram); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->DeviceLimitWriteSpin)),main_config.avaliable_ram); + + g_signal_connect(G_OBJECT(window->DeviceLimitCombo),"changed",G_CALLBACK(on_device_current_changed),window); + + g_signal_connect(G_OBJECT(window->TargetCombo),"changed",G_CALLBACK(on_target_check_chosen),window); + g_signal_connect(G_OBJECT(window->SoftRestrictionSpin),"change-value",G_CALLBACK(on_check_maximum),window->SoftRestrictionCombo); + g_signal_connect(G_OBJECT(window->SoftRestrictionCombo),"changed",G_CALLBACK(on_check_maximum),window->SoftRestrictionSpin); + g_signal_connect(G_OBJECT(window->HardRestrictionSpin),"change-value",G_CALLBACK(on_check_maximum),window->HardRestrictionCombo); + g_signal_connect(G_OBJECT(window->HardRestrictionCombo),"changed",G_CALLBACK(on_check_maximum),window->HardRestrictionSpin); + g_signal_connect(G_OBJECT(window->PagingLimitSpin),"change-value",G_CALLBACK(on_check_maximum_cpu),window->PagingLimitCombo); + g_signal_connect(G_OBJECT(window->PagingLimitCombo),"changed",G_CALLBACK(on_check_maximum_cpu),window->PagingLimitSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitReadSpin),"change-value",G_CALLBACK(on_check_maximum),window->DeviceLimitReadCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCombo),"changed",G_CALLBACK(on_check_maximum),window->DeviceLimitReadSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteSpin),"change-value",G_CALLBACK(on_check_maximum),window->DeviceLimitWriteCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCombo),"changed",G_CALLBACK(on_check_maximum),window->DeviceLimitWriteSpin); + + g_signal_connect(G_OBJECT(window->SoftRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SoftRestrictionCombo); + g_signal_connect(G_OBJECT(window->SoftRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SoftRestrictionSpin); + g_signal_connect(G_OBJECT(window->HardRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->HardRestrictionCombo); + g_signal_connect(G_OBJECT(window->HardRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->HardRestrictionSpin); + g_signal_connect(G_OBJECT(window->PagingLimitCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->PagingLimitCombo); + g_signal_connect(G_OBJECT(window->PagingLimitCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->PagingLimitSpin); + g_signal_connect(G_OBJECT(window->CpuLimitCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->CpuLimitSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitReadCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitReadSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitWriteCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitWriteSpin); + + g_signal_connect(G_OBJECT(window->DeviceLimitCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->DeviceLimitReadCheck); + g_signal_connect(G_OBJECT(window->DeviceLimitCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->DeviceLimitWriteCheck); + + g_signal_connect(G_OBJECT(window->SoftRestrictionSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->SoftRestrictionCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->HardRestrictionSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->HardRestrictionCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->PagingLimitSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->PagingLimitCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->CpuLimitSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitReadSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->SoftRestrictionCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->HardRestrictionCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->PagingLimitCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->CpuLimitCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + yon_get_devices(window); + dictionary *dict; + for_dictionaries(dict,window->devices){ + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->DeviceLimitCombo),dict->key); + } + main_config.users = yon_ubl_get_all_users(&main_config.users_size); + main_config.processes = yon_ubl_get_all_processes(&main_config.processes_size); + main_config.slices = yon_ubl_get_all_slices(&main_config.slices_size); + for (int i=0; iTargetCombo),main_config.users[i]); + } + gtk_widget_show(window->Window); } -void main_event(main_window *widgets) { - /* Signal connection | Присоединение сигналов */ - g_signal_connect(G_OBJECT(widgets->vteDispatcher), "scroll-event", G_CALLBACK(fn_scroll), NULL); - g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL); - - g_signal_connect(G_OBJECT(widgets->notebookMain), "switch-page", G_CALLBACK(select_page_notebook), NULL); - - g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); - g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL); - - g_signal_connect(G_OBJECT(widgets->btnShowFilters),"clicked",G_CALLBACK(wrapper_filters_show), NULL); - g_signal_connect(G_OBJECT(widgets->btnAdd),"clicked",G_CALLBACK(wrapper_add_show), glade_path); - g_signal_connect(G_OBJECT(widgets->btnEdit),"clicked",G_CALLBACK(wrapper_edit_show), glade_path); - g_signal_connect(G_OBJECT(widgets->btnInfo),"clicked",G_CALLBACK(info_show), glade_path); - g_signal_connect(G_OBJECT(widgets->btnUpdateDispatcher),"clicked",G_CALLBACK(main_update_dispatcher), NULL); - g_signal_connect(G_OBJECT(widgets->btnMainShowAllEmpty), "toggled", G_CALLBACK(main_update_processes), NULL); - g_signal_connect(G_OBJECT(widgets->btnMainShowCoreStream), "toggled", G_CALLBACK(main_update_processes), NULL); - g_signal_connect(G_OBJECT(widgets->cbtMainInfo),"changed",G_CALLBACK(main_update_information), NULL); - g_signal_connect(G_OBJECT(widgets->btnDelQuotas), "clicked", G_CALLBACK(tree_view_del_line), widgets); - g_signal_connect(G_OBJECT(widgets->treeViewMain), "cursor-changed", G_CALLBACK(tree_view_select), widgets); - g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem), "activate", G_CALLBACK(load_global_cfg), widgets); - g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem), "activate", G_CALLBACK(load_system_cfg), widgets); - - g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem), "activate", G_CALLBACK(wrapper_global_save), widgets); - g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem), "activate", G_CALLBACK(wrapper_system_save), widgets); - g_signal_connect(G_OBJECT(widgets->SaveMenuItem), "activate", G_CALLBACK(wrapper_all_save), widgets); -} -gboolean select_page_notebook( - GtkNotebook* self, - gboolean object, - gpointer user_data -) { - int menu = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->notebookMain)); - if (menu == 0 || menu == 2) { - yon_terminal_integrated_launch(widgets->vteDispatcher, "clear", NULL, NULL); - main_update_dispatcher(); +void on_information_chosen_changed(GtkWidget *self, main_window *widgets){ + const char *chosen = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(self)); + if (chosen){ + char *command = yon_char_unite(get_information_command, (char*)chosen," --no-pager",NULL); + main_config.last_info = yon_char_new((char*)chosen); + yon_terminal_integrated_start(widgets->InformationTerminal, command, NULL, NULL); } } -void wrapper_add_show(GtkWidget *self) { - add_show(NULL, glade_path); - g_signal_connect(G_OBJECT(get_widget_add()->btnSaveTempSave), "clicked", G_CALLBACK(main_add_btn_save), NULL); -} -void main_add_btn_save() { - tree_view_add(main_config.size_tree_view); - add_on_destroy_subwindow(get_widget_add()->Window); + +void on_information(GtkWidget *self, main_window *widgets){ + GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,1,&name,-1); + g_signal_handlers_block_by_func(G_OBJECT(widgets->TargetCombo),on_information_chosen_changed,widgets); + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TargetCombo),-1); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TargetCombo),on_information_chosen_changed,widgets); + char *command = yon_char_unite(get_information_command, (char*)name," --no-pager",NULL); + main_config.last_info = yon_char_new((char*)name); + yon_terminal_integrated_start(widgets->InformationTerminal, command, NULL, NULL); + gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MainNotebook),3); + yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } -void wrapper_filters_show(GtkWidget *self) { - filters_show(self, glade_path); - g_signal_connect(G_OBJECT(get_widget_filters()->btnFiltersSave),"clicked",G_CALLBACK(main_visible_columns), NULL); +void on_information_update(GtkWidget *self, main_window *widgets){ + char *command = yon_char_unite(get_information_command, main_config.last_info," --no-pager",NULL); + yon_terminal_integrated_start(widgets->InformationTerminal, command, NULL, NULL); } -void wrapper_edit_show() { - GtkTreeIter iter; +void on_remove(GtkWidget *self, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain)); - if(gtk_tree_selection_get_selected(selection, &model, &iter)) { - char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter); - int index = atoi(str_iter); - size_t size_disk_read_array = 0; - size_t size_disk_write_array = 0; - edit_show(NULL, glade_path); - edit_set_size_arrays((get_device_cfg()->size_disk*2)+1); - edit_set_select_read_device(&main_config.disk_read[index]); - edit_set_read_device(main_config.i_o_limit_read[index], main_config.i_o_limit_read_size[index]); - edit_set_select_write_device(&main_config.disk_write[index]); - edit_set_write_device(main_config.i_o_limit_write[index], main_config.i_o_limit_write_size[index]); - edit_set_hard(main_config.hard_raw_limit[index], main_config.hard_raw_limit_size[index]); - edit_set_limit_cpu(main_config.cpu_limit[index], main_config.cpu_limit_size[index]); - edit_set_soft(main_config.soft_raw_limit[index], main_config.soft_raw_limit_size[index]); - edit_set_limit_swap(main_config.swap[index], main_config.swap_size[index]); - edit_temp_set_obj_quota(main_config.type_quota[index], main_config.quota_volume[index]); - set_gui_device(); - edit_event(get_widget_edit()); - g_signal_connect(G_OBJECT(get_widget_edit()->btnSaveTempSave), "clicked", G_CALLBACK(main_edit_btn_save), NULL); - edit_init_windows(); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,1,&name,-1); + yon_config_set(CGROUP_QUOTA(name),""); + gtk_list_store_remove(main_config.list,&iter); + yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } -} + else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); -void main_edit_btn_save() { - if (tree_view_edit(main_config.size_tree_view)) { - edit_init_windows(); - add_on_destroy_subwindow(get_widget_edit()->Window); - } - } -void tree_view_del_line() { - int index = 0; - GtkTreeIter iter; +void on_quotas_edit(GtkWidget *self, dictionary *windows){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain)); - if(gtk_tree_selection_get_selected(selection, &model, &iter)) { - char* str_iter = yon_char_new(gtk_tree_model_get_string_from_iter(model, &iter)); - index = atoi(str_iter); - g_object_ref(main_config.list); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), NULL); - gtk_list_store_clear(main_config.list); - char* key_del = save_format_key(index); - if (key_del != NULL) { - main_config.array_del_line = yon_char_parsed_append(main_config.array_del_line, &main_config.size_array_del_line, yon_char_new(key_del)); - free(key_del); + quota_window *window = yon_dictionary_get_data(windows->first,quota_window*); + main_window *widgets = yon_dictionary_get_data(windows->first->next,main_window*); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + const char *string = gtk_entry_get_text(GTK_ENTRY(window->ManualInputEntry)); + const char *target = gtk_label_get_text(GTK_LABEL(window->TargetLabel)); + char *soft = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck)) ? yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->SoftRestrictionSpin))),get_size_mod(GTK_COMBO_BOX(window->SoftRestrictionCombo))) : NULL; + char *hard = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck)) ? yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin))),get_size_mod(GTK_COMBO_BOX(window->HardRestrictionCombo))) : NULL; + char *paging = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck)) ? yon_char_append(yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->PagingLimitSpin))),get_size_mod(GTK_COMBO_BOX(window->PagingLimitCombo))) : NULL; + char *cpu = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->CpuLimitCheck)) ? yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->CpuLimitSpin))) : NULL; + char *read_limit = ""; + char *read_devices = ""; + dictionary *dict; + for_dictionaries(dict,window->devices){ + if (dict->data&&yon_dictionary_get_data(dict,device_limits*)->read) + read_devices = yon_char_unite(read_devices,"",yon_char_divide_search(yon_char_new(dict->key)," ",-1)," ",yon_dictionary_get_data(dict,device_limits*)->read,"\n",NULL); } - main_config.type_quota = yon_char_parsed_shrink(main_config.type_quota, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.quota_volume = yon_char_parsed_shrink(main_config.quota_volume, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.soft_raw_limit = remove_element_int_array(main_config.soft_raw_limit, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.hard_raw_limit = remove_element_int_array(main_config.hard_raw_limit, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.swap = remove_element_int_array(main_config.swap, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.cpu_limit = remove_element_int_array(main_config.cpu_limit, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.i_o_limit_read = remove_element_int_array_n3(main_config.i_o_limit_read, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.i_o_limit_write = remove_element_int_array_n3(main_config.i_o_limit_write, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.disk_read = yon_char_parsed_shrink_n3(main_config.disk_read, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.disk_write = yon_char_parsed_shrink_n3(main_config.disk_write, &main_config.size_tree_view,index); - main_config.size_tree_view++; + if (read_devices[strlen(read_devices)-1]=='\n') read_devices[strlen(read_devices)-1]='\0'; + read_limit = yon_char_unite(read_limit,read_devices,NULL); - main_config.i_o_limit_read_size = remove_element_int_array_n3(main_config.i_o_limit_read_size, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.i_o_limit_write_size = remove_element_int_array_n3(main_config.i_o_limit_write_size, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.type_quota_size = remove_element_int_array(main_config.type_quota_size, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.quota_volume_size = remove_element_int_array(main_config.quota_volume_size, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.soft_raw_limit_size = remove_element_int_array(main_config.soft_raw_limit_size, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.hard_raw_limit_size = remove_element_int_array(main_config.hard_raw_limit_size, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.swap_size = remove_element_int_array(main_config.swap_size, &main_config.size_tree_view,index); - main_config.size_tree_view++; - main_config.cpu_limit_size = remove_element_int_array(main_config.cpu_limit_size, &main_config.size_tree_view,index); - main_fill_tree_view_after_remove(); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), model); - free(str_iter); - main_config.flag_set_data = 1; - main_config.flag_save = 2; - } -} - -void wrapper_all_save() { - int flag_mess_save = 0; - - if (main_config.flag_load == 0) { - flag_mess_save = template_format_str_save(CMD_ALL_SAVE, CMD_ALL_REMOVE); - } - else { - flag_mess_save = template_format_str_save(CMD_ALL_SAVE, CMD_ALL_REMOVE); - } - if (flag_mess_save) { - yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); - main_config.flag_save=0; - } - else { - yon_ubl_status_box_render(MESS_NOTHING_SAVE, BACKGROUND_IMAGE_SUCCESS_TYPE); - } - - -} - -void wrapper_global_save() { - if (template_format_str_save(CMD_SAVE_GLOBAL, CMD_REMOVE_GLOBAL)) { - yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); - main_config.flag_save-=1; - } - else { - yon_ubl_status_box_render(MESS_NOTHING_SAVE, BACKGROUND_IMAGE_SUCCESS_TYPE); - } - - -} - -void wrapper_system_save() { - if (template_format_str_save(CMD_SAVE_SYSTEM, CMD_REMOVE_SYSTEM)) { - yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); - main_config.flag_save-=1; - } - else { - yon_ubl_status_box_render(MESS_NOTHING_SAVE, BACKGROUND_IMAGE_SUCCESS_TYPE); - } - + char *write_limit = ""; + char *write_devices = ""; + for_dictionaries(dict,window->devices){ + if (dict->data&&yon_dictionary_get_data(dict,device_limits*)->write) + write_devices = yon_char_unite(write_devices,"",yon_char_divide_search(yon_char_new(dict->key)," ",-1)," ",yon_dictionary_get_data(dict,device_limits*)->write,"\n",NULL); + } + if (write_devices[strlen(write_devices)-1]=='\n') write_devices[strlen(write_devices)-1]='\0'; + write_limit = yon_char_unite(write_limit,write_devices,NULL); + gtk_list_store_set(main_config.list,&iter,1,target,2,soft,3,hard,4,paging,5,cpu,6,read_limit,7,write_limit,8,string,-1); + yon_config_set(CGROUP_QUOTA(target),(void*)yon_char_new((char*)string)); + on_close_subwindow(self); + yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } +void on_edit_open(GtkWidget *self, main_window *widgets){ + GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + char *type; + char *target; + char *soft; + char *hard; + char *swap; + char *cpu; + char *read; + char *write; + int soft_size=-1; + int hard_size=-1; + int swap_size=-1; + gtk_tree_model_get(model,&iter,0,&type,1,&target,2,&soft,3,&hard,4,&swap,5,&cpu,6,&read,7,&write,-1); + if (soft&&strcmp(soft,"")!=0){ + soft_size = yon_get_size_request_from_letter(soft[strlen(soft)-1]); + soft[strlen(soft)-1]='\0'; + } + if (hard&&strcmp(hard,"")!=0){ + hard_size=yon_get_size_request_from_letter(hard[strlen(hard)-1]); + hard[strlen(hard)-1]='\0'; + } + if (swap&&strcmp(swap,"")!=0){ + swap_size=yon_get_size_request_from_letter(swap[strlen(swap)-1]); + swap[strlen(swap)-1]='\0'; + } -char* save_format_key(int index) { - return yon_char_unite("CGROUP_QUOTA[", main_config.quota_volume[index] , "]", NULL); -} - -char* save_format_value(int index) { - char* value = yon_char_new(""); - char split_simvol[2] = {0}; - split_simvol[0] = 0; - split_simvol[1] = 0; - if (main_config.soft_raw_limit[index]>=0) { - char* value_size = philos_format_cfg_str_size_memory("MemoryHigh=", main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]); - if (!strstr(value_size,"-")) { - value = yon_char_unite(value ,split_simvol, value_size, NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; + GtkBuilder *builder = gtk_builder_new_from_resource(glade_quota_path); + quota_window *window = g_malloc0(sizeof(quota_window)); + + window->Window = yon_gtk_builder_get_widget(builder,"QuotasWindow"); + + window->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel"); + window->BlockUiBox = yon_gtk_builder_get_widget(builder,"BlockUiBox"); + window->TargetTypeCombo = yon_gtk_builder_get_widget(builder,"TargetTypeCombo"); + window->AddQuotaTargetBox = yon_gtk_builder_get_widget(builder,"AddQuotaTargetBox"); + window->EditQuotaTargetBox = yon_gtk_builder_get_widget(builder,"EditQuotaTargetBox"); + window->TargetCombo = yon_gtk_builder_get_widget(builder,"TargetCombo"); + window->TargetLabel = yon_gtk_builder_get_widget(builder,"TargetLabel"); + + window->SoftRestrictionCheck = yon_gtk_builder_get_widget(builder,"SoftRestrictionCheck"); + window->SoftRestrictionSpin = yon_gtk_builder_get_widget(builder,"SoftRestrictionSpin"); + window->SoftRestrictionCombo = yon_gtk_builder_get_widget(builder,"SoftRestrictionCombo"); + + window->HardRestrictionCheck = yon_gtk_builder_get_widget(builder,"HardRestrictionCheck"); + window->HardRestrictionSpin = yon_gtk_builder_get_widget(builder,"HardRestrictionSpin"); + window->HardRestrictionCombo = yon_gtk_builder_get_widget(builder,"HardRestrictionCombo"); + + window->PagingLimitCheck = yon_gtk_builder_get_widget(builder,"PagingLimitCheck"); + window->PagingLimitSpin = yon_gtk_builder_get_widget(builder,"PagingLimitSpin"); + window->PagingLimitCombo = yon_gtk_builder_get_widget(builder,"PagingLimitCombo"); + + window->CpuLimitCheck = yon_gtk_builder_get_widget(builder,"CpuLimitCheck"); + window->CpuLimitSpin = yon_gtk_builder_get_widget(builder,"CpuLimitSpin"); + + window->DeviceLimitCombo = yon_gtk_builder_get_widget(builder,"DeviceLimitCombo"); + + window->DeviceLimitReadCheck = yon_gtk_builder_get_widget(builder,"DeviceLimitReadCheck"); + window->DeviceLimitReadSpin = yon_gtk_builder_get_widget(builder,"DeviceLimitReadSpin"); + window->DeviceLimitReadCombo = yon_gtk_builder_get_widget(builder,"DeviceLimitReadCombo"); + + window->DeviceLimitWriteCheck = yon_gtk_builder_get_widget(builder,"DeviceLimitWriteCheck"); + window->DeviceLimitWriteSpin = yon_gtk_builder_get_widget(builder,"DeviceLimitWriteSpin"); + window->DeviceLimitWriteCombo = yon_gtk_builder_get_widget(builder,"DeviceLimitWriteCombo"); + window->ApplyChangesButton = yon_gtk_builder_get_widget(builder,"ApplyChangesButton"); + window->ManualInputEntry = yon_gtk_builder_get_widget(builder,"ManualInputEntry"); + + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); + + window->devices = NULL; + + gtk_window_set_title(GTK_WINDOW(window->Window),TITLE_LABEL); + + gtk_widget_show(window->EditQuotaTargetBox); + gtk_widget_hide(window->AddQuotaTargetBox); + struct sysinfo inf; + sysinfo(&inf); + main_config.avaliable_ram=inf.totalram; + main_config.avaliable_swap=inf.totalswap; + main_config.cores = sysconf(_SC_NPROCESSORS_ONLN); + dictionary *windows = NULL; + yon_dictionary_add_or_create_if_exists_with_data(windows,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(windows,"widgets",widgets); + 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_quotas_edit),windows); + + g_signal_connect(G_OBJECT(window->TargetTypeCombo),"changed",G_CALLBACK(on_quota_target_type_changed),window); + + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->SoftRestrictionSpin)),main_config.avaliable_ram); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->HardRestrictionSpin)),main_config.avaliable_ram); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->PagingLimitSpin)),main_config.avaliable_swap); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->CpuLimitSpin)),main_config.cores*100); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->DeviceLimitReadSpin)),main_config.avaliable_ram); + gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->DeviceLimitWriteSpin)),main_config.avaliable_ram); + + g_signal_connect(G_OBJECT(window->SoftRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SoftRestrictionCombo); + g_signal_connect(G_OBJECT(window->SoftRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SoftRestrictionSpin); + g_signal_connect(G_OBJECT(window->HardRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->HardRestrictionCombo); + g_signal_connect(G_OBJECT(window->HardRestrictionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->HardRestrictionSpin); + g_signal_connect(G_OBJECT(window->PagingLimitCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->PagingLimitCombo); + g_signal_connect(G_OBJECT(window->PagingLimitCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->PagingLimitSpin); + g_signal_connect(G_OBJECT(window->CpuLimitCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->CpuLimitSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitReadCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitReadSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitWriteCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeviceLimitWriteSpin); + + g_signal_connect(G_OBJECT(window->DeviceLimitCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->DeviceLimitReadCheck); + g_signal_connect(G_OBJECT(window->DeviceLimitCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->DeviceLimitWriteCheck); + + yon_get_devices(window); + dictionary *dict; + gtk_widget_set_sensitive(window->BlockUiBox,1); + gtk_label_set_text(GTK_LABEL(window->TargetLabel),target); + int read_size=0; + config_str read_parsed = yon_char_parse(read,&read_size,"\n"); + int write_size=0; + config_str write_parsed = yon_char_parse(write,&write_size,"\n"); + for_dictionaries(dict,window->devices){ + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->DeviceLimitCombo),dict->key); + if (read_parsed) + for (int i=0; ikey,read_cur)){ + if(!dict->data) + dict->data = g_malloc0(sizeof(device_limits)); + ((device_limits*)dict->data)->read=read_limit; + } + } + else{ + char *read_limit = yon_char_new(read); + char *read_cur = yon_char_divide_search(read_limit," ",-1); + if (strstr(dict->key,read_cur)){ + if(!dict->data) + dict->data = g_malloc0(sizeof(device_limits)); + ((device_limits*)dict->data)->read=read_limit; + } + } + if (write_parsed) + for (int i=0; ikey,write_cur)){ + if(!dict->data) + dict->data = g_malloc0(sizeof(device_limits)); + ((device_limits*)dict->data)->write=write_limit; + } + } + else{ + char *write_limit = yon_char_new(write); + char *write_cur = yon_char_divide_search(write_limit," ",-1); + if (strstr(dict->key,write_cur)){ + if(!dict->data) + dict->data = g_malloc0(sizeof(device_limits)); + ((device_limits*)dict->data)->write=write_limit; + } + } } - free(value_size); - } - if (main_config.hard_raw_limit[index]>=0) { - char* value_size = philos_format_cfg_str_size_memory("MemoryMax=", main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]); - if (!strstr(value_size,"-")) { - value = yon_char_unite(value ,split_simvol, value_size, NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; + window->devices=window->devices->first; + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitCombo),0); + g_signal_connect(G_OBJECT(window->DeviceLimitCombo),"changed",G_CALLBACK(on_device_current_changed),window); + if (((device_limits*)window->devices->data)->read&&strcmp(((device_limits*)window->devices->data)->read,"")!=0){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitReadCheck),1); + char *rd = ((device_limits*)window->devices->data)->read; + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),yon_get_size_request_from_letter(rd[strlen(rd)-1])); + rd[strlen(rd)-1]='\0'; + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->DeviceLimitReadSpin),strtol(((device_limits*)window->devices->data)->read,NULL,10)); } - free(value_size); - } - if (main_config.swap[index]>=0) { - char* value_size = philos_format_cfg_str_size_memory("MemorySwapMax=", main_config.swap[index],main_config.swap_size[index]); - if (!strstr(value_size,"-")) { - value = yon_char_unite(value ,split_simvol, value_size, NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; + else ((device_limits*)window->devices->data)->read=NULL; + if (((device_limits*)window->devices->data)->write&&strcmp(((device_limits*)window->devices->data)->write,"")!=0){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitWriteCheck),1); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),yon_get_size_request_from_letter(((device_limits*)window->devices->data)->write[strlen(((device_limits*)window->devices->data)->write)-1])); + ((device_limits*)window->devices->data)->write[strlen(((device_limits*)window->devices->data)->write)-1]='\0'; + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->DeviceLimitWriteSpin),strtol(((device_limits*)window->devices->data)->write,NULL,10)); + } else ((device_limits*)window->devices->data)->write=NULL; + if (soft&&strcmp(soft,"")!=0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck),1); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->SoftRestrictionSpin),strtol(soft,NULL,10)); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->SoftRestrictionCombo),soft_size); } - free(value_size); - } - if (main_config.cpu_limit[index]>=0) { - value = yon_char_unite(value ,split_simvol,"CPUQuota=", yon_char_from_int(main_config.cpu_limit[index]), "%", NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - - char* value_read = add_io_str_format_ubconfig("IOReadBandwidthMax", main_config.i_o_limit_read, main_config.i_o_limit_read_size, main_config.disk_read, index); - char* value_write = add_io_str_format_ubconfig("IOWriteBandwidthMax", main_config.i_o_limit_write, main_config.i_o_limit_write_size, main_config.disk_write, index); - if (strlen(value_read) > 5){ - if (strlen(value) > 5) { - value = yon_char_unite(value, ",", value_read, NULL); + if (hard&&strcmp(hard,"")!=0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck),1); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin),strtol(hard,NULL,10)); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->HardRestrictionCombo),hard_size); } - else { - value = yon_char_unite(value_read, NULL); + if (hard&&strcmp(hard,"")!=0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck),1); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin),strtol(hard,NULL,10)); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->HardRestrictionCombo),hard_size); } - - } - if (strlen(value_write)> 5) { - if (strlen(value) > 5) { - value = yon_char_unite(value, ",", value_write, NULL); + if (swap&&strcmp(swap,"")!=0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck),1); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->PagingLimitSpin),strtol(swap,NULL,10)); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PagingLimitCombo),swap_size); } - else { - value = yon_char_unite(value_write, NULL); + for (int i=0; iTargetCombo),main_config.users[i]); } + + + + g_signal_connect(G_OBJECT(window->TargetCombo),"changed",G_CALLBACK(on_target_check_chosen),window); + g_signal_connect(G_OBJECT(window->SoftRestrictionSpin),"change-value",G_CALLBACK(on_check_maximum),window->SoftRestrictionCombo); + g_signal_connect(G_OBJECT(window->SoftRestrictionCombo),"changed",G_CALLBACK(on_check_maximum),window->SoftRestrictionSpin); + g_signal_connect(G_OBJECT(window->HardRestrictionSpin),"change-value",G_CALLBACK(on_check_maximum),window->HardRestrictionCombo); + g_signal_connect(G_OBJECT(window->HardRestrictionCombo),"changed",G_CALLBACK(on_check_maximum),window->HardRestrictionSpin); + g_signal_connect(G_OBJECT(window->PagingLimitSpin),"change-value",G_CALLBACK(on_check_maximum_cpu),window->PagingLimitCombo); + g_signal_connect(G_OBJECT(window->PagingLimitCombo),"changed",G_CALLBACK(on_check_maximum_cpu),window->PagingLimitSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitReadSpin),"change-value",G_CALLBACK(on_check_maximum),window->DeviceLimitReadCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCombo),"changed",G_CALLBACK(on_check_maximum),window->DeviceLimitReadSpin); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteSpin),"change-value",G_CALLBACK(on_check_maximum),window->DeviceLimitWriteCombo); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCombo),"changed",G_CALLBACK(on_check_maximum),window->DeviceLimitWriteSpin); + + g_signal_connect(G_OBJECT(window->SoftRestrictionSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->SoftRestrictionCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->HardRestrictionSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->HardRestrictionCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->PagingLimitSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->PagingLimitCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->CpuLimitSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitReadSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteSpin),"output",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCombo),"changed",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->SoftRestrictionCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->HardRestrictionCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->PagingLimitCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->CpuLimitCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitReadCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + g_signal_connect(G_OBJECT(window->DeviceLimitWriteCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window); + gtk_widget_show(window->Window); } - return value; } -char* add_io_str_format_ubconfig(char* key, int** i_o_limit, int** i_o_limit_size, char*** disk, int index) { - char split_simvol[2] = {0}; - char* cmd_io = ""; - if (i_o_limit== NULL) {return NULL;} - if (i_o_limit_size[index] == NULL) {return NULL;} - if (i_o_limit[index] == NULL) {return NULL;} - int len_array = 0; - cmd_io = format_io_limit_in_tree_view(disk, i_o_limit, i_o_limit_size, index); - if (strlen(cmd_io) > 5) { - return yon_char_unite(key, "=", cmd_io, NULL); - } - else { - return yon_char_new(""); + +void on_dispatcher_update(GtkWidget *self,main_window *widgets){ + int interval = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->DispatcherUpdateSpin)); + if (interval>0) { + char* str_second = yon_char_from_int(interval); + char *command = yon_char_unite(get_dispatcher_command," -d ",str_second,NULL); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->DispatcherUpdateCheck))) command = yon_char_append(command," -n 1"); + yon_terminal_integrated_start(widgets->DispatcherTerminal, command, NULL, NULL); + free(str_second); + GValue *val = g_malloc0(sizeof(GValue)); + g_object_get_property(G_OBJECT(widgets->DispatcherUpdateSpin),"has-focus",val); + g_value_set_boolean(val,0); + g_object_set_property(G_OBJECT(widgets->DispatcherUpdateSpin),"has-focus",val); + g_free(val); } - return cmd_io; +} + +void on_processes_update(GtkWidget *self,main_window *widgets){ + int show_all = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->ShowAllCheck)); + int show_core = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->ShowCoreCheck)); + char *command = get_processes_tree_command; + if (show_all) yon_char_append(command, " -k"); + if (show_core) yon_char_append(command, " -l"); + yon_terminal_integrated_start(widgets->ProcessesTerminal, command, NULL, NULL); +} + +void on_tab_changed(GtkWidget *self, GtkWidget *page, int page_num, main_window *widgets){ } +void on_info_target_type_switched(GtkWidget *self, main_window *widgets){ + int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->TargetCombo)); + int size=0; + config_str str = NULL; + switch (active){ + case 0: + str = main_config.users; + size = main_config.users_size; + break; + case 1: + str = main_config.processes; + size = main_config.processes_size; + break; + case 2: + str = main_config.slices; + size = main_config.slices_size; + break; + } + for (int i=0; iTargetCombo),str[i]); + } +} -int check_save() { - if (main_config.flag_set_data == 1 || main_config.flag_save>0) { - return 0; - } - else if (main_config.flag_set_data == 0 || main_config.flag_save<=0) { - return 1; - } - return 0; +// standard functions + +void config_init(){ + main_config.always_open_documentation=0; + main_config.win_height=0; + main_config.win_width=0; + main_config.win_pos_x=0; + main_config.win_pos_y=0; + main_config.socket_id=-1; + main_config.save_socket_id=-1; + main_config.load_socket_id=-1; + main_config.lock_help=0; + main_config.lock_help=0; + main_config.lock_load_global=0; + main_config.lock_save_global=0; + main_config.lock_save_local=0; + main_config.avaliable_ram=0; } -int template_format_str_save(char* source_set_cmd, char* source_remove_cmd) { - char* cmd_remove = template_format_str_remove_save(source_remove_cmd); - char* cmd_set = template_format_str_set_save(source_set_cmd); - if (cmd_set != NULL && cmd_remove != NULL) { - philos_config_save(yon_char_unite(cmd_set, "; " , cmd_remove, NULL)); - } - else if (cmd_remove != NULL) { - philos_config_save(cmd_remove); - } - else if (cmd_set != NULL) { - philos_config_save(cmd_set); - } - else { - return 0; - } - if (cmd_remove != NULL) { - free(cmd_remove); - } - if (cmd_set != NULL) { - free(cmd_set); - } - main_config.flag_set_data = 0; - return 1; + +main_window *setup_window(){ + /* Widgets getting | Получение виджетов */ + main_window *widgets = malloc(sizeof(main_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); + widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + widgets->HatLabel = yon_gtk_builder_get_widget(builder,"headerTopic"); + widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox"); + + widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"HeadOverlay"); + widgets->HeadImage = yon_gtk_builder_get_widget(builder,"HeadBackgroundImage"); + widgets->HeadBox = yon_gtk_builder_get_widget(builder,"HeaderBox"); + widgets->HeadTitleLabel = yon_gtk_builder_get_widget(builder,"HeaderTitleLabel"); + widgets->HeadInfoLabel = yon_gtk_builder_get_widget(builder,"HeaderInfoLabel"); -} + widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox"); + widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon"); + widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel"); -char* template_format_str_set_save(char* source_set_cmd) { - char* cmd = yon_char_new(""); - for (size_t index = 0; index < main_config.size_tree_view; index++) { - char* key = save_format_key(index); - char* value = save_format_value(index); - if (strlen(key)>4 && strlen(value) > 4) { - cmd = yon_char_unite(cmd, " " , key, "=\"" , value, "\" ", NULL); - } - if (key != NULL) { - free(key); - } - if (value != NULL) { - free(value); - } - } - if (strlen(cmd) > 8 && check_save()== 0) { - cmd = yon_char_unite(source_set_cmd, " " ,cmd, NULL); - return cmd; - } - free(cmd); - return NULL; + widgets->SaveLabel = yon_gtk_builder_get_widget(builder,"headerSaveConfigLabel"); + widgets->SaveMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalLocalConfigurationMenuItem"); + widgets->SaveGlobalMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalConfigurationMenuItem"); + widgets->SaveLocalMenuItem = yon_gtk_builder_get_widget(builder,"SaveLocalConfigurationMenuItem"); + widgets->RightBox = yon_gtk_builder_get_widget(builder,"HeaderRightBox"); + + widgets->LoadLabel = yon_gtk_builder_get_widget(builder,"headerLoadConfigLabel"); + widgets->LoadGlobalMenuItem = yon_gtk_builder_get_widget(builder,"LoadGlobalConfigurationMenuItem"); + widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem"); + widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox"); + + widgets->FiltersButton = yon_gtk_builder_get_widget(builder,"FiltersButton"); + widgets->InformationButton = yon_gtk_builder_get_widget(builder,"InformationButton"); + widgets->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); + widgets->EditButton = yon_gtk_builder_get_widget(builder,"EditButton"); + widgets->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); + + widgets->MainTree = yon_gtk_builder_get_widget(builder,"QuotasTreeView"); + widgets->MainNotebook = yon_gtk_builder_get_widget(builder,"MainNotebook"); + + widgets->DispatcherUpdateCheck = yon_gtk_builder_get_widget(builder,"DispatcherUpdateCheck"); + widgets->DispatcherUpdateSpin = yon_gtk_builder_get_widget(builder,"DispatcherUpdateSpin"); + widgets->DispatcherUpdateButton = yon_gtk_builder_get_widget(builder,"DispatcherUpdateButton"); + widgets->DispatcherTerminal = yon_gtk_builder_get_widget(builder,"DispatcherTerminal"); + + widgets->ShowAllCheck = yon_gtk_builder_get_widget(builder,"ShowAllCheck"); + widgets->ShowCoreCheck = yon_gtk_builder_get_widget(builder,"ShowCoreCheck"); + widgets->ProcessesUpdateButton = yon_gtk_builder_get_widget(builder,"ProcessesUpdateButton"); + widgets->ProcessesTerminal = yon_gtk_builder_get_widget(builder,"ProcessesTerminal"); + + widgets->TargetTypeCombo = yon_gtk_builder_get_widget(builder,"TargetTypeCombo"); + widgets->TargetCombo = yon_gtk_builder_get_widget(builder,"TargetCombo"); + widgets->InformationUpdateButton = yon_gtk_builder_get_widget(builder,"InformationUpdateButton"); + widgets->InformationTerminal = yon_gtk_builder_get_widget(builder,"InformationTerminal"); + + main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore")); + + widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL); + widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL); -} + gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL); + + GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem); + gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem); -char* template_format_str_remove_save(char* source_remove_cmd) { - char* cmd = yon_char_new(source_remove_cmd); - if (main_config.size_array_del_line == 0) { - return NULL; - } - for (size_t index = 0; index < main_config.size_array_del_line; index++) { - char* key = main_config.array_del_line[index]; - if (key != NULL) { - cmd = yon_char_unite(cmd, " " , key, " ", NULL); - } + if (main_config.lock_load_global == 1){ + gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); } - if (strlen(cmd) > strlen(source_remove_cmd) && check_save()== 0) { - return cmd; + if (main_config.lock_save_global == 1){ + gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0); + gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } - free(cmd); - return NULL; -} - -void main_fill_tree_view_after_remove() { - for (int index= 0; index < main_config.size_tree_view; index++) { - GtkTreeIter iter; - gtk_list_store_append(main_config.list,&iter); - char* str_io_read = format_io_limit_in_tree_view(main_config.disk_read, main_config.i_o_limit_read, main_config.i_o_limit_read_size, index); - char* str_io_write = format_io_limit_in_tree_view(main_config.disk_write, main_config.i_o_limit_write, main_config.i_o_limit_write_size, index); - gtk_list_store_set(main_config.list,&iter, - 0,main_config.type_quota[index], - 1,main_config.quota_volume[index], - 2,philos_format_cfg_str_size_memory("",main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]), - 3,philos_format_cfg_str_size_memory("",main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]), - 4,philos_format_cfg_str_size_memory("",main_config.swap[index],main_config.swap_size[index]), - 5,philos_format_cfg_str_size_memory("",main_config.cpu_limit[index], -1), - 6,str_io_read, - 7,str_io_write,-1); + if (main_config.lock_save_local == 1){ + gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0); + gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } -} - -void main_localization(main_window *widgets) { - /* Localisation | Локализация */ - gtk_label_set_text(GTK_LABEL(widgets->HatLabel),TITLE_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->SaveLabel),SAVE_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->SaveMenuItem),SAVE_CONFIGURATION_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->SaveGlobalMenuItem),SAVE_GLOBAL_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->SaveLocalMenuItem),SAVE_LOCAL_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->LoadLabel),LOAD_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->LoadGlobalMenuItem),LOAD_GLOBAL_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->LoadLocalMenuItem),LOAD_LOCAL_LABEL); + /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ + // yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->DocumentationMenuItem),DOCUMENTATION_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->AboutMenuItem),ABOUT_LABEL); + /* Signal connection | Присоединение сигналов */ + g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); + g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL); + g_signal_connect(G_OBJECT(widgets->FiltersButton),"clicked",G_CALLBACK(on_filters_opened),widgets); + g_signal_connect(G_OBJECT(widgets->InformationButton),"clicked",G_CALLBACK(on_information),widgets); + g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove),widgets); + g_signal_connect(G_OBJECT(widgets->EditButton),"clicked",G_CALLBACK(on_edit_open),widgets); + g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_open),widgets); + g_signal_connect(G_OBJECT(widgets->MainNotebook),"switch-page",G_CALLBACK(on_tab_changed),widgets); + g_signal_connect(G_OBJECT(widgets->DispatcherUpdateCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->DispatcherUpdateSpin); + g_signal_connect(G_OBJECT(widgets->DispatcherUpdateCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),widgets->DispatcherUpdateButton); + g_signal_connect(G_OBJECT(widgets->DispatcherUpdateCheck),"toggled",G_CALLBACK(on_dispatcher_update),widgets); + g_signal_connect(G_OBJECT(widgets->DispatcherUpdateSpin),"output",G_CALLBACK(on_dispatcher_update),widgets); + g_signal_connect(G_OBJECT(widgets->DispatcherUpdateButton),"clicked",G_CALLBACK(on_dispatcher_update),widgets); + g_signal_connect(G_OBJECT(widgets->ShowAllCheck),"toggled",G_CALLBACK(on_processes_update),widgets); + g_signal_connect(G_OBJECT(widgets->ShowCoreCheck),"toggled",G_CALLBACK(on_processes_update),widgets); + g_signal_connect(G_OBJECT(widgets->TargetTypeCombo),"changed",G_CALLBACK(on_info_target_type_switched),widgets); + g_signal_connect(G_OBJECT(widgets->TargetCombo),"changed",G_CALLBACK(on_information_chosen_changed),widgets); + g_signal_connect(G_OBJECT(widgets->ProcessesUpdateButton),"clicked",G_CALLBACK(on_processes_update),widgets); + g_signal_connect(G_OBJECT(widgets->InformationUpdateButton),"clicked",G_CALLBACK(on_information_update),widgets); + + g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),NULL); + g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_save_global),NULL); + g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_save_local),NULL); + g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_load_global),NULL); + g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_load_local),NULL); + on_dispatcher_update(NULL,widgets); + on_processes_update(NULL,widgets); + yon_window_config_add_listener(widgets->DispatcherUpdateCheck,"DispatcherAutoupdate","active",YON_TYPE_BOOLEAN); + yon_window_config_add_listener(widgets->ShowAllCheck,"ProcessShowAll","active",YON_TYPE_BOOLEAN); + yon_window_config_add_listener(widgets->ShowCoreCheck,"ProcessShowCore","active",YON_TYPE_BOOLEAN); + yon_window_config_add_listener(widgets->DispatcherUpdateSpin,"DispatcherUpdateDelay","value",YON_TYPE_DOUBLE); + GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree)); + for (int i=0;iTargetTypeCombo,widgets); + gtk_widget_show(widgets->Window); + return widgets; } -void yon_load_proceed(char *command){ - if (yon_config_load_register(command)) - yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - else - yon_ubl_status_box_render(LOAD_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); -} int main(int argc, char *argv[]){ local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); - int size_array_size_pow = 0; - array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_KB); - array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_MB); - array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_GB); - array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_TB); int option_index=0; int show_help=0; - { + int debug_mode=0; + { struct option long_options[] = { {"help", 0, 0, 'h'}, {"version", 0, 0, 'V'}, @@ -1331,42 +1272,24 @@ int main(int argc, char *argv[]){ main_config.lock_save_local=1; } gtk_init(&argc,&argv); - add_get_systemd_cgls(CMD_GET_SLICE_SERVICE); - gtk_init(&argc,&argv); - device_disk_parsed(); - main_window *widgets = setup_window(); - main_update_information(); - filters_init_flag(); - main_localization(widgets); - tree_view_select(NULL, widgets); + + main_window *widgets = setup_window(); yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); - if (getuid()!=0) { - load_system_cfg(); + if (getuid()!=0) yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - } - else { - yon_ubl_status_box_render(LOAD_LOCAL_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - if (main_config.lock_load_global == 0) { - load_global_cfg(); - } - if (main_config.lock_save_local == 0) { - load_system_cfg(); - } - } + else + yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id); yon_window_config_setup(GTK_WINDOW(widgets->Window)); yon_window_config_load(config_path); + on_config_load_local(); 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(), GTK_STYLE_PROVIDER(css), -1); - - event_all(widgets); - main_event(widgets); gtk_main(); - philos_free_string_array(&array_size_pow, size_array_size_pow); } \ No newline at end of file diff --git a/source/ubl-settings-resourcequota.h b/source/ubl-settings-resourcequota.h index ab3726e..446539c 100644 --- a/source/ubl-settings-resourcequota.h +++ b/source/ubl-settings-resourcequota.h @@ -10,11 +10,7 @@ #include #include #include "ubl-cmake.h" -#include "view_add.h" -#include "filters.h" -#include "view_edit.h" -#include "my_device.h" -#include "philos_utils.h" +#include "sys/sysinfo.h" #ifdef WEBKIT_FOUND #include @@ -26,29 +22,35 @@ #define _(String) gettext(String) #define glade_path "/com/ublinux/ui/ubl-settings-resourcequota.glade" +#define glade_filters_path "/com/ublinux/ui/ubl-settings-resourcequota-filters.glade" +#define glade_quota_path "/com/ublinux/ui/ubl-settings-resourcequota-quota.glade" #define banner_path "/com/ublinux/images/ubl-settings-resourcequota-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-resourcequota.css" #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-resourcequota" -#define CMD_LOAD_GLOBAL "ubconfig --default --source global get security CGROUP_QUOTA[*]" -#define CMD_LOAD_SYSTEM "ubconfig --default --source system get security CGROUP_QUOTA[*]" -#define CMD_SAVE_GLOBAL "ubconfig --default --target global set security" -#define CMD_SAVE_SYSTEM "ubconfig --default --target system set security" -#define CMD_ALL_SAVE "ubconfig set security " -#define CMD_ALL_REMOVE "ubconfig remove security " -#define CMD_REMOVE_GLOBAL "ubconfig --target global --noexecute remove security " -#define CMD_REMOVE_SYSTEM "ubconfig --target system remove security " -#define CMD_GET_SLICE_SERVICE "systemd-cgls --no-page" +#define load_global_command "ubconfig --default --source global get security CGROUP_QUOTA[*]" +#define load_local_command "ubconfig --default --source system get security CGROUP_QUOTA[*]" +#define save_global_command "ubconfig --default --target global set security" +#define save_local_command "ubconfig --default --target system set security" +#define save_command "ubconfig set security " +#define remove_command "ubconfig remove security " +#define remove_global_command "ubconfig --target global --noexecute remove security " +#define remove_local_command "ubconfig --target system remove security " +#define get_devices_command "findmnt -lo source,target,fstype,label,size -t ext4 |grep -vE \"zram|\\]|\\[|SOURCE\"" +#define get_processes_tree_command "clear; systemd-cgls --no-page" +#define get_dispatcher_command "systemd-cgtop" +#define get_information_command "systemctl status " + +#define CGROUP_QUOTA(name) yon_char_unite("CGROUP_QUOTA[",name,"]",NULL) typedef char *string; string version_application; -static char *local; +char *local; -typedef struct -{ +typedef struct { int always_open_documentation; int win_pos_x; int win_pos_y; @@ -58,79 +60,29 @@ typedef struct int socket_id; int load_socket_id; int save_socket_id; - + int lock_help; int lock_save_local; int lock_save_global; int lock_load_global; - GtkListStore *list; - config_str load_system_value; - config_str load_global_value; - config_str cfg_gui_value; - - config_str load_system_key; - config_str load_global_key; - - render_data status_render; - config_str type_quota; - config_str quota_volume; - int* soft_raw_limit; - int* hard_raw_limit; - int* swap; - int* cpu_limit; - int** i_o_limit_read; - int** i_o_limit_write; - config_str* disk_read; - config_str* disk_write; - config_str array_del_line; - int size_array_del_line; - - int *type_quota_size; - int *quota_volume_size; - int *soft_raw_limit_size; - int *hard_raw_limit_size; - int *swap_size; - int *cpu_limit_size; - int** i_o_limit_read_size; - int** i_o_limit_write_size; - int size_tree_view; - - int flag_set_data; - int flag_save; - int flag_load; // flag_load = 0 -> system // flag_load = 1 -> global + long avaliable_ram; + long avaliable_swap; + long cores; + + config_str users; + int users_size; + config_str processes; + int processes_size; + config_str slices; + int slices_size; + + char *last_info; } config; -typedef struct -{ +typedef struct { + //Standard GtkWidget *Window; - - GtkTreeViewColumn *tvc0; - GtkTreeViewColumn *tvc1; - GtkTreeViewColumn *tvc2; - GtkTreeViewColumn *tvc3; - GtkTreeViewColumn *tvc4; - GtkTreeViewColumn *tvc5; - GtkTreeViewColumn *tvc6; - GtkTreeViewColumn *tvc7; - GtkWidget *scrollDispatcher; - GtkWidget *btnDelQuotas; - GtkWidget *cbtMainInfoLevel2; - GtkWidget *cbtMainInfo; - GtkWidget *vteProcesses; - GtkWidget *vteInformation; - GtkWidget *btnMainShowCoreStream; - GtkWidget *btnMainShowAllEmpty; - GtkWidget *vteDispatcher; - GtkWidget *spinUpdateDispatcher; - GtkWidget *btnUpdateDispatcher; - GtkWidget *treeViewMain; - GtkWidget *btnSaveCfg; - GtkWidget *btnShowFilters; - GtkWidget *notebookMain; - GtkWidget *btnEdit; - GtkWidget *btnInfo; - GtkWidget *btnAdd; GtkWidget *HatLabel; GtkWidget *PlugBox; @@ -157,10 +109,33 @@ typedef struct GtkWidget *DocumentationMenuItem; GtkWidget *AboutMenuItem; + // Custom + GtkWidget *FiltersButton; + GtkWidget *InformationButton; + GtkWidget *RemoveButton; + GtkWidget *EditButton; + GtkWidget *AddButton; + GtkWidget *MainTree; + GtkWidget *MainNotebook; + + GtkWidget *DispatcherUpdateCheck; + GtkWidget *DispatcherUpdateSpin; + GtkWidget *DispatcherUpdateButton; + GtkWidget *DispatcherTerminal; + + GtkWidget *ShowCoreCheck; + GtkWidget *ShowAllCheck; + GtkWidget *ProcessesUpdateButton; + GtkWidget *ProcessesTerminal; + + GtkWidget *TargetTypeCombo; + GtkWidget *TargetCombo; + GtkWidget *InformationUpdateButton; + GtkWidget *InformationTerminal; } main_window; -typedef struct -{ + +typedef struct { GtkWidget *Window; GtkWidget *HatText; @@ -170,51 +145,61 @@ typedef struct GtkWidget *CloseButton; GtkWidget *AcceptButton; - } documentation_confirmation_window; -main_window *setup_window(); -void main_update_processes(); -void config_init(); -void event_all(main_window *widgets); -void main_event(main_window *widgets); -void info_show(GtkWidget *self); -void main_localization(main_window *widgets); -void main_visible_columns(); -void wrapper_filters_show(GtkWidget *self); -void main_update_dispatcher(); -void main_update_information(); -void main_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size); -void main_cbx_2_event(); -void tree_view_select(GtkWidget *self, main_window *widgets); -void tree_view_add(int index); -int tree_view_edit(); -void main_add_btn_save(); -void wrapper_add_show(GtkWidget *self); -void main_edit_btn_save(); -void tree_view_del_line(); -void main_fill_tree_view_after_remove(); -void load_system_cfg(); -void load_global_cfg(); -void template_load_cfg(char *cmd); -int template_format_str_save(char* source_set_cmd, char* source_remove_cmd); -void str_split_value(char *values, int index); -void set_size_memory_integer_device(char* str_find, int** array_data, int index); -void set_size_memory_integer(char* str_find, int** array_data, int index); -void set_size_memory_integer_char(char* str_find, char*** array_data, int index); -void set_pow_size_memory(char* str_find, int** array_size, int index); -void str_split_key(char *source_value, int index); -void fill_tree_view(int start, int size, int flag_gui_add); -void clear_array(); -void init_cfg_array(int index); -void wrapper_template_save(char *check_flag); -void wrapper_system_save(); -void wrapper_global_save(); -void wrapper_all_save(); -char* template_format_str_remove_save(char* source_remove_cmd); -char* template_format_str_set_save(char* source_set_cmd); -char* save_format_key(int index); -void get_param_io_limit(char** arr_values, int index_start, int size, int index_n1, char *key_find); -char* add_io_str_format_ubconfig(char* key, int** i_o_limit, int** i_o_limit_size, char*** disk_read, int index); -char* format_io_limit_in_tree_view(config_str* disk, int** i_o_limit, int** i_o_limit_size, int index); -gboolean select_page_notebook(GtkNotebook* self, gboolean object, gpointer user_data); \ No newline at end of file +typedef struct { + GtkWidget *Window; + + GtkWidget *TitleLabel; + GtkWidget *BlockUiBox; + GtkWidget *EditQuotaTargetBox; + GtkWidget *AddQuotaTargetBox; + GtkWidget *TargetTypeCombo; + GtkWidget *TargetCombo; + GtkWidget *TargetLabel; + GtkWidget *SoftRestrictionCheck; + GtkWidget *SoftRestrictionSpin; + GtkWidget *SoftRestrictionCombo; + GtkWidget *HardRestrictionCheck; + GtkWidget *HardRestrictionSpin; + GtkWidget *HardRestrictionCombo; + GtkWidget *PagingLimitCheck; + GtkWidget *PagingLimitSpin; + GtkWidget *PagingLimitCombo; + GtkWidget *CpuLimitCheck; + GtkWidget *CpuLimitSpin; + GtkWidget *DeviceLimitCombo; + GtkWidget *DeviceLimitReadCheck; + GtkWidget *DeviceLimitReadSpin; + GtkWidget *DeviceLimitReadCombo; + GtkWidget *DeviceLimitWriteCheck; + GtkWidget *DeviceLimitWriteSpin; + GtkWidget *DeviceLimitWriteCombo; + GtkWidget *ApplyChangesButton; + GtkWidget *ManualInputEntry; + GtkWidget *CancelButton; + GtkWidget *SaveButton; + dictionary *devices; +} quota_window; + +typedef struct { + GtkWidget *Window; + + GtkWidget *QuotaTypeCheck; + GtkWidget *QuotaTargetCheck; + GtkWidget *SoftRamLimitCheck; + GtkWidget *HardRamLimitCheck; + GtkWidget *PagingLimitCheck; + GtkWidget *CpuLimitCheck; + GtkWidget *ReadLimitCheck; + GtkWidget *WriteLimitCheck; + GtkWidget *CancelButton; + GtkWidget *AcceptButton; +} filters_window; + +typedef struct { + char *read; + char *write; +} device_limits; + +main_window *setup_window(); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 13a9fa0..4d44887 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -1,9 +1,10 @@ #define VERSION_LABEL yon_char_unite(_("Version:")," ",version_application,"\n",NULL) -#define HELP_LABEL yon_char_unite(_("ubl-settings-resourcequota version:")," ", version_application,"\n",_("CPU and RAM quotas settings"),"\n",_("Usage:"), " ubl-settings-resourcequota ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n\t--lock-save\t\t\t",_("Lock configuration saving"),"\n\t--lock-save-local\t\t",_("Lock local configration saving"),"\n\t--lock-save-global\t\t",_("Lock global configration saving"),"\n\t--lock-load-global\t\t",_("Lock global configration loading"),"\n",NULL) +#define HELP_LABEL yon_char_unite(_("ubl-settings-resourcequota version:")," ", version_application,"\n",_("CPU and RAM quotas"),"\n",_("Usage:"), " ubl-settings-resourcequota ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n\t--lock-save\t\t\t",_("Lock configuration saving"),"\n\t--lock-save-local\t\t",_("Lock local configration saving"),"\n\t--lock-save-global\t\t",_("Lock global configration saving"),"\n\t--lock-load-global\t\t",_("Lock global configration loading"),"\n",NULL) #define ROOT_WARNING_LABEL _("Warning! Application was launched without root - root-dependent actions are locked") #define TITLE_LABEL _("CPU and RAM quotas") -#define TITLE_INFO_LABEL _("System resource quota settings management") +#define TITLE_INFO_LABEL _("Configuring CPU and RAM quota settings for groups and users of the system") +#define SUCCESS_LABEL _("Operation succeeded") #define ABOUT_LABEL _("About") #define DOCUMENTATION_LABEL _("Documentation") #define SAVE_LOCAL_LABEL _("Save to local configuration") @@ -13,14 +14,15 @@ #define LOAD_LOCAL_LABEL _("Load local configuration") #define LOAD_GLOBAL_LABEL _("Load global configuration") #define LOAD_LABEL _("Load") +#define LOAD_LABEL _("Load") #define CANCEL_LABEL _("Cancel") #define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?") -#define HELP_INFO_LABEL _("You will be redirected to documentation website where documentation is\ntranslated and supported by community.") +#define HELP_INFO_LABEL _("You will be redirected to documentation website, where documentation is\ntranslated and supported by community.") #define HELP_ALWAYS_OPEN_LABEL _("Always redirect to online documentation") #define OPEN_HELP_LABEL _("Open documentation") -#define PROJECT_HOME_LABEL _("Project Home Page") +#define PROJECT_HOME_LABEL _("Project homepage") #define NOTHING_CHOSEN_LABEL _("Nothing were chosen") #define STR_USER _("User") @@ -33,16 +35,69 @@ #define STR_GB _("Gb") #define STR_TB _("Tb") -#define GLOBAL_LOAD_SUCCESS _("Global configuration loading succseeded.") -#define LOCAL_LOAD_SUCCESS _("Local configuration loading succseeded.") +#define GLOBAL_LOAD_SUCCESS _("Global configuration loading succeeded.") +#define LOCAL_LOAD_SUCCESS _("Local configuration loading succeeded.") -#define GLOBAL_LOCAL_SAVE_SUCCESS _("Local and global configuration saving succseeded.") -#define GLOBAL_SAVE_SUCCESS _("Global configuration saving succseeded.") -#define LOCAL_SAVE_SUCCESS _("Local configuration saving succseeded.") +#define GLOBAL_LOCAL_SAVE_SUCCESS _("Local and global configuration saving succeeded.") +#define GLOBAL_SAVE_SUCCESS _("Global configuration saving succeeded.") +#define LOCAL_SAVE_SUCCESS _("Local configuration saving succeeded.") #define STR_DEL_TABLE _("Quota deleted") #define STR_NO_SELECT_TABLE _("Quota deleted") #define STR_QUOTAS_ADD _("Quota deleted") #define ALL_SAVE_SUCCESS _("Save configuration") #define MESS_NOTHING_SAVE _("Nothing to save!") -#define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succseeded.") -#define LOAD_FAILED_LABEL _("Config loading failed") \ No newline at end of file +#define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succeeded.") +#define LOAD_FAILED_LABEL _("Config loading failed") + +#define LIST_QUOTAS_LABEL _("Quotas list") +#define DISPATCHER_LABEL _("Dispatcher") +#define PROCESSES_LABEL _("Processes") +#define INFORMATION_LABEL _("Information") + +#define QUOTA_TYPE_TAB_LABEL _("Quota type") +#define QUOTA_OBJECT_TAB_LABEL _("Quota\ntarget") +#define SOFT_LIMIT_TAB_LABEL _("Soft RAM limit,\n(volume)") +#define HARD_LIMIT_TAB_LABEL _("Hard RAM limit,\n(volume)") +#define SWAP_LIMIT_TAB_LABEL _("Swap file\nlimit\n(volume)") +#define CPU_LIMIT_TAB_LABEL _("CPU limit\n(%)") +#define READ_LIMIT_TAB_LABEL _("I/O\nlimit\n(read)") +#define WRITE_LIMIT_TAB_LABEL _("I/O\nlimit\n(write)") + +#define QUOTA_OBJECT_LABEL _("Quota target") +#define SOFT_LIMIT_LABEL _("Soft RAM limit, n(volume)") +#define HARD_LIMIT_LABEL _("Hard RAM limit, (volume)") +#define SWAP_LIMIT_LABEL _("Swap file limit (volume)") +#define CPU_LIMIT_LABEL _("CPU limit (%)") +#define READ_LIMIT_LABEL _("I/O limit (read)") +#define WRITE_LIMIT_LABEL _("I/O limit (write)") +#define ACCEPT_LABEL _("Accept") + +#define FILTERS_LABEL _("Filters") +#define INFORMATION_LABEL _("Information") +#define REMOVE_LABEL _("Remove") +#define EDIT_LABEL _("Edit") +#define ADD_LABEL _("Add") + +#define UPDATE_DELAY_LABEL _("Update every") +#define SECONDS_LABEL _("seconds") +#define UPDATE_LABEL _("Update") + +#define ALL_GROUPS_LABEL _("All groups including empty") +#define CORE_STREAMS_LABEL _("Core streams") + +#define VIEW_PROPERTIES_LABEL _("View properties for") + +#define ADDING_LABEL _("CPU and RAM quotas - Adding") +#define EDITING_LABEL _("CPU and RAM quotas - Editing") +#define QUOTA_OBJ_LABEL _("Quota object:") +#define RAM_LABEL _("RAM limit") +#define SOFT_RESTRICTION_LABEL _("Soft restriction") +#define HARD_RESTRICTION_LABEL _("Hard restriction") +#define SWAP_LABEL _("Paging file limit") +#define CPU_LABEL _("CPU limit") +#define DEVICES_LABEL _("Input/Output limit of block devices") +#define DEVICE_LABEL _("Device:") +#define READ_LABEL _("Read") +#define WRITE_LABEL _("Write") +#define APPLY_CHANGES_LABEL _("Apply changes of operations limit") +#define MANUAL_INPUT_LABEL _("Manual input (for advanced users)") \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c index 4dacefb..49fc4f8 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -540,15 +540,16 @@ char *yon_char_divide(char *source, int dividepos) * Считает количество символов [find] в строке [source] */ int yon_char_find_count(char *source, char *find){ - char *working_string=source; + char *working_string=yon_char_new(source); + int i=0; int size=0; - while ((working_string = strstr(working_string, find))) { - if (working_string) { - working_string++; - size++; - } + int pos=0; + config_str rtn = yon_char_parse(working_string,&size,"\n"); + for (int j=0;j= 10; i++) + { + convert_check = convert_check / 10; + } + char *ch = g_malloc0(i * sizeof(char) + 1); + sprintf(ch, "%ld", int_to_convert); + return ch; +} + /**yon_char_replace(char *source, char *find, char*replace) * [EN] * @@ -638,15 +658,13 @@ char *yon_char_replace(char *source, char *find, char*replace){ */ char **yon_char_parse(char *parameters, int *size, char *divider){ char **string=NULL; - if (!strstr(parameters, divider)) { - return NULL; - } int i=1; string=malloc(sizeof(char*)); char *paramline=yon_char_new(parameters); char *param; + if (!strstr(parameters,divider)) return NULL; while ((param=yon_char_divide_search(paramline,divider,1))){ - if (strcmp(param,paramline)==0) break; + if (strcmp(param,paramline)==0||param[0]=='\0') break; string=realloc(string,sizeof(char*)*i); string[i-1]=yon_char_new(param); i++; @@ -654,10 +672,8 @@ char **yon_char_parse(char *parameters, int *size, char *divider){ string=realloc(string,sizeof(char*)*i); string[i-1]=yon_char_new(paramline); i++; - // printf("%d\n",i); *size=i-1; return string; - } /**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete) @@ -760,7 +776,7 @@ config_str yon_char_parsed_new (int *size, ...){ void yon_char_parsed_copy(config_str *source, config_str *to_copy){ if (source&&!*source&&to_copy&&*to_copy){ int size=0; - config_str new_char = yon_char_parsed_new(&size,(*to_copy)[0]); + config_str new_char = yon_char_parsed_new(&size,(*to_copy)[0],NULL); for (int i=0;(*to_copy)[i];i++){ new_char = yon_char_parsed_append(new_char,&size,yon_char_new((*to_copy)[i])); } @@ -781,6 +797,14 @@ config_str yon_char_parsed_append(config_str parsed, int *size, char *string){ return new_parsed; } +int yon_char_parsed_remove_newline_symbols(config_str parsed, int *size){ + int i=0; + for (i=0;i<*size;i++) + if (parsed[i][strlen(parsed[i])-1]=='\n') + parsed[i][strlen(parsed[i])-1]='\0'; + return i; +} + /**yon_ubl_check_root() * [EN] * @@ -824,6 +848,32 @@ 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; +} + +config_str yon_ubl_get_all_processes(int *processes_size){ + config_str processes = yon_config_load(get_processes_command,processes_size); + yon_char_parsed_remove_newline_symbols(processes,processes_size); + return processes; +} + +config_str yon_ubl_get_all_slices(int *slices_size){ + config_str slices = yon_config_load(get_slices_command,slices_size); + yon_char_parsed_remove_newline_symbols(slices,slices_size); + return slices; +} + // parsing functions @@ -957,7 +1007,7 @@ int yon_config_load_register(char *command){ } FILE *output = popen(command, "r"); char **output_strings = NULL; - output_strings = malloc(sizeof(char)); + output_strings = malloc(sizeof(char*)); int i = 0; char str[4096]; memset(str, 0, 4096); @@ -966,13 +1016,14 @@ int yon_config_load_register(char *command){ if (strcmp(str, "") != 0&& strcmp(str,"(null)\n")!=0) { char *key = yon_char_divide_search(str,"=",-1); - yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,str); + char *final_str=yon_char_divide_search(str,"\n",-1); + yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,yon_char_new(final_str)); __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; } } check_config - return 0; - else return 1; + return 1; + else return 0; } /**yon_config_remove_by_key(char *key) @@ -1034,7 +1085,7 @@ int yon_config_remove_element(char *key, char *deleted){ new_data = yon_char_append(new_data,found+strlen(deleted)); } dict->data=(void*)(new_data); - free(data); + // free(data); dict->flag1=1; return 1; } else return 0; @@ -1087,10 +1138,30 @@ int yon_config_set(char *key, void *data){ check_config{ dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); dict->data=data; + dict->flag1=1; return 1; } else return 0; } + +/**yon_config_append(char *key, void *data) + * [EN] + * + * [RU] + * Производит поиск по конфигу и дополняет значение параметра с ключом [key] значением [data]; +*/ +int yon_config_append(char *key, char *data){ + check_config{ + dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); + if (strcmp(((char*)dict->data),"")!=0) + dict->data=(void*)(yon_char_unite((char*)dict->data," ",data,NULL)); + else dict->data=(void*)data; + dict->flag1=1; + return 1; + } else return 0; +} + + /**yon_config_clean() * [EN] * Erase all parameters from config; @@ -1114,8 +1185,12 @@ int yon_config_clean(){ * [data] - значение параметра; */ void yon_config_register(char *key, void *data){ - yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,data); + if (!__yon__config__strings||!yon_dictionary_get(&__yon__config__strings,key)){ + yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,data); + } + else if (yon_dictionary_get(&__yon__config__strings,key)) __yon__config__strings->data=data; __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; + __yon__config__strings->flag1=1; } /**yon_config_load(char *command, int *str_len) @@ -1153,22 +1228,35 @@ config_str yon_config_load(char *command, int *str_len){ } } -/**int yon_config_save(char *command) +/**int yon_config_save_registered(char *path, char *section) * [EN] * Saves config with [command] * [RU] * Выполняет команду [command], добавляя в конец все записи конфига в таком виде: * [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]" */ -int yon_config_save_registered(char *command){ +int yon_config_save_registered(char *path, char *section){ check_config{ + char *command = yon_char_unite("/usr/bin/ubconfig",path ? yon_char_append(" --target ",path):"", " set ", section,NULL); + char *remove_command = yon_char_unite("/usr/bin/ubconfig", path ? yon_char_append(" --target ",path):"", " remove ", section,NULL); dictionary *dict = NULL; + int any_add = 0; + int any_remove = 0; for_dictionaries(dict,__yon__config__strings){ - command = yon_char_unite(command, " ", yon_dictionary_get_data(dict,char*), NULL); + char *data = yon_dictionary_get_data(dict,char*); + if (dict->flag1==1&&strcmp(data,"")!=0){ + command = yon_char_unite(command, " ", dict->key,"=\"", yon_dictionary_get_data(dict,char*),"\"", NULL); + any_add=1; + } + if (strcmp(data,"")==0){ + remove_command = yon_char_unite(remove_command, " ", dict->key, NULL); + any_remove=1; + } } - if (popen(command, "r")) return 1; - else return 0; - } else return 0; + if (any_add) yon_launch(command); + if (any_remove) yon_launch(remove_command); + return 1; + } else return 1; } /**yon_config_get_all(int *size) @@ -1186,10 +1274,10 @@ config_str yon_config_get_all(int *size){ for_dictionaries(dict,__yon__config__strings){ conf = yon_remalloc(conf,sizeof(char*)*(*size)); conf[(*size)-1] = yon_char_unite(dict->key,"=",(char*)dict->data,NULL); - size++; + (*size)++; } - conf = yon_remalloc(conf,sizeof(char*)*(*size+1)); - conf[*size] = NULL; + conf = yon_remalloc(conf,sizeof(char*)*(*size)); + conf[*size-1] = NULL; return conf; } else return NULL; } @@ -1299,7 +1387,6 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); gtk_container_add(GTK_CONTAINER(place_to_show),terminal); char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL); - printf("%s\n",install_command); if(endwork_function) g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); vte_terminal_spawn_async(VTE_TERMINAL(terminal), @@ -1378,7 +1465,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end NULL, NULL, NULL); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), 100); + vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); gtk_widget_show_all(terminal); @@ -1437,6 +1524,9 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end case YON_TYPE_INT: g_key_file_set_integer(__yon_window_config_file,"window",param->parameter_name, g_value_get_int(val)); break; + case YON_TYPE_DOUBLE: + g_key_file_set_double(__yon_window_config_file,"window",param->parameter_name, g_value_get_double(val)); + break; case YON_TYPE_BOOLEAN: g_key_file_set_boolean(__yon_window_config_file,"window",param->parameter_name, g_value_get_boolean(val)); break; @@ -1453,6 +1543,9 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end case YON_TYPE_INT: g_key_file_set_integer(__yon_window_config_file,param->section,param->parameter_name, *(int*)param->property); break; + case YON_TYPE_DOUBLE: + g_key_file_set_double(__yon_window_config_file,param->section,param->parameter_name, *(double*)param->property); + break; case YON_TYPE_BOOLEAN: g_key_file_set_boolean(__yon_window_config_file,param->section,param->parameter_name, *(gboolean*)param->property); break; @@ -1526,8 +1619,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end if (!g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL)){ struct stat st; int size; - config_str conf = yon_char_parse(yon_char_new(__yon_window_config_path),&size,"/"); - char *path = yon_char_unite(conf[0],"/",conf[1],"/",conf[2],"/",conf[3],"/",conf[4],"/",NULL); + char *path = yon_char_divide(yon_char_new(__yon_window_config_path),yon_char_find_last(__yon_window_config_path,'/')); if (stat(path, &st) == -1) { mkdir(path, 0777); } @@ -1554,6 +1646,9 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end case YON_TYPE_INT: g_value_set_int(val,g_key_file_get_integer(__yon_window_config_file,"window",param->parameter_name, NULL)); break; + case YON_TYPE_DOUBLE: + g_value_set_double(val,g_key_file_get_double(__yon_window_config_file,"window",param->parameter_name, NULL)); + break; case YON_TYPE_BOOLEAN: gboolean res = g_key_file_get_boolean(__yon_window_config_file,"window",param->parameter_name, NULL); g_value_set_boolean(val,res); @@ -1562,10 +1657,10 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end } g_object_set_property(G_OBJECT(param->track_widget),param->property_name,val); } - if (__yon_main_window_config.width==0) __yon_main_window_config.width=800; - if (__yon_main_window_config.height==0) __yon_main_window_config.height=600; - gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height); - gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y); + if (__yon_main_window_config.width!=0&&__yon_main_window_config.height!=0) gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height); + if (__yon_main_window_config.x!=0&&__yon_main_window_config.y!=0) gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y); + + pthread_t tid; pthread_create(&tid,NULL,(void *)_yon_maximize,NULL); return 1; @@ -1582,7 +1677,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end return key; } - /**yon_window_config_add_custom_parameter(GtkWidget *widget, char *param_name, char *widget_property) + /**yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *widget_property, enum YON_TYPE val_type) * [EN] * * [RU] @@ -1616,6 +1711,35 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end yon_dictionary_add_or_create_if_exists_with_data(__yon_main_window_config.deleted_parameters,param->parameter_name,param); } + int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type){ + GError *err=NULL; + switch (type){ + case YON_TYPE_BOOLEAN: + *((int*)return_value) = g_key_file_get_boolean(__yon_window_config_file,section,config_parameter,&err); + if (err) return 0; else return 1; + break; + case YON_TYPE_INT: + *((int*)return_value) = g_key_file_get_integer(__yon_window_config_file,section,config_parameter,&err); + if (err) return 0; else return 1; + break; + case YON_TYPE_DOUBLE: + *((int*)return_value) = g_key_file_get_double(__yon_window_config_file,section,config_parameter,&err); + if (err) return 0; else return 1; + break; + case YON_TYPE_STRING: + *((char**)return_value) = g_key_file_get_string(__yon_window_config_file,section,config_parameter,&err); + if (err) return 0; else return 1; + break; + case YON_TYPE_STRING_LIST: + gsize size=0; + *((char***)return_value) = g_key_file_get_string_list(__yon_window_config_file,section,config_parameter,&size,&err); + *((char***)return_value)=yon_remalloc(return_value,size+1); + *((char***)return_value)[size]=NULL; + if (err) return 0; else return 1; + break; + } + } + GtkWidget *yon_ubl_menu_item_about_new(char *buttonname){ GtkWidget *menu_item = gtk_menu_item_new(); gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"menuitembottom"); @@ -1724,6 +1848,23 @@ int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean e } +void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, GtkWidget *target){ + gtk_widget_set_sensitive(target,gtk_toggle_button_get_active(toggle)); +} + +void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target){ + gtk_widget_set_sensitive(target,!gtk_toggle_button_get_active(toggle)); + +} + +void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target){ + gtk_widget_set_sensitive(target,gtk_combo_box_get_active(toggle)>=0 ? 1 : 0); +} + +void yon_gtk_widget_set_sensitive_from_toggle_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target){ + gtk_widget_set_sensitive(target,!gtk_combo_box_get_active(toggle)>=0 ? 0 : 1); +} + void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) { gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head); diff --git a/source/ubl-utils.h b/source/ubl-utils.h index d6a0d8c..5983344 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include "ubl-cmake.h" #ifdef WEBKIT_FOUND @@ -31,6 +33,9 @@ static char** array_size_pow; #define get_home_dir_command yon_char_unite("getent passwd \"",yon_ubl_root_user_get(),"\" | cut -d: -f6",NULL) +#define get_processes_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.service\"" +#define get_slices_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.slice\"" + typedef enum { #ifdef __GTK_H__ @@ -142,6 +147,7 @@ char *yon_char_divide(char *source, int dividepos); 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_long(long int_to_convert); char *yon_char_replace(char *source, char *find, char*replace); @@ -161,12 +167,18 @@ void yon_char_parsed_copy(config_str *source, config_str *to_copy); config_str yon_char_parsed_append(config_str parsed, int *size, char *string); +int yon_char_parsed_remove_newline_symbols(config_str parsed, int *size); + int yon_ubl_check_root(); char *yon_ubl_root_user_get(); char *yon_ubl_user_get_home_directory(); +config_str yon_ubl_get_all_users(int *user_size); +config_str yon_ubl_get_all_processes(int *processes_size); +config_str yon_ubl_get_all_slices(int *slices_size); + // parsing functions config_str philos_list_user(int* size); @@ -179,7 +191,7 @@ apps *yon_apps_get_by_name(apps *applist, char *name, int size); config_str yon_config_load(char *command, int *str_len); -int yon_config_save_registered(char *command); +int yon_config_save_registered(char *path, char *section); char *yon_config_get_parameter(config_str parameters, int size, char *param); @@ -223,6 +235,7 @@ enum YON_TYPE{ YON_TYPE_STRING, YON_TYPE_STRING_LIST, YON_TYPE_INT, + YON_TYPE_DOUBLE, YON_TYPE_BOOLEAN, YON_TYPE_OTHER }; @@ -270,7 +283,10 @@ int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); - +void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, GtkWidget *target); +void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target); +void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target); +void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target); typedef enum { @@ -318,25 +334,6 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label); */ void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type); -#ifdef __cplusplus - -/**yon_ubl_header_setup(overlay, head, image, imag_path) - * [EN] - * Sets up header of app. - * [overlay] is overlay for app header; - * [head] is box of header, which connects to [overlay] - * [image] is header background image; - * [imag_path] is path of image, shown in [image] - * [RU] - * Настраивает заголовок приложения. - * [overlay] - оверлей заголовка приложения; - * [head] - шапка заголовка, присоединяемая к [overlay] - * [image] - виджет картинки для заднего фона; - * [imag_path] - путь до картинки, загружаемой в [image] -*/ -#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay.gobj()), GTK_WIDGET(head.gobj()), GTK_WIDGET(image.gobj()), (char *)imag_path) -#else - /**yon_ubl_header_setup(overlay, head, image, imag_path) * [EN] * Sets up header of app. @@ -366,5 +363,4 @@ void yon_ubl_browser_window_open(char *link, char *browser_window_name); #else void yon_ubl_browser_window_open(char *link, char *browser_window_name); #endif -#endif -#endif +#endif \ No newline at end of file diff --git a/source/view_add.c b/source/view_add.c deleted file mode 100644 index 1e27bd5..0000000 --- a/source/view_add.c +++ /dev/null @@ -1,287 +0,0 @@ -#include "view_add.h" - -temp_set_window *add_widgets = NULL; -temp_config obj_add_config; - -temp_config* get_add_config() { - return &obj_add_config; -} - -temp_set_window *add_setup_window(char* glade_path) { - if (add_widgets == NULL) { - add_widgets = malloc(sizeof(temp_set_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); - add_widgets->Window = yon_gtk_builder_get_widget(builder,"wndQuotasAdding"); - add_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveAddSave"); - add_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnAddCancel"); - - add_widgets->entryTempCmd = yon_gtk_builder_get_widget(builder,"entryAddCmd"); - add_widgets->cbxTempQuotaObj = yon_gtk_builder_get_widget(builder,"cbxAddQuotaObj"); - add_widgets->cbxTempQuotaLevel2 = yon_gtk_builder_get_widget(builder,"cbxAddQuotaLevel2"); - add_widgets->cbtTempDevice = yon_gtk_builder_get_widget(builder,"cbtAddDevice"); - add_widgets->lblCPULimitTemp = yon_gtk_builder_get_widget(builder,"lblCPULimitAdd"); - add_widgets->spinCPULimitTemp = yon_gtk_builder_get_widget(builder,"spinCPULimitAdd"); - add_widgets->chkCPULimitTemp = yon_gtk_builder_get_widget(builder,"chkCPULimitAdd"); - - add_widgets->chkPaddingFLTemp = yon_gtk_builder_get_widget(builder,"chkPaddingFLAdd"); - add_widgets->spinPaddingFLTemp = yon_gtk_builder_get_widget(builder,"spinPaddingFLAdd"); - add_widgets->cmbPaddingFLTemp = yon_gtk_builder_get_widget(builder,"cmbPaddingFLAdd"); - - add_widgets->chkSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionAdd"); - add_widgets->spinSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionAdd"); - add_widgets->cmbSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionAdd"); - - add_widgets->chkSoftRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionAdd"); - add_widgets->spiSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionAdd"); - add_widgets->cmSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionAdd"); - - add_widgets->chbTempRead = yon_gtk_builder_get_widget(builder,"chbAddRead"); - add_widgets->spinTempRead = yon_gtk_builder_get_widget(builder,"spinAddRead"); - add_widgets->cbtTempRead = yon_gtk_builder_get_widget(builder,"cbtAddRead"); - - add_widgets->spinTempWrite = yon_gtk_builder_get_widget(builder,"spinAddWrite"); - add_widgets->chbTempWrite = yon_gtk_builder_get_widget(builder,"chbAddWrite"); - add_widgets->cbtTempWrite = yon_gtk_builder_get_widget(builder,"cbtAddWrite"); - add_widgets->boxBlockGui = yon_gtk_builder_get_widget(builder,"boxBlockGui"); - device_fill_disk(add_widgets->cbtTempDevice); - add_event(add_widgets); - add_init_windows(); - add_localization(add_widgets); - philos_temp_config_init(&obj_add_config); - init_device_disk(&obj_add_config); - } - return add_widgets; -} - -void add_init_windows() { - if (gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2)) != -1) { - gtk_widget_set_sensitive(add_widgets->boxBlockGui, 1); - gtk_widget_set_sensitive(add_widgets->btnSaveTempSave, 1); - philos_set_active_widgets(add_widgets->chkSoftRestrictionTemp, add_widgets->spiSevereRestrictionTemp, add_widgets->cmSevereRestrictionTemp, 0 , CMD_RAW); - philos_set_active_widgets(add_widgets->chkSevereRestrictionTemp, add_widgets->spinSevereRestrictionTemp, add_widgets->cmbSevereRestrictionTemp,0 , CMD_RAW); - philos_set_active_widgets(add_widgets->chkPaddingFLTemp, add_widgets->spinPaddingFLTemp, add_widgets->cmbPaddingFLTemp,0 , CMD_SWAP); - philos_set_active_widgets(add_widgets->chkCPULimitTemp, add_widgets->spinCPULimitTemp, add_widgets->lblCPULimitTemp,1 , CMD_CPU); - philos_set_active_widgets_device_io(add_widgets->cbtTempDevice,add_widgets->chbTempWrite, add_widgets->spinTempWrite, add_widgets->cbtTempWrite); - philos_set_active_widgets_device_io(add_widgets->cbtTempDevice,add_widgets->chbTempRead, add_widgets->spinTempRead, add_widgets->cbtTempRead); - } - else { - gtk_widget_set_sensitive(add_widgets->boxBlockGui, 0); - gtk_widget_set_sensitive(add_widgets->btnSaveTempSave, 0); - } - philos_temp_generate_cmd(add_widgets, &obj_add_config); -} - -void event_check_io_device() { - add_init_windows(); - philos_temp_add_disk(add_widgets, &obj_add_config, 0); - philos_temp_add_disk(add_widgets, &obj_add_config, 1); - philos_temp_generate_cmd(add_widgets, &obj_add_config); -} - -void combo_box_device() { - g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempDevice), G_CALLBACK(combo_box_device), NULL); - g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempRead), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempWrite), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_block_by_func(G_OBJECT(add_widgets->spinTempRead), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_block_by_func(G_OBJECT(add_widgets->spinTempWrite), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_block_by_func(G_OBJECT(add_widgets->chbTempRead), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_block_by_func(G_OBJECT(add_widgets->chbTempWrite), G_CALLBACK(event_check_io_device), NULL); - philos_update_device_to_entry(add_widgets, &obj_add_config, 0); - philos_update_device_to_entry(add_widgets, &obj_add_config, 1); - add_init_windows(); - g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempDevice), G_CALLBACK(combo_box_device), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempRead), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempWrite), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->spinTempRead), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->spinTempWrite), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->chbTempRead), G_CALLBACK(event_check_io_device), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->chbTempWrite), G_CALLBACK(event_check_io_device), NULL); -} - -void add_event(temp_set_window *widgets) { - g_signal_connect(G_OBJECT(widgets->btnTempCancel),"clicked",G_CALLBACK(add_on_destroy_subwindow),NULL); - g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(add_destroy), NULL); - g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionTemp), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionTemp), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkPaddingFLTemp), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkCPULimitTemp), "toggled", G_CALLBACK(add_init_windows), NULL); - - g_signal_connect(G_OBJECT(widgets->cbxTempQuotaObj),"changed",G_CALLBACK(add_update_combo_box), NULL); - g_signal_connect(G_OBJECT(widgets->cbxTempQuotaLevel2),"changed",G_CALLBACK(add_init_windows), NULL); - - g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionTemp),"value-changed",G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionTemp),"value-changed",G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->spinPaddingFLTemp),"value-changed",G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->spinCPULimitTemp),"value-changed",G_CALLBACK(add_init_windows), NULL); - - - g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionTemp),"changed",G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionTemp),"changed",G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->cmbPaddingFLTemp),"changed",G_CALLBACK(add_init_windows), NULL); - - g_signal_connect(G_OBJECT(widgets->cbtTempDevice),"changed",G_CALLBACK(combo_box_device), NULL); - g_signal_connect(G_OBJECT(widgets->cbtTempRead),"changed",G_CALLBACK(event_check_io_device), NULL); - g_signal_connect(G_OBJECT(widgets->cbtTempWrite),"changed",G_CALLBACK(event_check_io_device), NULL); - g_signal_connect(G_OBJECT(widgets->spinTempRead),"value-changed",G_CALLBACK(event_check_io_device), NULL); - g_signal_connect(G_OBJECT(widgets->spinTempWrite),"value-changed",G_CALLBACK(event_check_io_device), NULL); - g_signal_connect(G_OBJECT(widgets->chbTempRead), "toggled", G_CALLBACK(event_check_io_device), NULL); - g_signal_connect(G_OBJECT(widgets->chbTempWrite), "toggled", G_CALLBACK(event_check_io_device), NULL); -} - -void add_get_systemd_cgls(char* cmd_systemd_cgls) { - CMD_GET_SLICE_SERVICE = cmd_systemd_cgls; -} - -void add_destroy(GtkWidget *self) { - add_widgets = NULL; -} - -void add_localization(temp_set_window *widgets) { - -} - -void add_on_destroy_subwindow(GtkWidget *self) { - gtk_widget_destroy(gtk_widget_get_toplevel(self)); - add_widgets = NULL; - -} - -temp_set_window *get_widget_add() { - return add_widgets; -} - -void add_show(GtkWidget *self, char* glade_path) { - if (add_widgets != NULL) { - add_update_combo_box(); - gtk_widget_show_all(add_widgets->Window); - add_init_windows(); - } - else { - add_setup_window(glade_path); - add_update_combo_box(); - gtk_widget_show_all(add_widgets->Window); - add_init_windows(); - } -} - -char* add_get_select_device_to_level_2() { - char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaLevel2)); - int disk_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2)); - if (disk_id >= 0) { - return text; - } - else { - char* str = (char*)malloc(sizeof(char*)*2); - str[0] = '-'; - str[1] = '\0'; - return str; - } -} - -int add_get_index_type_quota() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj)); -} -int add_get_index_volume_quota() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2)); -} - -int add_get_soft_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSoftRestrictionTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmSevereRestrictionTemp)); - } - else { - return -3; - } - -} -int add_get_hard_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSevereRestrictionTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbSevereRestrictionTemp)); - } - else { - return -3; - } -} -int add_get_limit_cpu_size() { - return -1; -} -int add_get_limit_swap_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbPaddingFLTemp)); - } - else { - return -3; - } -} -int add_get_quota_object_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj)); - } - else { - return -3; - } -} - -int add_get_soft() { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spiSevereRestrictionTemp)); -} -int add_get_hard() { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinSevereRestrictionTemp)); -} -int add_get_limit_cpu() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitTemp))) { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitTemp)); - } - else { - return -3; - } -} -int add_get_limit_swap() { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinPaddingFLTemp)); -} -char* add_get_quota_object() { - return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaObj)); -} -void add_update_combo_box() { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj)); - char* cmd = NULL; - config_str fill_cmb_2 = NULL; - int size = 0; - if (menu_id == 0) { - fill_cmb_2 = philos_list_user(&size); - - } - else if (menu_id == 1) { - fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".service", &size); - philos_array_string_remove_char(&fill_cmb_2, "\n", size); - } - else if (menu_id == 2) { - fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".slice", &size); - philos_array_string_remove_char(&fill_cmb_2, "\n", size); - } - if (menu_id >= 0) { - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaLevel2)); - philos_fill_combo_box_text(add_widgets->cbxTempQuotaLevel2, fill_cmb_2, size); - } -} - -int** add_get_read_device() { - return &obj_add_config.i_o_limit_read; -} - -int** add_get_read_device_size_pow() { - return &obj_add_config.i_o_limit_read_size; -} -int** add_get_write_device() { - return &obj_add_config.i_o_limit_write; -} -int** add_get_write_device_size_pow() { - return &obj_add_config.i_o_limit_write_size; -} -char*** add_get_select_read_device() { - return &obj_add_config.disk_read; -} -char*** add_get_select_write_device() { - return &obj_add_config.disk_write; -} - diff --git a/source/view_add.h b/source/view_add.h deleted file mode 100644 index 03e53a4..0000000 --- a/source/view_add.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef VIEW_ADD_H -#define VIEW_ADD_H -#include -#include -#include "ubl-utils.h" -#include "ubl-strings.h" -#include -#include -#include -#include -#include -#include -#include -#include "my_device.h" -#include "philos_utils.h" - - -#define CMD_CPU "lscpu | grep \"CPU(s):\" |grep -oE \"[0-9]{1,}\"" -#define CMD_SWAP "grep '^Swap' /proc/meminfo | grep \"SwapTotal\" |grep -oE \"[0-9]{1,}\"" -#define CMD_RAW "cat /proc/meminfo | grep \"MemTotal\" |grep -oE \"[0-9]{1,}\"" - -static char* CMD_GET_GROUP; -static char* CMD_GET_SLICE_SERVICE; - - -temp_set_window *add_setup_window(char* glade_path); -void add_event(temp_set_window *widgets); -void add_localization(temp_set_window *widgets); -void add_on_destroy_subwindow(GtkWidget *self); -temp_set_window *get_widget_add(); -void add_show(GtkWidget *self, char* glade_path); -void add_destroy(GtkWidget *self); -void add_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd); -void add_init_windows(); -void add_update_combo_box(); -char*** add_get_select_read_device(); -int** add_get_read_device(); -int** add_get_write_device(); -int add_get_soft(); -int add_get_hard(); -int add_get_limit_cpu(); -int add_get_limit_swap(); -char* add_get_quota_object(); -char*** add_get_select_write_device(); -char*** add_get_select_read_device(); -void combo_box_device(); -int** add_get_write_device_size_pow(); -int** add_get_read_device_size_pow(); -int add_get_soft_size(); -int add_get_hard_size(); -int add_get_limit_cpu_size(); -int add_get_limit_swap_size(); -int add_get_quota_object_size(); -temp_config* get_add_config(); -void add_set_active_widgets_device_io(GtkWidget *check, GtkWidget *spin, GtkWidget *combo); -void add_get_cmd_group(char* cmd_get_group); -char* add_get_select_device_to_level_2(); -int add_get_index_volume_quota(); -int add_get_index_type_quota(); -void add_get_systemd_cgls(char* cmd_systemd_cgls); -void add_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value); -#endif \ No newline at end of file diff --git a/source/view_edit.c b/source/view_edit.c deleted file mode 100644 index 9b84203..0000000 --- a/source/view_edit.c +++ /dev/null @@ -1,314 +0,0 @@ -#include "view_edit.h" - -temp_set_window *edit_widgets = NULL; -temp_config obj_edit_config; - -temp_config* get_edit_config() { - return &obj_edit_config; -} -temp_set_window *edit_setup_window(char* glade_path){ - if (edit_widgets == NULL) { - edit_widgets = malloc(sizeof(temp_set_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); - edit_widgets->Window = yon_gtk_builder_get_widget(builder,"wndQuotasEdit"); - edit_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnEditCancel"); - edit_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveEditSave"); - - edit_widgets->cbtTempDevice = yon_gtk_builder_get_widget(builder,"cbtEditDevice"); - edit_widgets->lblCPULimitTemp = yon_gtk_builder_get_widget(builder,"lblCPULimitEdit"); - edit_widgets->spinCPULimitTemp = yon_gtk_builder_get_widget(builder,"spinCPULimitEdit"); - edit_widgets->chkCPULimitTemp = yon_gtk_builder_get_widget(builder,"chkCPULimitEdit"); - - edit_widgets->chkPaddingFLTemp = yon_gtk_builder_get_widget(builder,"chkPaddingFLEdit"); - edit_widgets->spinPaddingFLTemp = yon_gtk_builder_get_widget(builder,"spinPaddingFLEdit"); - edit_widgets->cmbPaddingFLTemp = yon_gtk_builder_get_widget(builder,"cmbPaddingFLEdit"); - - edit_widgets->chkSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionEdit"); - edit_widgets->spinSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionEdit"); - edit_widgets->cmbSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionEdit"); - - edit_widgets->chkSoftRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionEdit"); - edit_widgets->spiSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionEdit"); - edit_widgets->cmSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionEdit"); - - edit_widgets->chbTempRead = yon_gtk_builder_get_widget(builder,"chbEditRead"); - edit_widgets->spinTempRead = yon_gtk_builder_get_widget(builder,"spinEditRead"); - edit_widgets->cbtTempRead = yon_gtk_builder_get_widget(builder,"cbtEditRead"); - - edit_widgets->spinTempWrite = yon_gtk_builder_get_widget(builder,"spinEditWrite"); - edit_widgets->chbTempWrite = yon_gtk_builder_get_widget(builder,"chbEditWrite"); - edit_widgets->cbtTempWrite = yon_gtk_builder_get_widget(builder,"cbtEditWrite"); - edit_widgets->entryTempCmd = yon_gtk_builder_get_widget(builder,"entryEditCmd"); - edit_widgets->lblInfoObjQuotas = yon_gtk_builder_get_widget(builder,"lblInfoObjQuotas"); - device_fill_disk(edit_widgets->cbtTempDevice); - edit_localization(edit_widgets); - philos_temp_config_init(&obj_edit_config); - } - return edit_widgets; -} - -void edit_event(temp_set_window *widgets) { - g_signal_connect(G_OBJECT(widgets->btnTempCancel),"clicked",G_CALLBACK(edit_on_hide_subwindow),NULL); - g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(edit_destroy), NULL); - g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionTemp), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionTemp), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkPaddingFLTemp), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkCPULimitTemp), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chbTempRead), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chbTempWrite), "toggled", G_CALLBACK(edit_init_windows), NULL); - - g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->spinPaddingFLTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->spinCPULimitTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->spinTempRead),"value-changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_connect(G_OBJECT(widgets->spinTempWrite),"value-changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_connect(G_OBJECT(widgets->cmbPaddingFLTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_connect(G_OBJECT(widgets->cbtTempRead),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_connect(G_OBJECT(widgets->cbtTempWrite),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_connect(G_OBJECT(widgets->cbtTempDevice),"changed",G_CALLBACK(combo_box_device_edit), NULL); -} - -void edit_destroy(GtkWidget *self) { - edit_widgets = NULL; -} - -void edit_localization(temp_set_window *widgets) { - -} - -void edit_on_hide_subwindow(GtkWidget *self) { - gtk_widget_destroy(gtk_widget_get_toplevel(self)); - edit_widgets = NULL; -} - -temp_set_window *get_widget_edit() { - return edit_widgets; -} - -void edit_show(GtkWidget *self, char* glade_path) { - if (edit_widgets != NULL) { - gtk_widget_show_all(edit_widgets->Window); - } - else { - edit_setup_window(glade_path); - gtk_widget_show_all(edit_widgets->Window); - } - -} -void wrapper_edit_init_windows_size_memory() { - philos_temp_add_disk(edit_widgets, &obj_edit_config, 0); - philos_temp_add_disk(edit_widgets, &obj_edit_config, 1); - edit_init_windows(); -} - -void edit_init_windows() { - philos_set_active_widgets(edit_widgets->chkSoftRestrictionTemp, edit_widgets->spiSevereRestrictionTemp, edit_widgets->cmSevereRestrictionTemp,0 ,CMD_RAW); - philos_set_active_widgets(edit_widgets->chkSevereRestrictionTemp, edit_widgets->spinSevereRestrictionTemp, edit_widgets->cmbSevereRestrictionTemp,0 , CMD_RAW); - philos_set_active_widgets(edit_widgets->chkPaddingFLTemp, edit_widgets->spinPaddingFLTemp, edit_widgets->cmbPaddingFLTemp,0 , CMD_SWAP); - philos_set_active_widgets(edit_widgets->chkCPULimitTemp, edit_widgets->spinCPULimitTemp, edit_widgets->lblCPULimitTemp,1 ,CMD_CPU); - philos_set_active_widgets_device_io(edit_widgets->cbtTempDevice,edit_widgets->chbTempWrite, edit_widgets->spinTempWrite, edit_widgets->cbtTempWrite); - philos_set_active_widgets_device_io(edit_widgets->cbtTempDevice,edit_widgets->chbTempRead, edit_widgets->spinTempRead, edit_widgets->cbtTempRead); - philos_temp_generate_cmd(edit_widgets, &obj_edit_config); -} - -void combo_box_device_edit() { - g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempDevice), G_CALLBACK(combo_box_device_edit), NULL); - g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->spinTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->spinTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->chbTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->chbTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - philos_update_device_to_entry(edit_widgets, &obj_edit_config, 0); - philos_update_device_to_entry(edit_widgets, &obj_edit_config, 1); - edit_init_windows(); - g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempDevice), G_CALLBACK(combo_box_device_edit), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->spinTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->spinTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->chbTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); - g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->chbTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL); -} - -int edit_get_soft_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSoftRestrictionTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmSevereRestrictionTemp)); - } - else { - return -3; - } - -} -int edit_get_hard_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSevereRestrictionTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbSevereRestrictionTemp)); - } - else { - return -3; - } -} -int edit_get_limit_cpu_size() { - return -1; -} -int edit_get_limit_swap_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbPaddingFLTemp)); - } - else { - return -3; - } -} -int edit_get_quota_object_size() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLTemp))) { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbxTempQuotaObj)); - } - else { - return -3; - } -} - -int** edit_get_read_device() { - return &obj_edit_config.i_o_limit_read; -} -int** edit_get_read_device_size_pow() { - return &obj_edit_config.i_o_limit_read_size; -} -int** edit_get_write_device() { - return &obj_edit_config.i_o_limit_write; -} -int** edit_get_write_device_size_pow() { - return &obj_edit_config.i_o_limit_write_size; -} -char*** edit_get_select_write_device() { - return &obj_edit_config.disk_write; -} -char*** edit_get_select_read_device() { - return &obj_edit_config.disk_read; -} -int edit_get_soft() { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spiSevereRestrictionTemp)); -} -int edit_get_hard() { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinSevereRestrictionTemp)); -} -int edit_get_limit_cpu() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitTemp))) { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitTemp)); - } - else { - return -3; - } -} -int edit_get_limit_swap() { - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLTemp)); -} - -void edit_set_select_read_device(char*** str_value) { - if (str_value) { - if ((*str_value)) { - yon_char_parsed_copy(&obj_edit_config.disk_read, str_value); - } - } -} -void edit_set_select_write_device(char*** str_value) { - if (str_value) { - if ((*str_value)) { - yon_char_parsed_copy(&obj_edit_config.disk_write, str_value); - } - } -} -int set_template_gui_device(int flag_check_array) { - int index = -1; - if (flag_check_array==0) { - index = yon_gtk_combo_box_text_find(edit_widgets->cbtTempDevice, obj_edit_config.disk_read[0]); - gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtTempDevice), index); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempRead), 1); - edit_temp_set(obj_edit_config.i_o_limit_read[0], - obj_edit_config.i_o_limit_read_size[0], edit_widgets->chbTempRead, - edit_widgets->spinTempRead, - edit_widgets->cbtTempRead); - } - else if (flag_check_array==1) { - index = yon_gtk_combo_box_text_find(edit_widgets->cbtTempDevice, obj_edit_config.disk_write[0]); - gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtTempDevice), index); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempWrite), 1); - edit_temp_set(obj_edit_config.i_o_limit_write[0], - obj_edit_config.i_o_limit_write_size[0], - edit_widgets->chbTempWrite, - edit_widgets->spinTempWrite, - edit_widgets->cbtTempWrite); - } - return index; -} -void set_gui_device() { - int flag = -1; - if (obj_edit_config.disk_read) { - if (obj_edit_config.disk_read[0] != NULL && strstr(obj_edit_config.disk_read[0], "-") == NULL) { - flag = set_template_gui_device(0); - } - } - if (obj_edit_config.disk_write) { - if (obj_edit_config.disk_write[0] != NULL && strstr(obj_edit_config.disk_write[0], "-") == NULL) { - flag = set_template_gui_device(1); - } - - } -} -void edit_set_read_device(int* str_value, int* pow_mem) { - if (str_value && pow_mem) { - philos_array_int_copy(&obj_edit_config.i_o_limit_read, &str_value); - philos_array_int_copy(&obj_edit_config.i_o_limit_read_size, &pow_mem); - } -} -void edit_set_write_device(int* str_value, int* pow_mem) { - if (str_value && pow_mem) { - philos_array_int_copy(&obj_edit_config.i_o_limit_write, &str_value); - philos_array_int_copy(&obj_edit_config.i_o_limit_write_size, &pow_mem); - } - -} -void edit_set_size_arrays(size_t size_array) { - obj_edit_config.size_disk = size_array; -} - -void edit_set_soft(int value, int pow_mem) { - edit_temp_set(value,pow_mem, edit_widgets->chkSoftRestrictionTemp, - edit_widgets->spiSevereRestrictionTemp, - edit_widgets->cmSevereRestrictionTemp); -} -void edit_set_hard(int value, int pow_mem) { - edit_temp_set(value,pow_mem, edit_widgets->chkSevereRestrictionTemp, - edit_widgets->spinSevereRestrictionTemp, - edit_widgets->cmbSevereRestrictionTemp); -} -void edit_set_limit_cpu(int value, int pow_mem) { - edit_temp_set(value,pow_mem, edit_widgets->chkCPULimitTemp, - edit_widgets->spinCPULimitTemp, - NULL); -} -void edit_set_limit_swap(int value, int pow_mem) { - edit_temp_set(value,pow_mem, edit_widgets->chkPaddingFLTemp, - edit_widgets->spinPaddingFLTemp, - edit_widgets->cmbPaddingFLTemp); -} -void edit_temp_set(int value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) { - if (pow_mem>=-1 && value>=0) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 1); - if (combo_box_text) { - gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box_text), pow_mem); - } - } - else { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 0); - } -} - -void edit_temp_set_obj_quota(char* type, char* value) { - gtk_label_set_label(GTK_LABEL(edit_widgets->lblInfoObjQuotas), yon_char_unite(type, " " ,value, NULL)); -} - diff --git a/source/view_edit.h b/source/view_edit.h deleted file mode 100644 index a0e3270..0000000 --- a/source/view_edit.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef VIEW_EDIT_H -#define VIEW_EDIT_H -#include -#include -#include "ubl-utils.h" -#include "ubl-strings.h" -#include -#include -#include -#include -#include -#include -#include -#include "my_device.h" -#include "philos_utils.h" - -#define CMD_CPU "lscpu | grep \"CPU(s):\" |grep -oE \"[0-9]{1,}\"" -#define CMD_SWAP "grep '^Swap' /proc/meminfo | grep \"SwapTotal\" |grep -oE \"[0-9]{1,}\"" -#define CMD_RAW "cat /proc/meminfo | grep \"MemTotal\" |grep -oE \"[0-9]{1,}\"" - -// Функции -temp_set_window *edit_setup_window(char* glade_path); -void edit_event(temp_set_window *widgets); -void edit_localization(temp_set_window *widgets); -void edit_on_hide_subwindow(GtkWidget *self); -temp_set_window *get_widget_edit(); -void combo_box_device_edit(); -void edit_show(GtkWidget *self, char* glade_path); -void edit_destroy(GtkWidget *self); -void edit_init_windows(); -void wrapper_edit_init_windows_size_memory(); -void edit_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd); -char*** edit_get_select_read_device(); -char*** edit_get_select_write_device(); -int** edit_get_read_device(); -int** edit_get_write_device(); -int edit_get_soft(); -int edit_get_hard(); -int edit_get_limit_cpu(); -int edit_get_limit_swap(); -void wrapper_edit_show(); -void edit_set_select_write_device(char*** str_value); -void edit_set_select_read_device(char*** str_value); -void edit_set_read_device(int* str_value, int* pow_mem); -void edit_set_write_device(int* str_value, int* pow_mem); -void edit_set_soft(int value, int pow_mem); -void edit_set_hard(int value, int pow_mem); -void edit_set_limit_cpu(int value, int pow_mem); -void edit_set_limit_swap(int value, int pow_mem); -void edit_temp_set(int value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text); -int** edit_get_read_device_size_pow(); -int** edit_get_write_device_size_pow(); - -void edit_set_size_arrays(size_t size_array); -int edit_get_soft_size(); -int edit_get_hard_size(); -int edit_get_limit_cpu_size(); -int edit_get_limit_swap_size(); -void edit_config_init(); -void set_gui_device(); -temp_config* get_edit_config(); -void edit_temp_set_obj_quota(char* type, char* value); -void edit_set_active_widgets_device_io(GtkWidget *check, GtkWidget *spin, GtkWidget *combo); -void edit_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value); -#endif \ No newline at end of file diff --git a/ubl-settings-resourcequota-filters.glade b/ubl-settings-resourcequota-filters.glade new file mode 100644 index 0000000..dcb9d97 --- /dev/null +++ b/ubl-settings-resourcequota-filters.glade @@ -0,0 +1,239 @@ + + + + + + + True + False + emblem-ok-symbolic + + + True + False + process-stop-symbolic + + + False + start + False + com.ublinux.ubl-settings-resourcequota + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + + + True + False + vertical + + + Quota type + True + True + False + start + True + + + False + True + 0 + + + + + Quota target + True + True + False + start + True + + + False + True + 1 + + + + + Soft RAM limit, (volume) + True + True + False + start + True + + + False + True + 2 + + + + + Hard RAM limit, (volume) + True + True + False + start + True + + + False + True + 3 + + + + + Swap file limit (volume) + True + True + False + start + True + + + False + True + 4 + + + + + CPU limit (%) + True + True + False + start + True + + + False + True + 5 + + + + + I/O limit (read) + True + True + False + start + True + + + False + True + 6 + + + + + I/O limit (write) + True + True + False + start + True + + + False + True + 7 + + + + + False + True + 4 + + + + + True + False + end + 5 + 5 + True + + + Cancel + True + True + True + center + image2 + + + False + True + 0 + + + + + Accept + True + True + True + center + image1 + + + False + True + 1 + + + + + False + True + end + 5 + + + + + + + True + False + True + + + True + False + Filters + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-resourcequota + 5 + + + + + + diff --git a/ubl-settings-resourcequota-quota.glade b/ubl-settings-resourcequota-quota.glade new file mode 100644 index 0000000..29401bd --- /dev/null +++ b/ubl-settings-resourcequota-quota.glade @@ -0,0 +1,938 @@ + + + + + + + 1 + 10 + + + 1 + 10 + + + 1 + 10 + + + 1 + 10 + + + 1 + 10 + + + 1 + 10 + + + True + False + process-stop-symbolic + + + True + False + emblem-ok-symbolic + + + False + start + False + True + com.ublinux.ubl-settings-resourcequota + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + Quota object: + + + False + True + 0 + + + + + 100 + True + False + 0 + 0 + + User + Process + Slice + + + + True + True + 1 + + + + + True + False + + + False + True + 2 + + + + + False + True + 0 + + + + + False + 5 + + + True + False + Quota object: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + False + vertical + 5 + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + False + 5 + + + True + False + vertical + 5 + + + True + False + Soft restriction + 0 + + + False + True + 0 + + + + + True + False + 5 + + + True + True + False + True + + + False + True + 0 + + + + + True + False + True + 7 + 0 + adjustment3 + + + False + True + 1 + + + + + True + False + False + 0 + 0 + + Kb + Mb + Gb + Tb + + + + False + True + 2 + + + + + False + True + 1 + + + + + True + True + 0 + + + + + True + False + vertical + 5 + + + True + False + Hard restriction + 0 + + + False + True + 0 + + + + + True + False + 5 + + + True + True + False + True + + + False + True + 0 + + + + + True + False + True + 7 + 0 + adjustment4 + + + False + True + 1 + + + + + True + False + False + 0 + 0 + + Kb + Mb + Gb + Tb + + + + False + True + 2 + + + + + False + True + 1 + + + + + True + True + 1 + + + + + + + + + True + False + RAM limit + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + False + 5 + + + True + True + False + True + + + False + True + 0 + + + + + True + False + True + 7 + 0 + adjustment5 + + + False + True + 1 + + + + + True + False + False + 0 + 0 + + Kb + Mb + Gb + Tb + + + + False + True + 2 + + + + + + + + + True + False + Paging file limit + + + + + False + True + 0 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + False + 5 + + + True + True + False + True + + + False + True + 0 + + + + + True + False + True + 7 + 0 + adjustment6 + + + False + True + 1 + + + + + True + False + % + + + False + True + 2 + + + + + + + + + True + False + CPU limit + + + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + Device: + 0 + + + False + True + 0 + + + + + True + False + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + vertical + 5 + + + True + False + Read + 0 + + + False + True + 0 + + + + + True + False + 5 + + + True + False + True + False + True + + + False + True + 0 + + + + + True + False + True + 7 + 0 + adjustment1 + + + False + True + 1 + + + + + True + False + False + 0 + 0 + + Kb + Mb + Gb + Tb + + + + False + True + 2 + + + + + False + True + 1 + + + + + True + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 5 + 5 + 5 + 5 + Write + 0 + + + False + True + 0 + + + + + True + False + 5 + + + True + False + True + False + True + + + False + True + 0 + + + + + True + False + True + 7 + 0 + adjustment2 + + + False + True + 1 + + + + + True + False + False + 0 + 0 + + Kb + Mb + Gb + Tb + + + + False + True + 2 + + + + + False + True + 1 + + + + + True + True + 1 + + + + + False + True + 1 + + + + + + + + + True + False + Input/Output limit of block devices + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + True + + + + + + + True + False + Manual input (for advanced users) + + + + + False + True + 3 + + + + + False + True + 1 + + + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + Cancel + True + True + True + image1 + + + False + True + end + 1 + + + + + Save + True + True + True + image2 + + + False + True + end + 1 + + + + + False + True + 3 + + + + + + + True + False + True + + + True + False + CPU and RAM quotas - Adding + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-resourcequota + 5 + + + + + + + + + + + + + diff --git a/ubl-settings-resourcequota.css b/ubl-settings-resourcequota.css index 49019ef..f63069a 100644 --- a/ubl-settings-resourcequota.css +++ b/ubl-settings-resourcequota.css @@ -1,57 +1,39 @@ -.textHead{ - text-shadow: 2px 2px @theme_bg_color; - color: @theme_text_color; -} -.boxInfoMessError{ - background-color: #ea9999; -} -.boxInfoMessOK{ - background-color: #f3f0ac; -} -.bannerbackground { - background-color: #404040; -} -.view_app { - background-color: @theme_bg_color; +.noborder { + border:none; } -.view_app.view.cell:selected { - background-color:@theme_selected_bg_color; - color:@theme_selected_text_color; - transition: 10ms ease-out; - border-radius: 3px; +.textHead{ + text-shadow: 2px 2px @theme_bg_color; + color: @theme_text_color; } -#GnomeIcon{ - border-style:solid; - border-bottom-width: 1px; - border-image: linear-gradient(90deg, alpha(@theme_text_color,0.4) 55%, alpha(@theme_bg_color, 0) 100%); - border-image-slice: 1; +.thin { + margin:0px; + padding:0px; } - -#SepIcon{ - background-color: alpha(@theme_text_color, 0.6); +.inherited>* { + border:none; + background:inherit; } - -#iconlabel { - font-size:14px; - font-weight: bold; - +.opacited { + opacity:0.98; } -.roundborder * { - border-width:0px; - border-radius:5px; +.borders { +border-radius: 2px; +border-width: 1px; +border-color: @theme_text_color; } -.noborder { - border: none; +.workingbg { + background:@theme_base_color; } -.menu:hover { - border-color:alpha(@theme_text_color, 0.01); +.textoutline { + text-shadow: 0.5px 0 0.5px @theme_bg_color, +0 0.5px 0.5px @theme_bg_color, +-0.5px 0 0.5px @theme_bg_color, +0 -0.5px 0.5px @theme_bg_color; } -.menu { - border-color:alpha(@theme_text_color, 0.01); +.nobackground { + background: none; } -.menu:hover >* { - border-color:alpha(@theme_text_color, 0.01); -}.menuitembottom{ +.menuitembottom{ margin-top:0px; margin-bottom:3px; border-color:inherit; @@ -73,25 +55,19 @@ border-left-width:inherit; border-right-width:inherit; } - .menuitemtop *{ + .menuitemtop>*{ margin:2px 2px 0 2px; - padding-top:2px; - padding-bottom:2px; - /* padding: 5px 0px 3px 5px; */ + padding: 5px 10px 3px 5px; border:transparent; } - .menuitemmiddle *{ + .menuitemmiddle>*{ margin:0 2px 0 2px; - padding-top:2px; - padding-bottom:2px; - /* padding: 3px 0px 3px 5px; */ + padding: 3px 10px 3px 5px; border:transparent; } - .menuitembottom *{ + .menuitembottom>*{ margin:0 2px 2px 2px; - padding-top:2px; - padding-bottom:2px; - /* padding: 3px 0px 5px 5px; */ + padding: 3px 10px 5px 5px; } .menuitemtop:hover { background:@theme_bg_color; @@ -114,68 +90,68 @@ border-right-width:inherit; } - .menuitemtop:hover* { + .menuitemtop:hover>* { margin:2px 2px 0 2px; - padding-top:2px; - padding-bottom:2px; - /* padding: 5px 0 3px 5px; */ + padding: 5px 10px 3px 5px; background:@theme_selected_bg_color; border-radius:2px; } - .menuitemmiddle:hover* { - margin:0 2px 0px 2px; - padding-top:2px; - padding-bottom:2px; - /* padding: 3px 0px 3px 5px; */ + .menuitemmiddle:hover>* { + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; background:@theme_selected_bg_color; border-radius:2px; } - .menuitembottom:hover* { + .menuitembottom:hover>* { margin:0 2px 2px 2px; - padding-top:2px; - padding-bottom:2px; - /* padding: 3px 0px 5px 5px; */ + padding: 3px 10px 5px 5px; background:@theme_selected_bg_color; border-radius:2px; } -.workingbg, #workingbg { - background-color:@theme_base_color; -} -.workingbg.view.cell:selected { - background-color:@theme_selected_bg_color; -} -.workingbg.view.cell:hover { - background-color:darker(@theme_selected_bg_color); - color:@theme_selected_text_color; - border-radius:3px; -} -.bkim { - transition: 200ms ease-out; - background-image: none; -} -.noborder{ -border:none; + .boxInfoMessError{ + background-color: #ea9999; } -.bkim{ -opacity:0.99; -border:none; +.boxInfoMessOK{ + background-color: #f3f0ac; +} +.nohover { + margin:3px 2px 3px 2px; + border-radius:2px; } -.bkim_no_plug{ -background-color: transparent; -opacity:0.99; +.nohover:hover { + background-color: transparent; + margin:3px 2px 3px 2px; + border-radius:2px; + color:inherit; } -.thin{ - margin:0px; - padding: 0px; -} -.nobg{ - background: none; +.aaa{ + margin-top:0px; + margin-bottom:0px; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; } -.addbg * { - background-color: @theme_bg_color; +.aaa *{ + margin:0 2px 0 2px; + padding-top: 3px; + padding-bottom:3px; + border:transparent; +} +.aaa:hover { + background:@theme_bg_color; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; +} +.aaa:hover * { + margin:0 2px 0 2px; + padding-top: 3px; + padding-bottom:3px; + background:@theme_selected_bg_color; + border-radius:2px; } \ No newline at end of file diff --git a/ubl-settings-resourcequota.glade b/ubl-settings-resourcequota.glade index 57eb21d..42681ad 100644 --- a/ubl-settings-resourcequota.glade +++ b/ubl-settings-resourcequota.glade @@ -1,8 +1,9 @@ - + + False False @@ -15,7 +16,7 @@ 1.0 Copyright © 2022 - 2023, UBSoft LLC CPU and RAM quotas - https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-resourcequota + https://wiki.ublinux.com/ Project Home Page Это приложение распространяется без каких-либо гарантий. Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. @@ -60,7 +61,7 @@ 5 5 2 - ubl-settings-resourcequota + CPU and RAM quotas @@ -205,2179 +206,6 @@ 1 10 - - False - start - False - com.ublinux.ubl-settings-resourcequota - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Quota object - - - False - True - 0 - - - - - 100 - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - User - Process - Slice - - - - True - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Soft Restriction - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a1 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 0 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Severe Restriction - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a2 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 1 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - RAM limit - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a3 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Paging file limit - - - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a4 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - % - - - False - True - 2 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - CPU limit - - - - - True - True - 1 - - - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Device: - 0 - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Read - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a5 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 0 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Write - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a6 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 1 - - - - - False - True - 1 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Input/Output limit of block devices - - - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - - - - - - - True - False - Manual input (for advanced users) - - - - - False - True - 3 - - - - - False - True - 1 - - - - - True - False - - - True - False - - - False - True - 0 - - - - - True - True - True - 5 - 5 - 5 - 5 - 5 - 5 - - - True - False - - - True - False - gtk-stop - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - Cancel - - - False - True - 1 - - - - - - - False - True - end - 1 - - - - - True - True - True - 5 - 5 - 5 - 5 - 5 - 5 - - - True - False - - - True - False - gtk-save - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - Save - - - False - True - 1 - - - - - - - False - True - end - 1 - - - - - False - True - 2 - - - - - - - True - False - True - - - True - False - Settings quotas - Adding - - - - - - - - True - False - 32 - com.ublinux.ubl-settings-resourcequota - 5 - - - - - - - False - start - False - com.ublinux.ubl-settings-resourcequota - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Quota object: - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Soft Restriction - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a1 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 0 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Severe Restriction - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a2 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 1 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - RAM limit - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a3 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Paging file limit - - - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a4 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - % - - - False - True - 2 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - CPU limit - - - - - True - True - 1 - - - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Device: - 0 - - - False - True - 0 - - - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Read - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a5 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 0 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Write - 0 - - - False - True - 0 - - - - - True - False - - - True - True - False - 5 - 5 - 5 - 5 - 5 - 5 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - 7 - a6 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0 - 0 - - Kb - Mb - Gb - Tb - - - - False - True - 2 - - - - - False - True - 1 - - - - - True - True - 1 - - - - - False - True - 1 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - Input/Output limit of block devices - - - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - - - - - - - True - False - Manual input (for advanced users) - - - - - False - True - 3 - - - - - False - True - 1 - - - - - True - False - - - True - False - - - False - True - 0 - - - - - True - True - True - 5 - 5 - 5 - 5 - 5 - 5 - - - True - False - - - True - False - gtk-stop - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - Cancel - - - False - True - 1 - - - - - - - False - True - end - 1 - - - - - True - True - True - 5 - 5 - 5 - 5 - 5 - 5 - - - True - False - - - True - False - gtk-save - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - Save - - - False - True - 1 - - - - - - - False - True - end - 1 - - - - - False - True - 2 - - - - - - - True - False - True - - - True - False - Settings quotas - Editing - - - - - - - - True - False - 32 - com.ublinux.ubl-settings-resourcequota - 5 - - - - - 1 10000 @@ -2410,6 +238,21 @@ 1 10 + + True + False + emblem-synchronizing-symbolic + + + True + False + emblem-synchronizing-symbolic + + + True + False + emblem-synchronizing-symbolic + True False @@ -2421,10 +264,11 @@ emblem-ok-symbolic + 450 False False 450 - dialog-question-symbolic + com.ublinux.ubl-settings-resourcequota True @@ -2604,7 +448,7 @@ translated and supported by community. True False - UBLinux Settings + CPU and RAM quotas @@ -2615,31 +459,27 @@ translated and supported by community. - + - + - + - + - + - + - + - + + + - - True - False - False - False - - + True False False @@ -2647,6 +487,7 @@ translated and supported by community. True False + Load global configuration @@ -2656,13 +497,20 @@ translated and supported by community. True False + Load local configuration - + + True + False + False + False + + True False False @@ -2670,6 +518,7 @@ translated and supported by community. True False + Save configuration @@ -2679,6 +528,7 @@ translated and supported by community. True False + Save to global configuration @@ -2688,6 +538,7 @@ translated and supported by community. True False + Save to local configuration @@ -2695,14 +546,11 @@ translated and supported by community. - 640 - 500 + 800 + 600 False - center - 700 - 500 com.ublinux.ubl-settings-resourcequota - center + CPU and RAM quotas True @@ -2808,7 +656,6 @@ translated and supported by community. 5 5 5 - 5 5 True True @@ -2817,17 +664,11 @@ translated and supported by community. True False - 5 - 5 - 5 - 5 - 5 - 5 True True vertical - + True True @@ -2839,160 +680,168 @@ translated and supported by community. True True - in - + True - False + True + adjustment5 + liststore + 0 + + + - - True - True - adjustment5 - liststore - 0 - - - + + True + fixed + 15 + Quota type + True - - True - fixed - Type quota - True - - - word - - - 0 - - + + word + - + + 0 + + + + + + True + fixed + 15 + Quota +target + True - - True - fixed - Quota -object - True - - - word - - - 1 - - + + word + - + + 1 + - - - True - fixed - Soft RAM limit, + + + + + True + fixed + 15 + Soft RAM limit, (volume) - True - - - word - - - 2 - - + True + + + word + - + + 2 + - - - True - fixed - Hard RAM limit, + + + + + True + fixed + 15 + Hard RAM limit, (volume) - True - - - word - - - 3 - - + True + + + word + - + + 3 + - - - True - fixed - Swap file + + + + + True + fixed + 15 + Swap file limit (volume) - True - - - word - - - 4 - - + True + + + word + - + + 4 + - - - True - fixed - CPU limit + + + + + True + fixed + 15 + CPU limit (%) - True - - - word - - - 5 - - + True + + + word + - + + 5 + - - - True - fixed - I/O + + + + + True + fixed + 15 + I/O limit (read) - True - - - word - 100 - - - 6 - - + True + + + word + 100 + - + + 6 + - - - True - fixed - I/O + + + + + autosize + 15 + I/O limit (write) - True - - - word - 100 - - - 7 - - + True + + + word + 100 + - + + 7 + @@ -3010,7 +859,7 @@ limit True False - + True True True @@ -3028,7 +877,7 @@ limit True False - com.ublinux.ubl-settings-resourcequota.funnel + com.ublinux.ubl-settings-resourcequota.funnel-symbolic False @@ -3062,10 +911,7 @@ limit - - - - + True True True @@ -3083,7 +929,7 @@ limit True False - tab-new-symbolic + value-increase-symbolic False @@ -3118,7 +964,7 @@ limit - + True True True @@ -3136,7 +982,7 @@ limit True False - error-correct-symbolic + document-edit-symbolic False @@ -3171,7 +1017,7 @@ limit - + True True True @@ -3189,7 +1035,7 @@ limit True False - software-remove-symbolic + user-trash-symbolic False @@ -3224,7 +1070,7 @@ limit - + True True True @@ -3289,7 +1135,7 @@ limit True False - List quotas + Quotas list False @@ -3299,22 +1145,24 @@ limit True False + 5 + 5 + 5 + 5 vertical + 5 True False + 5 - - True - False - 5 - 5 - 5 - 5 - 5 - 5 + Update every + True + True + False + True False @@ -3323,15 +1171,10 @@ limit - + True + False True - 5 - 5 - 5 - 5 - 5 - 5 6 1 adjustDisp @@ -3339,78 +1182,34 @@ limit False True - 1 + 2 True False - 5 - 5 - 5 - 5 - 5 - 5 seconds False True - 2 + 3 - + + Update True True True - 5 - 5 - 5 - 5 - 5 - 5 - - - True - False - center - - - True - False - emblem-synchronizing-symbolic - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - Update - - - False - True - 1 - - - - + image1 - True + False True - 3 + end + 4 @@ -3425,7 +1224,7 @@ limit True False - + True False True @@ -3482,23 +1281,23 @@ limit True False + 5 + 5 + 5 + 5 vertical + 5 True False + 5 - + All groups including empty True True - False - 5 - 5 - 5 - 5 - 5 - 5 + False True @@ -3508,17 +1307,11 @@ limit - + Core streams True True False - 5 - 5 - 5 - 5 - 5 - 5 True @@ -3527,6 +1320,21 @@ limit 1 + + + Update + True + True + True + image2 + + + False + True + end + 2 + + False @@ -3539,7 +1347,7 @@ limit True False - + True False True @@ -3547,7 +1355,7 @@ limit adjustment2 natural UTF-8 - 1024 + 0 True False @@ -3597,21 +1405,21 @@ limit True False + 5 + 5 + 5 + 5 vertical + 5 True False + 5 True False - 5 - 5 - 5 - 5 - 5 - 5 View properties for @@ -3621,15 +1429,9 @@ limit - + True False - 5 - 5 - 5 - 5 - 5 - 5 0 0 @@ -3645,15 +1447,9 @@ limit - + True False - 5 - 5 - 5 - 5 - 5 - 5 True @@ -3661,6 +1457,21 @@ limit 2 + + + Update + True + True + True + image3 + + + False + True + end + 3 + + False @@ -3673,7 +1484,7 @@ limit True False - + True False True @@ -3776,7 +1587,7 @@ limit 5 5 2 - ubl-settings-resourcequota + CPU and RAM quotas @@ -3786,12 +1597,8 @@ limit True False - 5 - 5 5 5 - 6 - 6 32 com.ublinux.ubl-settings-resourcequota @@ -3806,7 +1613,8 @@ limit True False True - menuSave + menu3 + False True @@ -3815,6 +1623,8 @@ limit True False + 5 + 5 Save @@ -3852,7 +1662,7 @@ limit False True True - menuAbout + menu2 none @@ -3883,7 +1693,8 @@ limit True False True - menuLoad + menu1 + False True @@ -3892,6 +1703,8 @@ limit True False + 5 + 5 Load @@ -3932,287 +1745,4 @@ limit - - vertical - - - - - - - - False - start - False - com.ublinux.ubl-settings-resourcequota - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - vertical - - - Type quota - True - True - False - start - True - - - False - True - 0 - - - - - Quota volume - True - True - False - start - True - - - False - True - 1 - - - - - Soft RAM limit, (volume) - True - True - False - start - True - - - False - True - 2 - - - - - Hard RAM limit, (volume) - True - True - False - start - True - - - False - True - 3 - - - - - True - False - end - 5 - 5 - True - - - True - True - True - center - - - True - False - - - True - False - gtk-stop - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - Cancel - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - True - True - center - - - True - False - - - True - False - gtk-save - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - Save - - - False - True - 1 - - - - - - - False - True - 1 - - - - - False - True - end - 5 - - - - - Swap file limit (volume) - True - True - False - start - True - - - False - True - 5 - - - - - CPU limit (%) - True - True - False - start - True - - - False - True - 6 - - - - - I/O limit (read) - True - True - False - start - True - - - False - True - 7 - - - - - I/O limit (write) - True - True - False - start - True - - - False - True - 8 - - - - - - - True - False - True - - - True - False - Filters - - - - - - - - True - False - 32 - com.ublinux.ubl-settings-resourcequota - 5 - - - - - diff --git a/ubl-settings-resourcequota.pot b/ubl-settings-resourcequota.pot index 69e01e4..98a3ac3 100644 --- a/ubl-settings-resourcequota.pot +++ b/ubl-settings-resourcequota.pot @@ -1,257 +1,408 @@ -# Language translations for ubl-settings-diskquota package. +# Language translations for ubl-settings-resourcequota package. # Copyright (C) 2022, UBTech LLC -# This file is distributed under the same license as the ubl-settings-diskquota package. +# This file is distributed under the same license as the ubl-settings-resourcequota package. # UBLinux Team , 2022 # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: ubl-settings-resourcequota 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 16:09+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Update" +#: source/ubl-strings.h:1 +msgid "Version:" msgstr "" -msgid "" -"Warning! Application was launched without root - root-dependent actions are " -"locked" +#: source/ubl-strings.h:2 +msgid "ubl-settings-resourcequota version:" msgstr "" -msgid "Config loading failed" +#: source/ubl-strings.h:2 source/ubl-strings.h:4 +msgid "CPU and RAM quotas" msgstr "" -msgid "Remove" +#: source/ubl-strings.h:2 +msgid "Usage:" msgstr "" -msgid "User" +#: source/ubl-strings.h:2 +msgid "[OPTIONS]" msgstr "" -msgid "Group" +#: source/ubl-strings.h:2 +msgid "Options:" msgstr "" -msgid "Process" +#: source/ubl-strings.h:2 +msgid "Show this help" msgstr "" -msgid "Slice" +#: source/ubl-strings.h:2 +msgid "Show package version" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock this help menu" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock configuration saving" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock local configration saving" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock global configration saving" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock global configration loading" +msgstr "" + +#: source/ubl-strings.h:3 +msgid "" +"Warning! Application was launched without root - root-dependent actions are " +"locked" +msgstr "" + +#: source/ubl-strings.h:5 +msgid "" +"Configuring CPU and RAM quota settings for groups and users of the system" +msgstr "" + +#: source/ubl-strings.h:7 +msgid "Operation succeeded" msgstr "" +#: source/ubl-strings.h:8 +msgid "About" +msgstr "" + +#: source/ubl-strings.h:9 msgid "Documentation" msgstr "" +#: source/ubl-strings.h:10 msgid "Save to local configuration" msgstr "" -#: source/ubl-strings.h:10 +#: source/ubl-strings.h:11 msgid "Save to global configuration" msgstr "" -#: source/ubl-strings.h:11 +#: source/ubl-strings.h:12 source/ubl-strings.h:47 msgid "Save configuration" msgstr "" -msgid "Kb" +#: source/ubl-strings.h:13 +msgid "Save" msgstr "" -msgid "Mb" +#: source/ubl-strings.h:14 +msgid "Load local configuration" msgstr "" -msgid "Gb" +#: source/ubl-strings.h:15 +msgid "Load global configuration" msgstr "" -msgid "Tb" +#: source/ubl-strings.h:16 source/ubl-strings.h:17 +msgid "Load" msgstr "" -msgid "Type quota" +#: source/ubl-strings.h:19 +msgid "Cancel" msgstr "" -msgid "Quota volume" +#: source/ubl-strings.h:21 +msgid "Would you like to read documentation in the Web?" msgstr "" -msgid "Soft RAM limit, (volume)" +#: source/ubl-strings.h:22 +msgid "" +"You will be redirected to documentation website, where documentation is\n" +"translated and supported by community." msgstr "" -msgid "Hard RAM limit, (volume)" +#: source/ubl-strings.h:23 +msgid "Always redirect to online documentation" msgstr "" -msgid "Swap file limit (volume)" +#: source/ubl-strings.h:24 +msgid "Open documentation" msgstr "" -msgid "CPU limit (%)" +#: source/ubl-strings.h:25 +msgid "Project homepage" msgstr "" -msgid "I/O limit (read)" +#: source/ubl-strings.h:26 +msgid "Nothing were chosen" msgstr "" -msgid "I/O limit (write)" +#: source/ubl-strings.h:28 +msgid "User" msgstr "" -msgid "Filters" +#: source/ubl-strings.h:29 +msgid "Group" msgstr "" -msgid "List quotas" +#: source/ubl-strings.h:30 +msgid "Process" msgstr "" -msgid "Dispatcher" +#: source/ubl-strings.h:31 +msgid "Slice" msgstr "" -msgid "Processes" +#: source/ubl-strings.h:33 +msgid "Kb" msgstr "" -msgid "Information" +#: source/ubl-strings.h:34 +msgid "Mb" msgstr "" -msgid "seconds" +#: source/ubl-strings.h:35 +msgid "Gb" msgstr "" -msgid "Update every" +#: source/ubl-strings.h:36 +msgid "Tb" msgstr "" -msgid "Core streams" +#: source/ubl-strings.h:38 +msgid "Global configuration loading succeeded." msgstr "" -msgid "All groups including empty" +#: source/ubl-strings.h:39 +msgid "Local configuration loading succeeded." msgstr "" -msgid "View properties for" +#: source/ubl-strings.h:41 +msgid "Local and global configuration saving succeeded." msgstr "" -msgid "Setting resource quotas" +#: source/ubl-strings.h:42 +msgid "Global configuration saving succeeded." msgstr "" -msgid "CPU and RAM quotas" +#: source/ubl-strings.h:43 source/ubl-strings.h:49 +msgid "Local configuration saving succeeded." +msgstr "" + +#: source/ubl-strings.h:44 source/ubl-strings.h:45 source/ubl-strings.h:46 +msgid "Quota deleted" +msgstr "" + +#: source/ubl-strings.h:48 +msgid "Nothing to save!" msgstr "" +#: source/ubl-strings.h:50 +msgid "Config loading failed" +msgstr "" + +#: source/ubl-strings.h:52 +msgid "Quotas list" +msgstr "" + +#: source/ubl-strings.h:53 +msgid "Dispatcher" +msgstr "" + +#: source/ubl-strings.h:54 +msgid "Processes" +msgstr "" + +#: source/ubl-strings.h:55 source/ubl-strings.h:76 msgid "Information" msgstr "" -msgid "Delete" +#: source/ubl-strings.h:57 +msgid "Quota type" msgstr "" -msgid "Edit" +#: source/ubl-strings.h:58 +msgid "" +"Quota\n" +"target" msgstr "" -msgid "Add" +#: source/ubl-strings.h:59 +msgid "" +"Soft RAM limit,\n" +"(volume)" msgstr "" -msgid "Error saved local and global configuration" +#: source/ubl-strings.h:60 +msgid "" +"Hard RAM limit,\n" +"(volume)" msgstr "" +#: source/ubl-strings.h:61 msgid "" -"GTK settings disk quota for UBLinux\n" -"\n" -"Usage: ubl-settings-diskquota [OPTIONS...]\n" -"Options:\n" -" -h, --help\t Show this help\n" -" -V, --version\t Show package version\n" -" --lock-help Lock utility help\n" -" --lock-save Lock saving local and global configuration\n" -" --lock-save-local Lock save global configuration\n" -" --lock-save-global Lock load global configuration\n" -" --lock-load-global Lock load global configuration\n" +"Swap file\n" +"limit\n" +"(volume)" msgstr "" -msgid "Global configuration read error" +#: source/ubl-strings.h:62 +msgid "" +"CPU limit\n" +"(%)" msgstr "" -msgid "Global configuration write error" +#: source/ubl-strings.h:63 +msgid "" +"I/O\n" +"limit\n" +"(read)" msgstr "" -msgid "Nothing to save!" +#: source/ubl-strings.h:64 +msgid "" +"I/O\n" +"limit\n" +"(write)" msgstr "" -msgid "Project Home Page" +#: source/ubl-strings.h:66 +msgid "Quota target" msgstr "" -msgid "Save" +#: source/ubl-strings.h:67 +msgid "Soft RAM limit, n(volume)" msgstr "" -msgid "Save in global and local configuration" +#: source/ubl-strings.h:68 +msgid "Hard RAM limit, (volume)" msgstr "" -msgid "Save in global configuration" +#: source/ubl-strings.h:69 +msgid "Swap file limit (volume)" msgstr "" -msgid "Save in local configuration" +#: source/ubl-strings.h:70 +msgid "CPU limit (%)" msgstr "" -msgid "Global configuration downloaded successfully" +#: source/ubl-strings.h:71 +msgid "I/O limit (read)" msgstr "" -msgid "Load" +#: source/ubl-strings.h:72 +msgid "I/O limit (write)" msgstr "" -msgid "Load global configuration" +#: source/ubl-strings.h:73 +msgid "Accept" msgstr "" -msgid "Load local configuration" +#: source/ubl-strings.h:75 +msgid "Filters" msgstr "" -msgid "Local configuration downloaded successfully" +#: source/ubl-strings.h:77 +msgid "Remove" msgstr "" -msgid "Local configuration reading error" +#: source/ubl-strings.h:78 +msgid "Edit" msgstr "" -msgid "Local configuration successfully written" +#: source/ubl-strings.h:79 +msgid "Add" msgstr "" -msgid "Local configuration write error" +#: source/ubl-strings.h:81 +msgid "Update every" msgstr "" -msgid "Help" +#: source/ubl-strings.h:82 +msgid "seconds" msgstr "" -msgid "About" +#: source/ubl-strings.h:83 +msgid "Update" +msgstr "" + +#: source/ubl-strings.h:85 +msgid "All groups including empty" msgstr "" -msgid "Settings quotas - Editing" +#: source/ubl-strings.h:86 +msgid "Core streams" msgstr "" -msgid "Quota object" +#: source/ubl-strings.h:88 +msgid "View properties for" msgstr "" +#: source/ubl-strings.h:90 +msgid "CPU and RAM quotas - Adding" +msgstr "" + +#: source/ubl-strings.h:91 +msgid "CPU and RAM quotas - Editing" +msgstr "" + +#: source/ubl-strings.h:92 msgid "Quota object:" msgstr "" +#: source/ubl-strings.h:93 msgid "RAM limit" msgstr "" -msgid "Soft Restriction" +#: source/ubl-strings.h:94 +msgid "Soft restriction" msgstr "" -msgid "Severe Restriction" +#: source/ubl-strings.h:95 +msgid "Hard restriction" msgstr "" +#: source/ubl-strings.h:96 msgid "Paging file limit" msgstr "" +#: source/ubl-strings.h:97 msgid "CPU limit" msgstr "" +#: source/ubl-strings.h:98 msgid "Input/Output limit of block devices" msgstr "" +#: source/ubl-strings.h:99 msgid "Device:" msgstr "" +#: source/ubl-strings.h:100 msgid "Read" msgstr "" +#: source/ubl-strings.h:101 msgid "Write" msgstr "" -msgid "Manual input (for advanced users)" +#: source/ubl-strings.h:102 +msgid "Apply changes of operations limit" msgstr "" -msgid "Settings quotas - Adding" +#: source/ubl-strings.h:103 +msgid "Manual input (for advanced users)" msgstr "" - - diff --git a/ubl-settings-resourcequota_ru.po b/ubl-settings-resourcequota_ru.po index 90cee88..bfe1aa6 100644 --- a/ubl-settings-resourcequota_ru.po +++ b/ubl-settings-resourcequota_ru.po @@ -1,60 +1,34 @@ -# Russian translations for ubl-settings-diskquota package. +# Russian translations for ubl-settings-resourcequota package. # Copyright (C) 2022, UBTech LLC -# This file is distributed under the same license as the ubl-settings-diskquota package. +# This file is distributed under the same license as the ubl-settings-resourcequota package. # UBLinux Team , 2022 # #, fuzzy -msgid "test" +msgid "" msgstr "" -"Project-Id-Version: ubl-settings-bootloader 1.0\n" +"Project-Id-Version: ubl-settings-resourcequota 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 16:09+0000\n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" "PO-Revision-Date: 2023-01-01 00:00+0600\n" "Last-Translator: UBLinux Team \n" "Language-Team: Russian - UBLinux Team \n" "Language: Russian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit" -#: source/ubl-strings.h:9 -#: source/ubl-strings.h:8 -#: source/ubl-strings.h:1 - -msgid "Update" -msgstr "Обновить" - -msgid "Open documentation" -msgstr "Прочитать справку" - -msgid "Config loading failed" -msgstr "Не удалось загрузить конфигурацию" - -msgid "" -"Warning! Application was launched without root - root-dependent actions are " -"locked" -msgstr "Внимание! Приложение было запущено без прав суперпользователя - действия, требующие их наличия заблокированы" - -msgid "Quota deleted" -msgstr "Квота удалена" - -msgid "User" -msgstr "Пользователь" - -msgid "Group" -msgstr "Группа" - -msgid "Process" -msgstr "Процесс" - -msgid "Slice" -msgstr "Слайс" +"Content-Transfer-Encoding: 8bit\n" +#: source/ubl-strings.h:1 msgid "Version:" msgstr "Версия:" #: source/ubl-strings.h:2 -msgid "CPU and RAM quotas settings" -msgstr "Настройки квот процессора и ОЗУ" +#, fuzzy +msgid "ubl-settings-resourcequota version:" +msgstr "Версия ubl-settings-resourcequota: " + +#: source/ubl-strings.h:2 source/ubl-strings.h:4 +msgid "CPU and RAM quotas" +msgstr "Квоты процессора и ОЗУ" #: source/ubl-strings.h:2 msgid "Usage:" @@ -81,9 +55,8 @@ msgid "Lock this help menu" msgstr "Блокировка вызова справки" #: source/ubl-strings.h:2 -#, fuzzy msgid "Lock configuration saving" -msgstr "Блокировка сохранения локальной и глобальной конфигурации" +msgstr "Блокировка сохранения конфигурации" #: source/ubl-strings.h:2 msgid "Lock local configration saving" @@ -97,296 +70,366 @@ msgstr "Блокировка сохранения глобальной конф msgid "Lock global configration loading" msgstr "Блокировка загрузки глобальной конфигурации" -msgid "Read Online" -msgstr "Читать онлайн" - -msgid "Always redirect to online documentation" -msgstr "Всегда перенаправлять" - -msgid "Would you like to read documentation in the Web?" -msgstr "Вы хотите прочитать справку в Сети?" +#: source/ubl-strings.h:3 +msgid "" +"Warning! Application was launched without root - root-dependent actions are " +"locked" +msgstr "" +"Внимание! Приложение было запущено без прав суперпользователя - действия, " +"требующие их наличия заблокированы" +#: source/ubl-strings.h:5 msgid "" -"You will be redirected to documentation website where documentation is\n" -"translated and supported by community." +"Configuring CPU and RAM quota settings for groups and users of the system" msgstr "" -"Вы будете перенаправлены на сайт с документацией где страницы помощи\n" -"переводятся и поддерживаются сообществом." +"Настройка параметров квот процессорного времени и ОЗУ для групп и " +"пользователей системы" + +#: source/ubl-strings.h:7 +msgid "Operation succeeded" +msgstr "Операция завершена" + +#: source/ubl-strings.h:8 +msgid "About" +msgstr "О программе" +#: source/ubl-strings.h:9 msgid "Documentation" msgstr "Справка" +#: source/ubl-strings.h:10 msgid "Save to local configuration" msgstr "Сохранить в локальную конфигурацию" -#: source/ubl-strings.h:10 +#: source/ubl-strings.h:11 msgid "Save to global configuration" msgstr "Сохранить в глобальную конфигурацию" -#: source/ubl-strings.h:11 +#: source/ubl-strings.h:12 source/ubl-strings.h:47 msgid "Save configuration" msgstr "Сохранить конфигурацию" -msgid "Kb" -msgstr "Кб" +#: source/ubl-strings.h:13 +msgid "Save" +msgstr "Сохранить" -msgid "Mb" -msgstr "Мб" +#: source/ubl-strings.h:14 +msgid "Load local configuration" +msgstr "Загрузить локальную конфигуруцию" -msgid "Gb" -msgstr "Гб" +#: source/ubl-strings.h:15 +msgid "Load global configuration" +msgstr "Загрузить глобальную конфигурацию" -msgid "Tb" -msgstr "Тб" +#: source/ubl-strings.h:16 source/ubl-strings.h:17 +msgid "Load" +msgstr "Загрузить" -msgid "Type quota" -msgstr "Тип квоты" +#: source/ubl-strings.h:19 +msgid "Cancel" +msgstr "Отмена" -msgid "Quota volume" -msgstr "Объект квотирования" +#: source/ubl-strings.h:21 +msgid "Would you like to read documentation in the Web?" +msgstr "Вы хотите прочитать справку в Сети?" -msgid "Soft RAM limit, (volume)" -msgstr "Мягкий лимит ОЗУ, (объём)" +#: source/ubl-strings.h:22 +msgid "" +"You will be redirected to documentation website, where documentation is\n" +"translated and supported by community." +msgstr "" +"Вы будете перенаправлены на сайт с документацией, где страницы помощи\n" +"переводятся и поддерживаются сообществом." -msgid "Hard RAM limit, (volume)" -msgstr "Жёсткий лимит ОЗУ, (объём)" +#: source/ubl-strings.h:23 +msgid "Always redirect to online documentation" +msgstr "Всегда перенаправлять" -msgid "Swap file limit (volume)" -msgstr "Лимит файла подкачки (объём)" +#: source/ubl-strings.h:24 +msgid "Open documentation" +msgstr "Прочитать справку" -msgid "CPU limit (%)" -msgstr "Лимит ЦПУ (%)" +#: source/ubl-strings.h:25 +msgid "Project homepage" +msgstr "Домашняя страница проекта" -msgid "I/O limit (read)" -msgstr "Лимит I/O (чтение)" +#: source/ubl-strings.h:26 +msgid "Nothing were chosen" +msgstr "Ничего не было выбрано" -msgid "I/O limit (write)" -msgstr "Лимит I/O (запись)" +#: source/ubl-strings.h:28 +msgid "User" +msgstr "Пользователь" -msgid "Filters" -msgstr "Фильтры" +#: source/ubl-strings.h:29 +msgid "Group" +msgstr "Группа" -msgid "Quota\nvolume" -msgstr "Объем\nквотирования" +#: source/ubl-strings.h:30 +msgid "Process" +msgstr "Процесс" -msgid "Soft RAM limit,\n(volume)" -msgstr "Мягкий лимит ОЗУ,\n(объём)" +#: source/ubl-strings.h:31 +msgid "Slice" +msgstr "Слайс" -msgid "Hard RAM limit,\n(volume)" -msgstr "Жёсткий лимит ОЗУ,\n(объём)" +#: source/ubl-strings.h:33 +msgid "Kb" +msgstr "Кб" -msgid "Swap file\nlimit\n(volume)" -msgstr "Лимит файлов\nподкачки\n(объём)" +#: source/ubl-strings.h:34 +msgid "Mb" +msgstr "Мб" -msgid "CPU limit\n(%)" -msgstr "Лимит ЦПУ\n(%)" +#: source/ubl-strings.h:35 +msgid "Gb" +msgstr "Гб" -msgid "I/O\nlimit\n(read)" -msgstr "Лимит\nI/O\n(чтение)" +#: source/ubl-strings.h:36 +msgid "Tb" +msgstr "Тб" -msgid "I/O\nlimit\n(write)" -msgstr "Лимит\nI/O\n(запись)" +#: source/ubl-strings.h:38 +msgid "Global configuration loading succeeded." +msgstr "Успешно загружена глобальная конфигурация" + +#: source/ubl-strings.h:39 +msgid "Local configuration loading succeeded." +msgstr "Успешно загружена локальная конфигурация" + +#: source/ubl-strings.h:41 +msgid "Local and global configuration saving succeeded." +msgstr "Успешно записана конфигурация" + +#: source/ubl-strings.h:42 +msgid "Global configuration saving succeeded." +msgstr "Успешно записана глобальная конфигурация" + +#: source/ubl-strings.h:43 source/ubl-strings.h:49 +msgid "Local configuration saving succeeded." +msgstr "Успешно записана локальная конфигурация" + +#: source/ubl-strings.h:44 source/ubl-strings.h:45 source/ubl-strings.h:46 +msgid "Quota deleted" +msgstr "Квота удалена" + +#: source/ubl-strings.h:48 +msgid "Nothing to save!" +msgstr "Ничего не было выбрано" + +#: source/ubl-strings.h:50 +msgid "Config loading failed" +msgstr "Ошибка загрузки конфигурации" -msgid "List quotas" +#: source/ubl-strings.h:52 +msgid "Quotas list" msgstr "Список квот" +#: source/ubl-strings.h:53 msgid "Dispatcher" msgstr "Диспетчер" +#: source/ubl-strings.h:54 msgid "Processes" msgstr "Процессы" +#: source/ubl-strings.h:55 source/ubl-strings.h:76 msgid "Information" msgstr "Информация" -msgid "seconds" -msgstr "сек." - -msgid "Update every" -msgstr "Обновлять каждые" - -msgid "Core streams" -msgstr "Потоки ядра" - -msgid "All groups including empty" -msgstr "Все группы включая пустые" - -msgid "View properties for" -msgstr "Посмотреть свойства для" +#: source/ubl-strings.h:57 +msgid "Quota type" +msgstr "Тип квоты" -msgid "Setting resource quotas" -msgstr "Установка ресурсов квот" +#: source/ubl-strings.h:58 +msgid "" +"Quota\n" +"target" +msgstr "" +"Объект\n" +"квотирования" -msgid "CPU and RAM quotas" -msgstr "Квоты процессора и ОЗУ" +#: source/ubl-strings.h:59 +msgid "" +"Soft RAM limit,\n" +"(volume)" +msgstr "" +"Мягкий лимит ОЗУ,\n" +"(объём)" -msgid "Delete" -msgstr "Удалить" +#: source/ubl-strings.h:60 +msgid "" +"Hard RAM limit,\n" +"(volume)" +msgstr "" +"Жёсткий лимит,\n" +"(объём)" -msgid "Edit" -msgstr "Редактировать" +#: source/ubl-strings.h:61 +msgid "" +"Swap file\n" +"limit\n" +"(volume)" +msgstr "" +"Лимит файла\n" +"подкачки\n" +"(объём)" -msgid "Add" -msgstr "Добавить" +#: source/ubl-strings.h:62 +msgid "" +"CPU limit\n" +"(%)" +msgstr "" +"Лимит ЦПУ\n" +"(%)" -msgid "Error saved local and global configuration" -msgstr "Сохранить глобальную и локальную конфигурацию" +#: source/ubl-strings.h:63 +msgid "" +"I/O\n" +"limit\n" +"(read)" +msgstr "" +"Лимит\n" +"I/O\n" +"(чтение)" +#: source/ubl-strings.h:64 msgid "" -"GTK settings disk quota for UBLinux\n" -"\n" -"Usage: ubl-settings-diskquota [OPTIONS...]\n" -"Options:\n" -" -h, --help\t Show this help\n" -" -V, --version\t Show package version\n" -" --lock-help Lock utility help\n" -" --lock-save Lock saving local and global configuration\n" -" --lock-save-local Lock save global configuration\n" -" --lock-save-global Lock load global configuration\n" -" --lock-load-global Lock load global configuration\n" +"I/O\n" +"limit\n" +"(write)" msgstr "" -"GTK утилита настройки дисковых для UBLinux\n" -"\n" -"Использование: ubl-settings-diskquota [Параметры приложения...]\n" -"Параметры приложения:\n" -" -h, --help\t Показать параметры справки\n" -" -V, --version\t Показать версию пакета\n" -" --lock-help Блокировка вызова справки\n" -" --lock-save Блокировка сохранения локальной и глобальной " -"конфигурации\n" -" --lock-save-local Блокировка сохранения локальной конфигурации\n" -" --lock-save-global Блокировка сохранения глобальной конфигурации\n" -" --lock-load-global Блокировка загрузки глобальной конфигурации\n" - -msgid "Global configuration read error" -msgstr "Сохранить глобальную конфигурацию" - -msgid "Global configuration write error" -msgstr "Сохранить глобальную конфигурацию" +"Лимит\n" +"I/O\n" +"(запись)" -msgid "Remove" -msgstr "Удалить" +#: source/ubl-strings.h:66 +msgid "Quota target" +msgstr "Объект квотирования" -msgid "Nothing to save!" -msgstr "Нечего сохранять!" +#: source/ubl-strings.h:67 +#, fuzzy +msgid "Soft RAM limit, n(volume)" +msgstr "Мягкий лимит ОЗУ, (объём)" -msgid "Project Home Page" -msgstr "Главная страница проекта" +#: source/ubl-strings.h:68 +msgid "Hard RAM limit, (volume)" +msgstr "Жёсткий лимит, (объём)" -msgid "Save" -msgstr "Сохранить" +#: source/ubl-strings.h:69 +msgid "Swap file limit (volume)" +msgstr "Лимит файла подкачки (объём)" -msgid "Save in global and local configuration" -msgstr "Сохранить в глобальную и локальную конфигурацию" +#: source/ubl-strings.h:70 +msgid "CPU limit (%)" +msgstr "Лимит ЦПУ (%)" -msgid "Save in global configuration" -msgstr "Сохранить в глобальную конфигурацию" +#: source/ubl-strings.h:71 +msgid "I/O limit (read)" +msgstr "Лимит I/O (чтение)" -msgid "Save in local configuration" -msgstr "Сохранить в локальную конфигурацию" +#: source/ubl-strings.h:72 +msgid "I/O limit (write)" +msgstr "Лимит I/O (запись)" -msgid "Global configuration downloaded successfully" -msgstr "Успешно загружена глобальная конфигурация" +#: source/ubl-strings.h:73 +msgid "Accept" +msgstr "Принять" -msgid "Load" -msgstr "Загрузить" +#: source/ubl-strings.h:75 +msgid "Filters" +msgstr "Фильтры" -msgid "Load global configuration" -msgstr "Загрузить глобальную конфигурацию" +#: source/ubl-strings.h:77 +msgid "Remove" +msgstr "Удалить" -msgid "Load local configuration" -msgstr "Загрузить локальную конфигурацию" +#: source/ubl-strings.h:78 +msgid "Edit" +msgstr "Изменить" -msgid "Local configuration downloaded successfully" -msgstr "Успешно загружена локальная конфигурация" +#: source/ubl-strings.h:79 +msgid "Add" +msgstr "Добавить" -msgid "Local configuration reading error" -msgstr "Загрузить локальную конфигурацию" +#: source/ubl-strings.h:81 +msgid "Update every" +msgstr "Обновлять каждые" -msgid "Local configuration successfully written" -msgstr "Успешно записана локальная конфигурация" +#: source/ubl-strings.h:82 +msgid "seconds" +msgstr "секунд" -msgid "Local configuration write error" -msgstr "Загрузить локальную конфигурацию" +#: source/ubl-strings.h:83 +msgid "Update" +msgstr "Обновить" -msgid "Help" -msgstr "Справка" +#: source/ubl-strings.h:85 +msgid "All groups including empty" +msgstr "Все группы, включая пустые" -msgid "About" -msgstr "О программе" +#: source/ubl-strings.h:86 +msgid "Core streams" +msgstr "Потоки ядра" + +#: source/ubl-strings.h:88 +msgid "View properties for" +msgstr "Посмотреть свойства для" -msgid "Settings quotas - Editing" -msgstr "Квоты настроек - Редактирование" +#: source/ubl-strings.h:90 +#, fuzzy +msgid "CPU and RAM quotas - Adding" +msgstr "Квоты процессора и ОЗУ - Добавление" -msgid "Quota object" -msgstr "Объект квоты" +#: source/ubl-strings.h:91 +#, fuzzy +msgid "CPU and RAM quotas - Editing" +msgstr "Квоты процессора и ОЗУ - Изменение" +#: source/ubl-strings.h:92 msgid "Quota object:" -msgstr "Объект квоты:" - -msgid "Quota\nobject" -msgstr "Объект\nквоты" +msgstr "Объект квотирования:" +#: source/ubl-strings.h:93 msgid "RAM limit" msgstr "Лимит ОЗУ" -msgid "Soft Restriction" +#: source/ubl-strings.h:94 +msgid "Soft restriction" msgstr "Мягкое ограничение" -msgid "Severe Restriction" -msgstr "Жесткое ограничение" +#: source/ubl-strings.h:95 +msgid "Hard restriction" +msgstr "Жёсткое ограничение" +#: source/ubl-strings.h:96 msgid "Paging file limit" -msgstr "Лимит файлов подкачки" +msgstr "Лимит файла подкачки" +#: source/ubl-strings.h:97 msgid "CPU limit" msgstr "Лимит ЦПУ" +#: source/ubl-strings.h:98 msgid "Input/Output limit of block devices" -msgstr "Лимит операций Ввода/Вывода блочных устройств" +msgstr "Лимит операций ввода/вывода блочных устройств" +#: source/ubl-strings.h:99 msgid "Device:" msgstr "Устройство:" +#: source/ubl-strings.h:100 msgid "Read" msgstr "Чтение" +#: source/ubl-strings.h:101 msgid "Write" msgstr "Запись" +#: source/ubl-strings.h:102 +msgid "Apply changes of operations limit" +msgstr "Применить изменения лимита операций" + +#: source/ubl-strings.h:103 msgid "Manual input (for advanced users)" msgstr "Ручной ввод (для опытных пользователей)" - -msgid "Settings quotas - Adding" -msgstr "Квоты настроек - Добавление" -#: source/ubl-strings.h:24 -msgid "Nothing were chosen" -msgstr "Ничего не было выбрано" - -msgid "Cancel" -msgstr "Отмена" - -#: source/ubl-strings.h:27 -msgid "Global configuration loading succseeded." -msgstr "Успешно загружена глобальная конфигурация" - -#: source/ubl-strings.h:28 -msgid "Local configuration loading succseeded." -msgstr "Успешно загружена локальная конфигурация" - -#: source/ubl-strings.h:30 -msgid "Local and global configuration saving succseeded." -msgstr "Успешно записаны локальная и глобальная конфигурация" - -#: source/ubl-strings.h:31 -msgid "Global configuration saving succseeded." -msgstr "Успешно записана глобальная конфигурация" - -#: source/ubl-strings.h:32 -msgid "Local configuration saving succseeded." -msgstr "Успешно записана локальная конфигурация" - -msgid "Configuring CPU and RAM quota settings for groups and users of the system" -msgstr "Настройка параметров квот процессорного времени и ОЗУ для групп и пользователей системы" - -