diff --git a/.gitignore b/.gitignore index caa5726..5a6c163 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ ubl-settings-resourcequota.glade~ ubl-settings-resourcequota_ru.po~ source/ubl-cmake.h -ubl-settings-resourcequota \ No newline at end of file +ubl-settings-resourcequota +build/ +compile +vgcore.* \ No newline at end of file diff --git a/Makefile b/Makefile index af4d520..c873688 100644 --- a/Makefile +++ b/Makefile @@ -8,10 +8,13 @@ MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) CMAKE_COMMAND = cmake CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile +#CMAKE_SOURCE_DIR = ./source +#CMAKE_BUILD_DIR = ./compile DEPENDS = /bin/cmake PREFIX ?= /usr PKGNAME = $(MAKEFILE_DIR) - +#PKGNAME = ubl-settings-manager +LATEST_TAG= default_target: all .PHONY: all init depend debug prepare check build uninstall install clean help @@ -21,11 +24,11 @@ all: init build init: @echo "Initialize ..."; \ if [ -d ".git" ]; then \ - LATEST_TAG=$$(git describe --tags | sed 's/^v//'); \ + LATEST_TAG=$$(git describe --tags | sed 's/^v//'|grep -oE "^[0-9]{1,}.[0-9]{1,}"); \ else \ LATEST_TAG="0.0"; \ fi; \ - sed -r "s/^(string version_application = ).*/\1\"$${LATEST_TAG}\";/" -i source/${PKGNAME}.h; \ + sed -r "s/^(string version_application).*/\1=\"$${LATEST_TAG}\";/" -i source/${PKGNAME}.h; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: @@ -36,15 +39,16 @@ depend: exit 1; \ fi; \ done; \ - $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B${CMAKE_BUILD_DIR} --check-build-system CMakeFiles/Makefile.cmake 1 || exit 1; \ echo "Check depends: OK" +# $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 -debug: - @echo "Debug ..." +debug: init build + @echo "Debug ..."; \ if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ -# @cc source/my_device.c source/my_device.h source/filters.c source/filters.h source/ubl-cmake.h source/view_edit.h source/view_edit.c source/view_add.h source/view_add.c source/ubl-utils.h source/ubl-utils.c source/ubl-strings.h source/ubl-settings-resourcequota.h source/ubl-settings-resourcequota.c -o ubl-settings-resourcequota `pkg-config --cflags --libs gtk+-3.0 vte-2.91 webkit2gtk-4.0 webkit2gtk-web-extension-4.0` -g fi; \ + echo "${CMAKE_BUILD_DIR}/${PKGNAME}"; \ + cp ${CMAKE_BUILD_DIR}/${PKGNAME} ./; \ echo "Debug: OK" prepare: @@ -88,7 +92,9 @@ uninstall: @$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}" @$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop" @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.svg" - @$(RM) -rd "${DESTDIR}${PREFIX}/share/${PKGNAME}" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.checked.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.warning.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.${PKGNAME}.policy" @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ update-desktop-database --quiet &>/dev/null || true; \ @@ -112,14 +118,12 @@ install: check uninstall done @install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" + @install -dm755 "${DESTDIR}${PREFIX}/share/polkit-1/actions" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/polkit-1/actions/" "com.ublinux.${PKGNAME}.policy" @install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" + @install -dm755 "${DESTDIR}/etc/xdg" @install -dm755 "${DESTDIR}${PREFIX}/share/applications" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" - @install -dm755 "${DESTDIR}${PREFIX}/share/${PKGNAME}"/{ui,css,images} - @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/ui/" "${PKGNAME}.glade" - @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/css/" "${PKGNAME}.css" - @install -dm755 -d "${DESTDIR}${PREFIX}/share/${PKGNAME}/images" - @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/" "${PKGNAME}-banner.png" @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" @@ -129,6 +133,7 @@ install: check uninstall [ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ fi @echo "Install: OK" + @sed -r "s/^(string version_application=\"*\").*/string version_application;/" -i source/${PKGNAME}.h; \ clean: @echo "Clean ..." @@ -139,6 +144,14 @@ clean: echo "Clean: OK"; \ fi +up_ver: + @CURRENT=$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2); \ + MAJOR=$$(cut -d. -f1 <<< $${CURRENT}); \ + MINOR=$$(cut -d. -f2 <<< $${CURRENT}); \ + VER="$${MAJOR}.$$(($${MINOR}+1))"; \ + sed "s/VERSION *[[:digit:]]*.*/VERSION $${VER}/" -i ${FILE_VERSION}; \ + echo "Updated version to VERSION.md: $${CURRENT} to $${VER}" + help: @echo "The following are some of the valid targets for this Makefile:"; \ echo "... all (the default if no target is provided)"; \ @@ -148,4 +161,5 @@ help: echo "... compile"; \ echo "... install"; \ echo "... uninstall"; \ - echo "... clean" + echo "... clean"; \ + echo "... up_ver" \ No newline at end of file diff --git a/gresource.xml b/gresource.xml new file mode 100644 index 0000000..ed4693e --- /dev/null +++ b/gresource.xml @@ -0,0 +1,12 @@ + + + + ubl-settings-resourcequota.glade + + + ubl-settings-resourcequota.css + + + ubl-settings-resourcequota-banner.png + + \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index b61aca0..5202797 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -1,12 +1,12 @@ -cmake_minimum_required(VERSION 3.23) +cmake_minimum_required(VERSION 3.7) project(ubl-settings-resourcequota) find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK3 REQUIRED gtk+-3.0) -include_directories(${GTK3_INCLUDE_DIRS}) -link_directories(${GTK3_LIBRARY_DIRS}) -add_definitions(${GTK3_CFLAGS_OTHER}) +pkg_check_modules(GTK REQUIRED gtk+-3.0) +include_directories(${GTK_INCLUDE_DIRS}) +link_directories(${GTK_LIBRARY_DIRS}) +add_definitions(${GTK_CFLAGS_OTHER}) pkg_check_modules(VTE291 REQUIRED vte-2.91) include_directories(${VTE291_INCLUDE_DIRS}) @@ -24,7 +24,42 @@ if(WEBKIT_LIBRARIES_FOUND) add_definitions(${WEBKIT_CFLAGS_OTHER}) endif() -configure_file(ubl-cmake.h.in ubl-cmake.h) +configure_file(ubl-cmake.in ubl-cmake.h) + +file(COPY ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h DESTINATION ./) + +set(GRESOURCE_C resources.c) +set(GRESOURCE_XML gresource.xml) + +find_program(GLIB_COMPILE_RESOURCES NAMES glib-compile-resources REQUIRED) +add_custom_target(GLADE ubl-settings-resourcequota.glade) + +set(DEPENDFILES + ../ubl-settings-resourcequota.glade + ../gresource.xml + ../ubl-settings-resourcequota-banner.png + ../ubl-settings-resourcequota.css + ) + +file(COPY ${DEPENDFILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + +add_custom_command( + OUTPUT ${GRESOURCE_C} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${GLIB_COMPILE_RESOURCES} + ARGS + --generate-source + --target=${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} + ${GRESOURCE_XML} + VERBATIM + MAIN_DEPENDENCY ${GRESOURCE_XML} + DEPENDS + ${GLADE} +) +add_custom_target( + dummy-resource + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} +) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -lm") @@ -32,6 +67,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ -fstack-clash-protection -fcf-protection") + set(SOURCE_FILES ubl-settings-resourcequota.c @@ -47,15 +83,25 @@ set(SOURCE_FILES ubl-strings.h ubl-utils.h ubl-utils.c - ubl-cmake.h) + ubl-cmake.h + philos_utils.c + philos_utils.h + ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h + ) set(LIBRARIES - ${GTK3_LIBRARIES} + ${GTK_LIBRARIES} ${WEBKIT_LIBRARIES} ${VTE291_LIBRARIES} pthread) -add_executable(${PROJECT_NAME} ${SOURCE_FILES}) + +add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBRARIES}) target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR}) -install(TARGETS ${PROJECT_NAME} DESTINATION bin) \ No newline at end of file +set_source_files_properties( + ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} + PROPERTIES GENERATED TRUE +) +install(TARGETS ${PROJECT_NAME} DESTINATION bin) +add_dependencies(${PROJECT_NAME} dummy-resource) \ No newline at end of file diff --git a/source/filters.c b/source/filters.c index c5f816e..f4397b9 100644 --- a/source/filters.c +++ b/source/filters.c @@ -5,7 +5,7 @@ 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_file(glade_path); + 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"); diff --git a/source/filters.h b/source/filters.h index 96025df..8dd6a40 100644 --- a/source/filters.h +++ b/source/filters.h @@ -11,7 +11,7 @@ #include #include #include - +#include "philos_utils.h" // Переменные typedef struct { diff --git a/source/my_device.c b/source/my_device.c index 995306d..614a3ff 100644 --- a/source/my_device.c +++ b/source/my_device.c @@ -10,11 +10,10 @@ 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); - char* disk = NULL; obj_device_config.size_disk = 0; char* split_simvol = " "; for (int index = 1; index < size; index++ ) { - disk = yon_char_divide_search(responce[index], "\n", -1); + 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); @@ -25,34 +24,27 @@ void device_disk_parsed() { 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--; - char* description_disk = yon_char_unite(name_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); + 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); } - else { - obj_device_config.name_disk = yon_char_parsed_append(obj_device_config.name_disk, &obj_device_config.size_disk, 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, ""); - 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--; - char* description_disk = yon_char_unite(disk, - split_simvol, - 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(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]); } -} \ No newline at end of file +} + + diff --git a/source/my_device.h b/source/my_device.h index 4b695a0..c2ef0e6 100644 --- a/source/my_device.h +++ b/source/my_device.h @@ -4,6 +4,7 @@ #include #include #include +#include "philos_utils.h" typedef struct { char** name_disk; char** file_system; @@ -16,5 +17,8 @@ typedef struct { 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 new file mode 100644 index 0000000..b32822e --- /dev/null +++ b/source/philos_utils.c @@ -0,0 +1,1138 @@ +#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 new file mode 100644 index 0000000..8ec5af6 --- /dev/null +++ b/source/philos_utils.h @@ -0,0 +1,120 @@ +#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; +} 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-cmake.h.in b/source/ubl-cmake.h.in deleted file mode 100644 index 17ba454..0000000 --- a/source/ubl-cmake.h.in +++ /dev/null @@ -1 +0,0 @@ -#cmakedefine WEBKIT_FOUND \ No newline at end of file diff --git a/source/ubl-cmake.in b/source/ubl-cmake.in new file mode 100644 index 0000000..d4623a7 --- /dev/null +++ b/source/ubl-cmake.in @@ -0,0 +1 @@ +#cmakedefine WEBKIT_FOUND diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c index 613dbc6..45ba5ff 100644 --- a/source/ubl-settings-resourcequota.c +++ b/source/ubl-settings-resourcequota.c @@ -1,4 +1,5 @@ #include "ubl-settings-resourcequota.h" +#include "ubl-utils.h" config main_config; main_window *widgets; @@ -30,7 +31,7 @@ void yon_open_browser(GtkWidget *self, char *link){ */ void on_open_documentation_confirmation(GtkWidget *self, char *link){ if (main_config.always_open_documentation==0){ - GtkBuilder *builder = gtk_builder_new_from_file(glade_path); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); documentation_confirmation_window *widgets = malloc(sizeof(documentation_confirmation_window)); widgets->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow"); widgets->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton"); @@ -84,13 +85,12 @@ void on_link(GtkWidget *self, char* uri, gpointer user_data){ * Присоединять к сигналу "activate" кнопки справки типа MenuItem. */ void on_about(){ - GtkBuilder *builder=gtk_builder_new_from_file(glade_path); + GtkBuilder *builder=gtk_builder_new_from_resource(glade_path); GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow"); GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic"); 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); @@ -113,12 +113,20 @@ void config_init(){ 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_file(glade_path); + 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"); @@ -132,6 +140,7 @@ main_window *setup_window(){ 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"); @@ -173,8 +182,11 @@ main_window *setup_window(){ widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem"); widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox"); - widgets->DocumentationMenuItem = yon_gtk_builder_get_widget(builder,"DocumentationMenuItem"); - widgets->AboutMenuItem = yon_gtk_builder_get_widget(builder,"AboutMenuItem"); + 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){ @@ -189,21 +201,23 @@ main_window *setup_window(){ 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->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)); - 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); + 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() { @@ -235,33 +249,72 @@ void main_update_information() { } 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) { - - } - else if (menu_id == 3) { - + 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); - // yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL); + g_signal_connect(G_OBJECT(widgets->cbtMainInfoLevel2),"changed",G_CALLBACK(main_cbx_2_event), NULL); } } void load_system_cfg() { - template_cfg(CMD_LOAD_SYSTEM); + main_config.flag_load = 0; + template_load_cfg(CMD_LOAD_SYSTEM); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS, BACKGROUND_IMAGE_SUCCESS_TYPE); } void load_global_cfg() { - template_cfg(CMD_LOAD_GLOBAL); + main_config.flag_load = 1; + template_load_cfg(CMD_LOAD_GLOBAL); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); +} + +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 template_cfg(char* cmd) { +void template_load_cfg(char* cmd) { + clear_array(); int size = 0; - int index_quotas = 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); @@ -269,45 +322,93 @@ void template_cfg(char* cmd) { 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-2); + str_key_value = yon_char_divide(str_key_value, length-1); } - str_split_key(str_key, index_quotas); - str_split_value(str_key_value, index); - index_quotas++; + 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++; } } - if (index_quotas != 0) { - fill_tree_view(0, size); + + if (main_config.size_tree_view != 0) { + fill_tree_view(0, main_config.size_tree_view, 0); } - - + main_config.flag_set_data = 0; +} + +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 str_split_key(char* value, int index) { + +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, 4); + main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 2); index--; - main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_PROCESS); + 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, 3); + main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 1); index--; - main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_SLICE); + main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_PROCESS); index--; } else { 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.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, "-"); + main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, "-"); index--; } @@ -317,25 +418,17 @@ void str_split_key(char* value, int index) { char** arr_users = philos_list_user(&user_size); for (int user_index = 0; user_index < user_size; user_index++) { // Пользователь - if (strcmp(arr_users[user_index], value) != 0) { + 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.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_USER); - index--; - } - // Группа - else { - main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 1); - index--; - main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value); - index--; - main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_GROUP); + main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_USER); index--; } } } + } void str_split_value(char* values, int index) { @@ -347,114 +440,202 @@ void str_split_value(char* values, int index) { if (arr_values == NULL) { return; } + init_cfg_array(index); char* value_i = NULL; - for (int index_1 = 0; index_1 < size; index_1++) { - value = arr_values[index_1]; + 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 (yon_char_find_count(key, "MemoryHigh") != 0) { - set_pow_size(value, main_config.soft_raw_limit_size, main_config.soft_raw_limit, index); + if (strstr(key, "IOReadBandwidthMax")) { + read_index = index_1; } - else { - set_pow_size("-", main_config.soft_raw_limit_size, main_config.soft_raw_limit, index); + if (strstr(key, "IOWriteBandwidthMax")) { + write_index = index_1; } - if (yon_char_find_count(key, "MemoryMax") != 0) { - set_pow_size(value, main_config.hard_raw_limit_size, main_config.hard_raw_limit, index); + 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); } - else { - set_pow_size("-", main_config.hard_raw_limit_size, main_config.hard_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) { - set_pow_size(value, main_config.swap_size, main_config.swap, index); - } - else { - set_pow_size("-", main_config.swap_size, main_config.swap, index); + 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) { - set_pow_size(value, main_config.cpu_limit_size, main_config.cpu_limit, index); + 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); } - else { - set_pow_size("-", main_config.cpu_limit_size, main_config.cpu_limit, index); + } + 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"); + + } + 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 (yon_char_find_count(key, "IOReadBandwidthMax") != 0) { - set_pow_size(value, main_config.i_o_limit_read_size, main_config.i_o_limit_read, index); + else if (read_index != -1) { + get_param_io_limit(arr_values, read_index, size,index, "IOReadBandwidthMax"); } - else { - set_pow_size("-", main_config.i_o_limit_read_size, main_config.i_o_limit_read, index); + else if (write_index != -1) { + get_param_io_limit(arr_values, write_index, size,index, "IOWriteBandwidthMax"); } - if (yon_char_find_count(key, "IOWriteBandwidthMax") != 0) { - set_pow_size(value, main_config.i_o_limit_write_size, main_config.i_o_limit_write, index); + } + + + +} + +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 { - set_pow_size("-", main_config.i_o_limit_write_size, main_config.i_o_limit_write, index); + } + 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)++; } } } -void set_pow_size(char* str_find, int* array_size, char** array_data , int index) { - if (strstr(str_find,"K") != NULL) { - array_size = philos_int_append(array_size, &index, 0); - index--; +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(str_find,"M") != NULL) { - array_size = philos_int_append(array_size, &index, 1); - index--; + 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 if (strstr(str_find,"G") != NULL) { - array_size = philos_int_append(array_size, &index, 2); - index--; + else { + return; } - else if (strstr(str_find,"T") != NULL) { - array_size = philos_int_append(array_size, &index, 3); - index--; + 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; + } } - else if (strstr(str_find,"\%") != NULL) { - array_size = philos_int_append(array_size, &index, -1); - index--; + 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); + } + } + 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 if (strstr(str_find,"\"") != NULL) { - + else { + } - else if (strstr(str_find,"-") != NULL) { - array_size = philos_int_append(array_size, &index, -1); - index--; + +} + +void set_size_memory_integer(char* str_find, int** array_data, int index) { + if (strstr(str_find, " ")) { + yon_char_divide_search(str_find, " ", -1); } - if (strstr(str_find,"-") == NULL) { - 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); + 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); } - size_t length = strlen(str_find); - str_find = yon_char_divide(str_find, length-2); - array_data = yon_char_parsed_append(array_data, &index, str_find); + } + if (strstr(str_find, "-")==NULL) { + *array_data = philos_int_append(*array_data, &index, atoi(str_find)); } else { - array_data = yon_char_parsed_append(array_data, &index, "-"); + *array_data = philos_int_append(*array_data, &index, -1); } } - -void main_cbx_2_event() { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtMainInfo)); - char* cmd_text_param = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfo)); - if (menu_id == 0) { - +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); } - else if (menu_id == 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); + } } - else if (menu_id == 2) { - + if (strstr(str_find, "-")==NULL) { + (*array_data)[index] = atoi(str_find); + } + else { + (*array_data)[index] = -1; } - else if (menu_id == 3) { +} +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); + } if (menu_id >= 0) { - + free(cmd_text_param); + free(cmd); } - //char *cmd = yon_char_get_augumented("systemd-cgtop -d ", str_second); - //yon_terminal_integrated_launch(widgets->vteDispatcher, cmd, NULL, NULL); - } void tree_view_select(GtkWidget *self, main_window *widgets) { @@ -468,63 +649,130 @@ void tree_view_select(GtkWidget *self, main_window *widgets) { gtk_widget_set_sensitive(widgets->btnInfo,1); } else { - gtk_widget_set_sensitive(widgets->btnAdd,1); + 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 tree_view_add(int index) { - main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &main_config.size_tree_view, add_get_quota_object()); - main_config.size_tree_view--; - main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &main_config.size_tree_view, add_get_select_device_to_level_2()); - main_config.size_tree_view--; - main_config.soft_raw_limit = yon_char_parsed_append(main_config.soft_raw_limit, &main_config.size_tree_view, add_get_soft()); - main_config.size_tree_view--; - main_config.hard_raw_limit = yon_char_parsed_append(main_config.hard_raw_limit, &main_config.size_tree_view, add_get_hard()); - main_config.size_tree_view--; - main_config.swap = yon_char_parsed_append(main_config.swap, &main_config.size_tree_view, add_get_limit_swap()); - main_config.size_tree_view--; - main_config.cpu_limit = yon_char_parsed_append(main_config.cpu_limit, &main_config.size_tree_view, add_get_limit_cpu()); - main_config.size_tree_view--; - main_config.i_o_limit_read = yon_char_parsed_append(main_config.i_o_limit_read, &main_config.size_tree_view, add_get_read_device()); - main_config.size_tree_view--; - main_config.i_o_limit_write = yon_char_parsed_append(main_config.i_o_limit_write, &main_config.size_tree_view, add_get_write_device()); - main_config.size_tree_view--; + 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.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)); - main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &main_config.size_tree_view, add_get_quota_object_size()); - main_config.size_tree_view--; - main_config.quota_volume_size = philos_int_append(main_config.quota_volume_size, &main_config.size_tree_view, -1); - main_config.size_tree_view--; - main_config.soft_raw_limit_size = philos_int_append(main_config.soft_raw_limit_size, &main_config.size_tree_view, add_get_soft_size()); - main_config.size_tree_view--; - main_config.hard_raw_limit_size = philos_int_append(main_config.hard_raw_limit_size, &main_config.size_tree_view, add_get_hard_size()); - main_config.size_tree_view--; - main_config.swap_size = philos_int_append(main_config.swap_size, &main_config.size_tree_view, add_get_limit_swap_size()); - main_config.size_tree_view--; - main_config.cpu_limit_size = philos_int_append(main_config.cpu_limit_size, &main_config.size_tree_view, add_get_limit_cpu_size()); - main_config.size_tree_view--; - main_config.i_o_limit_read_size = philos_int_append(main_config.i_o_limit_read_size, &main_config.size_tree_view, add_get_read_device_size()); - main_config.size_tree_view--; - main_config.i_o_limit_write_size = philos_int_append(main_config.i_o_limit_write_size, &main_config.size_tree_view, add_get_write_device_size()); - fill_tree_view(main_config.size_tree_view-1, main_config.size_tree_view); -} - -void fill_tree_view(int start, int size) { + 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 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); - gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index], - 1,main_config.quota_volume[index], - 2,main_config.soft_raw_limit[index], - 3,main_config.hard_raw_limit[index], - 4,main_config.swap[index], - 5,main_config.cpu_limit[index], - 6,main_config.i_o_limit_read[index], - 7,main_config.i_o_limit_write[index],-1); + 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); + } +} + +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); + } + } + + } + else { + break; + } + index_to_n2++; + } + else { + break; + } + } + if (strlen(str)==0) { + return yon_char_new("-"); } + return str; } int tree_view_edit() { @@ -534,29 +782,39 @@ int tree_view_edit() { GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain)); 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(); - main_config.i_o_limit_read[index] = edit_get_read_device(); - main_config.i_o_limit_write[index] = edit_get_write_device(); + 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(); - main_config.i_o_limit_read_size[index] = edit_get_read_device_size(); - main_config.i_o_limit_write_size[index] = edit_get_write_device_size(); - gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index], + + 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,main_config.soft_raw_limit[index], - 3,main_config.hard_raw_limit[index], - 4,main_config.swap[index], - 5,main_config.cpu_limit[index], - 6,main_config.i_o_limit_read[index], - 7,main_config.i_o_limit_write[index],-1); + 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 { @@ -587,7 +845,6 @@ void info_show(GtkWidget *self) { int index = atoi(str_iter); char* t_quota = main_config.type_quota[index]; if (yon_char_find_count(t_quota, "-") == 0) { - // TODO: add code } } gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->notebookMain), 3); @@ -597,9 +854,17 @@ void event_all(main_window *widgets) { } +void fn_scroll(GdkEventScroll self) { + +} + 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); @@ -611,23 +876,29 @@ void main_event(main_window *widgets) { 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->cbtMainInfoLevel2),"changed",G_CALLBACK(main_cbx_2_event), 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->LoadGlobalMenuItem),"activate",G_CALLBACK(),NULL); - g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(),NULL); - g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(),NULL); - g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(),NULL); - g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(),NULL); -*/ + 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 wrapper_add_show(GtkWidget *self) { add_show(NULL, glade_path); - g_signal_connect(G_OBJECT(get_widget_add()->btnSaveAddSave), "clicked", G_CALLBACK(main_add_btn_save), NULL); + 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); @@ -646,25 +917,30 @@ void wrapper_edit_show() { 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_write_device(main_config.i_o_limit_write[index], main_config.i_o_limit_write_size[index]); - edit_set_read_device(main_config.i_o_limit_read[index], main_config.i_o_limit_read_size[index]); edit_set_limit_swap(main_config.swap[index], main_config.swap_size[index]); - // edit_set_select_device(main_config.cpu_limit[index]); - g_signal_connect(G_OBJECT(get_widget_edit()->btnSaveEditSave), "clicked", G_CALLBACK(main_edit_btn_save), NULL); + 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(); } } 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); } - else { - - } } @@ -674,25 +950,41 @@ void tree_view_del_line() { 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); + 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); + } 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 = yon_char_parsed_shrink(main_config.soft_raw_limit, &main_config.size_tree_view,index); + 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 = yon_char_parsed_shrink(main_config.hard_raw_limit, &main_config.size_tree_view,index); + 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 = yon_char_parsed_shrink(main_config.swap, &main_config.size_tree_view,index); + 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 = yon_char_parsed_shrink(main_config.cpu_limit, &main_config.size_tree_view,index); + 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 = yon_char_parsed_shrink(main_config.i_o_limit_read, &main_config.size_tree_view,index); + 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 = yon_char_parsed_shrink(main_config.i_o_limit_write, &main_config.size_tree_view,index); + 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++; + + 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); @@ -704,33 +996,233 @@ void tree_view_del_line() { 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_config.size_tree_view++; - main_config.i_o_limit_read_size = remove_element_int_array(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(main_config.i_o_limit_write_size, &main_config.size_tree_view,index); - g_object_ref(main_config.list); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), NULL); - gtk_list_store_clear(main_config.list); + 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* 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'; + } + 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'; + } + 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'; + } + 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); + } + else { + value = yon_char_unite(value_read, NULL); + } + + } + if (strlen(value_write)> 5) { + if (strlen(value) > 5) { + value = yon_char_unite(value, ",", value_write, NULL); + } + else { + value = yon_char_unite(value_write, NULL); + } + } + 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(""); + } + return cmd_io; + +} + +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; +} +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; + +} + +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; + +} + +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 (strlen(cmd) > strlen(source_remove_cmd) && check_save()== 0) { + return cmd; + } + 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); - gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index], + 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,main_config.soft_raw_limit[index], - 3,main_config.hard_raw_limit[index], - 4,main_config.swap[index], - 5,main_config.cpu_limit[index], - 6,main_config.i_o_limit_read[index], - 7,main_config.i_o_limit_write[index],-1); + 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); } } @@ -750,12 +1242,23 @@ void main_localization(main_window *widgets) { gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->AboutMenuItem),ABOUT_LABEL); } +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 show_help=0; { struct option long_options[] = { {"help", 0, 0, 'h'}, @@ -768,11 +1271,11 @@ int main(int argc, char *argv[]){ {"socket-id", 1, 0, 's'}, {"socket-ext-id", 1,0, 'e'}, {"socket-trd-id", 1,0, 't'}, + {"debug", 0,0, 'd'}, { NULL, 0, NULL, 0 } }; - for (int i=0;iHeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); + yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); - if (yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel)) - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); + if (getuid()!=0) { + load_system_cfg(); + 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(); + } + } 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); GtkCssProvider *css=gtk_css_provider_new(); - gtk_css_provider_load_from_path(css,CssPath,NULL); + gtk_css_provider_load_from_resource(css,CssPath); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), - GTK_STYLE_PROVIDER(css), - -1); + 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 57a56b5..ab3726e 100755 --- a/source/ubl-settings-resourcequota.h +++ b/source/ubl-settings-resourcequota.h @@ -14,32 +14,41 @@ #include "filters.h" #include "view_edit.h" #include "my_device.h" - - +#include "philos_utils.h" #ifdef WEBKIT_FOUND - #include -#endif +#include +#endif #include "ubl-strings.h" - +#define config_path yon_char_unite("/home/",yon_ubl_root_user_get(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-resourcequota" #define _(String) gettext(String) -#define glade_path "/usr/share/ubl-settings-resourcequota/ui/ubl-settings-resourcequota.glade" -#define banner_path "/usr/share/ubl-settings-resourcequota/images/ubl-settings-resourcequota-banner.png" -#define CssPath "/usr/share/ubl-settings-resourcequota/css/ubl-settings-resourcequota.css" +#define glade_path "/com/ublinux/ui/ubl-settings-resourcequota.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 LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-resourcequota" -#define CMD_LOAD_GLOBAL "ubconfig --default --source global get security" -#define CMD_LOAD_SYSTEM "ubconfig --default --source system get security" -typedef char* string; -string version_application = "1.0"; + +#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" + +typedef char *string; +string version_application; static char *local; -typedef struct { +typedef struct +{ int always_open_documentation; int win_pos_x; int win_pos_y; @@ -49,7 +58,7 @@ typedef struct { int socket_id; int load_socket_id; int save_socket_id; - + int lock_help; int lock_save_local; int lock_save_global; @@ -62,30 +71,38 @@ typedef struct { config_str load_system_key; config_str load_global_key; - config_str cfg_gui_key; render_data status_render; config_str type_quota; config_str quota_volume; - config_str soft_raw_limit; - config_str hard_raw_limit; - config_str swap; - config_str cpu_limit; - config_str i_o_limit_read; - config_str i_o_limit_write; - - 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* 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 } config; -typedef struct { +typedef struct +{ GtkWidget *Window; GtkTreeViewColumn *tvc0; @@ -96,7 +113,7 @@ typedef struct { GtkTreeViewColumn *tvc5; GtkTreeViewColumn *tvc6; GtkTreeViewColumn *tvc7; - + GtkWidget *scrollDispatcher; GtkWidget *btnDelQuotas; GtkWidget *cbtMainInfoLevel2; GtkWidget *cbtMainInfo; @@ -142,8 +159,8 @@ typedef struct { GtkWidget *AboutMenuItem; } main_window; - -typedef struct { +typedef struct +{ GtkWidget *Window; GtkWidget *HatText; @@ -153,7 +170,7 @@ typedef struct { GtkWidget *CloseButton; GtkWidget *AcceptButton; - + } documentation_confirmation_window; main_window *setup_window(); @@ -179,8 +196,25 @@ void tree_view_del_line(); void main_fill_tree_view_after_remove(); void load_system_cfg(); void load_global_cfg(); -void template_cfg(char* cmd); -void str_split_value(char* values, int index); -void set_pow_size(char* str_find, int* array_size, char** array_data, int index); -void str_split_key(char* value, int index); -void fill_tree_view(int start, int size); \ No newline at end of file +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 diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 2d732c4..13a9fa0 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -1,6 +1,6 @@ #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 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") @@ -28,6 +28,11 @@ #define STR_PROCESS _("Process") #define STR_SLICE _("Slice") +#define STR_KB _("Kb") +#define STR_MB _("Mb") +#define STR_GB _("Gb") +#define STR_TB _("Tb") + #define GLOBAL_LOAD_SUCCESS _("Global configuration loading succseeded.") #define LOCAL_LOAD_SUCCESS _("Local configuration loading succseeded.") @@ -36,4 +41,8 @@ #define LOCAL_SAVE_SUCCESS _("Local configuration saving succseeded.") #define STR_DEL_TABLE _("Quota deleted") #define STR_NO_SELECT_TABLE _("Quota deleted") -#define STR_QUOTAS_ADD _("Quota deleted") \ No newline at end of file +#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 diff --git a/source/ubl-utils.c b/source/ubl-utils.c index dd61852..4def2f6 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -2,11 +2,13 @@ // dictionary functions -/**[EN] - * yon_dictionary_create_empty(): +/**yon_dictionary_create_empty(): + * [EN] * Creates and returns empty dictionary + * [RU] + * Создаёт и возвращает пустой словарь. */ -dictionary *yon_dictionary_create_empty() +dictionary *yon_dictionary_new() { dictionary *dict = malloc(sizeof(dictionary)); dict->data = NULL; @@ -18,34 +20,105 @@ dictionary *yon_dictionary_create_empty() return dict; } +/**yon_dictionary_copy_deep(dictionary *dict) + * [EN] + * + * [RU] + * Создаёт и возвращает копию элемента словаря [dict] +*/ +dictionary *yon_dictinoary_copy(dictionary *dict){ + dictionary *dct = yon_dictionary_new_with_data(dict->key,dict->data); + dct->data_type= dict->data_type; +} + +/**yon_dictionary_copy_deep(dictionary *dict) + * [EN] + * + * [RU] + * Создаёт полную копию словаря [dict] и возвращает первый элемент +*/ +dictionary *yon_dictionary_copy_deep(dictionary *dict){ + dictionary *dct = NULL; + dictionary *newone=NULL; + for_dictionaries(dct,dict){ + yon_dictionary_add_or_create_if_exists_with_data(newone,dct->key,dct->data); + newone->data_type=dct->data_type; + } + return newone->first; +} + +int yon_dictionary_set_data(dictionary *dict, void *data){ + dict->data=data; +} + +int yon_dictionary_set_key(dictionary *dict, char *key){ + dict->key=key; +} + +int yon_dictionary_set(dictionary *dict, char *key, void *data){ + dict->key=key; + dict->data=data; +} + +int yon_dictionary_empty(dictionary *dict){ + dict->data=NULL; + dict->data_type=DICTIONARY_OTHER_TYPE; +} + +/**yon_dictionary_switch_to_last(dictionary **dict) + * [EN] + * + * [RU] + * Переключает словарь [dict] на последний элемент. +*/ void yon_dictionary_switch_to_last(dictionary **dict) { - if ((*dict)->next != NULL) - for ((*dict) = (*dict)->first; (*dict)->next != NULL; (*dict) = (*dict)->next) - { - } + dictionary *dct=NULL, *dact=*dict; + for_dictionaries(dct,dact); } -dictionary *yon_dictionary_create_conneced(dictionary *targetdict) +/**yon_dictionary_create_conneced(dictionary *targetdict) + * [EN] + * + * [RU] + * Создаёт новый элемент словаря [targetdict] +*/ +dictionary *yon_dictionary_append(dictionary *targetdict) { targetdict = yon_dictionary_get_last(targetdict); - targetdict->next = yon_dictionary_create_empty(); + targetdict->next = yon_dictionary_new(); targetdict->next->prev = targetdict; targetdict->next->first = targetdict->first; targetdict->next->data_type = DICTIONARY_OTHER_TYPE; return targetdict->next; } +/**yon_dictionary_get_last(dictionary *dict) + * [EN] + * + * [RU] + * Возвращает последний элемент словаря [dict]. + * В отличае от yon_dictionary_switch_to_last() + * словарь [dict] остаётся на прежнем элементе. +*/ dictionary *yon_dictionary_get_last(dictionary *dict) { - dictionary *dct = NULL; - for (dct = dict->first; dct->next != NULL; dct = dct->next) - { - } - return dct; + if (dict->next){ + dictionary *dct = NULL; + for_dictionaries(dct,dict); + return dct; + } else return dict; } -dictionary *yon_dictionary_switch_places(dictionary *dict, int aim) +/**yon_dictionary_switch_places(dictionary *dict, int aim) + * [EN] + * + * [RU] + * Меняет элемент словаря [dict] местами с другим элементом. + * если [aim]<0 элемент меняется местами с левым элементом; + * если [aim]>0 элемент меняется местами с правым элементом; +*/ +dictionary *yon_dictionary_swap(dictionary *dict, int aim) { if (aim < 0) { @@ -146,6 +219,13 @@ dictionary *yon_dictionary_switch_places(dictionary *dict, int aim) } } +/**yon_dictionary_make_first(dictionary *dict) + * [EN] + * + * [RU] + * Устанавливает указатель первого элемента словаря [dict] + * на текущий элемент. Не использовать. +*/ void yon_dictionary_make_first(dictionary *dict) { for (dictionary *dct = dict->first; dct != NULL; dct = dct->next) @@ -154,6 +234,12 @@ void yon_dictionary_make_first(dictionary *dict) } } +/**yon_dictionary_make_nth(dictionary *dict, int nth) + * [EN] + * + * [RU] + * Перемещает элемент словаря [dict] на позицию [nth]. +*/ void yon_dictionary_make_nth(dictionary *dict, int nth) { dictionary *dct = dict->first; @@ -172,9 +258,15 @@ void yon_dictionary_make_nth(dictionary *dict, int nth) dct->prev = dict; } -dictionary *yon_dictionary_create_with_data(char *key, void *data) +/**yon_dictionary_create_with_data(char *key, void *data) + * [EN] + * + * [RU] + * Создаёт новый словарь с ключом [key] и указателем на данные [data] +*/ +dictionary *yon_dictionary_new_with_data(char *key, void *data) { - dictionary *dct = yon_dictionary_create_empty(); + dictionary *dct = yon_dictionary_new(); dct->key = yon_char_new(key); dct->data = data; dct->data_type = DICTIONARY_OTHER_TYPE; @@ -199,15 +291,28 @@ void *yon_dictionary_free_all(dictionary *dictionary_to_free,void (*data_manipul return NULL; } -dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data) +/**yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data) + * [EN] + * + * [RU] + * Создаёт новый элемент словаря, присоединяемый в конец словаря [dict] + * с ключом [key] и указателем на данные [data] +*/ +dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data) { - dictionary *dct = yon_dictionary_create_conneced(dict); + dictionary *dct = yon_dictionary_append(dict); dct->key = yon_char_new(key); dct->data = data; dct->data_type = DICTIONARY_OTHER_TYPE; return dct; } +/**yon_dictionary_connect(dictionary *old, dictionary *toconnect) + * [EN] + * + * [RU] + * Присоединяет словарь [toconnect] в конец словаря [old]. +*/ dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect) { dictionary *dict = yon_dictionary_get_last(old); @@ -217,7 +322,14 @@ dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect) return toconnect; } -dictionary *yon_dictionary_find(dictionary **dict, char *key) +/**yon_dictionary_get(dictionary **dict, char *key) + * [EN] + * + * [RU] + * Возвращает элемент словаря [dict] с ключом [key]. + * Если такого элемента не было обнаружено, возвращается NULL +*/ +dictionary *yon_dictionary_get(dictionary **dict, char *key) { dictionary *dct = *dict; for (dictionary *pointer = dct->first; pointer != NULL; pointer = pointer->next) @@ -231,6 +343,12 @@ dictionary *yon_dictionary_find(dictionary **dict, char *key) return NULL; } +/**yon_dictionary_rip(dictionary *dict) + * [EN] + * + * [RU] + * Вырезает элемент из словаря и возвращает вырезанный элемент. +*/ dictionary *yon_dictionary_rip(dictionary *dict) { if (!dict->next&&!dict->prev) return NULL; @@ -266,6 +384,12 @@ dictionary *yon_dictionary_rip(dictionary *dict) } } +/**yon_dictionary_get_nth(dictionary *dict, int place) + * [EN] + * + * [RU] + * Возвращает [place]-й элемент словаря [dict] +*/ dictionary *yon_dictionary_get_nth(dictionary *dict, int place) { if (dict){ @@ -289,7 +413,7 @@ dictionary *yon_dictionary_get_nth(dictionary *dict, int place) * * creates new char string by combining two char strings. */ -char *yon_char_get_augumented(char *source, char *append) +char *yon_char_append(char *source, char *append) { if (source && append) { @@ -331,15 +455,15 @@ char *yon_char_unite(char *source, ...){ va_start(arglist,source); unite_char = va_arg(arglist,char*); while(unite_char){ - new_char = yon_char_get_augumented(new_char,unite_char); + new_char = yon_char_append(new_char,unite_char); unite_char = va_arg(arglist,char*); } va_end(arglist); return new_char; } -/**[EN] - * +/**yon_cut(char *source, int size, int startpos) + * [EN] * cuts source string by size length from startpos position. */ char *yon_cut(char *source, int size, int startpos) @@ -350,8 +474,9 @@ char *yon_cut(char *source, int size, int startpos) memcpy(cut, source + startpos, size); return cut; } -/**[EN] - * + +/**yon_char_divide(char *source, int dividepos) + * [EN] * divides source string in dividepos position, * returning left part of divided string and * inserting right part to source string. @@ -369,129 +494,6 @@ char *yon_char_divide(char *source, int dividepos) return cut; } -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; // so we can distinguish errors from no more entries - 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; -} - -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 " "; - } -} - -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; // so we can distinguish errors from no more entries - 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; - -} - -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; -} - int yon_char_find_count(char *source, char *find){ char *working_string=yon_char_new(source); int i=0; @@ -505,7 +507,8 @@ int yon_char_find_count(char *source, char *find){ return i; } -/**[EN] +/**yon_char_divide_search(char *source, char *dividepos, int delete_divider) + * [EN] * char *yon_char_divide_search(char *source, char *dividepos, int delete_divider) * searches string [dividepos] in [source] string and divides it, * returning left part of divided string and @@ -537,7 +540,8 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider) } } -/**[EN] +/**yon_char_from_int(int int_to_convert) + * [EN] * char *yon_char_from_int(int int_to_convert) * converts int to char*. * @@ -549,15 +553,21 @@ char *yon_char_from_int(int int_to_convert) { int i = 1; float convert_check = (float)int_to_convert; - for (i = 1; convert_check > 10; i++) + for (i = 1; convert_check >= 10; i++) { convert_check = convert_check / 10; } - char *ch = malloc(i * sizeof(char) + 1); + char *ch = g_malloc0(i * sizeof(char) + 1); sprintf(ch, "%d", int_to_convert); return ch; } +/**yon_char_replace(char *source, char *find, char*replace) + * [EN] + * + * [RU] + * Заменяет в строке [source] все вхождения строки [find] на [replace] +*/ char *yon_char_replace(char *source, char *find, char*replace){ char *final=NULL; char *temp=NULL; @@ -566,16 +576,13 @@ char *yon_char_replace(char *source, char *find, char*replace){ temp=malloc(strlen(source)-strlen(final)); memset(temp,0,strlen(source)-strlen(final)+strlen(replace)); memcpy(temp,source,strlen(source)-strlen(final)); - temp=yon_char_get_augumented(temp,replace); - source=yon_char_get_augumented(temp,final+1); + temp=yon_char_append(temp,replace); + source=yon_char_append(temp,final+1); } return source; } } -void philos_split_size_memory(char* str_value, int* size, char* pow_memory) { - // pow_memory = yon_char_new(str_value); - (*size) = atoi(yon_char_divide_search(pow_memory, " ", -1)); -} + /**[EN] * char **yon_char_parse(char *parameters, int *size, char *divider) * Parses string [parameters], divided by [divider], @@ -601,26 +608,16 @@ char **yon_char_parse(char *parameters, int *size, char *divider){ *size=i-1; return string; - - } -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; -} - -char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete){ +/**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete) + * [EN] + * + * [RU] + * Удаляет элемент [item_to_delete] из массива строк [char_string], размера [size] + * Возвращает получившийся массив, в [size] загружается размер нового массива. +*/ +char **yon_char_parsed_rip(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; @@ -639,22 +636,33 @@ char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete) return new_char_parsed; } -/**[EN] - * +/**yon_char_parsed_check_exist(char **parameters, int size, char *param) + * [EN] * Checks if [parameters] string array of length [size] * has [param] element; + * [RU] + * Проверяет есть ли в массиве строк [parameters], размера [size] + * элемент [param] */ int yon_char_parsed_check_exist(char **parameters, int size, char *param){ for (int i=0;id_name); + char *path = yon_char_append(DesktopPath, de->d_name); file = fopen(path, "r"); if (strlen(de->d_name) > 9) { @@ -822,15 +868,197 @@ apps *yon_apps_get_by_name(apps *applist, char *name, int size) return NULL; }; -config_str yon_config_load(char *command, int *str_len) -{ +//config functions + +/**yon_config_load_register(char *command) + * [EN] + * + * [RU] + * Выполняет команду [command]. + * Полученные данные парсятся и регистрируются в конфиг. +*/ +int yon_config_load_register(char *command){ + if (__yon__config__strings){ + __yon__config__strings = yon_dictionary_free_all(__yon__config__strings,NULL); + } FILE *output = popen(command, "r"); char **output_strings = NULL; output_strings = malloc(sizeof(char)); int i = 0; - char str[1000]; - memset(str, 0, 1000); - while (fgets(str, 1000, output)) + char str[4096]; + memset(str, 0, 4096); + while (fgets(str, 4096, output)) + { + 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); + __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; + } + } + check_config + return 0; + else return 1; +} + +/**yon_config_remove_by_key(char *key) + * [EN] + * + * [RU] + * Удаляет параметр конфига по ключу [key] +*/ +int yon_config_remove_by_key(char *key){ + check_config{ + dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); + if (dict){ + yon_dictionary_rip(dict); + return 1; + }else return 0; + } + return 0; +} + +/**yon_config_remove_by_data(void *data) + * [EN] + * + * [RU] + * Производит поиск по конфигу на наличие параметра со значением [data] и удаляет найденное значение из конфига. +*/ +int yon_config_remove_by_data(void *data){ + check_config{ + dictionary *dict = NULL; + for_dictionaries(dict,__yon__config__strings){ + if (dict->data==data){ + yon_dictionary_rip(dict); + return 1; + } + } + return 0; + } + return 0; +} + +/**yon_config_remove_element(char *key, char *deleted) + * [EN] + * + * [RU] + * Удаляет элемент [deleted] из массива параметров с ключом [key] +*/ +int yon_config_remove_element(char *key, char *deleted){ + check_config{ + dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); + char *data = (char*)dict->data; + char *found = strstr(data,deleted); + int size=strlen(data)-strlen(found)+1; + char *new_data = malloc(size); + memset(new_data,0,size); + if (strlen(found)!=strlen(deleted)){ + memcpy(new_data,data,size-1); + new_data = yon_char_append(new_data,found+strlen(deleted)+1); + } else { + memcpy(new_data,data,size-2); + new_data = yon_char_append(new_data,found+strlen(deleted)); + } + dict->data=(void*)(new_data); + free(data); + dict->flag1=1; + return 1; + } else return 0; +} + +/**yon_config_get_by_key(char *key) + * [EN] + * + * [RU] + * Возвращает значение параметра конфига с ключом [key] +*/ +void *yon_config_get_by_key(char *key){ + check_config{ + dictionary *dict = NULL; + for_dictionaries(dict, __yon__config__strings){ + if (strcmp(dict->key,key)==0){ + return dict->data; + } + } + } + return NULL; +} + +/**yon_config_get_key_by_data(char *data) + * [EN] + * + * [RU] + * Возвращает ключ параметра конфига со значением [data]. + * Если параметр с таким значением не найден, возвращается NULL +*/ +char *yon_config_get_key_by_data(char *data){ + check_config{ + dictionary *dict = NULL; + for_dictionaries(dict, __yon__config__strings){ + if (strcmp(((char*)dict->data),data)==0){ + return dict->key; + } + } + } + return NULL; +} + +/**yon_config_set(char *key, void *data) + * [EN] + * + * [RU] + * Производит поиск по конфигу и заменяет значение параметра с ключом [key] на новое значение [data]; +*/ +int yon_config_set(char *key, void *data){ + check_config{ + dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); + dict->data=data; + return 1; + } else return 0; +} + +/**yon_config_clean() + * [EN] + * Erase all parameters from config; + * [RU] + * Удаляет все параметры из конфига; +*/ +int yon_config_clean(){ + check_config{ + __yon__config__strings = yon_dictionary_free_all(__yon__config__strings, NULL); + return 1; + } + else return 0; +} + +/**yon_config_register(char *key, void *data) + * [EN] + * + * [RU] + * Регистрирует новый параметр конфига. + * [key] - ключ параметра; + * [data] - значение параметра; +*/ +void yon_config_register(char *key, void *data){ + yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,data); + __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; +} + +/**yon_config_load(char *command, int *str_len) + * [EN] + * + * [RU] + * Выполняет команду [command] и возвращает распаршеный результат выполнения команды. + * В [str_len] возвращается длина возвращаемого массива +*/ +config_str yon_config_load(char *command, int *str_len){ + FILE *output = popen(command, "r"); + char **output_strings = NULL; + output_strings = malloc(sizeof(char)); + int i = 0; + char str[4096]; + memset(str, 0, 4096); + while (fgets(str, 4096, output)) { if (strcmp(str, "") != 0) { @@ -838,7 +1066,7 @@ config_str yon_config_load(char *command, int *str_len) // printf("%s\n", str); output_strings[i] = NULL; output_strings[i] = yon_char_new(str); - memset(str, 0, 1000); + memset(str, 0, 4096); i++; } } @@ -851,22 +1079,66 @@ config_str yon_config_load(char *command, int *str_len) } } -/**[EN] - * int yon_config_save(char *command) +/**int yon_config_save(char *command) + * [EN] * Saves config with [command] * [RU] + * Выполняет команду [command], добавляя в конец все записи конфига в таком виде: + * [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]" */ -int yon_config_save(char *command) -{ - FILE *output = popen(command, "r"); - return 1; +int yon_config_save(char *command){ + check_config{ + dictionary *dict = NULL; + for_dictionaries(dict,__yon__config__strings){ + command = yon_char_unite(command, " ", yon_dictionary_get_data(dict,char*), NULL); + } + if (popen(command, "r")) return 1; + else return 0; + } else return 0; } -/**[EN] - * char *yon_config_get_parameter(config parameters, int size, char *param) - * Gets parameter from parameter list; +/**yon_config_get_all(int *size) + * [EN] * + * [RU] + * Возвращает массив со всеми параметрами конфига, оканчивающаяся NULL + * [size] - указатель, в который выгружается длина массива +*/ +config_str yon_config_get_all(int *size){ + check_config{ + *size = 1; + config_str conf = NULL; + dictionary *dict = NULL; + 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++; + } + conf = yon_remalloc(conf,sizeof(char*)*(*size+1)); + conf[*size] = NULL; + return conf; + } else return NULL; +} + +/**[EN] + * int yon_config_save(char *command) + * Saves config with [command] + * [RU] + * Выполняет команду [command] +*/ +// int yon_config_save(char *command) +// { +// FILE *output = popen(command, "r"); +// return 1; +// } + +/**char *yon_config_get_parameter(config parameters, int size, char *param) + * [EN] + * Gets parameter [param] from parameter list [parameters] of size [size]; + * or NULL if nothing were found * [RU] + * Возвращает параметр [param] из массива строк [parameters] размером [size] + * или NULL если такой не был найден */ char *yon_config_get_parameter(config_str parameters, int size, char *param) { @@ -893,92 +1165,36 @@ char *yon_config_get_parameter(config_str parameters, int size, char *param) return NULL; } -/**[EN] - * Parses, modifies and connects string to use it as one of arguments, - * sended to ubconfig. - * - * [RU] - */ -char *yon_config_make_save_parameter_with_multiple_arguments(char *parameter_string, char *config_parameter, char *divider){ - char *final=""; - int done=0; - char *cur=yon_char_new(parameter_string); - yon_char_divide_search(cur,"=",1); - char *cur_param=NULL; - while (cur_param=yon_char_divide_search(cur,",",1)){ - if (done==0){ - final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"="), yon_char_get_augumented(cur_param,", "))); - done=1; - } else { - final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"+="), yon_char_get_augumented(cur_param,", "))); - } - } - if (cur&&strcmp(cur,"")!=0) - if (done==0) - final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"="), yon_char_get_augumented(cur,", "))); - else - final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"+="), yon_char_get_augumented(cur,", "))); - return final; -} -// terminal-using functions -int yon_launch_app(char *name) -{ - char *path = name; - thread_output *thread = malloc(sizeof(thread_output)); - thread->command = path; - thread->exitcode = malloc(sizeof(int)); - pthread_t thread_id; - pthread_create(&thread_id, NULL, (void *)yon_launch, thread); - return *thread->exitcode; -}; +// terminal-using functions +/**yon_launch_app_with_arguments(char *name, char *args) + * [EN] + * Execute [command] in separate thread; + * [RU] + * Выполнить команду [command] в отдельном потоке; +*/ int yon_launch_app_with_arguments(char *name, char *args) { - char *path = yon_char_get_augumented("/usr/bin/", name); - path = yon_char_get_augumented(path, " "); - path = yon_char_get_augumented(path, args); + char *path = yon_char_unite("/usr/bin/", name, " ", args,NULL); pthread_t thread_id; - thread_output *thread = malloc(sizeof(thread_output)); - thread->command = path; - thread->exitcode = malloc(sizeof(int)); - pthread_create(&thread_id, NULL, (void *)yon_launch, thread); - return *thread->exitcode; + char *command = NULL; + command = path; + pthread_create(&thread_id, NULL, (void *)yon_launch, command); }; -int yon_launch(thread_output *thread) +/**yon_launch(char *command) + * [EN] + * Execute command [command] + * [RU] + * Выполнить команду [command] +*/ +void yon_launch(char *command) { - int a = 0; - a = system(thread->command); - *thread->exitcode = a; - return *thread->exitcode; + system(command); } -int* philos_int_append(int* array, int* size, int value) { - if (array == NULL) { - array = (int*) malloc((*size+1) * sizeof(int)); - } - else { - array = (int*) realloc(array, ((*size)+1)*sizeof(int)); - } - array[(*size)] = value; - (*size)++; - return array; - -} - -int* remove_element_int_array(int* array, int* size, int index) { - int* temp = malloc(((*size) - 1) * sizeof(int)); - if (index != 0) - memcpy(temp, array, index * sizeof(int)); - - if (index != ((*size) - 1)) - memcpy(temp+index, array+index+1, ((*size) - index - 1) * sizeof(int)); - - free (array); - return temp; -} // Gtk functions @@ -1007,7 +1223,63 @@ static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer * терминал добавляется в контейнер [place_to_show] виджета, * после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument]. */ -void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ +void yon_terminal_integrated_launch(GtkWidget *place_to_show, 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; + GtkWidget *terminal = vte_terminal_new(); + 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); + gtk_container_add(GTK_CONTAINER(place_to_show),terminal); + char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ;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), + 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); + } + +/**yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument) + * [EN] + * launches terminal with specific [command], + * terminal is shown in [place_to_show] container, + * after terminal done its work [endwork_function] is called with [endwork_function_argument] argument. + * [RU] + * Запускает терминал с командой [command], + * терминал добавляется в контейнер [place_to_show] виджета, + * после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument]. +*/ +void yon_terminal_integrated_start(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")); @@ -1018,7 +1290,7 @@ void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *en 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,"\n",NULL); + char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;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), @@ -1049,29 +1321,126 @@ void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *en vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); gtk_widget_show_all(terminal); } +#endif + // Window config functions + #define check_window_config_setup if(__yon_window_config_target_window) + struct { + int x; + int y; + int width; + int height; + int fullscreen; + } __yon_main_window_config; + static GtkWindow *__yon_window_config_target_window = NULL; + static GKeyFile *__yon_window_config_file = NULL; + static char *__yon_window_config_path = NULL; + + void yon_window_config_save(){ + g_key_file_set_integer(__yon_window_config_file,"window","WindowPosX",__yon_main_window_config.x); + g_key_file_set_integer(__yon_window_config_file,"window","WindowPosY",__yon_main_window_config.y); + g_key_file_set_integer(__yon_window_config_file,"window","WindowWidth",__yon_main_window_config.width); + g_key_file_set_integer(__yon_window_config_file,"window","WindowHeight",__yon_main_window_config.height); + g_key_file_set_integer(__yon_window_config_file,"window","fullscreen",__yon_main_window_config.fullscreen); + g_key_file_save_to_file(__yon_window_config_file,__yon_window_config_path,NULL); + } -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; + void yon_get_is_fullscreen(){ + gtk_window_is_maximized(__yon_window_config_target_window); + __yon_main_window_config.fullscreen = gtk_window_is_maximized(__yon_window_config_target_window); } - else { - char* str = (char*)malloc(sizeof(char*)*2); - str[0] = '-'; - str[1] = '\0'; - return str; + + + void yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event){ + check_window_config_setup{ + yon_get_is_fullscreen(); + yon_window_config_save(); + } + gtk_main_quit(); } -} -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 __yon_window_config_on_resize(){ + int max=0; + max=gtk_window_is_maximized(__yon_window_config_target_window); + if(max==0){ + gtk_window_get_size(__yon_window_config_target_window,&__yon_main_window_config.width,&__yon_main_window_config.height); + gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y); + } + } + + void yon_window_config_setup(GtkWindow *window){ + __yon_window_config_target_window = window; + g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(yon_on_configured_window_destroy),NULL); + g_signal_connect(G_OBJECT(window),"check-resize"/*"configure-event"*/,G_CALLBACK(__yon_window_config_on_resize),NULL); + } + + void _yon_maximize(void *data){ + g_usleep(G_USEC_PER_SEC/10); + if(__yon_main_window_config.fullscreen ==1) gtk_window_maximize(__yon_window_config_target_window); + } + + int yon_window_config_load(char *path){ + __yon_window_config_file = g_key_file_new(); + __yon_window_config_path=yon_char_new(path); + 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); + if (stat(path, &st) == -1) { + mkdir(path, 0777); + } + FILE *fp; + fp=fopen(__yon_window_config_path,"w"); + fclose(fp); + g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL); + } + __yon_main_window_config.x = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosX",NULL); + __yon_main_window_config.y = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosY",NULL); + __yon_main_window_config.width = g_key_file_get_integer(__yon_window_config_file,"window","WindowWidth",NULL); + __yon_main_window_config.height = g_key_file_get_integer(__yon_window_config_file,"window","WindowHeight",NULL); + __yon_main_window_config.fullscreen = g_key_file_get_integer(__yon_window_config_file,"window","fullscreen",NULL); + 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); + pthread_t tid; + pthread_create(&tid,NULL,(void *)_yon_maximize,NULL); + return 1; } + + void yon_window_config_apply(){ + dictionary *dict=NULL; + gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y); + gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height); + } +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"); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); + GtkWidget *label = gtk_label_new(buttonname); + GtkWidget *image = gtk_image_new_from_icon_name("dialog-information-symbolic",GTK_ICON_SIZE_BUTTON); + gtk_label_set_xalign(GTK_LABEL(label),0.0); + gtk_box_pack_start(GTK_BOX(box),image,0,0,5); + gtk_box_pack_start(GTK_BOX(box),label,0,0,5); + gtk_container_add(GTK_CONTAINER(menu_item),box); + gtk_widget_show_all(menu_item); + return menu_item; } -#endif -int yon_gtk_combo_box_fill(GtkWidget *combo, config_str parameters,int size){ +GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname){ + GtkWidget *menu_item = gtk_menu_item_new(); + gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"menuitemtop"); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); + GtkWidget *label = gtk_label_new(buttonname); + GtkWidget *image = gtk_image_new_from_icon_name("dialog-question-symbolic",GTK_ICON_SIZE_BUTTON); + gtk_label_set_xalign(GTK_LABEL(label),0.0); + gtk_box_pack_start(GTK_BOX(box),image,0,0,5); + gtk_box_pack_start(GTK_BOX(box),label,0,0,5); + gtk_container_add(GTK_CONTAINER(menu_item),box); + gtk_widget_show_all(menu_item); + return menu_item; +} +int yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size){ if (combo&¶meters){ for (int i=0;ifirst; dct != NULL; dct = dct->next) - { - gtk_box_pack_start(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding); +/**yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...) + * [EN] + * + * [RU] + * Добвляет в [destination] все виджеты, прописанные после [padding] + * [expand] - расширяемость выделенного для виджетов места + * [fill] - заполнять ли виджетом всё ему выделенное место + * [padding] - отступ од других элементов +*/ +int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...){ + va_list args; + va_start(args,padding); + GtkWidget *widget = va_arg(args,GtkWidget*); + while (widget){ + gtk_box_pack_start(GTK_BOX(destination), widget, expand, fill, padding); } + va_end(args); return 1; - }else return 0; } -int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding) -{ - for (dictionary *dct = dict->first; dct != NULL; dct = dct->next) - { - gtk_box_pack_end(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding); - } +int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...){ + va_list args; + va_start(args,padding); + GtkWidget *widget = va_arg(args,GtkWidget*); + while (widget){ + gtk_box_pack_end(GTK_BOX(destination), widget, expand, fill, padding); + } + va_end(args); return 1; } + void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) { gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head); gtk_image_set_from_file(GTK_IMAGE(Image), image_path); } +void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) +{ + gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head); + gtk_image_set_from_resource(GTK_IMAGE(Image), image_path); +} + int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label) { if(icon&&box&&label){ @@ -1130,9 +1517,6 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label) } else return 0; } -/** - * -*/ void _yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type) { render_data data = render; @@ -1159,7 +1543,6 @@ void _yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type) gtk_label_set_text(GTK_LABEL(data.label), text); } - void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type){ _yon_ubl_status_box_render(text,type); } @@ -1282,7 +1665,7 @@ void yon_ubl_browser_window_open(char *link, char *browser_window_name){ if (!user) user=getlogin(); char *command=yon_char_unite("sudo -u ",user," xdg-open ", link,NULL); - yon_launch_app(command); + yon_launch(command); } #endif diff --git a/source/ubl-utils.h b/source/ubl-utils.h index acd60c5..bf783eb 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -7,12 +7,12 @@ #include #include #include +#include +#include #include #include #include -#include -#include -#include + #include "ubl-cmake.h" #ifdef WEBKIT_FOUND #include @@ -20,38 +20,25 @@ #define DesktopPath "/usr/share/applications/" #define for_dictionaries(obj, obj1) for (obj = obj1->first; obj != NULL; obj = obj->next) - -#define new(type) malloc(sizeof(type)) -#define new_arr(type,size) malloc(sizeof(type)*size) - -#define yon_ubl_set_config_save_data_pointer(command) config_commands.config_save_data = command - -#define yon_ubl_load_global_config(command, size_pointer) yon_config_load(command, size_pointer) -#define yon_ubl_load_local_config(command, size_pointer) yon_config_load(command, size_pointer) -#define yon_ubl_save_global_config(command) yon_config_save(command) -#define yon_ubl_save_local_config(command) yon_config_save(command) - #define try bool __HadError=false; #define catch(x) ExitJmp:if(__HadError) #define throw(x) {__HadError=true;goto ExitJmp;} -#define file_source_login_min_max "/etc/login.defs" +#define new(type) malloc(sizeof(type)) +#define new_arr(type,size) malloc(sizeof(type)*size) + typedef enum { #ifdef __GTK_H__ DICTIONARY_GTK_WIDGETS_TYPE, #endif - DICTIONARY_OTHER_TYPE + DICTIONARY_OTHER_TYPE=0, + DICTIONARY_CHAR_TYPE, + DICTIONARY_INT_TYPE, + DICTIONARY_BOOL_TYPE, } DICT_TYPE; -typedef struct -{ - char *command; - int *exitcode; -} thread_output; - - typedef struct dictionary { char *key; @@ -60,6 +47,7 @@ typedef struct dictionary struct dictionary *prev; struct dictionary *first; DICT_TYPE data_type; + int flag1; } dictionary; typedef struct apps @@ -74,6 +62,15 @@ typedef struct apps } apps; typedef char** config_str; + +static dictionary *__yon__config__strings = NULL; +#define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE) + +#define config(key) yon_config_get_by_key(key) + +#define for_config dictionary temp = NULL; for_dictionary(temp,__yon__config__strings) + +#define yon_remalloc(pointer, size) (!pointer) ? malloc(size) : realloc(pointer, size) // dictionary functions /**yon_dictionary_get_data(dictionary, type) @@ -87,28 +84,36 @@ typedef char** config_str; * [type] - тип данных, хранящихся в словаре [dictionary]. */ #define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data) -#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_create_with_data(key,data); \ - else dict=yon_dictionary_create_with_data_connected(dict,key,data);} -dictionary *yon_dictionary_create_empty(); +/**yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) + * [EN] + * + * [RU] + * Добавляет элемент словаря в конец словаря [dict] c ключом [key] и данными [data]. + * Если словарь не существует, создаёт его +*/ +#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_new_with_data(key,data); \ + else dict=yon_dictionary_append_with_data(dict,key,data);} + +dictionary *yon_dictionary_new(); -dictionary *yon_dictionary_create_conneced(dictionary *targetdict); +dictionary *yon_dictionary_append(dictionary *targetdict); dictionary *yon_dictionary_get_last(dictionary *dict); -dictionary *yon_dictionary_switch_places(dictionary *dict, int aim); +dictionary *yon_dictionary_swap(dictionary *dict, int aim); void yon_dictionary_make_first(dictionary *dict); void yon_dictionary_make_nth(dictionary *dict, int nth); -dictionary *yon_dictionary_create_with_data(char *key, void *data); +dictionary *yon_dictionary_new_with_data(char *key, void *data); -dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data); +dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data); dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect); -dictionary *yon_dictionary_find(dictionary **dict, char *key); +dictionary *yon_dictionary_get(dictionary **dict, char *key); dictionary *yon_dictionary_rip(dictionary *dict); @@ -117,8 +122,8 @@ dictionary *yon_dictionary_get_nth(dictionary *dict, int place); void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(void*)); // char functions -char* philos_str_remove(char *str, const char *sub); -char *yon_char_get_augumented(char *source, char *append); + +char *yon_char_append(char *source, char *append); char *yon_char_new(char *chr); @@ -134,13 +139,9 @@ char *yon_char_from_int(int int_to_convert); char *yon_char_replace(char *source, char *find, char*replace); -void philos_split_size_memory(char* str_value, int* size, char* pow_memory); - char **yon_char_parse(char *parameters, int *size, char *divider); -char** philos_str_split(char *parameters, int *size, char *divider); - -char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete); +char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete); int yon_char_parsed_check_exist(char **parameters, int size, char *param); @@ -148,17 +149,19 @@ int yon_char_find_count(char *source, char *find); int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size); -config_str yon_char_parsed_new (config_str old, int *old_size, ...); +config_str yon_char_parsed_new (int *size, ...); + +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); -// parsing functions -config_str philos_list_user(int* size); +int yon_ubl_check_root(); -char* philos_str_size_pow_byte(GtkWidget *combo_box_text); +char *yon_ubl_root_user_get(); -config_str philos_list_group(int* size); +// parsing functions -unsigned short philos_read_uid_min_max(char* filename, char* search); +config_str philos_list_user(int* size); apps *yon_apps_scan_and_parse_desktops(int *sizef); @@ -172,30 +175,40 @@ int yon_config_save(char *command); char *yon_config_get_parameter(config_str parameters, int size, char *param); -char *yon_config_make_save_parameter_with_multiple_arguments(char *parameter_string, char *config_parameter, char *divider); +int yon_config_load_register(char *command); -// terminal-using functions +int yon_config_remove_by_key(char *key); -int yon_launch_app(char *name); +int yon_config_remove_by_data(void *data); -int yon_launch_app_with_arguments(char *name, char *args); +int yon_config_remove_element(char *key, char *deleted); + +void *yon_config_get_by_key(char *key); + +char *yon_config_get_key_by_data(char *data); + +int yon_config_set(char *key, void *data); -int yon_launch(thread_output *thread); +int yon_config_clean(); -int* philos_int_append(int* array, int* size, int value); +void yon_config_register(char *key, void *data); + +config_str yon_config_get_all(); + +// terminal-using functions + +int yon_launch_app_with_arguments(char *name, char *args); + +void yon_launch(char *command); -int* remove_element_int_array(int* array, int* size, int index); // Gtk functions #ifdef __GTK_H__ #ifdef VTE_TERMINAL +void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument); + +void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); -/** - * -*/ -void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); -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); #endif /**yon_gtk_builder_get_widget(builder, widget_name) @@ -214,11 +227,13 @@ typedef struct GtkListStore *List; } expander_icon_view; -// GtkWidget *yon_gtk_app_chooser_apps_create(); +void yon_window_config_setup(GtkWindow *window); -// dictionary *yon_gtk_app_chooser_create(); +int yon_window_config_load(char *path); -// expander_icon_view yon_gtk_icon_view_expander_create(GtkWidget *pack, ...); +GtkWidget *yon_ubl_menu_item_about_new(char *buttonname); + +GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname); int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size); @@ -226,8 +241,9 @@ int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find); int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment); -int yon_dictionary_gtk_pack_start_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding); -int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding); +int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); + +int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); @@ -311,10 +327,13 @@ void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type); * [imag_path] - путь до картинки, загружаемой в [image] */ #define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path) +#define yon_ubl_header_setup_resource(overlay, head, image, imag_path) _yon_ubl_header_setup_resource(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path) #endif void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path); +void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path); + void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWidget *right_window, int socket_main_id, int socket_left_id, int socket_right_id); #ifdef WEBKIT_FOUND diff --git a/source/view_add.c b/source/view_add.c index c478654..f9e7628 100644 --- a/source/view_add.c +++ b/source/view_add.c @@ -1,100 +1,142 @@ #include "view_add.h" -add_window *add_widgets = NULL; +temp_set_window *add_widgets = NULL; +temp_config obj_add_config; +temp_config* get_add_config() { + return &obj_add_config; +} -add_window *add_setup_window(char* glade_path) { +temp_set_window *add_setup_window(char* glade_path) { if (add_widgets == NULL) { - add_widgets = malloc(sizeof(add_window)); - GtkBuilder *builder = gtk_builder_new_from_file(glade_path); + 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->btnSaveAddSave = yon_gtk_builder_get_widget(builder,"btnSaveAddSave"); - add_widgets->btnAddCancel = yon_gtk_builder_get_widget(builder,"btnAddCancel"); + add_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveAddSave"); + add_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnAddCancel"); - add_widgets->entryAddCmd = yon_gtk_builder_get_widget(builder,"entryAddCmd"); - add_widgets->cbxAddQuotaObj = yon_gtk_builder_get_widget(builder,"cbxAddQuotaObj"); - add_widgets->cbxAddQuotaLevel2 = yon_gtk_builder_get_widget(builder,"cbxAddQuotaLevel2"); - add_widgets->cbtAddDevice = yon_gtk_builder_get_widget(builder,"cbtAddDevice"); - add_widgets->lblCPULimitAdd = yon_gtk_builder_get_widget(builder,"lblCPULimitAdd"); - add_widgets->spinCPULimitAdd = yon_gtk_builder_get_widget(builder,"spinCPULimitAdd"); - add_widgets->chkCPULimitAdd = yon_gtk_builder_get_widget(builder,"chkCPULimitAdd"); + 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->chkPaddingFLAdd = yon_gtk_builder_get_widget(builder,"chkPaddingFLAdd"); - add_widgets->spinPaddingFLAdd = yon_gtk_builder_get_widget(builder,"spinPaddingFLAdd"); - add_widgets->cmbPaddingFLAdd = yon_gtk_builder_get_widget(builder,"cmbPaddingFLAdd"); + 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->chkSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionAdd"); - add_widgets->spinSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionAdd"); - add_widgets->cmbSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionAdd"); + 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->chkSoftRestrictionAdd = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionAdd"); - add_widgets->spiSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionAdd"); - add_widgets->cmSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionAdd"); + 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->chbAddRead = yon_gtk_builder_get_widget(builder,"chbAddRead"); - add_widgets->spinAddRead = yon_gtk_builder_get_widget(builder,"spinAddRead"); - add_widgets->cbtAddRead = yon_gtk_builder_get_widget(builder,"cbtAddRead"); + 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->spinAddWrite = yon_gtk_builder_get_widget(builder,"spinAddWrite"); - add_widgets->chbAddWrite = yon_gtk_builder_get_widget(builder,"chbAddWrite"); - add_widgets->cbtAddWrite = yon_gtk_builder_get_widget(builder,"cbtAddWrite"); - - device_fill_disk(add_widgets->cbtAddDevice); + 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() { - add_set_active_widgets(add_widgets->chkSoftRestrictionAdd, add_widgets->spiSevereRestrictionAdd, add_widgets->cmSevereRestrictionAdd); - add_set_active_widgets(add_widgets->chkSevereRestrictionAdd, add_widgets->spinSevereRestrictionAdd, add_widgets->cmbSevereRestrictionAdd); - add_set_active_widgets(add_widgets->chkPaddingFLAdd, add_widgets->spinPaddingFLAdd, add_widgets->cmbPaddingFLAdd); - add_set_active_widgets(add_widgets->chkCPULimitAdd, add_widgets->spinCPULimitAdd, add_widgets->lblCPULimitAdd); - add_set_active_widgets(add_widgets->chbAddWrite, add_widgets->spinAddWrite, add_widgets->cbtAddWrite); - add_set_active_widgets(add_widgets->chbAddRead, add_widgets->spinAddRead, add_widgets->cbtAddRead); - add_generate_cmd(); + 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 add_event(add_window *widgets) { - g_signal_connect(G_OBJECT(widgets->btnAddCancel),"clicked",G_CALLBACK(add_on_destroy_subwindow),NULL); +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->chkSoftRestrictionAdd), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionAdd), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkPaddingFLAdd), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkCPULimitAdd), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chbAddRead), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chbAddWrite), "toggled", G_CALLBACK(add_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->cbxAddQuotaObj),"changed",G_CALLBACK(add_update_combo_box), 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->spiSevereRestrictionAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinPaddingFLAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinCPULimitAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinAddRead),"value-changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinAddWrite),"value-changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionAdd),"changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionAdd),"changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cmbPaddingFLAdd),"changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cbtAddRead),"changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cbtAddWrite),"changed",G_CALLBACK(add_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cbtAddDevice),"changed",G_CALLBACK(add_generate_cmd), 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_destroy(GtkWidget *self) { - add_widgets = NULL; +void add_get_systemd_cgls(char* cmd_systemd_cgls) { + CMD_GET_SLICE_SERVICE = cmd_systemd_cgls; } -void add_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label) { - gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - gtk_widget_set_sensitive(entry, active); - gtk_widget_set_sensitive(label, active); +void add_destroy(GtkWidget *self) { + add_widgets = NULL; } -void add_localization(add_window *widgets) { +void add_localization(temp_set_window *widgets) { } @@ -104,7 +146,7 @@ void add_on_destroy_subwindow(GtkWidget *self) { } -add_window *get_widget_add() { +temp_set_window *get_widget_add() { return add_widgets; } @@ -112,18 +154,20 @@ 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->cbxAddQuotaLevel2)); - if (text != NULL) { + 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 { @@ -134,76 +178,66 @@ char* add_get_select_device_to_level_2() { } } -char* add_get_select_device() { - char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbtAddDevice)); - if (text != NULL) { - return text; + +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 { - char* str = (char*)malloc(sizeof(char*)*2); - str[0] = '-'; - str[1] = '\0'; - return str; + return -3; } -} -int add_get_read_device_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddRead)); -} -int add_get_write_device_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddWrite)); -} -int add_get_soft_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmSevereRestrictionAdd)); + } int add_get_hard_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbSevereRestrictionAdd)); + 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() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbPaddingFLAdd)); + 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() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxAddQuotaObj)); -} -char* add_get_read_device() { - return philos_get_size_bite(add_widgets->chbAddRead, add_widgets->spinAddRead, - add_widgets->cbtAddRead); -} -char* add_get_write_device() { - return philos_get_size_bite(add_widgets->chbAddWrite, add_widgets->spinAddWrite, - add_widgets->cbtAddWrite); + 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; + } } -char* add_get_soft() { - return philos_get_size_bite(add_widgets->chkSoftRestrictionAdd, add_widgets->spiSevereRestrictionAdd, - add_widgets->cmSevereRestrictionAdd); + +int add_get_soft() { + return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spiSevereRestrictionTemp)); } -char* add_get_hard() { - return philos_get_size_bite(add_widgets->chkSevereRestrictionAdd, add_widgets->spinSevereRestrictionAdd, - add_widgets->cmbSevereRestrictionAdd); +int add_get_hard() { + return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinSevereRestrictionTemp)); } -char* add_get_limit_cpu() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitAdd))) { - int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitAdd)); - return yon_char_from_int(size_bite); +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 { - char* str = (char*)malloc(sizeof(char*)*2); - str[0] = '-'; - str[1] = '\0'; - return str; + return -3; } } -char* add_get_limit_swap() { - return philos_get_size_bite(add_widgets->chkPaddingFLAdd, add_widgets->spinPaddingFLAdd, - add_widgets->cmbPaddingFLAdd); +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->cbxAddQuotaObj)); + 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->cbxAddQuotaObj)); + 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; @@ -212,87 +246,36 @@ void add_update_combo_box() { } 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) { - - } - else if (menu_id == 3) { - + 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->cbxAddQuotaLevel2)); - philos_fill_combo_box_text(add_widgets->cbxAddQuotaLevel2, fill_cmb_2, size); - // yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL); + 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); } } -void add_generate_cmd() { - char* str_cmd = ""; - char* split_simvol = g_malloc0(sizeof(char)*2); - int size_bite = 0; - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSoftRestrictionAdd))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spiSevereRestrictionAdd)); - str_cmd = yon_char_unite(str_cmd, - "MemoryHigh=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(add_widgets->cmSevereRestrictionAdd), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSevereRestrictionAdd))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinSevereRestrictionAdd)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "MemoryMax=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(add_widgets->cmbSevereRestrictionAdd), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLAdd))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinPaddingFLAdd)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "MemorySwapMax=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(add_widgets->cmbPaddingFLAdd), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitAdd))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitAdd)); - 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_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chbAddRead))) { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddDevice)); - if (menu_id != -1) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinAddRead)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "IOReadBandwidthMax=\"", - get_device_cfg()->name_disk[menu_id], - " ", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(add_widgets->cbtAddRead),"\"", NULL); - } - split_simvol[0] = ','; - split_simvol[1] = '\0'; - - } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chbAddWrite))) { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddDevice)); - if (menu_id != -1) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinAddWrite)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "IOWriteBandwidthMax=\"", - get_device_cfg()->name_disk[menu_id], - " ", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(add_widgets->cbtAddWrite),"\"", NULL); - } - } - gtk_entry_set_text(GTK_ENTRY(add_widgets->entryAddCmd), str_cmd); - free(split_simvol); + +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 index 261d998..790d323 100644 --- a/source/view_add.h +++ b/source/view_add.h @@ -12,70 +12,49 @@ #include #include #include "my_device.h" +#include "philos_utils.h" -// Переменные -typedef struct { - GtkWidget* Window; - GtkWidget* btnSaveAddSave; - GtkWidget* btnAddCancel; - GtkWidget* entryAddCmd; - GtkWidget* chbAddRead; - GtkWidget* spinAddRead; - GtkWidget* cbtAddRead; +#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,}\"" - GtkWidget* chbAddWrite; - GtkWidget* spinAddWrite; - GtkWidget* cbtAddWrite; +static char* CMD_GET_GROUP; +static char* CMD_GET_SLICE_SERVICE; - GtkWidget* chkSoftRestrictionAdd; - GtkWidget* spiSevereRestrictionAdd; - GtkWidget* cmSevereRestrictionAdd; - - GtkWidget* chkSevereRestrictionAdd; - GtkWidget* spinSevereRestrictionAdd; - GtkWidget* cmbSevereRestrictionAdd; - GtkWidget* chkPaddingFLAdd; - GtkWidget* spinPaddingFLAdd; - GtkWidget* cmbPaddingFLAdd; - - GtkWidget* chkCPULimitAdd; - GtkWidget* spinCPULimitAdd; - GtkWidget* lblCPULimitAdd; - - GtkWidget* cbtAddDevice; - GtkWidget* cbxAddQuotaObj; - GtkWidget* cbxAddQuotaLevel2; -} add_window; -// Функции -add_window *add_setup_window(char* glade_path); -void add_event(add_window *widgets); -void add_localization(add_window *widgets); +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); -add_window *get_widget_add(); +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 *self, GtkWidget *entry, GtkWidget *label); +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_device(); -char* add_get_read_device(); -char* add_get_write_device(); -char* add_get_soft(); -char* add_get_hard(); -char* add_get_limit_cpu(); -char* add_get_limit_swap(); +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(); - -int add_get_read_device_size(); -int add_get_write_device_size(); +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(); -void add_generate_cmd(); +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 index 7127154..6e7659c 100644 --- a/source/view_edit.c +++ b/source/view_edit.c @@ -1,76 +1,80 @@ #include "view_edit.h" -edit_window *edit_widgets = NULL; +temp_set_window *edit_widgets = NULL; +temp_config obj_edit_config; -edit_window *edit_setup_window(char* glade_path){ +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(edit_window)); - GtkBuilder *builder = gtk_builder_new_from_file(glade_path); + 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->btnEditCancel = yon_gtk_builder_get_widget(builder,"btnEditCancel"); - edit_widgets->btnSaveEditSave = yon_gtk_builder_get_widget(builder,"btnSaveEditSave"); + edit_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnEditCancel"); + edit_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveEditSave"); - edit_widgets->cbtEditDevice = yon_gtk_builder_get_widget(builder,"cbtEditDevice"); - edit_widgets->lblCPULimitEdit = yon_gtk_builder_get_widget(builder,"lblCPULimitEdit"); - edit_widgets->spinCPULimitEdit = yon_gtk_builder_get_widget(builder,"spinCPULimitEdit"); - edit_widgets->chkCPULimitEdit = yon_gtk_builder_get_widget(builder,"chkCPULimitEdit"); + 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->chkPaddingFLEdit = yon_gtk_builder_get_widget(builder,"chkPaddingFLEdit"); - edit_widgets->spinPaddingFLEdit = yon_gtk_builder_get_widget(builder,"spinPaddingFLEdit"); - edit_widgets->cmbPaddingFLEdit = yon_gtk_builder_get_widget(builder,"cmbPaddingFLEdit"); + 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->chkSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionEdit"); - edit_widgets->spinSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionEdit"); - edit_widgets->cmbSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionEdit"); + 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->chkSoftRestrictionEdit = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionEdit"); - edit_widgets->spiSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionEdit"); - edit_widgets->cmSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionEdit"); + 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->chbEditRead = yon_gtk_builder_get_widget(builder,"chbEditRead"); - edit_widgets->spinEditRead = yon_gtk_builder_get_widget(builder,"spinEditRead"); - edit_widgets->cbtEditRead = yon_gtk_builder_get_widget(builder,"cbtEditRead"); + 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->spinEditWrite = yon_gtk_builder_get_widget(builder,"spinEditWrite"); - edit_widgets->chbEditWrite = yon_gtk_builder_get_widget(builder,"chbEditWrite"); - edit_widgets->cbtEditWrite = yon_gtk_builder_get_widget(builder,"cbtEditWrite"); - edit_widgets->entryEditCmd = yon_gtk_builder_get_widget(builder,"entryEditCmd"); - device_fill_disk(edit_widgets->cbtEditDevice); - edit_event(edit_widgets); + 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"); + device_fill_disk(edit_widgets->cbtTempDevice); edit_localization(edit_widgets); + philos_temp_config_init(&obj_edit_config); } return edit_widgets; } -void edit_event(edit_window *widgets) { - g_signal_connect(G_OBJECT(widgets->btnEditCancel),"clicked",G_CALLBACK(edit_on_hide_subwindow),NULL); +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->chkSoftRestrictionEdit), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionEdit), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkPaddingFLEdit), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chkCPULimitEdit), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chbEditRead), "toggled", G_CALLBACK(edit_init_windows), NULL); - g_signal_connect(G_OBJECT(widgets->chbEditWrite), "toggled", G_CALLBACK(edit_init_windows), 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->spiSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinPaddingFLEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinCPULimitEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinEditRead),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->spinEditWrite),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cmbPaddingFLEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cbtEditRead),"changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cbtEditWrite),"changed",G_CALLBACK(edit_generate_cmd), NULL); - g_signal_connect(G_OBJECT(widgets->cbtEditDevice),"changed",G_CALLBACK(edit_generate_cmd), 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(edit_window *widgets) { +void edit_localization(temp_set_window *widgets) { } @@ -79,7 +83,7 @@ void edit_on_hide_subwindow(GtkWidget *self) { edit_widgets = NULL; } -edit_window *get_widget_edit() { +temp_set_window *get_widget_edit() { return edit_widgets; } @@ -93,206 +97,213 @@ void edit_show(GtkWidget *self, char* glade_path) { } } +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() { - edit_generate_cmd(); - edit_set_active_widgets(edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit, edit_widgets->cmSevereRestrictionEdit); - edit_set_active_widgets(edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit, edit_widgets->cmbSevereRestrictionEdit); - edit_set_active_widgets(edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit, edit_widgets->cmbPaddingFLEdit); - edit_set_active_widgets(edit_widgets->chkCPULimitEdit, edit_widgets->spinCPULimitEdit, edit_widgets->lblCPULimitEdit); - edit_set_active_widgets(edit_widgets->chbEditWrite, edit_widgets->spinEditWrite, edit_widgets->cbtEditWrite); - edit_set_active_widgets(edit_widgets->chbEditRead, edit_widgets->spinEditRead, edit_widgets->cbtEditRead); + 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 edit_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label) { - gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - gtk_widget_set_sensitive(entry, active); - gtk_widget_set_sensitive(label, active); +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); } -char* edit_get_select_device() { - char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(edit_widgets->cbtEditDevice)); - if (text != NULL) { - return text; +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 { - char* str = (char*)malloc(sizeof(char*)*2); - str[0] = '-'; - str[1] = '\0'; - return str; + return -3; } -} -int edit_get_read_device_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditRead)); -} -int edit_get_write_device_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditWrite)); -} -int edit_get_soft_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmSevereRestrictionEdit)); + } int edit_get_hard_size() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbSevereRestrictionEdit)); + 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() { - return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbPaddingFLEdit)); + 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; + } } -char* edit_get_read_device() { - return philos_get_size_bite(edit_widgets->chbEditRead, edit_widgets->spinEditRead, - edit_widgets->cbtEditRead); -} -char* edit_get_write_device() { - return philos_get_size_bite(edit_widgets->chbEditWrite, edit_widgets->spinEditWrite, - edit_widgets->cbtEditWrite); -} -char* edit_get_soft() { - return philos_get_size_bite(edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit, - edit_widgets->cmSevereRestrictionEdit); -} -char* edit_get_hard() { - return philos_get_size_bite(edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit, - edit_widgets->cmbSevereRestrictionEdit); -} -char* edit_get_limit_cpu() { - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitEdit))) { - int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit)); - return yon_char_from_int(size_bite); +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 { - char* str = (char*)malloc(sizeof(char*)*2); - str[0] = '-'; - str[1] = '\0'; - return str; + return -3; } } -char* edit_get_limit_swap() { - return philos_get_size_bite(edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit, - edit_widgets->cmbPaddingFLEdit); +int edit_get_limit_swap() { + return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLTemp)); } -// ================================================================= -void edit_set_select_device(char* str_value, int pow_mem) { - puts(str_value); -} -void edit_set_read_device(char* str_value, int pow_mem) { - edit_temp_set(str_value,pow_mem, edit_widgets->chbEditRead, - edit_widgets->spinEditRead, - edit_widgets->cbtEditRead); -} -void edit_set_write_device(char* str_value, int pow_mem) { - edit_temp_set(str_value,pow_mem, edit_widgets->chbEditWrite, - edit_widgets->spinEditWrite, - edit_widgets->cbtEditWrite); -} -void edit_set_soft(char* str_value, int pow_mem) { - edit_temp_set(str_value,pow_mem, edit_widgets->chkSoftRestrictionEdit, - edit_widgets->spiSevereRestrictionEdit, - edit_widgets->cmSevereRestrictionEdit); -} -void edit_set_hard(char* str_value, int pow_mem) { - edit_temp_set(str_value,pow_mem, edit_widgets->chkSevereRestrictionEdit, - edit_widgets->spinSevereRestrictionEdit, - edit_widgets->cmbSevereRestrictionEdit); -} -void edit_set_limit_cpu(char* str_value, int pow_mem) { - edit_temp_set(str_value,pow_mem, edit_widgets->chkCPULimitEdit, - edit_widgets->spinCPULimitEdit, - edit_widgets->lblCPULimitEdit); -} -void edit_set_limit_swap(char* str_value, int pow_mem) { - edit_temp_set(str_value,pow_mem, edit_widgets->chkPaddingFLEdit, - edit_widgets->spinPaddingFLEdit, - edit_widgets->cmbPaddingFLEdit); -} -void edit_temp_set(char* str_value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) { - char* search = "-"; - char* mem_size_pow = yon_char_new(str_value); - if (yon_char_find_count(mem_size_pow, search) == 0) { - int value = atoi(yon_char_divide_search(mem_size_pow, " ", -1)); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 1); - if (combo_box_text != NULL) { - // Todo: add code - gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box_text), pow_mem); - +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); } } - else { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 0); - } } -void edit_generate_cmd() { - char* str_cmd = ""; - char* split_simvol = g_malloc0(sizeof(char)*2); - int size_bite = 0; - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSoftRestrictionEdit))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spiSevereRestrictionEdit)); - str_cmd = yon_char_unite(str_cmd, - "MemoryHigh=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(edit_widgets->cmSevereRestrictionEdit), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; +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); + } } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSevereRestrictionEdit))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinSevereRestrictionEdit)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "MemoryMax=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(edit_widgets->cmbSevereRestrictionEdit), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; +} +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); } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLEdit))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLEdit)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "MemorySwapMax=", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(edit_widgets->cmbPaddingFLEdit), NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; + 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); } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitEdit))) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "CPUQuota=", - yon_char_from_int(size_bite), - "\%", NULL); - split_simvol[0] = ','; - split_simvol[1] = '\0'; + 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 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditRead))) { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice)); - if (menu_id != -1) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditRead)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "IOReadBandwidthMax=\"", - get_device_cfg()->name_disk[menu_id], - " ", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(edit_widgets->cbtEditRead),"\"", NULL); + 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); } - split_simvol[0] = ','; - split_simvol[1] = '\0'; - + + } +} +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); } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditWrite))) { - int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice)); - if (menu_id != -1) { - size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditWrite)); - str_cmd = yon_char_unite(str_cmd, split_simvol, - "IOWriteBandwidthMax=\"", - get_device_cfg()->name_disk[menu_id], - " ", - yon_char_from_int(size_bite), - philos_str_size_pow_byte(edit_widgets->cbtEditWrite),"\"", NULL); + +} +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); } } - gtk_entry_set_text(GTK_ENTRY(edit_widgets->entryEditCmd), str_cmd); - free(split_simvol); + else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 0); + } } diff --git a/source/view_edit.h b/source/view_edit.h index 32fd5f9..e8bf8da 100644 --- a/source/view_edit.h +++ b/source/view_edit.h @@ -12,72 +12,53 @@ #include #include #include "my_device.h" +#include "philos_utils.h" -// Переменные -typedef struct { - GtkWidget* Window; - GtkWidget* btnSaveEditSave; - GtkWidget* btnEditCancel; - - GtkWidget* entryEditCmd; - GtkWidget* chbEditRead; - GtkWidget* spinEditRead; - GtkWidget* cbtEditRead; - - GtkWidget* chbEditWrite; - GtkWidget* spinEditWrite; - GtkWidget* cbtEditWrite; - - GtkWidget* chkSoftRestrictionEdit; - GtkWidget* spiSevereRestrictionEdit; - GtkWidget* cmSevereRestrictionEdit; - - GtkWidget* chkSevereRestrictionEdit; - GtkWidget* spinSevereRestrictionEdit; - GtkWidget* cmbSevereRestrictionEdit; - - GtkWidget* chkPaddingFLEdit; - GtkWidget* spinPaddingFLEdit; - GtkWidget* cmbPaddingFLEdit; - - GtkWidget* chkCPULimitEdit; - GtkWidget* spinCPULimitEdit; - GtkWidget* lblCPULimitEdit; - GtkWidget* cbtEditDevice; -} edit_window; +#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,}\"" // Функции -edit_window *edit_setup_window(char* glade_path); -void edit_event(edit_window *widgets); -void edit_localization(edit_window *widgets); +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); -edit_window *get_widget_edit(); +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 edit_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label); -char* edit_get_select_device(); -char* edit_get_read_device(); -char* edit_get_write_device(); -char* edit_get_soft(); -char* edit_get_hard(); -char* edit_get_limit_cpu(); -char* edit_get_limit_swap(); -void edit_generate_cmd(); +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_device(char* str_value, int pow_mem); -void edit_set_read_device(char* str_value, int pow_mem); -void edit_set_write_device(char* str_value, int pow_mem); -void edit_set_soft(char* str_value, int pow_mem); -void edit_set_hard(char* str_value, int pow_mem); -void edit_set_limit_cpu(char* str_value, int pow_mem); -void edit_set_limit_swap(char* str_value, int pow_mem); -void edit_temp_set(char* str_value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text); +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(); -int edit_get_read_device_size(); -int edit_get_write_device_size(); +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_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.css b/ubl-settings-resourcequota.css index 34e17f4..49019ef 100644 --- a/ubl-settings-resourcequota.css +++ b/ubl-settings-resourcequota.css @@ -51,68 +51,93 @@ } .menu:hover >* { border-color:alpha(@theme_text_color, 0.01); -} -.menuitembottom{ - margin-top:0px; - margin-bottom:3px; -} -.menuitemmiddle{ - margin-top:0px; - margin-bottom:0px; -} - -.menuitemtop{ - margin-bottom:0px; -} -.menuitemtop *{ - margin:2px 2px 0 2px; - padding: 5px 10px 3px 5px; -} -.menuitemmiddle *{ - margin:0 2px 0 2px; - padding: 3px 10px 3px 5px; -} -.menuitembottom *{ - margin:0 2px 2px 2px; - padding: 3px 10px 5px 5px; -} -.menuitemtop:hover { - background:@theme_bg_color; - border-color:inherit; - border-left-width:inherit; - border-right-width:inherit; -} -.menuitemmiddle:hover { - background:@theme_bg_color; - border-color:inherit; - border-left-width:inherit; - border-right-width:inherit; -} -.menuitembottom:hover { - background:@theme_bg_color; - border-color:inherit; - border-left-width:inherit; - border-right-width:inherit; +}.menuitembottom{ + margin-top:0px; + margin-bottom:3px; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemmiddle{ + margin-top:0px; + margin-bottom:0px; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } -} -.menuitemtop:hover* { - margin:2px 2px 0 2px; - padding: 5px 10px 3px 5px; - background:@theme_selected_bg_color; - border-radius:2px; -} -.menuitemmiddle:hover* { - margin:0 2px 0 2px; - padding: 3px 10px 3px 5px; - background:@theme_selected_bg_color; - border-radius:2px; -} -.menuitembottom:hover* { - margin:0 2px 2px 2px; - padding: 3px 10px 5px 5px; - background:@theme_selected_bg_color; - border-radius:2px; -} + .menuitemtop{ + margin-bottom:0px; + border-color:inherit; + border-top-width:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemtop *{ + margin:2px 2px 0 2px; + padding-top:2px; + padding-bottom:2px; + /* padding: 5px 0px 3px 5px; */ + border:transparent; + } + .menuitemmiddle *{ + margin:0 2px 0 2px; + padding-top:2px; + padding-bottom:2px; + /* padding: 3px 0px 3px 5px; */ + border:transparent; + } + .menuitembottom *{ + margin:0 2px 2px 2px; + padding-top:2px; + padding-bottom:2px; + /* padding: 3px 0px 5px 5px; */ + } + .menuitemtop:hover { + background:@theme_bg_color; + border-color:inherit; + border-top-width:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemmiddle:hover { + background:@theme_bg_color; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitembottom:hover { + background:@theme_bg_color; + border-color:inherit; + border-bottom-width:0px; + border-left-width:inherit; + border-right-width:inherit; + + } + .menuitemtop:hover* { + margin:2px 2px 0 2px; + padding-top:2px; + padding-bottom:2px; + /* padding: 5px 0 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; */ + background:@theme_selected_bg_color; + border-radius:2px; + } + .menuitembottom:hover* { + margin:0 2px 2px 2px; + padding-top:2px; + padding-bottom:2px; + /* padding: 3px 0px 5px 5px; */ + background:@theme_selected_bg_color; + border-radius:2px; + } .workingbg, #workingbg { background-color:@theme_base_color; diff --git a/ubl-settings-resourcequota.desktop b/ubl-settings-resourcequota.desktop index 9d7483e..32ab4e6 100644 --- a/ubl-settings-resourcequota.desktop +++ b/ubl-settings-resourcequota.desktop @@ -7,7 +7,7 @@ GenericName[ru]=Квоты процессора и ОЗУ Comment=Configuring CPU and RAM quota settings for groups and users of the system Comment[ru]=Настройка параметров квот процессорного времени и ОЗУ для групп и пользователей системы Type=Application -Exec=ubl-settings-resourcequota +Exec=pkexec ubl-settings-resourcequota Icon=com.ublinux.ubl-settings-resourcequota Terminal=false X-XfcePluggable=true diff --git a/ubl-settings-resourcequota.glade b/ubl-settings-resourcequota.glade index c9045b9..06150b9 100644 --- a/ubl-settings-resourcequota.glade +++ b/ubl-settings-resourcequota.glade @@ -72,6 +72,7 @@ True False + center 90 @@ -83,7 +84,7 @@ 5 6 6 - 69 + 64 com.ublinux.ubl-settings-resourcequota @@ -133,6 +134,8 @@ True False start + 5 + 5 Configuring CPU and RAM quota settings for groups and users of the system True 0 @@ -172,49 +175,32 @@ - - 1 - 1000 - 1 - 1 - 10 - - + 100 1 10 - + 100 1 10 - - 1023 - 1 - 10 - - + 100 1 10 - - 1023 - 1 - 10 - - - 1023 + + 100 1 10 - + 100 1 10 - + 100 1 10 @@ -223,6 +209,7 @@ False start False + com.ublinux.ubl-settings-resourcequota True @@ -271,7 +258,6 @@ 0 User - Group Process Slice @@ -307,7 +293,7 @@ - + True False vertical @@ -327,7 +313,7 @@ True False - 12 + 5 True @@ -372,9 +358,6 @@ 5 5 True - - - False @@ -392,7 +375,8 @@ 5 5 5 - adjustment4 + 7 + a1 False @@ -479,9 +463,6 @@ 5 5 True - - - False @@ -499,7 +480,8 @@ 5 5 5 - adjustment6 + 7 + a2 False @@ -590,7 +572,7 @@ True False - 12 + 5 True @@ -607,9 +589,6 @@ 5 5 True - - - False @@ -627,7 +606,8 @@ 5 5 5 - adjustment7 + 7 + a3 False @@ -679,7 +659,7 @@ - True + False True 0 @@ -700,7 +680,7 @@ True False - 12 + 5 True @@ -717,9 +697,6 @@ 5 5 True - - - False @@ -737,7 +714,8 @@ 5 5 5 - adjustment5 + 7 + a4 False @@ -810,7 +788,7 @@ True False - 12 + 5 True @@ -904,12 +882,9 @@ 5 5 5 - 4 + 5 5 True - - - False @@ -927,7 +902,8 @@ 5 5 5 - adjustment8 + 7 + a5 False @@ -1014,9 +990,6 @@ 5 5 True - - - False @@ -1034,7 +1007,8 @@ 5 5 5 - adjustment9 + 7 + a6 False @@ -1128,7 +1102,7 @@ True False - 12 + 5 True @@ -1325,6 +1299,7 @@ False start False + com.ublinux.ubl-settings-resourcequota True @@ -1420,7 +1395,7 @@ True False - 12 + 5 True @@ -1465,9 +1440,6 @@ 5 5 True - - - False @@ -1485,7 +1457,8 @@ 5 5 5 - adjustment4 + 7 + a1 False @@ -1572,9 +1545,6 @@ 5 5 True - - - False @@ -1592,7 +1562,8 @@ 5 5 5 - adjustment6 + 7 + a2 False @@ -1683,7 +1654,7 @@ True False - 12 + 5 True @@ -1700,9 +1671,6 @@ 5 5 True - - - False @@ -1720,7 +1688,8 @@ 5 5 5 - adjustment7 + 7 + a3 False @@ -1772,7 +1741,7 @@ - True + False True 0 @@ -1793,7 +1762,7 @@ True False - 12 + 5 True @@ -1810,9 +1779,6 @@ 5 5 True - - - False @@ -1830,7 +1796,8 @@ 5 5 5 - adjustment5 + 7 + a4 False @@ -1903,7 +1870,7 @@ True False - 12 + 5 True @@ -1935,6 +1902,7 @@ True + True False 5 5 @@ -1997,12 +1965,9 @@ 5 5 5 - 4 + 5 5 True - - - False @@ -2020,7 +1985,8 @@ 5 5 5 - adjustment9 + 7 + a5 False @@ -2107,9 +2073,6 @@ 5 5 True - - - False @@ -2127,7 +2090,8 @@ 5 5 5 - adjustment8 + 7 + a6 False @@ -2221,7 +2185,7 @@ True False - 12 + 5 True @@ -2414,44 +2378,37 @@ - - True - False - dialog-information-symbolic + + 1 + 10000 + 1 + 1 + 10 - - True - False - dialog-question-symbolic + + 100 + 1 + 10 - - True - False - False - - - imagemenuitem - True - False - image2 - False - - - - - - imagemenuitem - True - False - image1 - False - - - + + 100 + 1 + 10 + + + 100 + 1 + 10 + + + 100 + 1 + 10 + + + 100 + 1 + 10 True @@ -2676,6 +2633,12 @@ translated and supported by community. + + True + False + False + False + True False @@ -2725,7 +2688,6 @@ translated and supported by community. True False - True @@ -2736,6 +2698,7 @@ translated and supported by community. 640 500 False + center 700 500 com.ublinux.ubl-settings-resourcequota @@ -2783,6 +2746,8 @@ translated and supported by community. 5 6 6 + True + 0 @@ -2883,6 +2848,7 @@ translated and supported by community. True True + adjustment5 liststore 0 @@ -2890,10 +2856,14 @@ translated and supported by community. + True + fixed Type quota True - + + word + 0 @@ -2902,11 +2872,15 @@ translated and supported by community. + True + fixed Quota object True - + + word + 1 @@ -2915,11 +2889,15 @@ object + True + fixed Soft RAM limit, (volume) True - + + word + 2 @@ -2928,11 +2906,15 @@ object + True + fixed Hard RAM limit, (volume) True - + + word + 3 @@ -2941,12 +2923,16 @@ object + True + fixed Swap file limit (volume) True - + + word + 4 @@ -2955,11 +2941,15 @@ limit + True + fixed CPU limit (%) True - + + word + 5 @@ -2968,12 +2958,17 @@ limit + True + fixed I/O limit (read) True - + + word + 100 + 6 @@ -2982,12 +2977,17 @@ limit + True + fixed I/O limit (write) True - + + word + 100 + 7 @@ -3332,7 +3332,9 @@ limit 5 5 5 - adjustment1 + 6 + 1 + adjustDisp False @@ -3370,10 +3372,38 @@ limit 5 5 - + True False - reload + center + + + True + False + emblem-synchronizing-symbolic + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + Update + + + False + True + 1 + + @@ -3400,7 +3430,7 @@ limit False True natural - adjustment3 + adjustment1 natural UTF-8 True @@ -3413,11 +3443,11 @@ limit - + True False vertical - adjustment3 + adjustment1 False @@ -3604,7 +3634,6 @@ limit 0 User - Group Process Slice @@ -3697,6 +3726,12 @@ limit False + + + + + + True @@ -3766,7 +3801,7 @@ limit True False - + True True False @@ -3909,6 +3944,7 @@ limit False start False + com.ublinux.ubl-settings-resourcequota True @@ -3932,7 +3968,7 @@ limit False True - 2 + 0 @@ -3947,7 +3983,7 @@ limit False True - 3 + 1 @@ -3962,7 +3998,22 @@ limit False True - 4 + 2 + + + + + Hard RAM limit, (volume) + True + True + False + start + True + + + False + True + 3 @@ -3975,12 +4026,44 @@ limit True - gtk-cancel True True True center - True + + + True + False + + + True + False + gtk-stop + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + Cancel + + + False + True + 1 + + + + False @@ -3990,12 +4073,44 @@ limit - gtk-save True True True center - True + + + True + False + + + True + False + gtk-save + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + Save + + + False + True + 1 + + + + False @@ -4011,21 +4126,6 @@ limit 5 - - - Hard RAM limit, (volume) - True - True - False - start - True - - - False - True - 6 - - Swap file limit (volume) @@ -4038,7 +4138,7 @@ limit False True - 7 + 5 @@ -4053,12 +4153,12 @@ limit False True - 8 + 6 - - I/O limit (write) + + I/O limit (read) True True False @@ -4068,12 +4168,12 @@ limit False True - 8 + 7 - - I/O limit (read) + + I/O limit (write) True True False @@ -4083,7 +4183,7 @@ limit False True - 9 + 8 diff --git a/ubl-settings-resourcequota.pot b/ubl-settings-resourcequota.pot index d6d9317..f9e2676 100644 --- a/ubl-settings-resourcequota.pot +++ b/ubl-settings-resourcequota.pot @@ -17,6 +17,20 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "Update" +msgstr "" + +msgid "" +"Warning! Application was launched without root - root-dependent actions are " +"locked" +msgstr "" + +msgid "Config loading failed" +msgstr "" + +msgid "Remove" +msgstr "" + msgid "User" msgstr "" diff --git a/ubl-settings-resourcequota_ru.po b/ubl-settings-resourcequota_ru.po index 8f1180f..731493d 100644 --- a/ubl-settings-resourcequota_ru.po +++ b/ubl-settings-resourcequota_ru.po @@ -20,6 +20,20 @@ msgstr "" #: 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 "Квота удалена" @@ -129,7 +143,7 @@ msgid "Type quota" msgstr "Тип квоты" msgid "Quota volume" -msgstr "Объем квотирования" +msgstr "Объект квотирования" msgid "Soft RAM limit, (volume)" msgstr "Мягкий лимит ОЗУ, (объём)" @@ -138,7 +152,7 @@ msgid "Hard RAM limit, (volume)" msgstr "Жёсткий лимит ОЗУ, (объём)" msgid "Swap file limit (volume)" -msgstr "Лимит файлов подкачки (объём)" +msgstr "Лимит файла подкачки (объём)" msgid "CPU limit (%)" msgstr "Лимит ЦПУ (%)" @@ -250,6 +264,9 @@ msgstr "Сохранить глобальную конфигурацию" msgid "Global configuration write error" msgstr "Сохранить глобальную конфигурацию" +msgid "Remove" +msgstr "Удалить" + msgid "Nothing to save!" msgstr "Нечего сохранять!"