From 70c38db5cbcd1c3c73d90964b58e1d023805c2ab Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 10 Jul 2023 17:39:17 +0600 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D0=B8=D1=80=D0=B0=D1=82=D1=8C=20=D0=BF=D1=80=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 9 + Makefile | 168 + README.md | 29 + ...ublinux.ubl-settings-diskquota.checked.svg | 327 + com.ublinux.ubl-settings-diskquota.funnel.svg | 45 + com.ublinux.ubl-settings-diskquota.policy | 24 + com.ublinux.ubl-settings-diskquota.svg | 5903 +++++++++++++++ ...ublinux.ubl-settings-diskquota.warning.svg | 55 + gresource.xml | 12 + screenshot/screenshot.png | Bin 0 -> 77906 bytes source/CMakeLists.txt | 108 + source/controler.c | 174 + source/controler.h | 8 + source/model/philos_utils.c | 1169 +++ source/model/philos_utils.h | 127 + source/model/ubl-utils.c | 1759 +++++ source/model/ubl-utils.h | 345 + source/ubl-cmake.in | 1 + source/ubl-settings-diskquota.c | 188 + source/ubl-settings-diskquota.h | 123 + source/ubl-strings.h | 62 + source/view_add_p.c | 0 source/view_add_p.h | 0 source/view_add_u_g.c | 0 source/view_add_u_g.h | 0 source/view_check_user_table.c | 0 source/view_check_user_table.h | 0 source/view_edit_p.c | 0 source/view_edit_p.h | 0 source/view_edit_u_g.c | 0 source/view_edit_u_g.h | 0 source/view_filters.c | 109 + source/view_filters.h | 48 + ubl-settings-diskquota | Bin 0 -> 629184 bytes ubl-settings-diskquota-banner.png | Bin 0 -> 33872 bytes ubl-settings-diskquota.css | 108 + ubl-settings-diskquota.desktop | 15 + ubl-settings-diskquota.glade | 6508 +++++++++++++++++ ubl-settings-diskquota.pot | 724 ++ ubl-settings-diskquota_ru.po | 997 +++ 40 files changed, 19145 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 com.ublinux.ubl-settings-diskquota.checked.svg create mode 100644 com.ublinux.ubl-settings-diskquota.funnel.svg create mode 100644 com.ublinux.ubl-settings-diskquota.policy create mode 100644 com.ublinux.ubl-settings-diskquota.svg create mode 100644 com.ublinux.ubl-settings-diskquota.warning.svg create mode 100644 gresource.xml create mode 100644 screenshot/screenshot.png create mode 100644 source/CMakeLists.txt create mode 100644 source/controler.c create mode 100644 source/controler.h create mode 100644 source/model/philos_utils.c create mode 100644 source/model/philos_utils.h create mode 100644 source/model/ubl-utils.c create mode 100644 source/model/ubl-utils.h create mode 100644 source/ubl-cmake.in create mode 100644 source/ubl-settings-diskquota.c create mode 100644 source/ubl-settings-diskquota.h create mode 100644 source/ubl-strings.h create mode 100644 source/view_add_p.c create mode 100644 source/view_add_p.h create mode 100644 source/view_add_u_g.c create mode 100644 source/view_add_u_g.h create mode 100644 source/view_check_user_table.c create mode 100644 source/view_check_user_table.h create mode 100644 source/view_edit_p.c create mode 100644 source/view_edit_p.h create mode 100644 source/view_edit_u_g.c create mode 100644 source/view_edit_u_g.h create mode 100644 source/view_filters.c create mode 100644 source/view_filters.h create mode 100755 ubl-settings-diskquota create mode 100644 ubl-settings-diskquota-banner.png create mode 100644 ubl-settings-diskquota.css create mode 100644 ubl-settings-diskquota.desktop create mode 100644 ubl-settings-diskquota.glade create mode 100644 ubl-settings-diskquota.pot create mode 100644 ubl-settings-diskquota_ru.po diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed27715 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.vscode/ +ubl-settings-TEMPLATE +*~ +build/ +compile/ +*# +terminal-commands/ +source/ubl-cmake.h +vgcore* \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8ec4457 --- /dev/null +++ b/Makefile @@ -0,0 +1,168 @@ +#!/usr/bin/make -f + +#SHELL := /bin/bash +MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) +MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) +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 + +all: init build + +init: + @echo "Initialize ..."; \ + if [ -d ".git" ]; then \ + 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; \ + echo "-- Build path: ${CMAKE_BUILD_DIR}" + +depend: + @echo "Check depends ..." + @for FILE_DEPEND in $(DEPENDS); do \ + if [ ! -f $${FILE_DEPEND} ]; then \ + echo "ERROR: Depend '$${FILE_DEPEND}' not found !"; \ + exit 1; \ + fi; \ + done; \ + echo "Check depends: OK" +# $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 + +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}"; \ + fi; \ + echo "${CMAKE_BUILD_DIR}/${PKGNAME}"; \ + cp ${CMAKE_BUILD_DIR}/${PKGNAME} ./; \ + echo "Debug: OK" + +prepare: + @echo "Prepare ..."; \ + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ + fi; \ + echo "Prepare: OK" + +check: + @echo "Check ..."; \ + if [ -f ${CMAKE_BUILD_DIR}/${PKGNAME} ]; then \ + echo "Check: OK"; \ + else \ + echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not found !"; \ + exit 1; \ + fi + +build: depend prepare + @echo "Build ..."; \ + make --directory=${CMAKE_BUILD_DIR}; \ + echo "Build: OK" + +uninstall: + @echo "Uninstall ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + $(RM) "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.png"; \ + done + @for FILE_SVG in $(wildcard *.svg); do \ + for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ + done; \ + done + @$(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) "${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; \ + [ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ + fi + @echo "Uninstall: OK" + +install: check uninstall + @echo "Install ..." +#################################################### УДАЛИТЬ ПЕРЕД КОММИТОМ ################################################################################ + @gcc source/ubl-cmake.h compile/resources.c compile/ubl-cmake.h source/controler.h source/controler.c source/model/philos_utils.h source/model/philos_utils.c source/model/my_device.h source/model/save.h source/model/save.c source/model/my_device.c source/model/model.h source/model/load.h source/model/load.c source/model/model.c source/ubl-settings-diskquota.c source/ubl-settings-diskquota.h source/ubl-strings.h source/model/ubl-utils.c source/model/ubl-utils.h -o ubl-settings-diskquota `pkg-config --cflags --libs gtk+-3.0 vte-2.91 webkit2gtk-4.0 webkit2gtk-web-extension-4.0` -g +#################################################### УДАЛИТЬ ПЕРЕД КОММИТОМ ################################################################################ + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + install -dm755 "${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES"; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + echo "$${FILE_PO}"; \ + msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16 32 48; do \ + install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps"; \ + rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + 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 -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" + @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; \ + [ -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 ..." + @$(RM) -rd ${CMAKE_BUILD_DIR} + @if [ -d ${CMAKE_BUILD_DIR} ]; then \ + echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \ + else \ + 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)"; \ + echo "... init"; \ + echo "... debug"; \ + echo "... prepare"; \ + echo "... compile"; \ + echo "... install"; \ + echo "... uninstall"; \ + echo "... clean"; \ + echo "... up_ver" diff --git a/README.md b/README.md new file mode 100644 index 0000000..85aef32 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# ubl-settings-diskquota +# Выполнить +# Build +In order to build ubl-settings-diskquota you will need: + +- CMake +- C compiler +- GTK+ 3 & dependencies +- webkit2gtk (optional) + +Once you have all the necessary dependencies, you can use: +```sh +$ make +``` + +# Installation +After a successful build, just use: +```sh +$ sudo make install clean +``` + +# Uninstallation +After a successful build, just use: +```sh +$ sudo make uninstall +``` + +![alt text](screenshot/screenshot.png) + diff --git a/com.ublinux.ubl-settings-diskquota.checked.svg b/com.ublinux.ubl-settings-diskquota.checked.svg new file mode 100644 index 0000000..e3cab42 --- /dev/null +++ b/com.ublinux.ubl-settings-diskquota.checked.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + diff --git a/com.ublinux.ubl-settings-diskquota.funnel.svg b/com.ublinux.ubl-settings-diskquota.funnel.svg new file mode 100644 index 0000000..4aec04a --- /dev/null +++ b/com.ublinux.ubl-settings-diskquota.funnel.svg @@ -0,0 +1,45 @@ + + + + + + + + + + diff --git a/com.ublinux.ubl-settings-diskquota.policy b/com.ublinux.ubl-settings-diskquota.policy new file mode 100644 index 0000000..de22da1 --- /dev/null +++ b/com.ublinux.ubl-settings-diskquota.policy @@ -0,0 +1,24 @@ + + + + + UBLinux + https://ublinux.ru + + + Run ubl-settings-diskquota as root + Запуск утилиты ubl-settings-diskquota с правами root + Authentication is required to run ubl-settings-diskquota + Требуется авторизация для запуска утилиты ubl-settings-diskquota с правами root + + auth_admin + auth_admin + auth_admin + + /usr/bin/ubl-settings-diskquota + true + + + diff --git a/com.ublinux.ubl-settings-diskquota.svg b/com.ublinux.ubl-settings-diskquota.svg new file mode 100644 index 0000000..708bd05 --- /dev/null +++ b/com.ublinux.ubl-settings-diskquota.svg @@ -0,0 +1,5903 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.ublinux.ubl-settings-diskquota.warning.svg b/com.ublinux.ubl-settings-diskquota.warning.svg new file mode 100644 index 0000000..9a90dba --- /dev/null +++ b/com.ublinux.ubl-settings-diskquota.warning.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/gresource.xml b/gresource.xml new file mode 100644 index 0000000..c640934 --- /dev/null +++ b/gresource.xml @@ -0,0 +1,12 @@ + + + + ubl-settings-diskquota.glade + + + ubl-settings-diskquota.css + + + ubl-settings-diskquota-banner.png + + \ No newline at end of file diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..51bf4abac5dac49275751c3c2ae5617424329367 GIT binary patch literal 77906 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

Q|8Qex{Eyf7I2}dy0;ts;P;pM)(vX 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∓yi8;h@u@a4esG;*G6(5Q4g>P(ld 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 WMe&b3#3kSi0mlist); + if (flag_gui_add == 0) { + g_object_ref(_config_gui->list); + gtk_list_store_clear(_config_gui->list); + } + for (int index = start; index < _config->size; index++) { + GtkTreeIter iter; + gtk_list_store_append(_config_gui->list,&iter); + if (strcmp(_config->type_arr[index], "project") != 0) { + gtk_list_store_set(_config_gui->list,&iter, + 0,_config->name[index], + 1,_config->quota[index], + 2,_config->files[index], + 3,philos_format_cfg_str_size_memory("", _config->soft_restriction_size[index],_config->soft_restriction_size_pow[index]), + 4,philos_format_cfg_str_size_memory("", _config->soft_restriction_file[index],_config->soft_restriction_file_pow[index]), + 5,philos_format_cfg_str_size_memory("", _config->severe_limitation_size[index],_config->severe_limitation_size_pow[index]), + 6,philos_format_cfg_str_size_memory("", _config->severe_limitation_file[index], _config->severe_limitation_file_pow[index]), + 7,philos_format_cfg_str_size_memory("", _config->deferring_size[index], _config->deferring_size_pow[index]), + 8,philos_format_cfg_str_size_memory("", _config->deferring_file[index], _config->deferring_file_pow[index]), + -1); + } + else { + gtk_list_store_set(_config_gui->list,&iter, + 0,_config->id[index], + 1,_config->name[index], + 2,_config->quota[index], + 3,_config->files[index], + 4,philos_format_cfg_str_size_memory("", _config->soft_restriction_size[index],_config->soft_restriction_size_pow[index]), + 5,philos_format_cfg_str_size_memory("", _config->soft_restriction_file[index],_config->soft_restriction_file_pow[index]), + 6,philos_format_cfg_str_size_memory("", _config->severe_limitation_size[index],_config->severe_limitation_size_pow[index]), + 7,philos_format_cfg_str_size_memory("", _config->severe_limitation_file[index], _config->severe_limitation_file_pow[index]), + 8,philos_format_cfg_str_size_memory("", _config->deferring_size[index], _config->deferring_size_pow[index]), + 9,philos_format_cfg_str_size_memory("", _config->deferring_file[index], _config->deferring_file_pow[index]), + -1); + } + } + if (flag_gui_add != 0) { + gtk_tree_view_set_model(GTK_TREE_VIEW(_config_gui->treeViewMain), model); + } +} +void fill_tree_view_u_g(custom_window* _config_gui, config_u_g_p* _config, int start,int flag_gui_add) { + GtkTreeModel *model = GTK_TREE_MODEL(_config_gui->list); + if (flag_gui_add == 0) { + g_object_ref(_config_gui->list); + gtk_list_store_clear(_config_gui->list); + } + for (int index = start; index < _config->size; index++) { + GtkTreeIter iter; + gtk_list_store_append(_config_gui->list,&iter); + if (strcmp(_config->type_arr[index], "project") != 0) { // Баг + gtk_list_store_set(_config_gui->list,&iter, -1); + } + } + if (flag_gui_add != 0) { + gtk_tree_view_set_model(GTK_TREE_VIEW(_config_gui->treeViewMain), model); + } +} + + +void load_system_cfg() { + cfg_u_g_p->flag_load = 0; + load_template_load_cfg(cfg_u_g_p, CMD_LOAD_SYSTEM); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL, BACKGROUND_IMAGE_SUCCESS_TYPE); +} + +void load_global_cfg() { + cfg_u_g_p->flag_load = 1; + load_template_load_cfg(cfg_u_g_p, CMD_LOAD_GLOBAL); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +} + +void control_event(main_window* _config_main_gui, custom_window* _config_custom_gui) { + g_signal_connect(G_OBJECT(_config_main_gui->LoadLocalMenuItem), "activate", G_CALLBACK(load_system_cfg), NULL); +} + +int main(int argc, char *argv[]){ + local=setlocale(LC_ALL, ""); + textdomain (LocaleName); + config_init(); + int option_index=0; + int show_help=0; + int debug_mode=0; + { + struct option long_options[] = { + {"help", 0, 0, 'h'}, + {"version", 0, 0, 'V'}, + {"lock-help", 0,0, 1}, + {"lock-save", 0,0, 2}, + {"lock-save-local", 0,0, 3}, + {"lock-save-global", 0,0, 4}, + {"lock-load-global", 0,0, 5}, + {"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_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); + if (getuid()!=0) + yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + else + yon_ubl_status_box_render(TITLE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id); + yon_window_config_setup(GTK_WINDOW(widgets->Window)); + yon_window_config_load(config_path); + GtkCssProvider *css=gtk_css_provider_new(); + gtk_css_provider_load_from_resource(css,CssPath); + gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), + GTK_STYLE_PROVIDER(css), + -1); + gtk_main(); +} \ No newline at end of file diff --git a/source/controler.h b/source/controler.h new file mode 100644 index 0000000..ac9f3a8 --- /dev/null +++ b/source/controler.h @@ -0,0 +1,8 @@ +#include "ubl-settings-diskquota.h" + + + +int main(int argc, char *argv[]); +void load_global_cfg(); +void load_system_cfg(); +void control_event(main_window* _config_main_gui, custom_window* _config_custom_gui); \ No newline at end of file diff --git a/source/model/philos_utils.c b/source/model/philos_utils.c new file mode 100644 index 0000000..3e19790 --- /dev/null +++ b/source/model/philos_utils.c @@ -0,0 +1,1169 @@ +#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--; + } + else { + *array_size = philos_int_append(*array_size, &index, 0); + 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; +} +#ifdef VTE_TERMINAL +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); +} +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)); +} +#endif +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; +} + +/**[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); +} + +char** philos_char_parsed_append(char** parsed, int *size, char *string) { + parsed = yon_char_parsed_append(parsed, size, string); + (*size)--; + return parsed; +} + +void philos_set_size_memory_integer(char* str_find, int** array_data, int index) { + if (strstr(str_find, " ")) { + yon_char_divide_search(str_find, " ", -1); + } + char* simv_del_array[9] = {"K","M","G","T","k","m","g","t","%"}; + for (size_t i = 0; i < 9; i++) { + if (strstr(str_find, simv_del_array[i])) { + str_find = yon_char_divide_search(str_find, simv_del_array[i], -1); + } + } + if (strstr(str_find, "-")==NULL) { + *array_data = philos_int_append(*array_data, &index, atoi(str_find)); + } + else { + *array_data = philos_int_append(*array_data, &index, -1); + } +} \ No newline at end of file diff --git a/source/model/philos_utils.h b/source/model/philos_utils.h new file mode 100644 index 0000000..3055bb7 --- /dev/null +++ b/source/model/philos_utils.h @@ -0,0 +1,127 @@ +#ifndef PHILOS_UTILS_H +#define PHILOS_UTILS_H +#include "ubl-utils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef VTE_TERMINAL + #include +#endif + +#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); +#ifdef VTE_TERMINAL +static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data); +#endif +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); +char** philos_char_parsed_append(char** parsed, int *size, char *string); +void philos_set_size_memory_integer(char* str_find, int** array_data, int index); +#endif \ No newline at end of file diff --git a/source/model/ubl-utils.c b/source/model/ubl-utils.c new file mode 100644 index 0000000..0688bf4 --- /dev/null +++ b/source/model/ubl-utils.c @@ -0,0 +1,1759 @@ +#include "ubl-utils.h" + +// dictionary functions + +/**yon_dictionary_create_empty(): + * [EN] + * Creates and returns empty dictionary + * [RU] + * Создаёт и возвращает пустой словарь. + */ +dictionary *yon_dictionary_new() +{ + 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; +} + +/**yon_dictionary_copy(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) + * [EN] + * + * [RU] + * Установить элементу словаря [dict] значение [data] +*/ +int yon_dictionary_set_data(dictionary *dict, void *data){ + dict->data=data; +} + +/**int yon_dictionary_set_key(dictionary *dict, char *key) + * [EN] + * + * [RU] + * Изменяет ключ элемента словаря [dict] на [key] +*/ +int yon_dictionary_set_key(dictionary *dict, char *key){ + dict->key=key; +} + +/** int yon_dictionary_set(dictionary *dict, char *key, void *data) + * [EN] + * + * [RU] +* Устанавливает значение ключа элемента словаря [dict] на [key] и его данные на [data] +*/ +int yon_dictionary_set(dictionary *dict, char *key, void *data){ + dict->key=key; + dict->data=data; +} + +/**int yon_dictionary_empty(dictionary *dict) + * [EN] + * + * [RU] + * Очищает элемент словаря [dict] от данных +*/ +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) +{ + dictionary *dct=NULL, *dact=*dict; + for_dictionaries(dct,dact); +} + +/**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_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) +{ + if (dict->next){ + dictionary *dct = NULL; + for_dictionaries(dct,dict); + return dct; + } else return dict; +} + +/**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) + { + if (dict->prev) + { + if (dict->prev->prev) + { + dictionary *next = dict->next, *prev = dict->prev, *preprev = prev->prev; + if (next) + { + preprev->next = dict; + dict->prev = preprev; + dict->next = prev; + prev->prev = dict; + prev->next = next; + next->prev = prev; + } + else + { + preprev->next = dict; + dict->prev = preprev; + dict->next = prev; + prev->prev = dict; + prev->next = NULL; + } + return prev; + } + else + { + dictionary *next = dict->next, *prev = dict->prev; + if (next) + { + yon_dictionary_make_first(dict); + dict->prev = NULL; + dict->next = prev; + prev->prev = dict; + prev->next = next; + next->prev = prev; + } + else + { + dict->prev = NULL; + dict->next = prev; + prev->prev = dict; + prev->next = NULL; + } + return prev; + } + } + } + else if (aim > 0) + { + if (dict->next) + { + if (dict->next->next) + { + dictionary *next = dict->next, *prev = dict->prev, *afnext = next->next; + if (prev) + { + prev->next = next; + next->prev = prev; + next->next = dict; + dict->prev = next; + dict->next = afnext; + afnext->prev = dict; + } + else + { + yon_dictionary_make_first(next); + next->prev = NULL; + next->next = dict; + dict->prev = next; + dict->next = afnext; + afnext->prev = dict; + } + return next; + } + else + { + dictionary *next = dict->next, *prev = dict->prev; + if (prev) + { + prev->next = next; + next->prev = prev; + next->next = dict; + dict->prev = next; + dict->next = NULL; + } + else + { + next->prev = NULL; + next->next = dict; + dict->prev = next; + dict->next = NULL; + } + } + } + } +} + +/**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) + { + dct->first = 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; + for (int i = 0; i < nth; i++) + { + if (dct == NULL) + return; + else + dct = dct->next; + } + yon_dictionary_rip(dict); + dictionary *prev = dct->prev; + prev->next = dict; + dict->prev = prev; + dict->next = dct; + dct->prev = dict; +} + +/**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_new(); + dct->key = yon_char_new(key); + dct->data = data; + dct->data_type = DICTIONARY_OTHER_TYPE; + return dct; +} + +/** void *yon_dictionary_free_all(dictionary *dictionary,void *data_manipulation) + * [EN] + * Frees whole [dictionary] and activates [data_manipulation] function if not NULL with [dictionary]->data argument for each dictionary. + * [RU] + * Освобождает память для всех элементов словаря [dictionary] и активирует функцию [data_manipulation], если она была передана, с аргументом [dictionary]->data на каждый элемент словаря. +*/ +void *yon_dictionary_free_all(dictionary *dictionary_to_free,void (*data_manipulation)(void*)){ + dictionary *dict=NULL; + for_dictionaries(dict,dictionary_to_free){ + if(data_manipulation) + data_manipulation(dict->data); + if(dict->prev) + free(dict->prev); + } + free(dict); + return NULL; +} + +/**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_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); + dict->next = toconnect; + toconnect->prev = dict; + toconnect->first = dict->first; + return toconnect; +} + +/**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) + { + if (strcmp(pointer->key, key) == 0) + { + *dict = pointer; + return pointer; + } + } + return NULL; +} + +/**yon_dictionary_rip(dictionary *dict) + * [EN] + * + * [RU] + * Вырезает элемент из словаря и возвращает вырезанный элемент. +*/ +dictionary *yon_dictionary_rip(dictionary *dict) +{ + if (!dict->next&&!dict->prev) return NULL; + else if (!dict->next) + { + dictionary *prev = dict->prev; + if (prev) + { + prev->next = NULL; + return prev; + } + else + return dict; + } + else if (!dict->prev) + { + dictionary *next = dict->next; + if (next) + { + yon_dictionary_make_first(next); + next->prev = NULL; + return next; + } + else + return dict; + } + else + { + dictionary *next = dict->next, *prev = dict->prev; + next->prev = prev; + prev->next = next; + return next; + } +} + +/**yon_dictionary_get_nth(dictionary *dict, int place) + * [EN] + * + * [RU] + * Возвращает [place]-й элемент словаря [dict] +*/ +dictionary *yon_dictionary_get_nth(dictionary *dict, int place) +{ + if (dict){ + dict = dict->first; + int i = 0; + for (i = 0; i < place; i++) + if (dict->next) + dict = dict->next; + else + break; + if (i == place) + return dict; + else + return NULL; + } else return NULL; +} + +// char functions + +/**[EN] + * + * creates new char string by combining two char strings. + */ +char *yon_char_append(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; +} + +/**[EN] + * + * creates new char string by copying another char. + */ +char *yon_char_new(char *chr) +{ + if (chr){ + char *newchar = malloc(strlen(chr) + 1); + memset(newchar, 0, strlen(chr) + 1); + memcpy(newchar, chr, strlen(chr)); + return newchar; + } else + return NULL; +} + +/**yon_char_unite(char *source, ...) + * [En] + * + * [RU] + * Объединяет строку [source] со всеми строками, написанными в [...] +*/ +char *yon_char_unite(char *source, ...){ + va_list arglist; + char *new_char=NULL; + char *unite_char=NULL; + new_char=yon_char_new(source); + va_start(arglist,source); + unite_char = va_arg(arglist,char*); + while(unite_char){ + new_char = yon_char_append(new_char,unite_char); + unite_char = va_arg(arglist,char*); + } + va_end(arglist); + return new_char; +} + +/**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) +{ + char *cut = NULL; + cut = malloc(size + 1); + memset(cut, 0, size + 1); + memcpy(cut, source + startpos, size); + return cut; +} + +/**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. + */ +char *yon_char_divide(char *source, int dividepos) +{ + char *cut = malloc(dividepos + 1); + memset(cut, 0, dividepos + 1); + memcpy(cut, source, dividepos); + char *left = malloc(strlen(source) - strlen(cut)); + memset(left, 0, strlen(source) - strlen(cut)); + memcpy(left, source + dividepos + 1, (strlen(source) - dividepos)); + memset(source, 0, strlen(source)); + memcpy(source, left, strlen(left)); + return cut; +} + +/**yon_char_find_count(char *source, char *find) + * [EN] + * + * [RU] + * Считает количество символов [find] в строке [source] +*/ +int yon_char_find_count(char *source, char *find){ + char *working_string=yon_char_new(source); + int i=0; + int size=0; + int pos=0; + config_str rtn = yon_char_parse(working_string,&size,"\n"); + for (int j=0;j= 10; i++) + { + convert_check = convert_check / 10; + } + char *ch = g_malloc0(i * sizeof(char) + 1); + sprintf(ch, "%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; + if(!strstr(replace,find)){ + while ((final=strstr(source,find))){ + 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_append(temp,replace); + source=yon_char_append(temp,final+1); + } + return source; + } +} + +/**yon_char_parse(char *parameters, int *size, char *divider) + * [EN] + * Parses string [parameters], divided by [divider], + * then returns parsed string array and sets [size] to + * size of returned array +*/ +char **yon_char_parse(char *parameters, int *size, char *divider){ + char **string=NULL; + int i=1; + string=malloc(sizeof(char*)); + char *paramline=yon_char_new(parameters); + char *param; + while ((param=yon_char_divide_search(paramline,divider,1))){ + string=realloc(string,sizeof(char*)*i); + string[i-1]=yon_char_new(param); + i++; + if (strcmp(param,paramline)==0) break; + } + string=realloc(string,sizeof(char*)*i); + string[i-1]=yon_char_new(paramline); + i++; + // printf("%d\n",i); + *size=i-1; + return string; + +} + +/**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete) + * [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; + 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; +} + +/**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); + file = fopen(path, "r"); + if (strlen(de->d_name) > 9) + { + char *extension = strstr(path, "."); + if (extension != NULL) + { + if (strcmp(extension, ".desktop") == 0) + { + apps tempapp; + GKeyFile *gfile = g_key_file_new(); + GError *err = NULL; + g_key_file_load_from_file(gfile, path, G_KEY_FILE_KEEP_TRANSLATIONS, NULL); + char *Type = g_key_file_get_string(gfile, "Desktop Entry", "Type", &err); + if (err) + { + printf("%s\n", err->message); + } + if (strcmp(Type, "Application") == 0) + tempapp.Type = 1; + else if (strcmp(Type, "pyApplication") == 0) + tempapp.Type = 2; + else + continue; + tempapp.Name = g_key_file_get_locale_string(gfile, "Desktop Entry", "Name", setlocale(LC_ALL, NULL), NULL); + if (tempapp.Name == NULL) + continue; + tempapp.Categories = g_key_file_get_string(gfile, "Desktop Entry", "Categories", NULL); + if (tempapp.Categories == NULL) + continue; + tempapp.Exec = g_key_file_get_string(gfile, "Desktop Entry", "Exec", NULL); + if (tempapp.Exec == NULL) + continue; + tempapp.Icon = g_key_file_get_string(gfile, "Desktop Entry", "Icon", NULL); + if (tempapp.Icon == NULL) + continue; + tempapp.Pluggable = g_key_file_get_boolean(gfile, "Desktop Entry", "Pluggable", NULL); + if (!tempapp.Pluggable) + tempapp.Pluggable = g_key_file_get_boolean(gfile, "Desktop Entry", "X-XfcePluggable", NULL); + if (tempapp.Pluggable) + tempapp.DualPluggable = g_key_file_get_boolean(gfile, "Desktop Entry", "X-UBLPluggable", NULL); + if (g_key_file_get_boolean(gfile, "Desktop Entry", "X-UBL-SettingsManager-Hidden", NULL) == 0) + if (size == 0) + { + applist = (apps *)malloc(size + 1 * sizeof(apps)); + applist[0].Name = yon_char_new(tempapp.Name); + applist[0].Categories = yon_char_new(tempapp.Categories); + applist[0].Exec = yon_char_new(tempapp.Exec); + applist[0].Icon = yon_char_new(tempapp.Icon); + applist[0].Type = tempapp.Type; + applist[0].Pluggable = tempapp.Pluggable; + applist[0].DualPluggable = tempapp.DualPluggable; + size++; + } + else + { + applist = (apps *)realloc(applist, (size + 1) * sizeof(apps)); + applist[size].Name = yon_char_new(tempapp.Name); + applist[size].Categories = yon_char_new(tempapp.Categories); + applist[size].Exec = yon_char_new(tempapp.Exec); + applist[size].Icon = yon_char_new(tempapp.Icon); + applist[size].Pluggable = tempapp.Pluggable; + applist[size].DualPluggable = tempapp.DualPluggable; + applist[size].Type = tempapp.Type; + size++; + } + } + } + } + } + } + *sizef = size; + return applist; +}; + +void yon_apps_sort(apps *applist, int size) +{ + apps tmp; + if (size > 2) + { + for (int i = 1; i < size; i++) + { + for (int j = 1; j < size; j++) + { + if (strcmp(applist[j].Name, applist[j - 1].Name) < 0) + { + tmp = applist[j]; + applist[j] = applist[j - 1]; + applist[j - 1] = tmp; + }; + } + }; + } +}; + +apps *yon_apps_get_by_name(apps *applist, char *name, int size) +{ + for (int i = 0; i < size; i++) + { + if (strcmp(applist[i].Name, name) == 0) + return &applist[i]; + } + return NULL; +}; + +//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[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) + { + output_strings = realloc(output_strings, sizeof(char *) * (i + 1)); + // printf("%s\n", str); + output_strings[i] = NULL; + output_strings[i] = yon_char_new(str); + memset(str, 0, 4096); + i++; + } + } + if (i>0){ + *str_len = i; + return output_strings; + } else{ + *str_len=-1; + return NULL; + } +} + +/**int yon_config_save(char *command) + * [EN] + * Saves config with [command] + * [RU] + * Выполняет команду [command], добавляя в конец все записи конфига в таком виде: + * [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]" +*/ +int yon_config_save_registered(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; +} + +/**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; +} + +/**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) +{ + if (param[0]==' ') + yon_char_divide_search(param," ",-1); + param=yon_char_divide_search(yon_char_new(param)," ",-1); + + char *str = NULL; + for (int j = 0; j < size; j++) + { + char *name = yon_char_divide_search(yon_char_new(parameters[j]), "=", 1); + if (name) + { + if (strcmp(name, param) == 0) + { + str = yon_char_divide_search(yon_char_new(parameters[j]), "\n", 1); + if (strcmp(str, "") != 0 && strcmp(str, "(null)") != 0) + return str; + else + return NULL; + } + } + } + return NULL; +} + + + +// 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_unite("/usr/bin/", name, " ", args,NULL); + pthread_t thread_id; + char *command = NULL; + command = path; + pthread_create(&thread_id, NULL, (void *)yon_launch, command); +}; + +/**yon_launch(char *command) + * [EN] + * Execute command [command] + * [RU] + * Выполнить команду [command] +*/ +void yon_launch(char *command) +{ + system(command); +} + +// Gtk functions + + +#ifdef __GTK_H__ + + +static render_data render; + +#ifdef VTE_TERMINAL + +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)); +} + +/** + * void yon_terminal_integrated_launch(GtkWidget *place_to_show, 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_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," ; sleep 5;exit 0","\n",NULL); + printf("%s\n",install_command); + if(endwork_function) + g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); + vte_terminal_spawn_async(VTE_TERMINAL(terminal), + 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")); + 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," ; 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), + 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), 100); + 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); + } +#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); + } + + 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); + } + + /**yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event) + * [EN] + * + * [RU] + * Сохраняет настройки основного окна. Вызывается когда основное окно уничтожается. + */ + 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 __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); + } + } + + /**yon_window_config_setup(GtkWindow *window) + * [EN] + * + * [RU] + * Устанавливает указатель на окно для отслеживания его положения и размера + */ + 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); + } + + /**yon_window_config_load(char *path) + * [EN] + * + * [RU] + * Загружает конфиг окна и инициализирует отслеживание его параметров + */ + 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; +} + +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; +} + + +// other Gtk functions + +/**yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size) + * [EN] + * + * [RU] + * Добавляет в Комбобокс [combo] все строки из массива строк [parameters] размера [size] +*/ +int yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size){ + if (combo&¶meters){ + for (int i=0;imessage); + g_error_free(err); + } + if (type == BACKGROUND_IMAGE_SUCCESS_TYPE||! type) + { + gtk_style_context_remove_class(gtk_widget_get_style_context(data.box), "boxInfoMessError"); + gtk_style_context_add_class(gtk_widget_get_style_context(data.box), "boxInfoMessOK"); + gtk_image_set_from_pixbuf(GTK_IMAGE(data.icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); + } + else if (type == BACKGROUND_IMAGE_FAIL_TYPE) + { + gtk_style_context_remove_class(gtk_widget_get_style_context(data.box), "boxInfoMessOK"); + gtk_style_context_add_class(gtk_widget_get_style_context(data.box), "boxInfoMessError"); + gtk_image_set_from_pixbuf(GTK_IMAGE(data.icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); + } + if (text) + 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); +} + +/**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) + * [EN] + * Set up plugs for using with GtkSockets insine ubl-settings-manager. + * [main_window] is container widget, which holds main application functionality. + * [left_window] is container widget, which holds widgets, have to be shown at left part of ubl-settings-manager header. + * [right_window] is container widget, which holds widgets, have to be shown at right part of ubl-settings-manager header. + * [socket_main_id] is id of socket for [main_window]. + * [socket_left_id] is id of socket for [left_window]. + * [socket_right_id] is id of socket for [right_window]. + * [RU] + * Настраивает плаги для работы с сокетами в утилите ubl-settings-manager. + * [main_window] - контейнер основного интерфейса приложения. + * [left_window] - контейнер для виджетов которые должны отображаться в левой части шапки ubl-settings-manager. + * [right_window] - контейнер для виджетов которые должны отображаться в правой части шапки ubl-settings-manager. + * [socket_main_id] - id сокета для [main_window]. + * [socket_left_id] - id сокета для [left_window]. + * [socket_right_id] - id сокета для [right_window]. +*/ +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){ + if (main_window&&socket_main_id>-1){ + gtk_widget_hide(gtk_widget_get_toplevel(main_window)); + GtkWidget *plug_main=gtk_plug_new(socket_main_id); + GtkWidget *plug_left=NULL; + GtkWidget *plug_right=NULL; + GtkWidget *box=NULL; + g_signal_connect(G_OBJECT(plug_main), "destroy", G_CALLBACK(gtk_main_quit),NULL); + if (socket_left_id>-1&&left_window){ + plug_left=gtk_plug_new(socket_left_id); + g_object_ref(left_window); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(left_window)),left_window); + gtk_container_add(GTK_CONTAINER(plug_left),left_window); + gtk_style_context_add_class(gtk_widget_get_style_context(plug_left),"primary-toolbar"); + gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"button"); + gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"opacited"); + gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"color"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug_left),"noborder"); + gtk_widget_show(plug_left); + } + else if (left_window){ + if (box==NULL){ + box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + gtk_box_pack_start(GTK_BOX(main_window),box,0,0,5); + gtk_box_reorder_child(GTK_BOX(main_window),box,0); + gtk_widget_show(box); + } + gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"inherited"); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(left_window)),left_window); + gtk_box_pack_end(GTK_BOX(box),left_window,0,0,5); + } + if (socket_right_id>-1&&right_window){ + plug_right=gtk_plug_new(socket_right_id); + g_object_ref(right_window); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(right_window)),right_window); + gtk_container_add(GTK_CONTAINER(plug_right),right_window); + gtk_style_context_add_class(gtk_widget_get_style_context(plug_right),"primary-toolbar"); + gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"button"); + gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"opacited"); + gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"color"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug_right),"noborder"); + gtk_widget_show(plug_right); + } + else if (right_window){ + if (box==NULL){ + box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + gtk_box_pack_start(GTK_BOX(main_window),box,0,0,5); + gtk_box_reorder_child(GTK_BOX(main_window),box,0); + gtk_widget_show(box); + } + gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"inherited"); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(right_window)),right_window); + gtk_box_pack_start(GTK_BOX(box),right_window,0,0,5); + } + g_object_ref(main_window); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(main_window)),main_window); + gtk_container_add(GTK_CONTAINER(plug_main),main_window); + gtk_widget_show(plug_main); + } +} + +#ifdef WEBKIT_FOUND + +/**yon_ubl_browser_window_open(char *link, char *browser_window_name) + * [EN] + * Launches integrated browser window, named [browser_window_name] at header with [link]. + * [RU] + * Открывает встроенный браузер с именем [browser_window_name] и показываемой страницей по ссылке [link] +*/ +void yon_ubl_browser_window_open(char *link, char *browser_window_name){ + GtkWidget *browser=gtk_window_new(GTK_WINDOW_TOPLEVEL); + GtkWidget *web_place=gtk_box_new(GTK_ORIENTATION_VERTICAL,0); + GtkWidget *header=gtk_header_bar_new(); + GtkWidget *header_label=gtk_label_new(browser_window_name); + GtkWidget *WebView=webkit_web_view_new(); + gtk_container_add(GTK_CONTAINER(browser),web_place); + gtk_window_set_titlebar(GTK_WINDOW(browser),header); + gtk_window_set_title(GTK_WINDOW(browser),browser_window_name); + gtk_widget_set_size_request(browser,800,600); + gtk_header_bar_set_custom_title(GTK_HEADER_BAR(header),header_label); + gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header),1); + webkit_web_view_load_uri(WEBKIT_WEB_VIEW(WebView),link); + gtk_box_pack_start(GTK_BOX(web_place),WebView,1,1,0); + gtk_widget_show_all(browser); +} +#else + +/**yon_ubl_browser_window_open(char *link, char *browser_window_name) + * [EN] + * Launches browser with [link]. + * [browser_window_name] is't used. It's needed for compatibility with webkit version of that function. + * [RU] + * Открывает браузер со страницей по ссылке [link] + * [browser_window_name] не используется. Нужна для совместимости с webkit версией этой функции. +*/ +void yon_ubl_browser_window_open(char *link, char *browser_window_name){ + char *user=getenv("SUDO_USER"); + if (!user) + user=getlogin(); + char *command=yon_char_unite("sudo -u ",user," xdg-open ", link,NULL); + yon_launch_app(command); +} +#endif + +#endif \ No newline at end of file diff --git a/source/model/ubl-utils.h b/source/model/ubl-utils.h new file mode 100644 index 0000000..99d34cc --- /dev/null +++ b/source/model/ubl-utils.h @@ -0,0 +1,345 @@ +#ifndef UBL_UTILS +#define UBL_UTILS +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define try bool __HadError=false; +#define catch(x) ExitJmp:if(__HadError) +#define throw(x) {__HadError=true;goto ExitJmp;} + +#include "../ubl-cmake.h" +#ifdef WEBKIT_FOUND + #include +#endif +#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) + + +typedef enum +{ + #ifdef __GTK_H__ + DICTIONARY_GTK_WIDGETS_TYPE, + #endif + DICTIONARY_OTHER_TYPE=0, + DICTIONARY_CHAR_TYPE, + DICTIONARY_INT_TYPE, + DICTIONARY_BOOL_TYPE, + +} DICT_TYPE; + +typedef struct dictionary +{ + char *key; + void *data; + struct dictionary *next; + struct dictionary *prev; + struct dictionary *first; + DICT_TYPE data_type; + int flag1; +} dictionary; + +typedef struct apps +{ + char *Name; + int Type; + char *Categories; + char *Exec; + char *Icon; + int Pluggable; + int DualPluggable; +} 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) + * [EN] + * Gets data from dictionary. + * [dictionary] is dictionary, from which data should be extracted; + * [type] is type of data, [dictionary] contains. + * [RU] + * Возвращает данные из словаря. + * [dictionary] - словарь из которого достаются данные. + * [type] - тип данных, хранящихся в словаре [dictionary]. +*/ +#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data) + +/**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_append(dictionary *targetdict); + +dictionary *yon_dictionary_get_last(dictionary *dict); + +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_new_with_data(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_get(dictionary **dict, char *key); + +dictionary *yon_dictionary_rip(dictionary *dict); + +dictionary *yon_dictionary_get_nth(dictionary *dict, int place); + +void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(void*)); + +// char functions + +char *yon_char_append(char *source, char *append); + +char *yon_char_new(char *chr); + +char *yon_char_unite(char *source, ...); + +char *yon_cut(char *source, int size, int startpos); + +char *yon_char_divide(char *source, int dividepos); + +char *yon_char_divide_search(char *source, char *dividepos, int delete_divider); + +char *yon_char_from_int(int int_to_convert); + +char *yon_char_replace(char *source, char *find, char*replace); + +char **yon_char_parse(char *parameters, int *size, char *divider); + +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); + +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 (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); + +int yon_ubl_check_root(); + +char *yon_ubl_root_user_get(); + +// parsing functions + +config_str philos_list_user(int* size); + +apps *yon_apps_scan_and_parse_desktops(int *sizef); + +void yon_apps_sort(apps *applist, int size); + +apps *yon_apps_get_by_name(apps *applist, char *name, int size); + +config_str yon_config_load(char *command, int *str_len); + +int yon_config_save_registered(char *command); + +char *yon_config_get_parameter(config_str parameters, int size, char *param); + +int yon_config_load_register(char *command); + +int yon_config_remove_by_key(char *key); + +int yon_config_remove_by_data(void *data); + +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_config_clean(); + +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); + +// 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); + +#endif + +GtkWidget *yon_ubl_menu_item_about_new(char *buttonname); +GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname); + +/**yon_gtk_builder_get_widget(builder, widget_name) + * [EN] + * Returns GtkWidget from GtkBuilder *[builder]. + * [builder] is GtkBuilder*; + * [widget_name] is id of widget; +*/ +#define yon_gtk_builder_get_widget(builder, widget_name) GTK_WIDGET(gtk_builder_get_object(builder, widget_name)) + +typedef struct +{ + GtkWidget *Icon; + GtkWidget *Label; + GtkWidget *IconView; + GtkListStore *List; +} expander_icon_view; + +void yon_window_config_setup(GtkWindow *window); + +int yon_window_config_load(char *path); + +int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size); + +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(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); + +int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); + + + +typedef enum +{ + BACKGROUND_IMAGE_SUCCESS_TYPE, + BACKGROUND_IMAGE_FAIL_TYPE +} BACKGROUND_IMAGE_TYPE; + +typedef struct { + BACKGROUND_IMAGE_TYPE type; + GtkWidget *icon; + GtkWidget *box; + GtkWidget *label; + char* text_to_render; +} render_data; + + +/**yon_ubl_status_box_setup(render,icon,box,label) + * [EN] + * Sets up [render] structure of type render_data. + * [icon] is GtkImage widget of status box for showing status icons; + * [box] is GtkBox widget of status box for showing status color; + * [label] is GtkLabel widget of status box for showing status text; + * [RU] + * Настраивает структуру [render] типа render_data. + * [icon] - виджет типа GtkIcon в котором будут отображаться статусные иконки; + * [box] - виджет типа GtkBox в котором будет отображаться цвет статуса; + * [label] - виджет типа GtkLabel в котором будет отображаться текст статусного сообщения; +*/ +int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label); + +/**yon_ubl_status_box_render(render,text,type) + * [EN] + * Renders message in status box; + * [render] is render_data structure of status box; + * [text] is text to be shown in status box; + * [type] if type of message. Can be BACKGROUND_IMAGE_FAIL_TYPE or BACKGROUND_IMAGE_SUCCESS_TYPE + * [RU] + * Отображает сообщение в статусном окне. + * [render] - структура типа render_data для нужного статусного окна; + * [text] - текст, отображаемый в статусном окне; + * [type] - тип сообщения. Может быть: + * BACKGROUND_IMAGE_FAIL_TYPE (красный фон,иконка - восклицательный знак) + * или + * BACKGROUND_IMAGE_SUCCESS_TYPE (Жёлтный фон, иконка - галка) +*/ +void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type); + +#ifdef __cplusplus + +/**yon_ubl_header_setup(overlay, head, image, imag_path) + * [EN] + * Sets up header of app. + * [overlay] is overlay for app header; + * [head] is box of header, which connects to [overlay] + * [image] is header background image; + * [imag_path] is path of image, shown in [image] + * [RU] + * Настраивает заголовок приложения. + * [overlay] - оверлей заголовка приложения; + * [head] - шапка заголовка, присоединяемая к [overlay] + * [image] - виджет картинки для заднего фона; + * [imag_path] - путь до картинки, загружаемой в [image] +*/ +#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay.gobj()), GTK_WIDGET(head.gobj()), GTK_WIDGET(image.gobj()), (char *)imag_path) +#else + +/**yon_ubl_header_setup(overlay, head, image, imag_path) + * [EN] + * Sets up header of app. + * [overlay] is overlay for app header; + * [head] is box of header, which connects to [overlay] + * [image] is header background image; + * [imag_path] is path of image, shown in [image] + * [RU] + * Настраивает заголовок приложения. + * [overlay] - оверлей заголовка приложения; + * [head] - шапка заголовка, присоединяемая к [overlay] + * [image] - виджет картинки для заднего фона; + * [imag_path] - путь до картинки, загружаемой в [image] +*/ +#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay), 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 + +void yon_ubl_browser_window_open(char *link, char *browser_window_name); +#else +void yon_ubl_browser_window_open(char *link, char *browser_window_name); +#endif +#endif +#endif \ 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-diskquota.c b/source/ubl-settings-diskquota.c new file mode 100644 index 0000000..0cd85d8 --- /dev/null +++ b/source/ubl-settings-diskquota.c @@ -0,0 +1,188 @@ +#include "ubl-settings-diskquota.h" + + + +//signal emmit handlers - no header initialization + +/**on_close_subwindow(GtkWidget *self) + * [EN] + * Closes window in which [self] is contained. + * [RU] + * Закрывает окно, в котором расположен виджет [self]. +*/ +void on_close_subwindow(GtkWidget *self){ + gtk_widget_destroy(gtk_widget_get_toplevel(self)); +} + +/**yon_open_browser(GtkWidget *self, char *link) + * [EN] + * Opens browser with [link] link. + * [RU] + * Открывает браузер с [link] ссылкой. +*/ +void yon_open_browser(GtkWidget *self, char *link){ + yon_ubl_browser_window_open(link,TITLE_LABEL); +} + +/**on_open_documentation_confirmation(GtkWidget *self, char *link) + * [EN] + * Opens confirmation window for [link] link. + * [RU] + * Открывает окно подтверждение перехода по ссылке [link]. +*/ +void on_open_documentation_confirmation(GtkWidget *self, char *link){ + if (main_config.always_open_documentation==0){ + 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"); + widgets->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton"); + widgets->HatText = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); + widgets->HeaderText = yon_gtk_builder_get_widget(builder,"helpHeader"); + widgets->InfoText = yon_gtk_builder_get_widget(builder,"helpText"); + widgets->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox"); + gtk_label_set_text(GTK_LABEL(widgets->HatText),TITLE_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->HeaderText),HELP_TITLE_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->InfoText),HELP_INFO_LABEL); + gtk_button_set_label(GTK_BUTTON(widgets->AcceptButton),OPEN_HELP_LABEL); + gtk_button_set_label(GTK_BUTTON(widgets->AlwaysOpenCheck),HELP_ALWAYS_OPEN_LABEL); + gtk_button_set_label(GTK_BUTTON(widgets->CloseButton),CANCEL_LABEL); + gtk_widget_show_all(widgets->Window); + g_signal_connect(G_OBJECT(widgets->CloseButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); + g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link)); + g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); + + + } else { + yon_open_browser(self,link); + } +} + +/**on_link(GtkWidget *self, char* uri, gpointer user_data) + * [EN] + * Signal for hadnling AboutDialog links. + * Connect to "activate-link" signal. + * [self] is AboutDialog window; + * [uri] is activated link; + * [user_data] is pointer for user data, hasn't used in standard handler; + * [RU] + * Функция для обработки сигнала нажатия на ссылку окна AboutDialog. + * Присоединять к сигналу "activate-link". + * [self] - окно AboutDialog; + * [uri] - ссылка, по которой совершается переход; + * [user_data] - указатель на любые другие данные, не используется в стандартном обработчике; +*/ +void on_link(GtkWidget *self, char* uri, gpointer user_data){ + gtk_widget_destroy(self); + on_open_documentation_confirmation(self,uri); +} + +/**on_about() + * [EN] + * Function for setting up and showing AboutDialog. + * Connect it to "activate" signal of Documentation MenuItem. + * [RU] + * Функиця для настройки и показа окна AboutDialog. + * Присоединять к сигналу "activate" кнопки справки типа MenuItem. +*/ +void on_about(){ + 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); + gtk_widget_destroy(hideButtonBox); + gtk_widget_show(window); +} + +//functions + +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); + +} + +// standard functions + +void config_init(){ + main_config.always_open_documentation=0; + main_config.win_height=0; + main_config.win_width=0; + main_config.win_pos_x=0; + main_config.win_pos_y=0; + main_config.socket_id=-1; + main_config.save_socket_id=-1; + main_config.load_socket_id=-1; + main_config.lock_help=0; + main_config.lock_help=0; + main_config.lock_load_global=0; + main_config.lock_save_global=0; + main_config.lock_save_local=0; +} + +main_window *setup_window(main_window* widgets){ + /* Widgets getting | Получение виджетов */ + widgets = malloc(sizeof(main_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); + widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + widgets->HatLabel = yon_gtk_builder_get_widget(builder,"headerTopic"); + widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox"); + + widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"HeadOverlay"); + widgets->HeadImage = yon_gtk_builder_get_widget(builder,"HeadBackgroundImage"); + widgets->HeadBox = yon_gtk_builder_get_widget(builder,"HeaderBox"); + widgets->HeadTitleLabel = yon_gtk_builder_get_widget(builder,"HeaderTitleLabel"); + widgets->HeadInfoLabel = yon_gtk_builder_get_widget(builder,"HeaderInfoLabel"); + + widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox"); + widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon"); + widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel"); + + widgets->SaveLabel = yon_gtk_builder_get_widget(builder,"headerSaveConfigLabel"); + widgets->SaveMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalLocalConfigurationMenuItem"); + widgets->SaveGlobalMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalConfigurationMenuItem"); + widgets->SaveLocalMenuItem = yon_gtk_builder_get_widget(builder,"SaveLocalConfigurationMenuItem"); + widgets->RightBox = yon_gtk_builder_get_widget(builder,"HeaderRightBox"); + + widgets->LoadLabel = yon_gtk_builder_get_widget(builder,"headerLoadConfigLabel"); + widgets->LoadGlobalMenuItem = yon_gtk_builder_get_widget(builder,"LoadGlobalConfigurationMenuItem"); + widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem"); + widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox"); + + widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL); // yon_gtk_builder_get_widget(builder,"DocumentationMenuItem"); + widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL); // yon_gtk_builder_get_widget(builder,"AboutMenuItem"); + + GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem); + gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem); + + if (main_config.lock_load_global == 1){ + gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); + } + if (main_config.lock_save_global == 1){ + gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0); + gtk_widget_set_sensitive(widgets->SaveMenuItem,0); + } + if (main_config.lock_save_local == 1){ + gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0); + gtk_widget_set_sensitive(widgets->SaveMenuItem,0); + } + + /* Signal connection | Присоединение сигналов */ + g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), 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); + + + gtk_widget_show(widgets->Window); + return widgets; +} + diff --git a/source/ubl-settings-diskquota.h b/source/ubl-settings-diskquota.h new file mode 100644 index 0000000..bfe4c6b --- /dev/null +++ b/source/ubl-settings-diskquota.h @@ -0,0 +1,123 @@ +#ifndef UBL_SETTINGS_DISKQUOTA_H +#define UBL_SETTINGS_DISKQUOTA_H +#include +#include +#include "model/ubl-utils.h" +#include +#include +#include +#include +#include +#include +#include +#include "ubl-cmake.h" +#include "model/model.h" +#include "model/load.h" +#include "ubl-strings.h" +#ifdef WEBKIT_FOUND + #include +#endif +#include "ubl-strings.h" + +#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-diskquota" + + +#define VERSION_LABEL yon_char_unite(_("Version:")," ",version_application,"\n",NULL) +#define glade_path "/com/ublinux/ui/ubl-settings-diskquota.glade" +#define banner_path "/com/ublinux/images/ubl-settings-diskquota-banner.png" +#define CssPath "/com/ublinux/css/ubl-settings-diskquota.css" +#define config_path yon_char_unite("/home/",yon_ubl_root_user_get(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) + +#define LocalePath "/usr/share/locale" +#define LocaleName "ubl-settings-diskquota" + +static char *local; + +typedef struct { + int always_open_documentation; + int win_pos_x; + int win_pos_y; + int win_width; + int win_height; + + int socket_id; + int load_socket_id; + int save_socket_id; + + int lock_help; + int lock_save_local; + int lock_save_global; + int lock_load_global; +} config_settings_gui; + +typedef struct { + //Standard + GtkWidget *Window; + GtkWidget *HatLabel; + GtkWidget *PlugBox; + + GtkWidget *HeadOverlay; + GtkWidget *HeadImage; + GtkWidget *HeadBox; + GtkWidget *HeadTitleLabel; + GtkWidget *HeadInfoLabel; + + GtkWidget *StatusBox; + GtkWidget *StatusIcon; + GtkWidget *StatusLabel; + + GtkWidget *SaveLabel; + GtkWidget *SaveMenuItem; + GtkWidget *SaveGlobalMenuItem; + GtkWidget *SaveLocalMenuItem; + GtkWidget *RightBox; + + GtkWidget *LoadLabel; + GtkWidget *LoadGlobalMenuItem; + GtkWidget *LoadLocalMenuItem; + GtkWidget *LeftBox; + + GtkWidget *DocumentationMenuItem; + GtkWidget *AboutMenuItem; + // Custom +} main_window; + +typedef struct { + GtkWidget *treeViewMain; + GtkListStore *list; +} +custom_window; + + +typedef struct { + GtkWidget *Window; + + GtkWidget *HatText; + GtkWidget *HeaderText; + GtkWidget *InfoText; + GtkWidget *AlwaysOpenCheck; + + GtkWidget *CloseButton; + GtkWidget *AcceptButton; +} documentation_confirmation_window; + +typedef char* string; +static string version_application=""; +static config_u_g_p* cfg_u_g_p = NULL; +static config_general* cfg_general = NULL; +static main_window* cfg_main_gui = NULL; +static custom_window* cfg_custom_gui = NULL; +static config_settings_gui main_config; + +main_window *setup_window(main_window* widgets); +void on_about(); +void yon_open_browser(GtkWidget *self, char *link); +void on_close_subwindow(GtkWidget *self); +void on_link(GtkWidget *self, char* uri, gpointer user_data); +void on_open_documentation_confirmation(GtkWidget *self, char *link); +void yon_load_proceed(char *command); +void event(main_window *widgets); + +void on_link(GtkWidget *self, char* uri, gpointer user_data); +void config_init(); +#endif diff --git a/source/ubl-strings.h b/source/ubl-strings.h new file mode 100644 index 0000000..9bedb83 --- /dev/null +++ b/source/ubl-strings.h @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +#define _(String) gettext(String) + + +#define HELP_LABEL yon_char_unite(_("ubl-settings-diskquota version:")," ", version_application,"\n",_(""),"\n",_("Usage:"), " ubl-settings-diskquota ",_("[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 TITLE_LABEL _("") +#define TITLE_INFO_LABEL _("") + +#define SUCCESS_LABEL _("Operation succeeded") +#define ROOT_WARNING_LABEL _("Warning! Application was launched without root - root-dependent actions are locked") + +#define ABOUT_LABEL _("About") +#define DOCUMENTATION_LABEL _("Documentation") + +#define SAVE_LOCAL_LABEL _("Save to local configuration") +#define SAVE_GLOBAL_LABEL _("Save to global configuration") +#define SAVE_CONFIGURATION_LABEL _("Save configuration") +#define SAVE_LABEL _("Save") + +#define LOAD_LOCAL_LABEL _("Load local configuration") +#define LOAD_GLOBAL_LABEL _("Load global configuration") +#define LOAD_LABEL _("Load") + +#define CANCEL_LABEL _("Cancel") + +#define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?") +#define HELP_INFO_LABEL _("You will be redirected to documentation website where documentation is\ntranslated and supported by community.") +#define HELP_ALWAYS_OPEN_LABEL _("Always redirect to online documentation") +#define OPEN_HELP_LABEL _("Open documentation") +#define PROJECT_HOME_LABEL _("Project Home Page") +#define NOTHING_CHOSEN_LABEL _("Nothing were chosen") + + +#define GLOBAL_LOAD_SUCCESS_LABEL _("Global configuration loading succseeded.") +#define LOCAL_LOAD_SUCCESS_LABEL _("Local configuration loading succseeded.") +#define LOAD_FAILED_LABEL _("Config loading failed") + +#define GLOBAL_LOCAL_SAVE_SUCCESS_LABEL _("Local and global configuration saving succseeded.") +#define GLOBAL_SAVE_SUCCESS_LABEL _("Global configuration saving succseeded.") +#define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succseeded.") +#define SAVE_FAILED_LABEL + +#define STR_KB _("Kb") +#define STR_MB _("Mb") +#define STR_GB _("Gb") +#define STR_TB _("Tb") + + +#define CMD_LOAD_GLOBAL "ubconfig --default --source global get security DISK_QUOTA[*]" +#define CMD_LOAD_SYSTEM "ubconfig --default --source system get security DISK_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 " \ No newline at end of file diff --git a/source/view_add_p.c b/source/view_add_p.c new file mode 100644 index 0000000..e69de29 diff --git a/source/view_add_p.h b/source/view_add_p.h new file mode 100644 index 0000000..e69de29 diff --git a/source/view_add_u_g.c b/source/view_add_u_g.c new file mode 100644 index 0000000..e69de29 diff --git a/source/view_add_u_g.h b/source/view_add_u_g.h new file mode 100644 index 0000000..e69de29 diff --git a/source/view_check_user_table.c b/source/view_check_user_table.c new file mode 100644 index 0000000..e69de29 diff --git a/source/view_check_user_table.h b/source/view_check_user_table.h new file mode 100644 index 0000000..e69de29 diff --git a/source/view_edit_p.c b/source/view_edit_p.c new file mode 100644 index 0000000..e69de29 diff --git a/source/view_edit_p.h b/source/view_edit_p.h new file mode 100644 index 0000000..e69de29 diff --git a/source/view_edit_u_g.c b/source/view_edit_u_g.c new file mode 100644 index 0000000..e69de29 diff --git a/source/view_edit_u_g.h b/source/view_edit_u_g.h new file mode 100644 index 0000000..e69de29 diff --git a/source/view_filters.c b/source/view_filters.c new file mode 100644 index 0000000..12ac641 --- /dev/null +++ b/source/view_filters.c @@ -0,0 +1,109 @@ +#include "filters.h" + +filters_window *filters_widgets = NULL; +gboolean flag_filters[8]; +filters_window *filters_setup_window(char* glade_path){ + if (filters_widgets == NULL) { + filters_widgets = malloc(sizeof(filters_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); + filters_widgets->Window = yon_gtk_builder_get_widget(builder,"wndFilters"); + filters_widgets->chbFilterName = yon_gtk_builder_get_widget(builder,"chbFilterName"); + filters_widgets->chbFilterSoftLimitFile = yon_gtk_builder_get_widget(builder,"chbFilterSoftLimitFile"); + filters_widgets->chbFilterFiles = yon_gtk_builder_get_widget(builder,"chbFilterFiles"); + filters_widgets->chbFilterHardLimitSizeDelay = yon_gtk_builder_get_widget(builder,"chbFilterHardLimitSizeDelay"); + filters_widgets->chbFilterHardLimitSize = yon_gtk_builder_get_widget(builder,"chbFilterHardLimitSize"); + filters_widgets->chbFilterSoftLimitSize = yon_gtk_builder_get_widget(builder,"chbFilterSoftLimitSize"); + filters_widgets->chbFilterQuotas = yon_gtk_builder_get_widget(builder,"chbFilterQuotas"); + filters_widgets->chbFilterSize = yon_gtk_builder_get_widget(builder,"chbFilterSize"); + filters_widgets->btnFiltersCancel = yon_gtk_builder_get_widget(builder,"btnFiltersCancel"); + filters_widgets->btnFiltersSave = yon_gtk_builder_get_widget(builder,"btnFiltersSave"); + filters_widgets->chbFilterHardLimitFile = yon_gtk_builder_get_widget(builder,"chbFilterHardLimitFile"); + filters_widgets->chbFilterHardLimitFileDelay = yon_gtk_builder_get_widget(builder,"chbFilterHardLimitFileDelay"); + filters_widgets->chbTemplate = yon_gtk_builder_get_widget(builder,"chbTemplate"); + if (filters_widgets->name == "Project") { + + } + + filters_event(filters_widgets); + } + filters_set_flag(); + return filters_widgets; +} +void filters_set_name(string name) { + if (name == "Project") { + filters_widgets->name = name; + } + +} + +void filters_event(filters_window *widgets) { + g_signal_connect(G_OBJECT(widgets->btnFiltersCancel), "clicked",G_CALLBACK(filters_on_hide_subwindow),NULL); + g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(filters_destroy), NULL); +} + +void filters_destroy(GtkWidget *self) { + filters_widgets = NULL; +} + +void filters_localization(filters_window *widgets) { + +} + +void filters_on_hide_subwindow(GtkWidget *self) { + gtk_widget_destroy(gtk_widget_get_toplevel(self)); + filters_widgets = NULL; +} + +filters_window *get_widget_filters() { + return filters_widgets; +} + +void filters_show(GtkWidget *self, char* glade_path) { + if (filters_widgets != NULL) { + gtk_widget_show_all(filters_widgets->Window); + } + else { + filters_setup_window(glade_path); + gtk_widget_show_all(filters_widgets->Window); + } +} + +gboolean* filters_get_flag() { + flag_filters[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterName)); + flag_filters[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile)); + flag_filters[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles)); + flag_filters[3] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay)); + flag_filters[4] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize)); + flag_filters[5] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas)); + flag_filters[6] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize)); + flag_filters[7] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize)); + flag_filters[8] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile)); + flag_filters[9] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay)); + return flag_filters; +} + +void filters_init_flag() { + flag_filters[0] = 1; + flag_filters[1] = 1; + flag_filters[2] = 1; + flag_filters[3] = 1; + flag_filters[4] = 1; + flag_filters[5] = 1; + flag_filters[6] = 1; + flag_filters[7] = 1; + flag_filters[8] = 1; + flag_filters[9] = 1; +} + +void filters_set_flag() { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterName),flag_filters[0] ); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile), flag_filters[1]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles), flag_filters[2]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay), flag_filters[3]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize), flag_filters[4]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas), flag_filters[5]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize), flag_filters[6]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize), flag_filters[7]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile), flag_filters[8]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay), flag_filters[9]); +} \ No newline at end of file diff --git a/source/view_filters.h b/source/view_filters.h new file mode 100644 index 0000000..d8e6761 --- /dev/null +++ b/source/view_filters.h @@ -0,0 +1,48 @@ +#ifndef FILTERS_H +#define FILTERS_H +#include +#include +#include "ubl-utils.h" +#include "ubl-strings.h" +#include +#include +#include +#include +#include +#include +#include +#include "philos_utils.h" +#include + +// Переменные +typedef struct { + GtkWidget* Window; + GtkWidget* btnFiltersSave; + GtkWidget* btnFiltersCancel; + GtkWidget* chbFilterName; + GtkWidget* chbFilterQuotas; + GtkWidget* chbFilterSize; + GtkWidget* chbFilterSoftLimitSize; + GtkWidget* chbFilterHardLimitSize; + GtkWidget* chbFilterHardLimitSizeDelay; + GtkWidget* chbFilterFiles; + GtkWidget* chbFilterSoftLimitFile; + GtkWidget* chbFilterHardLimitFile; + GtkWidget* chbFilterHardLimitFileDelay; + GtkWidget* chbTemplate; + string *name; +} filters_window; + +// Функции +filters_window *filters_setup_window(char* glade_path); +void filters_event(filters_window *widgets); +void filters_localization(filters_window *widgets); +void filters_on_hide_subwindow(GtkWidget *self); +filters_window *get_widget_filters(); +void filters_show(GtkWidget *self, char* glade_path); +void filters_destroy(GtkWidget *self); +int* filters_get_flag(); +void filters_init_flag(); +void filters_set_flag(); +void filters_set_name(char *name) +#endif \ No newline at end of file diff --git a/ubl-settings-diskquota b/ubl-settings-diskquota new file mode 100755 index 0000000000000000000000000000000000000000..e71a3010bc77cd644722efdbbe1e91a20812283d GIT binary patch literal 629184 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 z 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

GkUZcucckimKjbi;JA3+xVfn|!B zg~bgt{VE7qq)J4DgG{2;d8*fDzD3~Gc<-IP@6uqxz(ZubA=W0oRjMqDUw9?Si==7D zi%{2uVz5^}Le#nbsURs*kE?{ANA(S~323RM5F8@Fm6N`Uy|9}Na*peeEJ6f?xb4@I z9EydIQY>1sq~o{tuzy$=lVPP)3YCfK-T^+)^V` z42KA=shFP1ibsgBP|bJrS1IuhG&C4VIwdFF=?@@_u0k9cLd~9!-F|%MS_t)DoYtBR zDcfe3i&8yZT{n`pek<#GxbZ55E57wJqD0Uc6e7wXB_qQde$7u{qjL}Bo5a9_c@GZR zGYF9Ai*0iLrmo5YjUWQ-nA{L8OO$T2PB-;N2m)P)h-I-#g{hF&z>$$()nFF=QpV{yP#Sr^!)e$yun*G zZ(if{F=rJq={VX1_!&G@uA=ZFwRwiSY2L@WZG!ipX^l30A+1aa0nWQ)9tXsb=+ zWJC-T<19uI%u^T9nae9GmS1_zMQ>2sXcWdUL{i3t|M5s9Bpq1=1=^7ubYr&EMuj> zW@1rHrmA8!hxs_{be!aeb!x@dA}7+~?`1hh1v{3AU#iXDkPia^eU4CGLO^15@Zil| zqWX+x#+AdKbuI|dum&??agd2sT5RkhNcdhPiN31FMi!AM@*~&Q`A`KRK95;&Me?Ph zFS})1(Q^$2 zu{=<@JP5HRp{mFGMy6KJZo^ah;bzj#;2`Ii@X|)@MvZRP4u>OG3$qN#0UbFws}TYx zG{_RlG*_>{ln$#WkTdDFXXW*SmGo-+go=)D_oQd&Xj{ zR_>69LF9e~0=BC3nB>(NwzKAzkVso(WrZ;Gdq4vWN$FDrZ(!-@CZ@9)>~33lFDqe@ z#}C>0B_$<+`&B7DkZ_KPs-)_3 z`LT!UCwAXU(IbaxB%go@W}H!9X>;I5teDbpRRp|sW}nc{e`Ob((6iHI+Zy?DmVVmr z6;OpI8i^m%jd;az>9rl!q0!ON*dTDfxS@XI#&v$njCRPyK@JM3feqA|*sG?gt$o}$ z^J})8CUhFO;U8613qD_sL~KuH^X8X$YbLQR%m z@Q!r5$(i4K_w|9JcRu|i42jX6o;UX#uQcWRHr{h=gs!#XvEiM)k2`Wc7_w*) ze(m-Avb`b_Y7>aC@y?5qvYtHI1(lH�lH50|3eZSSE|C^~pPZZ^au$7jwT^>t%K# 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 z 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 B*g^mR literal 0 HcmV?d00001 diff --git a/ubl-settings-diskquota-banner.png b/ubl-settings-diskquota-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb67cbc38babeaf498d981356cf7e77e2741f12 GIT binary patch literal 33872 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 { + border:none; + background:inherit; +} +.workingbg { + background:@theme_base_color; +} +.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{ + 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: 5px 10px 3px 5px; + border:transparent; + } + .menuitemmiddle *{ + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; + border:transparent; + } + .menuitembottom *{ + margin:0 2px 2px 2px; + padding: 3px 10px 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: 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; + } + .boxInfoMessError{ + background-color: #ea9999; +} + +.boxInfoMessOK{ + background-color: #f3f0ac; +} \ No newline at end of file diff --git a/ubl-settings-diskquota.desktop b/ubl-settings-diskquota.desktop new file mode 100644 index 0000000..3343192 --- /dev/null +++ b/ubl-settings-diskquota.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=ubl-settings-diskquota +Name[ru]=TEMPLATE +GenericName=ubl-settings-diskquota +GenericName[ru]=TEMPLATE +Comment=ubl-settings-diskquota +Comment[ru]=Приложение для TEMPLATE +Type=Application +Exec=pkexec ubl-settings-diskquota +Icon=com.ublinux.ubl-settings-diskquota +Terminal=false +X-XfcePluggable=true +X-UBLPluggable=true +Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-Personal-Settings; diff --git a/ubl-settings-diskquota.glade b/ubl-settings-diskquota.glade new file mode 100644 index 0000000..533cf49 --- /dev/null +++ b/ubl-settings-diskquota.glade @@ -0,0 +1,6508 @@ + + + + + + + + + + False + False + True + center + com.ublinux.ubl-settings-diskquota + dialog + True + ubl-settings-diskquota + 1.1 + Copyright © 2022 - 2023, UBSoft LLC + Setting user quotas + https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-diskquota + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + com.ublinux.ubl-settings-diskquota + True + gpl-2-0 + + + False + vertical + + + False + spread + + + False + False + 0 + + + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 2 + + + + + + + + + + True + False + center + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 64 + com.ublinux.ubl-settings-diskquota + + + False + True + 0 + + + + + True + False + + + True + False + + + True + False + center + vertical + + + 255 + True + False + end + Setting user quotas + 0 + + + + + + + + True + True + 0 + + + + + 255 + True + False + start + Configuring disk quota settings for system groups and users + True + 0 + + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + True + 0 + + + + + True + True + 1 + + + + + 100 + 1 + 10 + + + 100 + 1 + 10 + + + 100 + 1 + 10 + + + 100 + 1 + 10 + + + False + start + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Device: + + + False + True + 0 + + + + + True + False + 5 + 5 + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + + + True + False + 5 + 5 + Quota use status: + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 0 + + + True + True + 1 + + + + + True + True + 1 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + UserGropProject: + 0 + + + False + True + 0 + + + + + True + True + True + + + True + False + center + + + True + False + edit-find-symbolic + + + False + True + 0 + + + + + True + False + User-Group + + + False + True + 1 + + + + + + + True + True + 1 + + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Currently using: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Soft limit + 0 + + + False + True + 1 + + + + + True + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment1 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + KB + MB + GB + TB + + + + False + True + 2 + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Hard limit + 0 + + + False + True + 3 + + + + + True + False + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment2 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + KB + MB + GB + TB + + + + False + True + 2 + + + + + True + True + 4 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Size + + + + + True + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Currently using: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Soft limit + 0 + + + False + True + 1 + + + + + True + False + 5 + + + True + True + False + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment3 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + files + + + False + True + 2 + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Hard limit + 0 + + + False + True + 3 + + + + + True + False + 5 + + + True + True + False + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment4 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + files + + + False + True + 2 + + + + + True + True + 4 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Files + + + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + True + + + True + False + end + 5 + True + + + gtk-cancel + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 0 + + + + + gtk-save + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 1 + + + + + False + True + 0 + + + + + False + True + 2 + + + + + + + True + False + + + True + False + Settings disk quotas - Addition + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-diskquota + 5 + + + + + + + + + + False + start + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Device: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + + + False + True + 1 + + + + + True + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Quota use status: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + + + False + True + 1 + + + + + True + True + 1 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Catalog + 0 + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + entrycompletion1 + + + True + True + 1 + + + + + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + + + True + False + gtk-zoom-fit + + + False + True + 0 + + + + + True + False + Review + + + False + True + 1 + + + + + + + False + True + 2 + + + + + False + True + 2 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Project ID + 0 + + + False + True + 0 + + + + + Auto + True + True + False + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 1 + + + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + entrycompletion2 + + + True + True + 2 + + + + + Generate + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + False + True + 3 + + + + + False + True + 3 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Project Name + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + entrycompletion3 + + + True + True + 1 + + + + + False + True + 4 + + + + + False + True + 0 + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Currently using: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Soft limit + 0 + + + False + True + 1 + + + + + True + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment1 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + KB + MB + GB + TB + + + + False + True + 2 + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Hard limit + 0 + + + False + True + 3 + + + + + True + False + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment2 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + KB + MB + GB + TB + + + + False + True + 2 + + + + + True + True + 4 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Size + + + + + True + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Currently using: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Soft limit + 0 + + + False + True + 1 + + + + + True + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment3 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + files + + + False + True + 2 + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Hard limit + 0 + + + False + True + 3 + + + + + True + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment4 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + files + + + False + True + 2 + + + + + True + True + 4 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Files + + + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + True + + + True + False + end + 5 + True + + + gtk-cancel + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 0 + + + + + gtk-save + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 1 + + + + + False + True + 0 + + + + + False + True + 2 + + + + + + + True + False + + + True + False + Settings disk quotas - Addition + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-diskquota + 5 + + + + + + + + False + start + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Device: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + + + False + True + 1 + + + + + True + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Quota use status: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + + + False + True + 1 + + + + + True + True + 1 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Catalog + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 2 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Project ID + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 3 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Project Name + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + entrycompletion4 + + + True + True + 1 + + + + + False + True + 4 + + + + + False + True + 0 + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Currently using: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Soft limit + 0 + + + False + True + 1 + + + + + True + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment1 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + KB + MB + GB + TB + + + + False + True + 2 + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Hard limit + 0 + + + False + True + 3 + + + + + True + False + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment2 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + KB + MB + GB + TB + + + + False + True + 2 + + + + + True + True + 4 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Size + + + + + True + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Currently using: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Soft limit + 0 + + + False + True + 1 + + + + + True + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment3 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + files + + + False + True + 2 + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Hard limit + 0 + + + False + True + 3 + + + + + True + False + 5 + + + True + True + False + 5 + 5 + 5 + 5 + right + True + + + False + True + 0 + + + + + True + True + 7 + 0 + adjustment4 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + files + + + False + True + 2 + + + + + True + True + 4 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Files + + + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + True + + + True + False + end + 5 + True + + + gtk-cancel + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 0 + + + + + gtk-save + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 1 + + + + + False + True + 0 + + + + + False + True + 2 + + + + + + + True + False + + + True + False + Settings disk quotas - Editing + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-diskquota + 5 + + + + + + + True + False + process-stop-symbolic + + + True + False + emblem-ok-symbolic + + + False + False + 450 + dialog-question-symbolic + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + 10 + + + True + False + + + True + False + start + 20 + 20 + dialog-question-symbolic + 6 + + + False + True + 0 + + + + + True + False + vertical + + + True + False + start + 10 + 5 + Would you like to read documentation in the Web? + True + 0 + + + + + + + False + True + 0 + + + + + True + False + start + start + 10 + 10 + You will be redirected to documentation website where documentation is +translated and supported by community. + True + 0 + + + + False + True + 1 + + + + + Always redirect to online documentation + True + True + False + end + True + + + + False + True + end + 2 + + + + + + True + True + 1 + + + + + + True + True + 0 + + + + + True + False + 30 + True + + + Cancel + True + True + True + image8 + + + + True + True + 0 + + + + + Open documentation + True + True + True + image9 + + + + True + True + 1 + + + + + False + True + 1 + + + + + + + True + False + + + True + False + + + + + + + + + + + False + start + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + + + True + True + in + + + True + False + + + True + True + liststore1 + + + + + + + + + + + + + User + + + + + + + + + + + + False + True + 0 + + + + + True + False + vertical + True + + + True + False + end + 5 + True + + + gtk-cancel + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 0 + + + + + gtk-save + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 1 + + + + + False + True + 0 + + + + + False + True + 2 + + + + + + + True + False + + + True + False + Users + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-diskquota + 5 + + + + + + + + + + True + False + False + + + True + False + Load global configuration + + + + + + True + False + Load local configuration + + + + + + True + False + False + False + + + True + False + False + + + True + False + Save configuration + + + + + + True + False + Save to global configuration + + + + + + True + False + Save to local configuration + + + + + + 800 + 600 + False + 800 + 600 + com.ublinux.ubl-settings-diskquota + + + True + False + vertical + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + 25 + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + 81 + True + False + + + True + False + start + + + -1 + + + + + False + True + 0 + + + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + True + True + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + True + True + vertical + + + True + True + + + True + False + vertical + + + 300 + True + True + in + + + True + False + + + True + True + liststore2 + 0 + + + + + + Status + True + + + + + + + + Quota type + True + + + + + + + + Device +Project + True + + + + + + + + User + True + + + + + + + + Group + True + + + + + + + + Projects + True + + + + + + + + Soft +Restriction +(size) + True + + + + + + + + Severe +limitation +(size) + True + + + + + + + + Soft +Restriction +(files) + True + + + + + + + + Severe +limitation +(files) + True + + + + + + + + Deferring +(size) + True + + + + + + + + Deferring +(files) + True + + + + + + + + + + + + True + True + 0 + + + + + + + True + False + General statistics + + + False + + + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Device: + + + False + True + 0 + + + + + True + False + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + Off + Not set + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + vertical + 5 + True + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Excess size delay period + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Excess files delay period + + + False + True + end + 1 + + + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + weeks + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + weeks + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + days + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + days + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 2 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + hours + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + hours + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 3 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + minutes + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + minutes + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 4 + + + + + False + True + 1 + + + + + 100 + True + True + in + + + True + False + + + True + True + liststore2 + 0 + + + + + + Name + True + + + + + + + + Quota + True + + + + + + + + Size + True + + + + + + + + Soft +Restriction +(size) + True + + + + + + + + Severe +limitation +(size) + True + + + + + + + + Soft +Restriction +(files) + True + + + + + + + + Files + + + + + + + + Severe +limitation +(files) + True + + + + + + + + Deferring +(size) + True + + + + + + + + Deferring +(files) + True + + + + + + + + + + + + True + True + 2 + + + + + True + False + + + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + + + True + False + com.ublinux.ubl-settings-diskquota.funnel + + + False + True + 0 + + + + + True + False + 5 + 5 + Filters + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + False + + + gtk-delete + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 0 + + + + + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + + + True + False + 5 + 5 + gtk-edit + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + Edit + + + False + True + 1 + + + + + + + False + True + 1 + + + + + gtk-add + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 2 + + + + + False + True + end + 1 + + + + + False + True + end + 3 + + + + + 1 + + + + + True + False + Users + + + 1 + False + + + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Device: + + + False + True + 0 + + + + + True + False + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + Off + Not set + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + vertical + 5 + True + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Excess size delay period + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Excess files delay period + + + False + True + end + 1 + + + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + weeks + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + weeks + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + days + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + days + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 2 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + hours + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + hours + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 3 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + minutes + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + minutes + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 4 + + + + + False + True + 1 + + + + + 100 + True + True + in + + + True + False + + + True + True + liststore3 + 0 + + + + + + Name + True + + + + + + + + Quota + True + + + + + + + + Size + True + + + + + + + + Soft +Restriction +(size) + True + + + + + + + + Severe +limitation +(size) + True + + + + + + + + Soft +Restriction +(files) + True + + + + + + + + Files + + + + + + + + Severe +limitation +(files) + True + + + + + + + + Deferring +(size) + True + + + + + + + + Deferring +(files) + True + + + + + + + + + + + + True + True + 2 + + + + + True + False + + + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + + + True + False + com.ublinux.ubl-settings-diskquota.funnel + + + False + True + 0 + + + + + True + False + 5 + 5 + Filters + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + False + + + gtk-delete + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 0 + + + + + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + + + True + False + 5 + 5 + gtk-edit + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + Edit + + + False + True + 1 + + + + + + + False + True + 1 + + + + + gtk-add + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 2 + + + + + False + True + end + 1 + + + + + False + True + end + 3 + + + + + 2 + + + + + True + False + Groups + + + 2 + False + + + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Device: + + + False + True + 0 + + + + + True + False + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + + Off + Not set + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + vertical + 5 + True + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Excess size delay period + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + Excess files delay period + + + False + True + end + 1 + + + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + weeks + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + weeks + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + days + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + days + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 2 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + hours + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + hours + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 3 + + + + + True + False + vertical + 5 + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + minutes + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + 4 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + minutes + 0 + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 4 + + + + + False + True + 1 + + + + + 100 + True + True + in + + + True + False + + + True + True + liststore4 + 0 + + + + + + ID + True + + + + + + + + Project Name + True + + + + + + + + Quota + True + + + + + + + + Size + True + + + + + + + + Soft +Restriction +(size) + True + + + + + + + + Severe +limitation +(size) + True + + + + + + + + Soft +Restriction +(files) + True + + + + + + + + Files + + + + + + + + Severe +limitation +(files) + True + + + + + + + + Deferring +(size) + True + + + + + + + + Deferring +(files) + True + + + + + + + + + + + + True + True + 2 + + + + + True + False + + + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + + + True + False + com.ublinux.ubl-settings-diskquota.funnel + + + False + True + 0 + + + + + True + False + 5 + 5 + Filters + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + False + + + gtk-delete + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 0 + + + + + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + False + + + True + False + 5 + 5 + gtk-edit + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + Edit + + + False + True + 1 + + + + + + + False + True + 1 + + + + + gtk-add + True + True + True + 5 + 5 + 5 + 5 + 5 + 5 + True + + + False + True + 2 + + + + + False + True + end + 1 + + + + + False + True + end + 3 + + + + + 3 + + + + + True + False + Project + + + 3 + False + + + + + True + True + 0 + + + + + False + True + 0 + + + + + False + True + 2 + + + + + True + True + 0 + + + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 2 + ubl-settings-diskquota + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 32 + com.ublinux.ubl-settings-diskquota + + + + + True + False + + + True + True + False + True + menu3 + + + True + False + + + True + False + Save + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + True + False + True + True + menu2 + none + + + + + + + False + True + 1 + + + + + end + 1 + + + + + True + False + + + True + True + False + True + menu1 + + + True + False + + + True + False + Load + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + 2 + + + + + + + + False + start + False + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + + + Name + True + True + False + start + 5 + True + + + False + True + 0 + + + + + Quotas + True + True + False + start + True + + + False + True + 1 + + + + + Size + True + True + False + start + True + + + False + True + 2 + + + + + Soft limit (size) + True + True + False + start + True + + + False + True + 3 + + + + + Hard limit (size) + True + True + False + start + True + + + False + True + 4 + + + + + True + False + end + 5 + 5 + True + + + gtk-cancel + True + True + True + center + True + + + False + True + 0 + + + + + gtk-save + True + True + True + center + True + + + False + True + 1 + + + + + False + True + end + 5 + + + + + Hard limit (size) delay + True + True + False + start + True + + + False + True + 5 + + + + + Files + True + True + False + start + True + + + False + True + 6 + + + + + Soft limit (files) + True + True + False + start + True + + + False + True + 8 + + + + + Hard limit (files) + True + True + False + start + True + + + False + True + 9 + + + + + Hard limit (files) delay + True + True + False + start + True + + + False + True + 10 + + + + + True + True + False + start + True + + + False + True + 11 + + + + + + + True + False + + + True + False + Filters + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-diskquota + 5 + + + + + + diff --git a/ubl-settings-diskquota.pot b/ubl-settings-diskquota.pot new file mode 100644 index 0000000..de55d1c --- /dev/null +++ b/ubl-settings-diskquota.pot @@ -0,0 +1,724 @@ +# Language translations for ubl-settings-diskquota package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-diskquota package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-10 16:09+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "" +"You will be redirected to documentation website where documentation is\n" +"translated and supported by community." +msgstr "" + +msgid "ubl-settings-diskquota" +msgstr "" + +msgid "Settings disk quotas - Addition" +msgstr "" + +msgid "Settings disk quotas - Editing" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Project ID" +msgstr "" + +msgid "Catalog" +msgstr "" + +msgid "Project Name" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Review" +msgstr "" + +msgid "Generate" +msgstr "" + +msgid "User:" +msgstr "" + +msgid "Group:" +msgstr "" + +msgid "Projects:" +msgstr "" + +msgid "Kb" +msgstr "" + +msgid "Mb" +msgstr "" + +msgid "Gb" +msgstr "" + +msgid "Tb" +msgstr "" + +msgid "Quota use status:" +msgstr "" + +#: source/ubl-settings-diskquota.cc:224 source/ubl-settings-diskquota.cc:154 +#: source/ubl-settings-diskquota.cc:144 +msgid "About" +msgstr "" + +#: source/ubl-settings-diskquota.cc:183 source/ubl-settings-diskquota.cc:113 +#: source/ubl-settings-diskquota.cc:103 source/ubl-settings-diskquota.cc:124 +#: source/ubl-settings-diskquota.cc:121 source/ubl-settings-diskquota.cc:118 +msgid "Configuration of disk quotas parameters for system groups and users" +msgstr "" + +#: source/ubl-settings-diskquota.cc:138 source/ubl-settings-diskquota.cc:68 +#: source/ubl-settings-diskquota.cc:60 source/ubl-settings-diskquota.cc:81 +#: source/ubl-settings-diskquota.cc:78 source/ubl-settings-diskquota.cc:75 +#: source/ubl-settings-diskquota.cc:74 +msgid "Copyright © UBSoft LLC, 2022 - " +msgstr "" + +#: source/ubl-settings-diskquota.cc:201 source/ubl-settings-diskquota.cc:206 +#: source/ubl-settings-diskquota.cc:211 source/ubl-settings-diskquota.cc:131 +#: source/ubl-settings-diskquota.cc:136 source/ubl-settings-diskquota.cc:141 +#: source/ubl-settings-diskquota.cc:121 source/ubl-settings-diskquota.cc:126 +#: source/ubl-settings-diskquota.cc:142 source/ubl-settings-diskquota.cc:147 +#: source/ubl-settings-diskquota.cc:152 source/ubl-settings-diskquota.cc:139 +#: source/ubl-settings-diskquota.cc:144 source/ubl-settings-diskquota.cc:149 +msgid "Currently using:" +msgstr "" + +#: source/ubl-settings-diskquota.cc:216 source/ubl-settings-diskquota.cc:146 +#: source/ubl-settings-diskquota.cc:136 source/ubl-settings-diskquota.cc:157 +#: source/ubl-settings-diskquota.cc:154 +msgid "Currently using: " +msgstr "" + +#: source/ubl-settings-diskquota.cc:62 source/ubl-settings-diskquota.cc:83 +#: source/ubl-settings-diskquota.cc:80 source/ubl-settings-diskquota.cc:77 +#: source/ubl-settings-diskquota.cc:76 +msgid "Date and Time" +msgstr "" + +#: source/ubl-settings-diskquota.cc:246 source/ubl-settings-diskquota.cc:381 +msgid "" +"Deferring\n" +"a hard\n" +"limit\n" +"(files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:239 source/ubl-settings-diskquota.cc:374 +msgid "" +"Deferring\n" +"a hard\n" +"limit\n" +"(size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:194 +msgid "Deferring a hard limit (files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:189 +msgid "Deferring a hard limit (size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:149 source/ubl-settings-diskquota.cc:181 +#: source/ubl-settings-diskquota.cc:182 source/ubl-settings-diskquota.cc:196 +#: source/ubl-settings-diskquota.cc:208 source/ubl-settings-diskquota.cc:79 +#: source/ubl-settings-diskquota.cc:111 source/ubl-settings-diskquota.cc:112 +#: source/ubl-settings-diskquota.cc:126 source/ubl-settings-diskquota.cc:138 +#: source/ubl-settings-diskquota.cc:69 source/ubl-settings-diskquota.cc:101 +#: source/ubl-settings-diskquota.cc:102 source/ubl-settings-diskquota.cc:116 +#: source/ubl-settings-diskquota.cc:128 source/ubl-settings-diskquota.cc:90 +#: source/ubl-settings-diskquota.cc:122 source/ubl-settings-diskquota.cc:123 +#: source/ubl-settings-diskquota.cc:137 source/ubl-settings-diskquota.cc:87 +#: source/ubl-settings-diskquota.cc:119 source/ubl-settings-diskquota.cc:120 +#: source/ubl-settings-diskquota.cc:134 source/ubl-settings-diskquota.cc:146 +#: source/ubl-settings-diskquota.cc:84 source/ubl-settings-diskquota.cc:117 +#: source/ubl-settings-diskquota.cc:83 +msgid "Device:" +msgstr "" + +#: source/ubl-settings-diskquota.cc:197 source/ubl-settings-diskquota.cc:207 +#: source/ubl-settings-diskquota.cc:127 source/ubl-settings-diskquota.cc:137 +#: source/ubl-settings-diskquota.cc:117 source/ubl-settings-diskquota.cc:138 +#: source/ubl-settings-diskquota.cc:148 source/ubl-settings-diskquota.cc:135 +#: source/ubl-settings-diskquota.cc:145 +msgid "Disk quotas for this device:" +msgstr "" + +#: source/ubl-settings-diskquota.cc:152 source/ubl-settings-diskquota.cc:153 +#: source/ubl-settings-diskquota.cc:82 source/ubl-settings-diskquota.cc:83 +#: source/ubl-settings-diskquota.cc:72 source/ubl-settings-diskquota.cc:73 +#: source/ubl-settings-diskquota.cc:93 source/ubl-settings-diskquota.cc:94 +#: source/ubl-settings-diskquota.cc:90 source/ubl-settings-diskquota.cc:91 +#: source/ubl-settings-diskquota.cc:87 source/ubl-settings-diskquota.cc:88 +#: source/ubl-settings-diskquota.cc:86 +msgid "Enable" +msgstr "" + +#: source/ubl-settings-diskquota.cc:597 source/ubl-settings-diskquota.cc:510 +#: source/ubl-settings-diskquota.cc:444 +msgid "Error saved local and global configuration" +msgstr "" + +#: source/ubl-settings-diskquota.cc:156 source/ubl-settings-diskquota.cc:158 +#: source/ubl-settings-diskquota.cc:86 source/ubl-settings-diskquota.cc:88 +#: source/ubl-settings-diskquota.cc:76 source/ubl-settings-diskquota.cc:78 +#: source/ubl-settings-diskquota.cc:97 source/ubl-settings-diskquota.cc:99 +#: source/ubl-settings-diskquota.cc:94 source/ubl-settings-diskquota.cc:96 +#: source/ubl-settings-diskquota.cc:91 source/ubl-settings-diskquota.cc:93 +#: source/ubl-settings-diskquota.cc:90 source/ubl-settings-diskquota.cc:92 +msgid "Excess files delay period" +msgstr "" + +#: source/ubl-settings-diskquota.cc:155 source/ubl-settings-diskquota.cc:157 +#: source/ubl-settings-diskquota.cc:85 source/ubl-settings-diskquota.cc:87 +#: source/ubl-settings-diskquota.cc:75 source/ubl-settings-diskquota.cc:77 +#: source/ubl-settings-diskquota.cc:96 source/ubl-settings-diskquota.cc:98 +#: source/ubl-settings-diskquota.cc:93 source/ubl-settings-diskquota.cc:95 +#: source/ubl-settings-diskquota.cc:90 source/ubl-settings-diskquota.cc:92 +#: source/ubl-settings-diskquota.cc:89 source/ubl-settings-diskquota.cc:91 +msgid "Excess size delay period" +msgstr "" + +#: source/ubl-settings-diskquota.cc:150 source/ubl-settings-diskquota.cc:175 +#: source/ubl-settings-diskquota.cc:176 source/ubl-settings-diskquota.cc:214 +#: source/ubl-settings-diskquota.cc:221 source/ubl-settings-diskquota.cc:80 +#: source/ubl-settings-diskquota.cc:105 source/ubl-settings-diskquota.cc:106 +#: source/ubl-settings-diskquota.cc:144 source/ubl-settings-diskquota.cc:151 +#: source/ubl-settings-diskquota.cc:70 source/ubl-settings-diskquota.cc:95 +#: source/ubl-settings-diskquota.cc:96 source/ubl-settings-diskquota.cc:134 +#: source/ubl-settings-diskquota.cc:141 source/ubl-settings-diskquota.cc:91 +#: source/ubl-settings-diskquota.cc:116 source/ubl-settings-diskquota.cc:117 +#: source/ubl-settings-diskquota.cc:155 source/ubl-settings-diskquota.cc:162 +#: source/ubl-settings-diskquota.cc:88 source/ubl-settings-diskquota.cc:113 +#: source/ubl-settings-diskquota.cc:114 source/ubl-settings-diskquota.cc:152 +#: source/ubl-settings-diskquota.cc:85 source/ubl-settings-diskquota.cc:110 +#: source/ubl-settings-diskquota.cc:111 source/ubl-settings-diskquota.cc:84 +msgid "File system:" +msgstr "" + +#: source/ubl-settings-diskquota.cc:191 source/ubl-settings-diskquota.cc:200 +#: source/ubl-settings-diskquota.cc:215 source/ubl-settings-diskquota.cc:243 +#: source/ubl-settings-diskquota.cc:121 source/ubl-settings-diskquota.cc:130 +#: source/ubl-settings-diskquota.cc:145 source/ubl-settings-diskquota.cc:378 +#: source/ubl-settings-diskquota.cc:111 source/ubl-settings-diskquota.cc:120 +#: source/ubl-settings-diskquota.cc:135 source/ubl-settings-diskquota.cc:321 +#: source/ubl-settings-diskquota.cc:132 source/ubl-settings-diskquota.cc:141 +#: source/ubl-settings-diskquota.cc:156 source/ubl-settings-diskquota.cc:325 +#: source/ubl-settings-diskquota.cc:129 source/ubl-settings-diskquota.cc:138 +#: source/ubl-settings-diskquota.cc:153 source/ubl-settings-diskquota.cc:317 +#: source/ubl-settings-diskquota.cc:264 source/ubl-settings-diskquota.cc:126 +msgid "Files" +msgstr "" + +#: source/ubl-settings-diskquota.cc:177 source/ubl-settings-diskquota.cc:178 +#: source/ubl-settings-diskquota.cc:107 source/ubl-settings-diskquota.cc:108 +#: source/ubl-settings-diskquota.cc:97 source/ubl-settings-diskquota.cc:98 +#: source/ubl-settings-diskquota.cc:118 source/ubl-settings-diskquota.cc:119 +#: source/ubl-settings-diskquota.cc:115 source/ubl-settings-diskquota.cc:116 +#: source/ubl-settings-diskquota.cc:112 source/ubl-settings-diskquota.cc:113 +msgid "Filters" +msgstr "" + +msgid "" +"GTK settings quotas. for UBLinux\n" +"\n" +"Usage: ubl-settings-diskquota [OPTIONS...]\n" +"Options:\n" +" -h, --help\t Show this help\n" +" -V, --version\t Show package version\n" +msgstr "" + +#: source/ubl-settings-diskquota.cc:144 source/ubl-settings-diskquota.cc:74 +#: source/ubl-settings-diskquota.cc:66 source/ubl-settings-diskquota.cc:87 +#: source/ubl-settings-diskquota.cc:84 source/ubl-settings-diskquota.cc:81 +#: source/ubl-settings-diskquota.cc:80 +msgid "General settings" +msgstr "" + +#: source/ubl-settings-diskquota.cc:611 source/ubl-settings-diskquota.cc:524 +#: source/ubl-settings-diskquota.cc:458 +msgid "Global configuration downloaded successfully" +msgstr "" + +#: source/ubl-settings-diskquota.cc:585 source/ubl-settings-diskquota.cc:498 +#: source/ubl-settings-diskquota.cc:432 +msgid "Global configuration read error" +msgstr "" + +#: source/ubl-settings-diskquota.cc:617 source/ubl-settings-diskquota.cc:530 +#: source/ubl-settings-diskquota.cc:464 +msgid "Global configuration successfully written" +msgstr "" + +#: source/ubl-settings-diskquota.cc:593 source/ubl-settings-diskquota.cc:506 +#: source/ubl-settings-diskquota.cc:440 +msgid "Global configuration write error" +msgstr "" + +#: source/ubl-settings-diskquota.cc:198 source/ubl-settings-diskquota.cc:128 +#: source/ubl-settings-diskquota.cc:118 source/ubl-settings-diskquota.cc:139 +#: source/ubl-settings-diskquota.cc:136 +msgid "Group quotas for this device:" +msgstr "" + +#: source/ubl-settings-diskquota.cc:145 source/ubl-settings-diskquota.cc:75 +#: source/ubl-settings-diskquota.cc:67 source/ubl-settings-diskquota.cc:88 +#: source/ubl-settings-diskquota.cc:85 source/ubl-settings-diskquota.cc:82 +#: source/ubl-settings-diskquota.cc:81 +msgid "Groups" +msgstr "" + +#: source/ubl-settings-diskquota.cc:203 source/ubl-settings-diskquota.cc:204 +#: source/ubl-settings-diskquota.cc:213 source/ubl-settings-diskquota.cc:218 +#: source/ubl-settings-diskquota.cc:133 source/ubl-settings-diskquota.cc:134 +#: source/ubl-settings-diskquota.cc:143 source/ubl-settings-diskquota.cc:148 +#: source/ubl-settings-diskquota.cc:123 source/ubl-settings-diskquota.cc:124 +#: source/ubl-settings-diskquota.cc:138 source/ubl-settings-diskquota.cc:144 +#: source/ubl-settings-diskquota.cc:145 source/ubl-settings-diskquota.cc:154 +#: source/ubl-settings-diskquota.cc:159 source/ubl-settings-diskquota.cc:141 +#: source/ubl-settings-diskquota.cc:142 source/ubl-settings-diskquota.cc:151 +#: source/ubl-settings-diskquota.cc:156 +msgid "Hard limit" +msgstr "" + +#: source/ubl-settings-diskquota.cc:320 source/ubl-settings-diskquota.cc:324 +#: source/ubl-settings-diskquota.cc:316 source/ubl-settings-diskquota.cc:263 +msgid "" +"Hard limit\n" +"(Size) activation\n" +"time" +msgstr "" + +#: source/ubl-settings-diskquota.cc:323 source/ubl-settings-diskquota.cc:327 +#: source/ubl-settings-diskquota.cc:319 source/ubl-settings-diskquota.cc:266 +msgid "" +"Hard limit\n" +"(files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:325 source/ubl-settings-diskquota.cc:329 +#: source/ubl-settings-diskquota.cc:321 source/ubl-settings-diskquota.cc:268 +msgid "" +"Hard limit\n" +"(files) activation\n" +"time" +msgstr "" + +#: source/ubl-settings-diskquota.cc:324 source/ubl-settings-diskquota.cc:328 +#: source/ubl-settings-diskquota.cc:320 source/ubl-settings-diskquota.cc:267 +msgid "" +"Hard limit\n" +"(files) delay" +msgstr "" + +#: source/ubl-settings-diskquota.cc:318 source/ubl-settings-diskquota.cc:322 +#: source/ubl-settings-diskquota.cc:314 source/ubl-settings-diskquota.cc:261 +msgid "" +"Hard limit\n" +"(size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:319 source/ubl-settings-diskquota.cc:323 +#: source/ubl-settings-diskquota.cc:315 source/ubl-settings-diskquota.cc:262 +msgid "" +"Hard limit\n" +"(size) delay" +msgstr "" + +#: source/ubl-settings-diskquota.cc:247 source/ubl-settings-diskquota.cc:382 +msgid "" +"Hard limit\n" +"activation\n" +"time (files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:240 source/ubl-settings-diskquota.cc:375 +msgid "" +"Hard limit\n" +"activation\n" +"time (size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:195 source/ubl-settings-diskquota.cc:125 +#: source/ubl-settings-diskquota.cc:115 source/ubl-settings-diskquota.cc:136 +#: source/ubl-settings-diskquota.cc:133 source/ubl-settings-diskquota.cc:130 +msgid "Hard limit (file) activation time" +msgstr "" + +#: source/ubl-settings-diskquota.cc:123 source/ubl-settings-diskquota.cc:113 +#: source/ubl-settings-diskquota.cc:134 source/ubl-settings-diskquota.cc:131 +#: source/ubl-settings-diskquota.cc:128 +msgid "Hard limit (files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:124 source/ubl-settings-diskquota.cc:114 +#: source/ubl-settings-diskquota.cc:135 source/ubl-settings-diskquota.cc:132 +#: source/ubl-settings-diskquota.cc:129 +msgid "Hard limit (files) delay" +msgstr "" + +#: source/ubl-settings-diskquota.cc:188 source/ubl-settings-diskquota.cc:118 +#: source/ubl-settings-diskquota.cc:108 source/ubl-settings-diskquota.cc:129 +#: source/ubl-settings-diskquota.cc:126 source/ubl-settings-diskquota.cc:123 +msgid "Hard limit (size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:120 source/ubl-settings-diskquota.cc:110 +#: source/ubl-settings-diskquota.cc:131 source/ubl-settings-diskquota.cc:128 +#: source/ubl-settings-diskquota.cc:125 +msgid "Hard limit (size) activation time" +msgstr "" + +#: source/ubl-settings-diskquota.cc:119 source/ubl-settings-diskquota.cc:109 +#: source/ubl-settings-diskquota.cc:130 source/ubl-settings-diskquota.cc:127 +#: source/ubl-settings-diskquota.cc:124 +msgid "Hard limit (size) delay" +msgstr "" + +#: source/ubl-settings-diskquota.cc:190 +msgid "Hard limit activation time (size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:225 source/ubl-settings-diskquota.cc:155 +#: source/ubl-settings-diskquota.cc:145 +msgid "Help" +msgstr "" + +#: source/ubl-settings-diskquota.cc:179 source/ubl-settings-diskquota.cc:109 +#: source/ubl-settings-diskquota.cc:99 source/ubl-settings-diskquota.cc:120 +#: source/ubl-settings-diskquota.cc:117 source/ubl-settings-diskquota.cc:114 +msgid "Load" +msgstr "" + +#: source/ubl-settings-diskquota.cc:222 source/ubl-settings-diskquota.cc:152 +#: source/ubl-settings-diskquota.cc:142 +msgid "Load global configuration" +msgstr "" + +msgid "Direct control of the file system" +msgstr "" + +#: source/ubl-settings-diskquota.cc:223 source/ubl-settings-diskquota.cc:153 +#: source/ubl-settings-diskquota.cc:143 +msgid "Load local configuration" +msgstr "" + +#: source/ubl-settings-diskquota.cc:608 source/ubl-settings-diskquota.cc:521 +#: source/ubl-settings-diskquota.cc:455 +msgid "Local configuration downloaded successfully" +msgstr "" + +#: source/ubl-settings-diskquota.cc:581 source/ubl-settings-diskquota.cc:494 +#: source/ubl-settings-diskquota.cc:428 +msgid "Local configuration reading error" +msgstr "" + +#: source/ubl-settings-diskquota.cc:614 source/ubl-settings-diskquota.cc:527 +#: source/ubl-settings-diskquota.cc:461 +msgid "Local configuration successfully written" +msgstr "" + +#: source/ubl-settings-diskquota.cc:589 source/ubl-settings-diskquota.cc:502 +#: source/ubl-settings-diskquota.cc:436 +msgid "Local configuration write error" +msgstr "" + +#: source/ubl-settings-diskquota.cc:184 source/ubl-settings-diskquota.cc:234 +#: source/ubl-settings-diskquota.cc:114 source/ubl-settings-diskquota.cc:369 +#: source/ubl-settings-diskquota.cc:104 source/ubl-settings-diskquota.cc:314 +#: source/ubl-settings-diskquota.cc:125 source/ubl-settings-diskquota.cc:318 +#: source/ubl-settings-diskquota.cc:122 source/ubl-settings-diskquota.cc:310 +#: source/ubl-settings-diskquota.cc:119 +msgid "Name" +msgstr "" + +#: source/ubl-settings-diskquota.cc:623 source/ubl-settings-diskquota.cc:536 +#: source/ubl-settings-diskquota.cc:470 +msgid "Nothing to save!" +msgstr "" + +#: source/ubl-settings-diskquota.cc:143 source/ubl-settings-diskquota.cc:73 +#: source/ubl-settings-diskquota.cc:65 source/ubl-settings-diskquota.cc:86 +#: source/ubl-settings-diskquota.cc:83 source/ubl-settings-diskquota.cc:80 +#: source/ubl-settings-diskquota.cc:79 +msgid "Project Home Page" +msgstr "" + +#: source/ubl-settings-diskquota.cc:185 source/ubl-settings-diskquota.cc:235 +#: source/ubl-settings-diskquota.cc:115 source/ubl-settings-diskquota.cc:370 +#: source/ubl-settings-diskquota.cc:105 source/ubl-settings-diskquota.cc:315 +#: source/ubl-settings-diskquota.cc:126 source/ubl-settings-diskquota.cc:319 +#: source/ubl-settings-diskquota.cc:123 source/ubl-settings-diskquota.cc:311 +#: source/ubl-settings-diskquota.cc:258 source/ubl-settings-diskquota.cc:120 +msgid "Quotas" +msgstr "" + +#: source/ubl-settings-diskquota.cc:151 source/ubl-settings-diskquota.cc:81 +#: source/ubl-settings-diskquota.cc:71 +msgid "Quotas for groups" +msgstr "" + +#: source/ubl-settings-diskquota.cc:154 source/ubl-settings-diskquota.cc:84 +#: source/ubl-settings-diskquota.cc:74 +msgid "Quotas for users" +msgstr "" + +#: source/ubl-settings-diskquota.cc:180 source/ubl-settings-diskquota.cc:110 +#: source/ubl-settings-diskquota.cc:100 source/ubl-settings-diskquota.cc:121 +#: source/ubl-settings-diskquota.cc:118 source/ubl-settings-diskquota.cc:115 +msgid "Save" +msgstr "" + +#: source/ubl-settings-diskquota.cc:226 source/ubl-settings-diskquota.cc:156 +#: source/ubl-settings-diskquota.cc:146 +msgid "Save in global and local configuration" +msgstr "" + +#: source/ubl-settings-diskquota.cc:227 source/ubl-settings-diskquota.cc:157 +#: source/ubl-settings-diskquota.cc:147 +msgid "Save in global configuration" +msgstr "" + +#: source/ubl-settings-diskquota.cc:228 source/ubl-settings-diskquota.cc:158 +#: source/ubl-settings-diskquota.cc:148 +msgid "Save in local configuration" +msgstr "" + +#: source/ubl-settings-diskquota.cc:140 source/ubl-settings-diskquota.cc:70 +msgid "Setting user quotas" +msgstr "" + +#: source/ubl-settings-diskquota.cc:245 source/ubl-settings-diskquota.cc:380 +msgid "" +"Severe\n" +"limitation\n" +"(files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:238 source/ubl-settings-diskquota.cc:373 +msgid "" +"Severe\n" +"limitation\n" +"(size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:193 +msgid "Severe limitation (files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:186 source/ubl-settings-diskquota.cc:199 +#: source/ubl-settings-diskquota.cc:210 source/ubl-settings-diskquota.cc:236 +#: source/ubl-settings-diskquota.cc:116 source/ubl-settings-diskquota.cc:129 +#: source/ubl-settings-diskquota.cc:140 source/ubl-settings-diskquota.cc:371 +#: source/ubl-settings-diskquota.cc:106 source/ubl-settings-diskquota.cc:119 +#: source/ubl-settings-diskquota.cc:130 source/ubl-settings-diskquota.cc:316 +#: source/ubl-settings-diskquota.cc:127 source/ubl-settings-diskquota.cc:151 +#: source/ubl-settings-diskquota.cc:320 source/ubl-settings-diskquota.cc:124 +#: source/ubl-settings-diskquota.cc:137 source/ubl-settings-diskquota.cc:148 +#: source/ubl-settings-diskquota.cc:312 source/ubl-settings-diskquota.cc:259 +#: source/ubl-settings-diskquota.cc:121 +msgid "Size" +msgstr "" + +#: source/ubl-settings-diskquota.cc:244 source/ubl-settings-diskquota.cc:379 +msgid "" +"Soft\n" +"Restriction\n" +"(files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:192 +msgid "Soft Restriction (files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:202 source/ubl-settings-diskquota.cc:205 +#: source/ubl-settings-diskquota.cc:212 source/ubl-settings-diskquota.cc:217 +#: source/ubl-settings-diskquota.cc:132 source/ubl-settings-diskquota.cc:135 +#: source/ubl-settings-diskquota.cc:142 source/ubl-settings-diskquota.cc:147 +#: source/ubl-settings-diskquota.cc:122 source/ubl-settings-diskquota.cc:125 +#: source/ubl-settings-diskquota.cc:137 source/ubl-settings-diskquota.cc:143 +#: source/ubl-settings-diskquota.cc:146 source/ubl-settings-diskquota.cc:153 +#: source/ubl-settings-diskquota.cc:158 source/ubl-settings-diskquota.cc:140 +#: source/ubl-settings-diskquota.cc:150 source/ubl-settings-diskquota.cc:155 +msgid "Soft limit" +msgstr "" + +#: source/ubl-settings-diskquota.cc:322 source/ubl-settings-diskquota.cc:326 +#: source/ubl-settings-diskquota.cc:318 source/ubl-settings-diskquota.cc:265 +msgid "" +"Soft limit\n" +"(files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:237 source/ubl-settings-diskquota.cc:372 +#: source/ubl-settings-diskquota.cc:317 source/ubl-settings-diskquota.cc:321 +#: source/ubl-settings-diskquota.cc:313 source/ubl-settings-diskquota.cc:260 +msgid "" +"Soft limit\n" +"(size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:122 source/ubl-settings-diskquota.cc:112 +#: source/ubl-settings-diskquota.cc:133 source/ubl-settings-diskquota.cc:130 +#: source/ubl-settings-diskquota.cc:127 +msgid "Soft limit (files)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:187 source/ubl-settings-diskquota.cc:117 +#: source/ubl-settings-diskquota.cc:107 source/ubl-settings-diskquota.cc:128 +#: source/ubl-settings-diskquota.cc:125 source/ubl-settings-diskquota.cc:122 +msgid "Soft limit (size)" +msgstr "" + +#: source/ubl-settings-diskquota.cc:620 source/ubl-settings-diskquota.cc:533 +#: source/ubl-settings-diskquota.cc:467 +msgid "Successfully saved local and global configuration" +msgstr "" + +#: source/ubl-settings-diskquota.cc:59 source/ubl-settings-diskquota.cc:55 +#: source/ubl-settings-diskquota.cc:47 source/ubl-settings-diskquota.cc:68 +#: source/ubl-settings-diskquota.cc:70 source/ubl-settings-diskquota.cc:67 +#: source/ubl-settings-diskquota.cc:66 +msgid "The program must be run as root" +msgstr "" + +#: source/ubl-settings-diskquota.cc:209 source/ubl-settings-diskquota.cc:139 +#: source/ubl-settings-diskquota.cc:129 source/ubl-settings-diskquota.cc:150 +#: source/ubl-settings-diskquota.cc:147 +msgid "User quotas for this device: " +msgstr "" + +#: source/ubl-settings-diskquota.cc:148 source/ubl-settings-diskquota.cc:78 +#: source/ubl-settings-diskquota.cc:68 source/ubl-settings-diskquota.cc:89 +#: source/ubl-settings-diskquota.cc:86 source/ubl-settings-diskquota.cc:83 +#: source/ubl-settings-diskquota.cc:82 +msgid "Users" +msgstr "" + +#: source/ubl-settings-diskquota.cc:163 source/ubl-settings-diskquota.cc:164 +#: source/ubl-settings-diskquota.cc:165 source/ubl-settings-diskquota.cc:166 +#: source/ubl-settings-diskquota.cc:93 source/ubl-settings-diskquota.cc:94 +#: source/ubl-settings-diskquota.cc:95 source/ubl-settings-diskquota.cc:96 +#: source/ubl-settings-diskquota.cc:83 source/ubl-settings-diskquota.cc:84 +#: source/ubl-settings-diskquota.cc:85 source/ubl-settings-diskquota.cc:86 +#: source/ubl-settings-diskquota.cc:104 source/ubl-settings-diskquota.cc:105 +#: source/ubl-settings-diskquota.cc:106 source/ubl-settings-diskquota.cc:107 +#: source/ubl-settings-diskquota.cc:101 source/ubl-settings-diskquota.cc:102 +#: source/ubl-settings-diskquota.cc:103 source/ubl-settings-diskquota.cc:98 +#: source/ubl-settings-diskquota.cc:99 source/ubl-settings-diskquota.cc:100 +#: source/ubl-settings-diskquota.cc:97 +msgid "days" +msgstr "" + +#: source/ubl-settings-diskquota.cc:219 source/ubl-settings-diskquota.cc:220 +#: source/ubl-settings-diskquota.cc:149 source/ubl-settings-diskquota.cc:150 +#: source/ubl-settings-diskquota.cc:139 source/ubl-settings-diskquota.cc:140 +#: source/ubl-settings-diskquota.cc:160 source/ubl-settings-diskquota.cc:161 +#: source/ubl-settings-diskquota.cc:157 source/ubl-settings-diskquota.cc:158 +msgid "files" +msgstr "" + +msgid "Configuring disk quota settings for system groups and users" +msgstr "" + +#: source/ubl-settings-diskquota.cc:167 source/ubl-settings-diskquota.cc:168 +#: source/ubl-settings-diskquota.cc:169 source/ubl-settings-diskquota.cc:170 +#: source/ubl-settings-diskquota.cc:97 source/ubl-settings-diskquota.cc:98 +#: source/ubl-settings-diskquota.cc:99 source/ubl-settings-diskquota.cc:100 +#: source/ubl-settings-diskquota.cc:87 source/ubl-settings-diskquota.cc:88 +#: source/ubl-settings-diskquota.cc:89 source/ubl-settings-diskquota.cc:90 +#: source/ubl-settings-diskquota.cc:108 source/ubl-settings-diskquota.cc:109 +#: source/ubl-settings-diskquota.cc:110 source/ubl-settings-diskquota.cc:111 +#: source/ubl-settings-diskquota.cc:105 source/ubl-settings-diskquota.cc:106 +#: source/ubl-settings-diskquota.cc:107 source/ubl-settings-diskquota.cc:102 +#: source/ubl-settings-diskquota.cc:103 source/ubl-settings-diskquota.cc:104 +#: source/ubl-settings-diskquota.cc:101 +msgid "hours" +msgstr "" + +#: source/ubl-settings-diskquota.cc:141 source/ubl-settings-diskquota.cc:71 +#: source/ubl-settings-diskquota.cc:63 source/ubl-settings-diskquota.cc:84 +#: source/ubl-settings-diskquota.cc:81 source/ubl-settings-diskquota.cc:78 +#: source/ubl-settings-diskquota.cc:77 +msgid "https://wiki.ublinux.com" +msgstr "" + +#: source/ubl-settings-diskquota.cc:548 source/ubl-settings-diskquota.cc:461 +msgid "" +"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +msgstr "" + +#: source/ubl-settings-diskquota.cc:171 source/ubl-settings-diskquota.cc:172 +#: source/ubl-settings-diskquota.cc:173 source/ubl-settings-diskquota.cc:174 +#: source/ubl-settings-diskquota.cc:101 source/ubl-settings-diskquota.cc:102 +#: source/ubl-settings-diskquota.cc:103 source/ubl-settings-diskquota.cc:104 +#: source/ubl-settings-diskquota.cc:91 source/ubl-settings-diskquota.cc:92 +#: source/ubl-settings-diskquota.cc:93 source/ubl-settings-diskquota.cc:94 +#: source/ubl-settings-diskquota.cc:112 source/ubl-settings-diskquota.cc:113 +#: source/ubl-settings-diskquota.cc:114 source/ubl-settings-diskquota.cc:115 +#: source/ubl-settings-diskquota.cc:109 source/ubl-settings-diskquota.cc:110 +#: source/ubl-settings-diskquota.cc:111 source/ubl-settings-diskquota.cc:106 +#: source/ubl-settings-diskquota.cc:107 source/ubl-settings-diskquota.cc:108 +#: source/ubl-settings-diskquota.cc:105 +msgid "minutes" +msgstr "" + +#: source/ubl-settings-diskquota.cc:257 +msgid "name" +msgstr "" + +#: source/ubl-settings-diskquota.cc:92 source/ubl-settings-diskquota.cc:89 +#: source/ubl-settings-diskquota.cc:86 source/ubl-settings-diskquota.cc:85 +msgid "quotas for groups" +msgstr "" + +#: source/ubl-settings-diskquota.cc:95 source/ubl-settings-diskquota.cc:92 +#: source/ubl-settings-diskquota.cc:89 source/ubl-settings-diskquota.cc:88 +msgid "quotas for users" +msgstr "" + +#: source/ubl-settings-diskquota.cc:629 source/ubl-settings-diskquota.cc:542 +#: source/ubl-settings-diskquota.cc:476 source/ubl-settings-diskquota.cc:350 +#: source/ubl-settings-diskquota.cc:371 source/ubl-settings-diskquota.cc:318 +#: source/ubl-settings-diskquota.cc:267 source/ubl-settings-diskquota.cc:213 +msgid "ubl-settings-diskquota version: " +msgstr "" + +#: source/ubl-settings-diskquota.cc:159 source/ubl-settings-diskquota.cc:160 +#: source/ubl-settings-diskquota.cc:161 source/ubl-settings-diskquota.cc:162 +#: source/ubl-settings-diskquota.cc:89 source/ubl-settings-diskquota.cc:90 +#: source/ubl-settings-diskquota.cc:91 source/ubl-settings-diskquota.cc:92 +#: source/ubl-settings-diskquota.cc:79 source/ubl-settings-diskquota.cc:80 +#: source/ubl-settings-diskquota.cc:81 source/ubl-settings-diskquota.cc:82 +#: source/ubl-settings-diskquota.cc:100 source/ubl-settings-diskquota.cc:101 +#: source/ubl-settings-diskquota.cc:102 source/ubl-settings-diskquota.cc:103 +#: source/ubl-settings-diskquota.cc:97 source/ubl-settings-diskquota.cc:98 +#: source/ubl-settings-diskquota.cc:99 source/ubl-settings-diskquota.cc:94 +#: source/ubl-settings-diskquota.cc:95 source/ubl-settings-diskquota.cc:96 +#: source/ubl-settings-diskquota.cc:93 +msgid "weeks" +msgstr "" + +msgid "General statistics" +msgstr "" \ No newline at end of file diff --git a/ubl-settings-diskquota_ru.po b/ubl-settings-diskquota_ru.po new file mode 100644 index 0000000..814ebd0 --- /dev/null +++ b/ubl-settings-diskquota_ru.po @@ -0,0 +1,997 @@ +# Russian translations for ubl-settings-diskquota package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-diskquota package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "test" +msgstr "" +"Project-Id-Version: ublexec 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-10 16:09+0000\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: Russian - UBLinux Team \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit" +#: source/ubl-strings.h:1 + +msgid "Version:" +msgstr "Версия:" + +#: source/ubl-strings.h:2 +msgid "ubl-settings-TEMPLATE version:" +msgstr "Версия ubl-settings-TEMPLATE: " + +#: source/ubl-strings.h:2 +msgid "TEMPLATE settings" +msgstr "Настройки TEMPLATE" + +#: source/ubl-strings.h:2 +msgid "Usage:" +msgstr "Использование:" + +#: source/ubl-strings.h:2 +msgid "[OPTIONS]" +msgstr "[АРГУМЕНТЫ]" + +#: source/ubl-strings.h:2 +msgid "Options:" +msgstr "Аргументы:" + +#: source/ubl-strings.h:2 +msgid "Show this help" +msgstr "Показать параметры справки" + +#: source/ubl-strings.h:2 +msgid "Show package version" +msgstr "Показать текущую версию" + +#: source/ubl-strings.h:2 +msgid "Lock this help menu" +msgstr "Блокировка вызова справки" + +#: source/ubl-strings.h:2 +#, fuzzy +msgid "Lock configuration saving" +msgstr "Блокировка сохранения локальной и глобальной конфигурации" + +#: source/ubl-strings.h:2 +msgid "Lock local configration saving" +msgstr "Блокировка сохранения локальной конфигурации" + +#: source/ubl-strings.h:2 +msgid "Lock global configration saving" +msgstr "Блокировка сохранения глобальной конфигурации" + +#: source/ubl-strings.h:2 +msgid "Lock global configration loading" +msgstr "Блокировка загрузки глобальной конфигурации" + +#: source/ubl-strings.h:4 +msgid "TEMPLATE Manager" +msgstr "Настройки TEMPLATE" + +#: source/ubl-strings.h:5 +msgid "System TEMPLATE settings management" +msgstr "Настройки TEMPLATE" + +#: source/ubl-strings.h:7 +msgid "Operation succeeded" +msgstr "Операция завершена" + +#: source/ubl-strings.h:8 +msgid "" +"Warning! Application was launched without root - root-dependent actions are " +"locked" +msgstr "Внимание! Приложение было запущено без прав суперпользователя - действия, требующие их наличия заблокированы" + +#: source/ubl-strings.h:11 +msgid "Documentation" +msgstr "Справка" + +#: source/ubl-strings.h:12 +msgid "Save to local configuration" +msgstr "Сохранить в локальную конфигурацию" + +#: source/ubl-strings.h:13 +msgid "Save to global configuration" +msgstr "Сохранить в глобальную конфигурацию" + +#: source/ubl-strings.h:14 +msgid "Save configuration" +msgstr "Сохранить конфигурацию" + +#: source/ubl-strings.h:24 +msgid "Always redirect to online documentation" +msgstr "Всегда перенаправлять" + +#: source/ubl-strings.h:25 +msgid "Open documentation" +msgstr "Прочитать справку" + +#: source/ubl-strings.h:27 +msgid "Nothing were chosen" +msgstr "Ничего не было выбрано" + +#: source/ubl-strings.h:30 +msgid "Global configuration loading succseeded." +msgstr "Успешно загружена глобальная конфигурация" + +#: source/ubl-strings.h:31 +msgid "Local configuration loading succseeded." +msgstr "Успешно загружена локальная конфигурация" + +#: source/ubl-strings.h:33 +msgid "Local and global configuration saving succseeded." +msgstr "Успешно записаны локальная и глобальная конфигурация" + +#: source/ubl-strings.h:34 +msgid "Global configuration saving succseeded." +msgstr "Успешно записана глобальная конфигурация" + +#: source/ubl-strings.h:35 +msgid "Local configuration saving succseeded." +msgstr "Успешно записана локальная конфигурация" + +msgid "Off" +msgstr "Выключено" + +msgid "Not set" +msgstr "Не задано" + +msgid "ubl-settings-diskquota" +msgstr "Дисковые квоты" + +msgid "Settings disk quotas - Addition" +msgstr "Настройка дисковых квот - Добавление" + +msgid "Settings disk quotas - Editing" +msgstr "Настройка дисковых квот - Редактирование" + +msgid "Edit" +msgstr "Редактировать" + +msgid "Kb" +msgstr "Кб" + +msgid "Mb" +msgstr "Мб" + +msgid "Gb" +msgstr "Гб" + +msgid "Tb" +msgstr "Тб" + +msgid "Quota use status:" +msgstr "Статус использования квот:" + +msgid "Would you like to read documentation in the Web?" +msgstr "Вы хотите прочитать справку в Сети?" + +msgid "" +"You will be redirected to documentation website where documentation is\n" +"translated and supported by community." +msgstr "" +"Вы будете перенаправлены на сайт с документацией где страницы помощи\n" +"переводятся и поддерживаются сообществом." + +msgid "Cancel" +msgstr "Отменить" + +msgid "Always redirect" +msgstr "Всегда перенаправлять" + +msgid "Read online" +msgstr "Прочитать онлайн" + +#: source/ubl-settings-quotas.cc:224 source/ubl-settings-quotas.cc:154 +#: source/ubl-settings-quotas.cc:144 +msgid "About" +msgstr "О программе" + +msgid "Projects" +msgstr "Проекты" + +#: source/ubl-settings-quotas.cc:183 source/ubl-settings-quotas.cc:113 +#: source/ubl-settings-quotas.cc:103 source/ubl-settings-quotas.cc:124 +#: source/ubl-settings-quotas.cc:121 source/ubl-settings-quotas.cc:118 +msgid "Configuration of disk quotas parameters for system groups and users" +msgstr "Настройка параметров дисковых квот для системных групп и пользователей" + +msgid "Configuring disk quota settings for system groups and users" +msgstr "Настройка параметров дисковых квот для системных групп и пользователей системы" + +#: source/ubl-settings-quotas.cc:138 source/ubl-settings-quotas.cc:68 +#: source/ubl-settings-quotas.cc:60 source/ubl-settings-quotas.cc:81 +#: source/ubl-settings-quotas.cc:78 source/ubl-settings-quotas.cc:75 +#: source/ubl-settings-quotas.cc:74 +msgid "Copyright © UBSoft LLC, 2022 - " +msgstr "" + +#: source/ubl-settings-quotas.cc:201 source/ubl-settings-quotas.cc:206 +#: source/ubl-settings-quotas.cc:211 source/ubl-settings-quotas.cc:131 +#: source/ubl-settings-quotas.cc:136 source/ubl-settings-quotas.cc:141 +#: source/ubl-settings-quotas.cc:121 source/ubl-settings-quotas.cc:126 +#: source/ubl-settings-quotas.cc:142 source/ubl-settings-quotas.cc:147 +#: source/ubl-settings-quotas.cc:152 source/ubl-settings-quotas.cc:139 +#: source/ubl-settings-quotas.cc:144 source/ubl-settings-quotas.cc:149 +msgid "Currently using:" +msgstr "В настоящее время используется:" + +#: source/ubl-settings-quotas.cc:216 source/ubl-settings-quotas.cc:146 +#: source/ubl-settings-quotas.cc:136 source/ubl-settings-quotas.cc:157 +#: source/ubl-settings-quotas.cc:154 +msgid "Currently using: " +msgstr "В настоящее время используется: " + +#: source/ubl-settings-quotas.cc:62 source/ubl-settings-quotas.cc:83 +#: source/ubl-settings-quotas.cc:80 source/ubl-settings-quotas.cc:77 +#: source/ubl-settings-quotas.cc:76 +msgid "Date and Time" +msgstr "Дата и время" + +#: source/ubl-settings-quotas.cc:246 source/ubl-settings-quotas.cc:381 +msgid "" +"Deferring\n" +"a hard\n" +"limit\n" +"(files)" +msgstr "" +"Отсрочка\n" +"жесткого\n" +"ограничения\n" +"(файлы)" + +msgid "" +"Deferring\n" +"(files)" +msgstr "" +"Отсрочка\n" +"(файлы)" + +msgid "" +"Deferring\n" +"(size)" +msgstr "" +"Отсрочка\n" +"(объём)" + +#: source/ubl-settings-quotas.cc:239 source/ubl-settings-quotas.cc:374 +msgid "" +"Deferring\n" +"a hard\n" +"limit\n" +"(size)" +msgstr "" +"Отсрочка\n" +"жесткого\n" +"ограничения\n" +"(объём)" + +#: source/ubl-settings-quotas.cc:194 +msgid "Deferring a hard limit (files)" +msgstr "Отсрочка жесткого ограничения (файлы)" + +#: source/ubl-settings-quotas.cc:189 +msgid "Deferring a hard limit (size)" +msgstr "Отсрочка жесткого ограничения (объём)" + +#: source/ubl-settings-quotas.cc:149 source/ubl-settings-quotas.cc:181 +#: source/ubl-settings-quotas.cc:182 source/ubl-settings-quotas.cc:196 +#: source/ubl-settings-quotas.cc:208 source/ubl-settings-quotas.cc:79 +#: source/ubl-settings-quotas.cc:111 source/ubl-settings-quotas.cc:112 +#: source/ubl-settings-quotas.cc:126 source/ubl-settings-quotas.cc:138 +#: source/ubl-settings-quotas.cc:69 source/ubl-settings-quotas.cc:101 +#: source/ubl-settings-quotas.cc:102 source/ubl-settings-quotas.cc:116 +#: source/ubl-settings-quotas.cc:128 source/ubl-settings-quotas.cc:90 +#: source/ubl-settings-quotas.cc:122 source/ubl-settings-quotas.cc:123 +#: source/ubl-settings-quotas.cc:137 source/ubl-settings-quotas.cc:87 +#: source/ubl-settings-quotas.cc:119 source/ubl-settings-quotas.cc:120 +#: source/ubl-settings-quotas.cc:134 source/ubl-settings-quotas.cc:146 +#: source/ubl-settings-quotas.cc:84 source/ubl-settings-quotas.cc:117 +#: source/ubl-settings-quotas.cc:83 +msgid "Device:" +msgstr "Устройство:" + +msgid "Project ID" +msgstr "ID проекта" + +msgid "Catalog" +msgstr "Каталог" + +msgid "Project Name" +msgstr "Имя проекта" + +msgid "Auto" +msgstr "Авто" + +msgid "Review" +msgstr "Обзор" + +msgid "Generate" +msgstr "Сгенерировать" + +msgid "User" +msgstr "Пользователь" + +msgid "Group" +msgstr "Группа" + +msgid "User:" +msgstr "Пользователь:" + +msgid "Group:" +msgstr "Группа:" + +msgid "Projects:" +msgstr "Проект:" + +msgid "Quota type" +msgstr "Тип квот" + +msgid "Status" +msgstr "Статус" + +msgid "Device\nProject" +msgstr "Устройство\nПроект" + +#: source/ubl-settings-quotas.cc:197 source/ubl-settings-quotas.cc:207 +#: source/ubl-settings-quotas.cc:127 source/ubl-settings-quotas.cc:137 +#: source/ubl-settings-quotas.cc:117 source/ubl-settings-quotas.cc:138 +#: source/ubl-settings-quotas.cc:148 source/ubl-settings-quotas.cc:135 +#: source/ubl-settings-quotas.cc:145 +msgid "Disk quotas for this device:" +msgstr "Дисковые квоты для этого устройства:" + +#: source/ubl-settings-quotas.cc:152 source/ubl-settings-quotas.cc:153 +#: source/ubl-settings-quotas.cc:82 source/ubl-settings-quotas.cc:83 +#: source/ubl-settings-quotas.cc:72 source/ubl-settings-quotas.cc:73 +#: source/ubl-settings-quotas.cc:93 source/ubl-settings-quotas.cc:94 +#: source/ubl-settings-quotas.cc:90 source/ubl-settings-quotas.cc:91 +#: source/ubl-settings-quotas.cc:87 source/ubl-settings-quotas.cc:88 +#: source/ubl-settings-quotas.cc:86 +msgid "Enable" +msgstr "Включить" + +#: source/ubl-settings-quotas.cc:597 source/ubl-settings-quotas.cc:510 +#: source/ubl-settings-quotas.cc:444 +#, fuzzy +msgid "Error saved local and global configuration" +msgstr "Сохранить глобальную и локальную конфигурацию" + +#: source/ubl-settings-quotas.cc:156 source/ubl-settings-quotas.cc:158 +#: source/ubl-settings-quotas.cc:86 source/ubl-settings-quotas.cc:88 +#: source/ubl-settings-quotas.cc:76 source/ubl-settings-quotas.cc:78 +#: source/ubl-settings-quotas.cc:97 source/ubl-settings-quotas.cc:99 +#: source/ubl-settings-quotas.cc:94 source/ubl-settings-quotas.cc:96 +#: source/ubl-settings-quotas.cc:91 source/ubl-settings-quotas.cc:93 +#: source/ubl-settings-quotas.cc:90 source/ubl-settings-quotas.cc:92 +msgid "Excess files delay period" +msgstr "Превышение периода задержки файлов" + +#: source/ubl-settings-quotas.cc:155 source/ubl-settings-quotas.cc:157 +#: source/ubl-settings-quotas.cc:85 source/ubl-settings-quotas.cc:87 +#: source/ubl-settings-quotas.cc:75 source/ubl-settings-quotas.cc:77 +#: source/ubl-settings-quotas.cc:96 source/ubl-settings-quotas.cc:98 +#: source/ubl-settings-quotas.cc:93 source/ubl-settings-quotas.cc:95 +#: source/ubl-settings-quotas.cc:90 source/ubl-settings-quotas.cc:92 +#: source/ubl-settings-quotas.cc:89 source/ubl-settings-quotas.cc:91 +msgid "Excess size delay period" +msgstr "Период задержки превышения размера" + +#: source/ubl-settings-quotas.cc:150 source/ubl-settings-quotas.cc:175 +#: source/ubl-settings-quotas.cc:176 source/ubl-settings-quotas.cc:214 +#: source/ubl-settings-quotas.cc:221 source/ubl-settings-quotas.cc:80 +#: source/ubl-settings-quotas.cc:105 source/ubl-settings-quotas.cc:106 +#: source/ubl-settings-quotas.cc:144 source/ubl-settings-quotas.cc:151 +#: source/ubl-settings-quotas.cc:70 source/ubl-settings-quotas.cc:95 +#: source/ubl-settings-quotas.cc:96 source/ubl-settings-quotas.cc:134 +#: source/ubl-settings-quotas.cc:141 source/ubl-settings-quotas.cc:91 +#: source/ubl-settings-quotas.cc:116 source/ubl-settings-quotas.cc:117 +#: source/ubl-settings-quotas.cc:155 source/ubl-settings-quotas.cc:162 +#: source/ubl-settings-quotas.cc:88 source/ubl-settings-quotas.cc:113 +#: source/ubl-settings-quotas.cc:114 source/ubl-settings-quotas.cc:152 +#: source/ubl-settings-quotas.cc:85 source/ubl-settings-quotas.cc:110 +#: source/ubl-settings-quotas.cc:111 source/ubl-settings-quotas.cc:84 +msgid "File system:" +msgstr "Файловая система:" + +#: source/ubl-settings-quotas.cc:191 source/ubl-settings-quotas.cc:200 +#: source/ubl-settings-quotas.cc:215 source/ubl-settings-quotas.cc:243 +#: source/ubl-settings-quotas.cc:121 source/ubl-settings-quotas.cc:130 +#: source/ubl-settings-quotas.cc:145 source/ubl-settings-quotas.cc:378 +#: source/ubl-settings-quotas.cc:111 source/ubl-settings-quotas.cc:120 +#: source/ubl-settings-quotas.cc:135 source/ubl-settings-quotas.cc:321 +#: source/ubl-settings-quotas.cc:132 source/ubl-settings-quotas.cc:141 +#: source/ubl-settings-quotas.cc:156 source/ubl-settings-quotas.cc:325 +#: source/ubl-settings-quotas.cc:129 source/ubl-settings-quotas.cc:138 +#: source/ubl-settings-quotas.cc:153 source/ubl-settings-quotas.cc:317 +#: source/ubl-settings-quotas.cc:264 source/ubl-settings-quotas.cc:126 +msgid "Files" +msgstr "Файлы" + +#: source/ubl-settings-quotas.cc:177 source/ubl-settings-quotas.cc:178 +#: source/ubl-settings-quotas.cc:107 source/ubl-settings-quotas.cc:108 +#: source/ubl-settings-quotas.cc:97 source/ubl-settings-quotas.cc:98 +#: source/ubl-settings-quotas.cc:118 source/ubl-settings-quotas.cc:119 +#: source/ubl-settings-quotas.cc:115 source/ubl-settings-quotas.cc:116 +#: source/ubl-settings-quotas.cc:112 source/ubl-settings-quotas.cc:113 +msgid "Filters" +msgstr "Фильтры" + +msgid "Direct control of the file system" +msgstr "Прямое управление файловой системой" + +msgid "" +"GTK settings disk quota for UBLinux\n" +"\n" +"Usage: ubl-settings-diskquota [OPTIONS...]\n" +"Options:\n" +" -h, --help\t Show this help\n" +" -V, --version\t Show package version\n" +" --lock-help Lock utility help\n" +" --lock-save Lock saving local and global configuration\n" +" --lock-save-local Lock save global configuration\n" +" --lock-save-global Lock load global configuration\n" +" --lock-load-global Lock load global configuration\n" +msgstr "" +"GTK утилита настройки дисковых для UBLinux\n" +"\n" +"Использование: ubl-settings-diskquota [Параметры приложения...]\n" +"Параметры приложения:\n" +" -h, --help\t Показать параметры справки\n" +" -V, --version\t Показать версию пакета\n" +" --lock-help Блокировка вызова справки\n" +" --lock-save Блокировка сохранения локальной и глобальной " +"конфигурации\n" +" --lock-save-local Блокировка сохранения локальной конфигурации\n" +" --lock-save-global Блокировка сохранения глобальной конфигурации\n" +" --lock-load-global Блокировка загрузки глобальной конфигурации\n" + +#: source/ubl-settings-quotas.cc:144 source/ubl-settings-quotas.cc:74 +#: source/ubl-settings-quotas.cc:66 source/ubl-settings-quotas.cc:87 +#: source/ubl-settings-quotas.cc:84 source/ubl-settings-quotas.cc:81 +#: source/ubl-settings-quotas.cc:80 +msgid "General settings" +msgstr "Общие настройки" + +#: source/ubl-settings-quotas.cc:611 source/ubl-settings-quotas.cc:524 +#: source/ubl-settings-quotas.cc:458 +msgid "Global configuration downloaded successfully" +msgstr "Успешно загружена глобальная конфигурация" + +#: source/ubl-settings-quotas.cc:585 source/ubl-settings-quotas.cc:498 +#: source/ubl-settings-quotas.cc:432 +#, fuzzy +msgid "Global configuration read error" +msgstr "Сохранить глобальную конфигурацию" + +#: source/ubl-settings-quotas.cc:617 source/ubl-settings-quotas.cc:530 +#: source/ubl-settings-quotas.cc:464 +msgid "Global configuration successfully written" +msgstr "Успешно записана глобальная конфигурация" + +#: source/ubl-settings-quotas.cc:593 source/ubl-settings-quotas.cc:506 +#: source/ubl-settings-quotas.cc:440 +#, fuzzy +msgid "Global configuration write error" +msgstr "Сохранить глобальную конфигурацию" + +#: source/ubl-settings-quotas.cc:198 source/ubl-settings-quotas.cc:128 +#: source/ubl-settings-quotas.cc:118 source/ubl-settings-quotas.cc:139 +#: source/ubl-settings-quotas.cc:136 +msgid "Group quotas for this device:" +msgstr "Групповые квоты для этого устройства:" + +#: source/ubl-settings-quotas.cc:145 source/ubl-settings-quotas.cc:75 +#: source/ubl-settings-quotas.cc:67 source/ubl-settings-quotas.cc:88 +#: source/ubl-settings-quotas.cc:85 source/ubl-settings-quotas.cc:82 +#: source/ubl-settings-quotas.cc:81 +msgid "Groups" +msgstr "Группы" + +#: source/ubl-settings-quotas.cc:203 source/ubl-settings-quotas.cc:204 +#: source/ubl-settings-quotas.cc:213 source/ubl-settings-quotas.cc:218 +#: source/ubl-settings-quotas.cc:133 source/ubl-settings-quotas.cc:134 +#: source/ubl-settings-quotas.cc:143 source/ubl-settings-quotas.cc:148 +#: source/ubl-settings-quotas.cc:123 source/ubl-settings-quotas.cc:124 +#: source/ubl-settings-quotas.cc:138 source/ubl-settings-quotas.cc:144 +#: source/ubl-settings-quotas.cc:145 source/ubl-settings-quotas.cc:154 +#: source/ubl-settings-quotas.cc:159 source/ubl-settings-quotas.cc:141 +#: source/ubl-settings-quotas.cc:142 source/ubl-settings-quotas.cc:151 +#: source/ubl-settings-quotas.cc:156 +#, fuzzy +msgid "Hard limit" +msgstr "Жесткий предел" + +#: source/ubl-settings-quotas.cc:320 source/ubl-settings-quotas.cc:324 +#: source/ubl-settings-quotas.cc:316 source/ubl-settings-quotas.cc:263 +#, fuzzy +msgid "" +"Hard limit\n" +"(Size) activation\n" +"time" +msgstr "" +"Жесткий предел\n" +"(размер)" + +#: source/ubl-settings-quotas.cc:323 source/ubl-settings-quotas.cc:327 +#: source/ubl-settings-quotas.cc:319 source/ubl-settings-quotas.cc:266 +#, fuzzy +msgid "" +"Hard limit\n" +"(files)" +msgstr "" +"Жесткий лимит\n" +"(файлы)" + +#: source/ubl-settings-quotas.cc:325 source/ubl-settings-quotas.cc:329 +#: source/ubl-settings-quotas.cc:321 source/ubl-settings-quotas.cc:268 +#, fuzzy +msgid "" +"Hard limit\n" +"(files) activation\n" +"time" +msgstr "" +"Жесткий предел\n" +"(размер)" + +#: source/ubl-settings-quotas.cc:324 source/ubl-settings-quotas.cc:328 +#: source/ubl-settings-quotas.cc:320 source/ubl-settings-quotas.cc:267 +#, fuzzy +msgid "" +"Hard limit\n" +"(files) delay" +msgstr "" +"Жесткий лимит\n" +"(файлы)" + +#: source/ubl-settings-quotas.cc:318 source/ubl-settings-quotas.cc:322 +#: source/ubl-settings-quotas.cc:314 source/ubl-settings-quotas.cc:261 +#, fuzzy +msgid "" +"Hard limit\n" +"(size)" +msgstr "" +"Жесткий предел\n" +"(размер) задержки" + +#: source/ubl-settings-quotas.cc:319 source/ubl-settings-quotas.cc:323 +#: source/ubl-settings-quotas.cc:315 source/ubl-settings-quotas.cc:262 +#, fuzzy +msgid "" +"Hard limit\n" +"(size) delay" +msgstr "" +"Жесткий предел\n" +"(размер) задержки" + +#: source/ubl-settings-quotas.cc:247 source/ubl-settings-quotas.cc:382 +#, fuzzy +msgid "" +"Hard limit\n" +"activation\n" +"time (files)" +msgstr "" +"Время активации\n" +"жесткого лимита\n" +"(файла)" + +#: source/ubl-settings-quotas.cc:240 source/ubl-settings-quotas.cc:375 +msgid "" +"Hard limit\n" +"activation\n" +"time (size)" +msgstr "" +"Время активации\n" +"жесткого лимита\n" +"(объём)" + +#: source/ubl-settings-quotas.cc:195 source/ubl-settings-quotas.cc:125 +#: source/ubl-settings-quotas.cc:115 source/ubl-settings-quotas.cc:136 +#: source/ubl-settings-quotas.cc:133 source/ubl-settings-quotas.cc:130 +msgid "Hard limit (file) activation time" +msgstr "Время активации жесткого лимита (файла)" + +#: source/ubl-settings-quotas.cc:123 source/ubl-settings-quotas.cc:113 +#: source/ubl-settings-quotas.cc:134 source/ubl-settings-quotas.cc:131 +#: source/ubl-settings-quotas.cc:128 +msgid "Hard limit (files)" +msgstr "Жесткий лимит (файлы)" + +#: source/ubl-settings-quotas.cc:124 source/ubl-settings-quotas.cc:114 +#: source/ubl-settings-quotas.cc:135 source/ubl-settings-quotas.cc:132 +#: source/ubl-settings-quotas.cc:129 +msgid "Hard limit (files) delay" +msgstr "Жесткий лимит (файлы)" + +#: source/ubl-settings-quotas.cc:188 source/ubl-settings-quotas.cc:118 +#: source/ubl-settings-quotas.cc:108 source/ubl-settings-quotas.cc:129 +#: source/ubl-settings-quotas.cc:126 source/ubl-settings-quotas.cc:123 +msgid "Hard limit (size)" +msgstr "Жесткий лимит (объём)" + +#: source/ubl-settings-quotas.cc:120 source/ubl-settings-quotas.cc:110 +#: source/ubl-settings-quotas.cc:131 source/ubl-settings-quotas.cc:128 +#: source/ubl-settings-quotas.cc:125 +msgid "Hard limit (size) activation time" +msgstr "Жесткий предел (размер)" + +#: source/ubl-settings-quotas.cc:119 source/ubl-settings-quotas.cc:109 +#: source/ubl-settings-quotas.cc:130 source/ubl-settings-quotas.cc:127 +#: source/ubl-settings-quotas.cc:124 +msgid "Hard limit (size) delay" +msgstr "Жесткий предел (размер) задержки" + +#: source/ubl-settings-quotas.cc:190 +msgid "Hard limit activation time (size)" +msgstr "Время активации жесткого ограничения (объём)" + +#: source/ubl-settings-quotas.cc:225 source/ubl-settings-quotas.cc:155 +#: source/ubl-settings-quotas.cc:145 +msgid "Help" +msgstr "Справка" + +#: source/ubl-settings-quotas.cc:179 source/ubl-settings-quotas.cc:109 +#: source/ubl-settings-quotas.cc:99 source/ubl-settings-quotas.cc:120 +#: source/ubl-settings-quotas.cc:117 source/ubl-settings-quotas.cc:114 +msgid "Load" +msgstr "Загрузить" + +#: source/ubl-settings-quotas.cc:222 source/ubl-settings-quotas.cc:152 +#: source/ubl-settings-quotas.cc:142 +msgid "Load global configuration" +msgstr "Загрузить глобальную конфигурацию" + +#: source/ubl-settings-quotas.cc:223 source/ubl-settings-quotas.cc:153 +#: source/ubl-settings-quotas.cc:143 +msgid "Load local configuration" +msgstr "Загрузить локальную конфигурацию" + +#: source/ubl-settings-quotas.cc:608 source/ubl-settings-quotas.cc:521 +#: source/ubl-settings-quotas.cc:455 +msgid "Local configuration downloaded successfully" +msgstr "Успешно загружена локальная конфигурация" + +#: source/ubl-settings-quotas.cc:581 source/ubl-settings-quotas.cc:494 +#: source/ubl-settings-quotas.cc:428 +#, fuzzy +msgid "Local configuration reading error" +msgstr "Загрузить локальную конфигурацию" + +#: source/ubl-settings-quotas.cc:614 source/ubl-settings-quotas.cc:527 +#: source/ubl-settings-quotas.cc:461 +msgid "Local configuration successfully written" +msgstr "Успешно записана локальная конфигурация" + +#: source/ubl-settings-quotas.cc:589 source/ubl-settings-quotas.cc:502 +#: source/ubl-settings-quotas.cc:436 +#, fuzzy +msgid "Local configuration write error" +msgstr "Загрузить локальную конфигурацию" + +#: source/ubl-settings-quotas.cc:184 source/ubl-settings-quotas.cc:234 +#: source/ubl-settings-quotas.cc:114 source/ubl-settings-quotas.cc:369 +#: source/ubl-settings-quotas.cc:104 source/ubl-settings-quotas.cc:314 +#: source/ubl-settings-quotas.cc:125 source/ubl-settings-quotas.cc:318 +#: source/ubl-settings-quotas.cc:122 source/ubl-settings-quotas.cc:310 +#: source/ubl-settings-quotas.cc:119 +msgid "Name" +msgstr "Имя" + +#: source/ubl-settings-quotas.cc:623 source/ubl-settings-quotas.cc:536 +#: source/ubl-settings-quotas.cc:470 +msgid "Nothing to save!" +msgstr "Нечего сохранять!" + +#: source/ubl-settings-quotas.cc:143 source/ubl-settings-quotas.cc:73 +#: source/ubl-settings-quotas.cc:65 source/ubl-settings-quotas.cc:86 +#: source/ubl-settings-quotas.cc:83 source/ubl-settings-quotas.cc:80 +#: source/ubl-settings-quotas.cc:79 +msgid "Project Home Page" +msgstr "Главная страница проекта" + +#: source/ubl-settings-quotas.cc:185 source/ubl-settings-quotas.cc:235 +#: source/ubl-settings-quotas.cc:115 source/ubl-settings-quotas.cc:370 +#: source/ubl-settings-quotas.cc:105 source/ubl-settings-quotas.cc:315 +#: source/ubl-settings-quotas.cc:126 source/ubl-settings-quotas.cc:319 +#: source/ubl-settings-quotas.cc:123 source/ubl-settings-quotas.cc:311 +#: source/ubl-settings-quotas.cc:258 source/ubl-settings-quotas.cc:120 +msgid "Quotas" +msgstr "Квоты" + +#: source/ubl-settings-quotas.cc:151 source/ubl-settings-quotas.cc:81 +#: source/ubl-settings-quotas.cc:71 +msgid "Quotas for groups" +msgstr "Квоты для групп" + +#: source/ubl-settings-quotas.cc:154 source/ubl-settings-quotas.cc:84 +#: source/ubl-settings-quotas.cc:74 +msgid "Quotas for users" +msgstr "Квоты для пользователей" + +#: source/ubl-settings-quotas.cc:180 source/ubl-settings-quotas.cc:110 +#: source/ubl-settings-quotas.cc:100 source/ubl-settings-quotas.cc:121 +#: source/ubl-settings-quotas.cc:118 source/ubl-settings-quotas.cc:115 +msgid "Save" +msgstr "Сохранить" + +#: source/ubl-settings-quotas.cc:226 source/ubl-settings-quotas.cc:156 +#: source/ubl-settings-quotas.cc:146 +msgid "Save in global and local configuration" +msgstr "Сохранить в глобальную и локальную конфигурацию" + +#: source/ubl-settings-quotas.cc:227 source/ubl-settings-quotas.cc:157 +#: source/ubl-settings-quotas.cc:147 +msgid "Save in global configuration" +msgstr "Сохранить в глобальную конфигурацию" + +#: source/ubl-settings-quotas.cc:228 source/ubl-settings-quotas.cc:158 +#: source/ubl-settings-quotas.cc:148 +msgid "Save in local configuration" +msgstr "Сохранить в локальную конфигурацию" + +#: source/ubl-settings-quotas.cc:140 source/ubl-settings-quotas.cc:70 +msgid "Setting user quotas" +msgstr "Настройка квот пользователей" + +#: source/ubl-settings-quotas.cc:245 source/ubl-settings-quotas.cc:380 +msgid "" +"Severe\n" +"limitation\n" +"(files)" +msgstr "" +"Жесткое\n" +"лимит\n" +"(файлы)" + +#: source/ubl-settings-quotas.cc:238 source/ubl-settings-quotas.cc:373 +msgid "" +"Severe\n" +"limitation\n" +"(size)" +msgstr "" +"Жесткое\n" +"лимит\n" +"(объём)" + +#: source/ubl-settings-quotas.cc:193 +msgid "Severe limitation (files)" +msgstr "Жесткое лимит (файлы)" + +#: source/ubl-settings-quotas.cc:186 source/ubl-settings-quotas.cc:199 +#: source/ubl-settings-quotas.cc:210 source/ubl-settings-quotas.cc:236 +#: source/ubl-settings-quotas.cc:116 source/ubl-settings-quotas.cc:129 +#: source/ubl-settings-quotas.cc:140 source/ubl-settings-quotas.cc:371 +#: source/ubl-settings-quotas.cc:106 source/ubl-settings-quotas.cc:119 +#: source/ubl-settings-quotas.cc:130 source/ubl-settings-quotas.cc:316 +#: source/ubl-settings-quotas.cc:127 source/ubl-settings-quotas.cc:151 +#: source/ubl-settings-quotas.cc:320 source/ubl-settings-quotas.cc:124 +#: source/ubl-settings-quotas.cc:137 source/ubl-settings-quotas.cc:148 +#: source/ubl-settings-quotas.cc:312 source/ubl-settings-quotas.cc:259 +#: source/ubl-settings-quotas.cc:121 +msgid "Size" +msgstr "Объём" + +#: source/ubl-settings-quotas.cc:244 source/ubl-settings-quotas.cc:379 +msgid "" +"Soft\n" +"Restriction\n" +"(files)" +msgstr "" +"Мягкое\n" +"лимит\n" +"(файлы)" + +#: source/ubl-settings-quotas.cc:192 +msgid "Soft Restriction (files)" +msgstr "Мягкое лимит (файлы)" + +#: source/ubl-settings-quotas.cc:202 source/ubl-settings-quotas.cc:205 +#: source/ubl-settings-quotas.cc:212 source/ubl-settings-quotas.cc:217 +#: source/ubl-settings-quotas.cc:132 source/ubl-settings-quotas.cc:135 +#: source/ubl-settings-quotas.cc:142 source/ubl-settings-quotas.cc:147 +#: source/ubl-settings-quotas.cc:122 source/ubl-settings-quotas.cc:125 +#: source/ubl-settings-quotas.cc:137 source/ubl-settings-quotas.cc:143 +#: source/ubl-settings-quotas.cc:146 source/ubl-settings-quotas.cc:153 +#: source/ubl-settings-quotas.cc:158 source/ubl-settings-quotas.cc:140 +#: source/ubl-settings-quotas.cc:150 source/ubl-settings-quotas.cc:155 +#, fuzzy +msgid "Soft limit" +msgstr "Мягкий лимит" + +#: source/ubl-settings-quotas.cc:322 source/ubl-settings-quotas.cc:326 +#: source/ubl-settings-quotas.cc:318 source/ubl-settings-quotas.cc:265 +#, fuzzy +msgid "" +"Soft limit\n" +"(files)" +msgstr "" +"Мягкий\n" +"лимит\n" +"(файлы)" + +#: source/ubl-settings-quotas.cc:237 source/ubl-settings-quotas.cc:372 +#: source/ubl-settings-quotas.cc:317 source/ubl-settings-quotas.cc:321 +#: source/ubl-settings-quotas.cc:313 source/ubl-settings-quotas.cc:260 +#, fuzzy +msgid "" +"Soft limit\n" +"(size)" +msgstr "" +"Мягкий лимит\n" +"(объём)" + +msgid "" +"Soft limit\n" +"(file)" +msgstr "" +"Мягкий лимит\n" +"(файлы)" + +#: source/ubl-settings-quotas.cc:122 source/ubl-settings-quotas.cc:112 +#: source/ubl-settings-quotas.cc:133 source/ubl-settings-quotas.cc:130 +#: source/ubl-settings-quotas.cc:127 +msgid "Soft limit (files)" +msgstr "" +"Мягкий лимит\n" +"(файлы)" + +#: source/ubl-settings-quotas.cc:187 source/ubl-settings-quotas.cc:117 +#: source/ubl-settings-quotas.cc:107 source/ubl-settings-quotas.cc:128 +#: source/ubl-settings-quotas.cc:125 source/ubl-settings-quotas.cc:122 +msgid "Soft limit (size)" +msgstr "Мягкий лимит (объём)" + +#: source/ubl-settings-quotas.cc:620 source/ubl-settings-quotas.cc:533 +#: source/ubl-settings-quotas.cc:467 +#, fuzzy +msgid "Successfully saved local and global configuration" +msgstr "Сохранить глобальную и локальную конфигурацию" + +#: source/ubl-settings-quotas.cc:59 source/ubl-settings-quotas.cc:55 +#: source/ubl-settings-quotas.cc:47 source/ubl-settings-quotas.cc:68 +#: source/ubl-settings-quotas.cc:70 source/ubl-settings-quotas.cc:67 +#: source/ubl-settings-quotas.cc:66 +msgid "The program must be run as root" +msgstr "Программа должна быть запущена от имени root" + +#: source/ubl-settings-quotas.cc:209 source/ubl-settings-quotas.cc:139 +#: source/ubl-settings-quotas.cc:129 source/ubl-settings-quotas.cc:150 +#: source/ubl-settings-quotas.cc:147 +msgid "User quotas for this device: " +msgstr "Квоты пользователей для этого устройства: " + +#: source/ubl-settings-quotas.cc:148 source/ubl-settings-quotas.cc:78 +#: source/ubl-settings-quotas.cc:68 source/ubl-settings-quotas.cc:89 +#: source/ubl-settings-quotas.cc:86 source/ubl-settings-quotas.cc:83 +#: source/ubl-settings-quotas.cc:82 +msgid "Users" +msgstr "Пользователи" + +#: source/ubl-settings-quotas.cc:163 source/ubl-settings-quotas.cc:164 +#: source/ubl-settings-quotas.cc:165 source/ubl-settings-quotas.cc:166 +#: source/ubl-settings-quotas.cc:93 source/ubl-settings-quotas.cc:94 +#: source/ubl-settings-quotas.cc:95 source/ubl-settings-quotas.cc:96 +#: source/ubl-settings-quotas.cc:83 source/ubl-settings-quotas.cc:84 +#: source/ubl-settings-quotas.cc:85 source/ubl-settings-quotas.cc:86 +#: source/ubl-settings-quotas.cc:104 source/ubl-settings-quotas.cc:105 +#: source/ubl-settings-quotas.cc:106 source/ubl-settings-quotas.cc:107 +#: source/ubl-settings-quotas.cc:101 source/ubl-settings-quotas.cc:102 +#: source/ubl-settings-quotas.cc:103 source/ubl-settings-quotas.cc:98 +#: source/ubl-settings-quotas.cc:99 source/ubl-settings-quotas.cc:100 +#: source/ubl-settings-quotas.cc:97 +msgid "days" +msgstr "дни" + +#: source/ubl-settings-quotas.cc:219 source/ubl-settings-quotas.cc:220 +#: source/ubl-settings-quotas.cc:149 source/ubl-settings-quotas.cc:150 +#: source/ubl-settings-quotas.cc:139 source/ubl-settings-quotas.cc:140 +#: source/ubl-settings-quotas.cc:160 source/ubl-settings-quotas.cc:161 +#: source/ubl-settings-quotas.cc:157 source/ubl-settings-quotas.cc:158 +#, fuzzy +msgid "files" +msgstr "Файлы" + +#: source/ubl-settings-quotas.cc:167 source/ubl-settings-quotas.cc:168 +#: source/ubl-settings-quotas.cc:169 source/ubl-settings-quotas.cc:170 +#: source/ubl-settings-quotas.cc:97 source/ubl-settings-quotas.cc:98 +#: source/ubl-settings-quotas.cc:99 source/ubl-settings-quotas.cc:100 +#: source/ubl-settings-quotas.cc:87 source/ubl-settings-quotas.cc:88 +#: source/ubl-settings-quotas.cc:89 source/ubl-settings-quotas.cc:90 +#: source/ubl-settings-quotas.cc:108 source/ubl-settings-quotas.cc:109 +#: source/ubl-settings-quotas.cc:110 source/ubl-settings-quotas.cc:111 +#: source/ubl-settings-quotas.cc:105 source/ubl-settings-quotas.cc:106 +#: source/ubl-settings-quotas.cc:107 source/ubl-settings-quotas.cc:102 +#: source/ubl-settings-quotas.cc:103 source/ubl-settings-quotas.cc:104 +#: source/ubl-settings-quotas.cc:101 +msgid "hours" +msgstr "часы" + +#: source/ubl-settings-quotas.cc:141 source/ubl-settings-quotas.cc:71 +#: source/ubl-settings-quotas.cc:63 source/ubl-settings-quotas.cc:84 +#: source/ubl-settings-quotas.cc:81 source/ubl-settings-quotas.cc:78 +#: source/ubl-settings-quotas.cc:77 +msgid "https://wiki.ublinux.com" +msgstr "https://wiki.ublinux.ru" + +#: source/ubl-settings-quotas.cc:548 source/ubl-settings-quotas.cc:461 +msgid "" +"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +msgstr "" + +#: source/ubl-settings-quotas.cc:171 source/ubl-settings-quotas.cc:172 +#: source/ubl-settings-quotas.cc:173 source/ubl-settings-quotas.cc:174 +#: source/ubl-settings-quotas.cc:101 source/ubl-settings-quotas.cc:102 +#: source/ubl-settings-quotas.cc:103 source/ubl-settings-quotas.cc:104 +#: source/ubl-settings-quotas.cc:91 source/ubl-settings-quotas.cc:92 +#: source/ubl-settings-quotas.cc:93 source/ubl-settings-quotas.cc:94 +#: source/ubl-settings-quotas.cc:112 source/ubl-settings-quotas.cc:113 +#: source/ubl-settings-quotas.cc:114 source/ubl-settings-quotas.cc:115 +#: source/ubl-settings-quotas.cc:109 source/ubl-settings-quotas.cc:110 +#: source/ubl-settings-quotas.cc:111 source/ubl-settings-quotas.cc:106 +#: source/ubl-settings-quotas.cc:107 source/ubl-settings-quotas.cc:108 +#: source/ubl-settings-quotas.cc:105 +msgid "minutes" +msgstr "минуты" + +#: source/ubl-settings-quotas.cc:257 +msgid "name" +msgstr "имя" + +#: source/ubl-settings-quotas.cc:92 source/ubl-settings-quotas.cc:89 +#: source/ubl-settings-quotas.cc:86 source/ubl-settings-quotas.cc:85 +#, fuzzy +msgid "quotas for groups" +msgstr "Квоты для групп" + +#: source/ubl-settings-quotas.cc:95 source/ubl-settings-quotas.cc:92 +#: source/ubl-settings-quotas.cc:89 source/ubl-settings-quotas.cc:88 +#, fuzzy +msgid "quotas for users" +msgstr "Квоты для пользователей" + +#: source/ubl-settings-quotas.cc:629 source/ubl-settings-quotas.cc:542 +#: source/ubl-settings-quotas.cc:476 source/ubl-settings-quotas.cc:350 +#: source/ubl-settings-quotas.cc:371 source/ubl-settings-quotas.cc:318 +#: source/ubl-settings-quotas.cc:267 source/ubl-settings-quotas.cc:213 +msgid "ubl-settings-quotas version: " +msgstr "ubl-settings-quotas версия: " + +#: source/ubl-settings-quotas.cc:159 source/ubl-settings-quotas.cc:160 +#: source/ubl-settings-quotas.cc:161 source/ubl-settings-quotas.cc:162 +#: source/ubl-settings-quotas.cc:89 source/ubl-settings-quotas.cc:90 +#: source/ubl-settings-quotas.cc:91 source/ubl-settings-quotas.cc:92 +#: source/ubl-settings-quotas.cc:79 source/ubl-settings-quotas.cc:80 +#: source/ubl-settings-quotas.cc:81 source/ubl-settings-quotas.cc:82 +#: source/ubl-settings-quotas.cc:100 source/ubl-settings-quotas.cc:101 +#: source/ubl-settings-quotas.cc:102 source/ubl-settings-quotas.cc:103 +#: source/ubl-settings-quotas.cc:97 source/ubl-settings-quotas.cc:98 +#: source/ubl-settings-quotas.cc:99 source/ubl-settings-quotas.cc:94 +#: source/ubl-settings-quotas.cc:95 source/ubl-settings-quotas.cc:96 +#: source/ubl-settings-quotas.cc:93 +msgid "weeks" +msgstr "недели" + +msgid "Argument not recognized\n" +msgstr "Аргумент не распознан\n" + +msgid "ubl-settings-diskquota version: " +msgstr "ubl-settings-diskquota версия: " + +msgid "ubl-settings-quotas" +msgstr "Квоты" + +msgid "General statistics" +msgstr "Общая статистика" + +#~ msgid "Severe limitation (size)" +#~ msgstr "Жесткое лимит (объём)" + +#, fuzzy +#~ msgid "Hard limit activation time (files)" +#~ msgstr "Время активации жесткого граничения (файла)"