master #3
Merged
asmeron
merged 51 commits from Igor1/ubl-settings-diskquota:master
into develop
2 years ago
@ -0,0 +1,3 @@
|
|||||||
|
.vscode/
|
||||||
|
ubl-settings-diskquota.glade~
|
||||||
|
ubl-settings-diskquota_ru.po~
|
@ -0,0 +1,159 @@
|
|||||||
|
#!/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
|
||||||
|
FILE_VERSION = VERSION.md
|
||||||
|
DEPENDS = /bin/cmake
|
||||||
|
PREFIX ?= /usr
|
||||||
|
PKGNAME = $(MAKEFILE_DIR)
|
||||||
|
#PKGNAME = ubl-settings-diskquota
|
||||||
|
|
||||||
|
default_target: all
|
||||||
|
|
||||||
|
.PHONY: all init depend debug prepare check build uninstall install clean up_ver help
|
||||||
|
|
||||||
|
all: init build
|
||||||
|
|
||||||
|
init:
|
||||||
|
@echo "Initialize ..."; \
|
||||||
|
sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-diskquota.cc; \
|
||||||
|
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:
|
||||||
|
@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 "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/${PKGNAME}/images/logo-background.png"
|
||||||
|
@$(RM) "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.pkexec.${PKGNAME}.exec.policy"
|
||||||
|
@$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.svg"
|
||||||
|
@$(RM) -rd "${DESTDIR}${PREFIX}/share/${PKGNAME}"
|
||||||
|
@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 ..."
|
||||||
|
@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 png --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.png"; \
|
||||||
|
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 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}"
|
||||||
|
@install -dm755 "${DESTDIR}${PREFIX}/share/applications"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop"
|
||||||
|
@install -dm755 "${DESTDIR}${PREFIX}/share/polkit-1/actions"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/polkit-1/actions/" "com.ublinux.pkexec.${PKGNAME}.exec.policy"
|
||||||
|
@install -dm755 "${DESTDIR}${PREFIX}/share/${PKGNAME}"/{ui,css,images}
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/ui/" "${PKGNAME}.glade"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/css/" "${PKGNAME}.css"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/" "logo-background.png"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg"
|
||||||
|
@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"
|
||||||
|
|
||||||
|
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"
|
@ -1,2 +1,49 @@
|
|||||||||||||
# ubl-settings-quotas
|
# ubl-settings-diskquota
|
||||||||||||
|
# Настройки квот
|
||||||||||||
|
|||||||||||||
|
[RU] Утилита для настройки дисковых квот
|
||||||||||||
|
|
||||||||||||
|
Utility for setting the disk quotas
|
||||||||||||
|
|
||||||||||||
|

|
||||||||||||
|
|
||||||||||||
|
# Build
|
||||||||||||
|
In order to build ubl-settings-diskquota you will need:
|
||||||||||||
|
|
||||||||||||
|
- CMake
|
||||||||||||
|
- C compiler
|
||||||||||||
|
- GTK+ 3 & dependencies
|
||||||||||||
|
|
||||||||||||
|
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
|
||||||||||||
|
```
|
||||||||||||
|
# Usage
|
||||||||||||
|
```sh
|
||||||||||||
|
$ ubl-settings-diskquota --help
|
||||||||||||
|
GTK settings disk quota for UBLinux
|
||||||||||||
|
|
||||||||||||
|
Usage: ubl-settings-diskquota [OPTIONS...]
|
||||||||||||
|
Options:
|
||||||||||||
|
-h, --help Show this help
|
||||||||||||
|
-V, --version Show package version
|
||||||||||||
|
--lock-help Lock utility help
|
||||||||||||
|
--lock-save Lock saving local and global configuration
|
||||||||||||
|
--lock-save-local Lock save global configuration
|
||||||||||||
|
--lock-save-global Lock load global configuration
|
||||||||||||
|
--lock-load-global Lock load global configuration
|
||||||||||||
|
|
||||||||||||
|
$ ubl-settings-diskquota --version
|
||||||||||||
|
ubl-settings-diskquota version: x.xx
|
||||||||||||
|
```
|
||||||||||||
|
@ -0,0 +1 @@
|
|||||||
|
VERSION 1.0
|
@ -0,0 +1,24 @@
|
|||||||||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||||||||
|
<!DOCTYPE policyconfig PUBLIC
|
||||||||||||
|
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||||||||||
|
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||||||||||
|
<policyconfig>
|
||||||||||||
|
|
||||||||||||
|
<vendor>UBLinux</vendor>
|
||||||||||||
|
<vendor_url>https://ublinux.ru</vendor_url>
|
||||||||||||
|
|
||||||||||||
|
<action id="org.freedesktop.policykit.ubl-settings-quotas.pkexec.policy.run">
|
||||||||||||
asmeron
commented 2 years ago
Review
?? |
|||||||||||||
|
<description>Run "ubl-settings-quotas" as root</description>
|
||||||||||||
asmeron
commented 2 years ago
Review
Какое правильно название УТИЛИТЫ ?? |
|||||||||||||
|
<description xml:lang="ru">Запус "Загрузка системы" с правами root</description>
|
||||||||||||
asmeron
commented 2 years ago
Review
??? |
|||||||||||||
|
<message>Authentication is required to run "ubl-settings-quotas"</message>
|
||||||||||||
asmeron
commented 2 years ago
Review
?? |
|||||||||||||
|
<message xml:lang="ru">Требуется авторизация для запуска "Загрузка системы" с правами root</message>
|
||||||||||||
|
<defaults>
|
||||||||||||
|
<allow_any>auth_admin</allow_any>
|
||||||||||||
|
<allow_inactive>auth_admin</allow_inactive>
|
||||||||||||
|
<allow_active>auth_admin</allow_active>
|
||||||||||||
|
</defaults>
|
||||||||||||
|
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/ubl-settings-quotas</annotate>
|
||||||||||||
asmeron
commented 2 years ago
Review
?? |
|||||||||||||
|
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||||||||||
|
</action>
|
||||||||||||
|
|
||||||||||||
|
</policyconfig>
|
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 218 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 76 KiB |
@ -0,0 +1,68 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.7)
|
||||||
|
project(ubl-settings-diskquota)
|
||||||
|
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
|
||||||
|
pkg_check_modules(GTK REQUIRED gtkmm-3.0)
|
||||||
|
include_directories(${GTK_INCLUDE_DIRS})
|
||||||
|
link_directories(${GTK_LIBRARY_DIRS})
|
||||||
|
add_definitions(${GTK_CFLAGS_OTHER})
|
||||||
|
|
||||||
|
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
|
||||||
|
|
||||||
|
option(WEBKIT_FOUND "No" OFF)
|
||||||
|
|
||||||
|
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
|
||||||
|
if(WEBKIT_LIBRARIES_FOUND)
|
||||||
|
option(WEBKIT_FOUND "Yes" ON)
|
||||||
|
PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
|
||||||
|
include_directories(${WEBKIT_INCLUDE_DIRS})
|
||||||
|
link_directories(${WEBKIT_LIBRARY_DIRS})
|
||||||
|
add_definitions(${WEBKIT_CFLAGS_OTHER})
|
||||||
|
endif()
|
||||||
|
configure_file(ubl-settings-diskquota.h.in ubl-settings-diskquota-cm.h)
|
||||||
|
|
||||||
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a -g")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \
|
||||||
|
-O2 -pipe -fno-plt -fexceptions \
|
||||||
|
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
|
||||||
|
-fstack-clash-protection -fcf-protection -g")
|
||||||
|
|
||||||
|
set(SOURCE_FILES
|
||||||
|
ubl-settings-diskquota-cm.h
|
||||||
|
ubl-settings-diskquota.h
|
||||||
|
ubl-settings-diskquota.cc
|
||||||
|
ubconfig_quotas.h
|
||||||
|
ubconfig_quotas.cc
|
||||||
|
system_quotas.h
|
||||||
|
system_quotas.cc
|
||||||
|
my_device.h
|
||||||
|
my_device.cc
|
||||||
|
project_lib.h
|
||||||
|
my_type.h
|
||||||
|
save.h
|
||||||
|
save.cc
|
||||||
|
load.h
|
||||||
|
load.cc
|
||||||
|
my_process.h
|
||||||
|
my_process.cc
|
||||||
|
util.h
|
||||||
|
util.cc
|
||||||
|
my_plug.h
|
||||||
|
my_plug.cc
|
||||||
|
ubl-util-standard.h
|
||||||
|
ubl-util-standard.c
|
||||||
|
main.cc)
|
||||||
|
|
||||||
|
set(LIBRARIES
|
||||||
|
${GTK_LIBRARIES}
|
||||||
|
pthread)
|
||||||
|
|
||||||
|
add_executable(ubl-settings-diskquota ${SOURCE_FILES})
|
||||||
|
|
||||||
|
target_link_libraries(ubl-settings-diskquota PUBLIC ${WEBKIT_LIBRARIES} ${LIBRARIES})
|
||||||
|
target_include_directories(ubl-settings-diskquota PUBLIC
|
||||||
|
"${PROJECT_BINARY_DIR}"
|
||||||
|
${WEBKIT_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
install(TARGETS ubl-settings-diskquota DESTINATION bin)
|
@ -0,0 +1,46 @@
|
|||||||
|
#include "controler.h"
|
||||||
|
Back_Back::Back_Back() {}
|
||||||
|
void Back_Back::set_mode(string flag_mode) {
|
||||||
|
this->flag_mode = flag_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Back_Back::set_partition(string partition) {
|
||||||
|
this->partition = partition;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Back_Back::set_sys_flag(string sys_flag) {
|
||||||
|
this->sys_flag = sys_flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Back_Back::wrapper_off_quotas(string quotas_type) {
|
||||||
|
bool flag_status = false;
|
||||||
|
quotas_type = this->handler_quotas_type(quotas_type);
|
||||||
|
if (flag_mode == "system") {
|
||||||
|
string cmd_hw = "";
|
||||||
|
string cmd_sw = "";
|
||||||
|
flag_status = obj_quotas_sys.off_quota(partition, cmd_hw, cmd_sw);
|
||||||
|
}
|
||||||
|
else if (flag_mode == "ubconfig") {
|
||||||
|
flag_status = obj_quotas_ubconfig.off_quota(partition, quotas_type, "disable");
|
||||||
|
}
|
||||||
|
return flag_status;
|
||||||
|
}
|
||||||
|
bool Back_Back::wrapper_on_quotas(string quotas_type) {
|
||||||
|
bool flag_status = false;
|
||||||
|
quotas_type = this->handler_quotas_type(quotas_type);
|
||||||
|
if (flag_mode == "system") {
|
||||||
|
string cmd_hw = "";
|
||||||
|
string cmd_sw = "";
|
||||||
|
flag_status = obj_quotas_sys.on_quota_hw(partition, cmd_hw, cmd_sw);
|
||||||
|
flag_status = obj_quotas_sys.wrapper_on_quotas(partition, quotas_type);
|
||||||
|
}
|
||||||
|
else if (flag_mode == "ubconfig") {
|
||||||
|
flag_status = obj_quotas_sys.wrapper_on_quotas(partition, quotas_type, "enable");
|
||||||
|
flag_status = obj_quotas_ubconfig.format_cmd_quotas();
|
||||||
|
}
|
||||||
|
return flag_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
string Back_Back::handler_quotas_type(string quotas_type) {
|
||||||
|
return quotas_type;
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
#include "system_quotas.h"
|
||||||
|
#include "ubconfig_quotas.h"
|
||||||
|
|
||||||
|
class Back_Back{
|
||||||
|
public:
|
||||||
|
string flag_mode;
|
||||||
|
string partition;
|
||||||
|
string sys_flag;
|
||||||
|
Quotas_sys::Quotas_sys obj_quotas_sys = Quotas_sys::Quotas_sys();
|
||||||
|
Quotas_ubconfig::Quotas_ubconfig obj_quotas_ubconfig = Quotas_ubconfig::Quotas_ubconfig();
|
||||||
|
public:
|
||||||
|
Back_Back();
|
||||||
|
void set_mode(string flag_mode);
|
||||||
|
void set_partition(string partition);
|
||||||
|
void set_sys_flag(string sys_flag);
|
||||||
|
bool wrapper_off_quotas(string quotas_type);
|
||||||
|
string handler_quotas_type(string quotas_type);
|
||||||
|
bool wrapper_on_quotas(string quotas_type);
|
||||||
|
};
|
@ -0,0 +1,39 @@
|
|||||||
|
#include "load.h"
|
||||||
|
|
||||||
|
namespace Lib_Load{
|
||||||
|
void Load::set_sections(string sections){
|
||||||
|
this->sections = sections;
|
||||||
|
}
|
||||||
|
void Load::set_count_error(int count_error) {
|
||||||
|
process.set_count_error(count_error);
|
||||||
|
}
|
||||||
|
string Load::get_cmd_error() {
|
||||||
|
return process.get_cmd_error();
|
||||||
|
}
|
||||||
|
map<string, string>& Load::get_load_data(std::map <string, string> &map_temp, string str_flag_load) {
|
||||||
|
string cmd = "";
|
||||||
|
string response = "";
|
||||||
|
string key = "";
|
||||||
|
string value = "";
|
||||||
|
cmd = "ubconfig --default --source " + str_flag_load + " get " + this->sections;
|
||||||
|
response = process.call_all_sections(cmd);
|
||||||
|
vector<string> vec_str_key_value = Utils::split(response, '\n');
|
||||||
|
for (const string ¶m: vec_str_key_value) {
|
||||||
|
if ((param.find("(null)") == std::string::npos) && (param.length() != 0 )) {
|
||||||
|
if (param.find("=") != std::string::npos) {
|
||||||
|
size_t index = param.find("=");
|
||||||
|
key = param.substr(0, index);
|
||||||
|
value = param.substr(index + 1, param.length());
|
||||||
|
Utils::str_replace_all(value, " \"","");
|
||||||
|
Utils::str_replace_all(value, "\"","");
|
||||||
|
map_temp[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map_temp;
|
||||||
|
}
|
||||||
|
int Load::get_count_error() {
|
||||||
|
return process.get_count_error();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef LOAD_H
|
||||||
|
#define LOAD_H
|
||||||
|
|
||||||
|
#include "my_process.h"
|
||||||
|
namespace Lib_Load{
|
||||||
|
class Load {
|
||||||
|
|
||||||
|
private:
|
||||||
|
string sections;
|
||||||
|
My_Process::My_Process_call process = My_Process::My_Process_call();
|
||||||
|
public:
|
||||||
|
void set_sections(string sections);
|
||||||
|
int get_count_error();
|
||||||
|
void set_count_error(int count_error);
|
||||||
|
string get_cmd_error();
|
||||||
|
map<string, string>& get_load_data(std::map <string, string> &map_temp, string str_flag_load);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,93 @@
|
|||||||
|
#include "my_plug.h"
|
||||||
|
|
||||||
|
void pars_flag(int index_start, int argc, char* argv[]);
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
string str_argv= "";
|
||||||
|
string str_cmd_argv = "";
|
||||||
|
for (int i=1; i<argc; i++){
|
||||||
|
str_cmd_argv+= to_string(*argv[i]) + " ";
|
||||||
|
}
|
||||||
|
if (argc > 1){
|
||||||
|
str_argv = argv[1];
|
||||||
|
}
|
||||||
|
bindtextdomain(app_name, "/usr/share/locale/");
|
||||||
|
bind_textdomain_codeset(app_name, "UTF-8");
|
||||||
|
textdomain(app_name);
|
||||||
|
if (str_argv.find("--socket-id") != std::string::npos) {
|
||||||
|
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug");
|
||||||
|
auto builder = Gtk::Builder::create_from_file(path_glade);
|
||||||
|
Glib::init();
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
Glib::OptionContext context;
|
||||||
|
|
||||||
|
CmdArgParser parser{
|
||||||
|
"Socket ID",
|
||||||
|
"Command line argument for socket ID communication.",
|
||||||
|
"No help available, sorry"
|
||||||
|
};
|
||||||
|
|
||||||
|
context.set_main_group(parser);
|
||||||
|
context.parse(argc, argv);
|
||||||
|
|
||||||
|
::Window socketID = parser.GetSocketID();
|
||||||
|
|
||||||
|
// Handle plug:
|
||||||
|
SettingsPlug plug{socketID, builder};
|
||||||
|
plug.show();
|
||||||
|
|
||||||
|
app->run(plug);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (str_argv.find("-") != std::string::npos || argc == 1) {
|
||||||
|
int len_argv = 1;
|
||||||
|
auto app = Gtk::Application::create(len_argv, argv, "org.gtkmm.example.plug");
|
||||||
|
auto builder = Gtk::Builder::create_from_file(path_glade);
|
||||||
|
pars_flag(1, argc, argv);
|
||||||
|
MainWindow* wnd = nullptr;
|
||||||
|
builder->get_widget_derived("MainWindow", wnd);
|
||||||
|
auto r = app->run(*wnd);
|
||||||
|
delete wnd;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void pars_flag(int index_start, int argc, char* argv[]) {
|
||||||
|
string str_argv = "";
|
||||||
|
for (int i = index_start; i<argc; i++){
|
||||||
|
str_argv = argv[i];
|
||||||
|
if (str_argv == "--help" || str_argv == "-h"){
|
||||||
|
help();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
else if (str_argv == "--version" || str_argv == "-v"){
|
||||||
|
string version = string(str_version) + version_application + "\n";
|
||||||
|
cout << version.c_str();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
else if (str_argv == "--lock-help") {
|
||||||
|
flag_lock_help = true;
|
||||||
|
}
|
||||||
|
else if (str_argv == "--lock-save") {
|
||||||
|
flag_save = true;
|
||||||
|
flag_save_local = true;
|
||||||
|
flag_save_global = true;
|
||||||
|
}
|
||||||
|
else if (str_argv == "--lock-save-local"){
|
||||||
|
flag_save_local = true;
|
||||||
|
}
|
||||||
|
else if (str_argv == "--lock-save-global"){
|
||||||
|
flag_save_global = true;
|
||||||
|
}
|
||||||
|
else if (str_argv == "--lock-load-global"){
|
||||||
|
flag_load_global = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (index_start == 1){
|
||||||
|
g_print(no_recognized);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
#include "my_device.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Devices {
|
||||||
|
|
||||||
|
map_str_str Parted::get_parted() {
|
||||||
|
string cmd = "lsblk --fs --raw --output PATH,FSTYPE --exclude 7,11,253";
|
||||||
|
string response = obj_process_call.call_all_sections(cmd);
|
||||||
|
vector<string> vec_parted = Utils::split(response, '\n');
|
||||||
|
map_str_str dict_parted;
|
||||||
|
string key = "";
|
||||||
|
string value = "";
|
||||||
|
if (vec_parted.size()>1) {
|
||||||
|
vec_parted.erase(vec_parted.begin());
|
||||||
|
}
|
||||||
|
for (const string& str_parted : vec_parted) {
|
||||||
|
key = str_parted.substr(0, str_parted.find(" "));
|
||||||
|
if (str_parted.find(" ") != string::npos) {
|
||||||
|
value = str_parted.substr(str_parted.find(" ") + 1, str_parted.length());
|
||||||
|
if (value.length()>0) {
|
||||||
|
dict_parted[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dict_parted;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef MY_DEVICE_H
|
||||||
|
#define MY_DEVICE_H
|
||||||
|
|
||||||
|
#include "project_lib.h"
|
||||||
|
#include "my_process.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "my_type.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Devices {
|
||||||
|
class Parted{
|
||||||
|
protected:
|
||||||
|
My_Process::My_Process_call obj_process_call = My_Process::My_Process_call();
|
||||||
|
public:
|
||||||
|
map_str_str get_parted();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
#ifndef MY_PLUG_H
|
||||||
|
#define MY_PLUG_H
|
||||||
|
|
||||||
|
#include "my_plug.h"
|
||||||
|
|
||||||
|
|
||||||
|
CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help)
|
||||||
|
: Glib::OptionGroup{p_name, p_description, p_help} {
|
||||||
|
Glib::OptionEntry socketIDArg;
|
||||||
|
socketIDArg.set_long_name("socket-id");
|
||||||
|
socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN);
|
||||||
|
socketIDArg.set_description("Settings manager socket");
|
||||||
|
Glib::OptionEntry socketExtId;
|
||||||
|
socketExtId.set_long_name("socket-ext-id");
|
||||||
|
socketExtId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN);
|
||||||
|
socketExtId.set_description("Settings manager secondary socket");
|
||||||
|
Glib::OptionEntry socketTrdId;
|
||||||
|
socketTrdId.set_long_name("socket-trd-id");
|
||||||
|
socketTrdId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN);
|
||||||
|
socketTrdId.set_description("Settings manager secondary socket");
|
||||||
|
add_entry(socketIDArg, m_socketID);
|
||||||
|
add_entry(socketExtId, socket_ext_id_I);
|
||||||
|
add_entry(socketTrdId, socket_trd_id_I);
|
||||||
|
}
|
||||||
|
::Window CmdArgParser::GetSocketID() const{
|
||||||
|
return m_socketID;
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr<Gtk::Builder> builder)
|
||||||
|
:Gtk::Plug{p_socketID} {
|
||||||
|
MainWindow* wnd = nullptr;
|
||||||
|
builder->get_widget_derived("window", wnd);
|
||||||
|
builder->get_widget("plugBox", plugBox);
|
||||||
|
plugBox->get_parent()->remove(*plugBox);
|
||||||
|
add(*plugBox);
|
||||||
|
show_all_children();
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,20 @@
|
|||||||
|
#include "project_lib.h"
|
||||||
|
#include "ubl-settings-diskquota.h"
|
||||||
|
|
||||||
|
class CmdArgParser : public Glib::OptionGroup {
|
||||||
|
public:
|
||||||
|
CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help);
|
||||||
|
::Window GetSocketID() const;
|
||||||
|
private:
|
||||||
|
int m_socketID = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
class SettingsPlug : public Gtk::Plug{
|
||||||
|
public:
|
||||||
|
Gtk::Window *window;
|
||||||
|
SettingsPlug(::Window p_socketID, Glib::RefPtr<Gtk::Builder> builder);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Gtk::Widget *plugBox;
|
||||||
|
Gtk::Widget *parent;
|
||||||
|
};
|
@ -0,0 +1,84 @@
|
|||||||
|
#include "my_process.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
namespace My_Process {
|
||||||
|
#define debug false
|
||||||
|
struct Utils::Result<string> My_Process_call::call(string cmd) {
|
||||||
|
this->i_error_old = this->i_error;
|
||||||
|
struct Utils::Result<string> obj_result;
|
||||||
|
string response = Utils::call(cmd);
|
||||||
|
obj_result.response = response;
|
||||||
|
if ((response.find("(null)") == std::string::npos) && (response.length() != 0 )) {
|
||||||
|
if (response.find("=") != std::string::npos) {
|
||||||
|
if (response.find("\n") != std::string::npos) {
|
||||||
|
response = response.substr(response.find("=")+1,response.length());
|
||||||
|
response = response.substr(0,response.find("\n"));
|
||||||
|
obj_result.response = response;
|
||||||
|
obj_result.error = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj_result.error = 1;
|
||||||
|
this->i_error += 1;
|
||||||
|
this->log_mess_error(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj_result.error = 2;
|
||||||
|
this->i_error += 1;
|
||||||
|
str_cmd_error = cmd;
|
||||||
|
this->log_mess_error(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj_result.error = 3;
|
||||||
|
this->i_error += 1;
|
||||||
|
str_cmd_error = cmd;
|
||||||
|
this->log_mess_error(cmd);
|
||||||
|
}
|
||||||
|
return obj_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int My_Process::get_count_error() {
|
||||||
|
return this->i_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
void My_Process::set_back_count_error() {
|
||||||
|
this->i_error = this->i_error_old;
|
||||||
|
}
|
||||||
|
|
||||||
|
void My_Process_system::call(string cmd, string thread_str = "") {
|
||||||
|
string cmd_new = cmd + " " + thread_str;
|
||||||
|
int response_cmd = system(cmd_new.c_str());
|
||||||
|
if (response_cmd != 0) {
|
||||||
|
this->i_error += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void My_Process::set_count_error(int count_error) {
|
||||||
|
this->i_error = count_error;
|
||||||
|
this->str_cmd_error = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void My_Process::log_mess_error(string) {
|
||||||
|
}
|
||||||
|
|
||||||
|
string My_Process::get_cmd_error() {
|
||||||
|
return this->str_cmd_error;
|
||||||
|
}
|
||||||
|
string My_Process_call::call_all_sections(string cmd) {
|
||||||
|
char buffer[PATH_MAX] = {0};
|
||||||
|
std::string result = "";
|
||||||
|
FILE* pipe = popen(cmd.c_str(), "r");
|
||||||
|
if (!pipe) throw std::runtime_error("popen() failed!");
|
||||||
|
try {
|
||||||
|
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
|
||||||
|
result += buffer;
|
||||||
|
}
|
||||||
|
} catch (...) {
|
||||||
|
pclose(pipe);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
pclose(pipe);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
#ifndef MY_PROCESS_H
|
||||||
|
#define MY_PROCESS_H
|
||||||
|
|
||||||
|
#include "util.h"
|
||||||
|
namespace My_Process {
|
||||||
|
class My_Process {
|
||||||
|
public:
|
||||||
|
int i_error = 0;
|
||||||
|
int i_error_old = 0;
|
||||||
|
string str_cmd_error = "";
|
||||||
|
int get_count_error();
|
||||||
|
void set_count_error(int count_error);
|
||||||
|
void set_back_count_error();
|
||||||
|
void log_mess_error(string);
|
||||||
|
string get_cmd_error();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class My_Process_call: public My_Process {
|
||||||
|
public:
|
||||||
|
struct Utils::Result<string> call(string cmd);
|
||||||
|
string call_all_sections(string cmd);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class My_Process_system: public My_Process {
|
||||||
|
public:
|
||||||
|
void call(string cmd, string thread_str);
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,79 @@
|
|||||||
|
#ifndef MY_TYPE_H
|
||||||
|
#define MY_TYPE_H
|
||||||
|
|
||||||
|
#include "project_lib.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
typedef unsigned long max_num_T;
|
||||||
|
|
||||||
|
struct users_grups{
|
||||||
|
string name;
|
||||||
|
bool state;
|
||||||
|
max_num_T size_data;
|
||||||
|
max_num_T soft_limit_size;
|
||||||
|
max_num_T severe_restriction_size;
|
||||||
|
max_num_T postponement_size_brat;
|
||||||
|
max_num_T hard_limit_activation_time_size;
|
||||||
|
max_num_T file;
|
||||||
|
max_num_T soft_file_limitation;
|
||||||
|
max_num_T hard_file_restriction;
|
||||||
|
max_num_T postponement_hard_file_restriction;
|
||||||
|
max_num_T hard_limit_activation_time;
|
||||||
|
};
|
||||||
|
struct Mount {
|
||||||
|
std::string device;
|
||||||
|
std::string destination;
|
||||||
|
std::string fstype;
|
||||||
|
std::string options;
|
||||||
|
std::string dump;
|
||||||
|
std::string pass;
|
||||||
|
};
|
||||||
|
struct partition_cmd {
|
||||||
|
string device;
|
||||||
|
string cmd;
|
||||||
|
};
|
||||||
|
struct struct_quotas {
|
||||||
|
string device;
|
||||||
|
string cmd;
|
||||||
|
string type_quotas;
|
||||||
|
string name;
|
||||||
|
};
|
||||||
|
struct status_quotas {
|
||||||
|
bool user;
|
||||||
|
bool group;
|
||||||
|
bool project;
|
||||||
|
bool status;
|
||||||
|
};
|
||||||
|
struct data_all_quotas {
|
||||||
|
string username;
|
||||||
|
string status;
|
||||||
|
string block_used;
|
||||||
|
string block_soft;
|
||||||
|
string block_hard;
|
||||||
|
string block_grace;
|
||||||
|
string file_used;
|
||||||
|
string file_soft;
|
||||||
|
string file_hard;
|
||||||
|
string file_grace;
|
||||||
|
bool is_validate;
|
||||||
|
};
|
||||||
|
struct tv_g_u_p {
|
||||||
|
string name;
|
||||||
|
string quotas;
|
||||||
|
string size;
|
||||||
|
string soft_limit_size;
|
||||||
|
string hard_limit_size;
|
||||||
|
string deferring_size;
|
||||||
|
string files;
|
||||||
|
string soft_limit_files;
|
||||||
|
string hard_limit_delay;
|
||||||
|
string deferring_files;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct users_grups USER_GRUPS;
|
||||||
|
typedef map <string, string> map_str_str;
|
||||||
|
typedef map <string, string>* map_s_s_ptr;
|
||||||
|
typedef std::map<std::string, Mount> map_str_device;
|
||||||
|
#endif
|
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef PROJECT_LIB_H
|
||||||
|
#define PROJECT_LIB_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
#include <array>
|
||||||
|
#include <vector>
|
||||||
|
#include <linux/limits.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <cstddef>
|
||||||
|
#include <gtkmm.h>
|
||||||
|
#include <gtkmm/stock.h>
|
||||||
|
#include <gtkmm/window.h>
|
||||||
|
#include <gtkmm/plug.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
#include <glibmm/i18n.h>
|
||||||
|
#include <map>
|
||||||
|
#include "ubl-util-standard.c"
|
||||||
|
#endif
|
@ -0,0 +1,199 @@
|
|||||||
|
#include "save.h"
|
||||||
|
|
||||||
|
namespace Lib_save {
|
||||||
|
|
||||||
|
vector<string> Save::get_error() {
|
||||||
|
return this->vec_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Save::get_state_save() {
|
||||||
|
return this->flag_no_save;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Save::set_data_global(std::map <string, string> &map_global) {
|
||||||
|
this->map_global = &map_global;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Save::set_data_local(std::map <string, string> &map_local) {
|
||||||
|
this->map_local = &map_local;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Save::set_data_gui(std::map <string, string> &map_gui) {
|
||||||
|
this->map_gui = &map_gui;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Save::check_save(string flag_save, string key_name) {
|
||||||
|
std::map <string, string>:: iterator iter_map_data;
|
||||||
|
std::map <string, string>:: iterator iter_map_data_old;
|
||||||
|
std::map <string, string> *map_data_old;
|
||||||
|
if (flag_save == "system") {
|
||||||
|
map_data_old = map_local;
|
||||||
|
}
|
||||||
|
else if (flag_save == "global") {
|
||||||
|
map_data_old = map_global;
|
||||||
|
}
|
||||||
|
iter_map_data = (*map_gui).find(key_name);
|
||||||
|
iter_map_data_old = (*map_data_old).find(key_name);
|
||||||
|
if ((*map_local).find(key_name) != (*map_local).end() && (*map_global).find(key_name) != (*map_global).end()) {
|
||||||
|
if ((*map_local)[key_name] != (*map_global)[key_name]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (iter_map_data->second != iter_map_data_old->second) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (iter_map_data->second == iter_map_data_old->second) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Save::get_count_error() {
|
||||||
|
return process.get_count_error();
|
||||||
|
}
|
||||||
|
|
||||||
|
string Save::get_cmd_error() {
|
||||||
|
return process.get_cmd_error();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Save::set_count_error(int count_error) {
|
||||||
|
process.set_count_error(count_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Save::set_vec_params(vector<string>& vec_param_names) {
|
||||||
|
this->vec_param_names = &vec_param_names;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Save::save(string sections, string str_flag_save) {
|
||||||
|
string key = "";
|
||||||
|
string value = "";
|
||||||
|
string cmd = "";
|
||||||
|
string str_error = "";
|
||||||
|
this->flag_no_save = true;
|
||||||
|
for (const auto &key: *vec_param_names) {
|
||||||
|
if (map_gui->find(key) != map_gui->end()) {
|
||||||
|
value = (*map_gui)[key];
|
||||||
|
if (this->check_save(str_flag_save, key)) {
|
||||||
|
if (value.length() != 0) {
|
||||||
|
cmd = "ubconfig --target " + str_flag_save + " set " + sections + " " +
|
||||||
|
key + "=\"" + value + "\"";
|
||||||
|
}
|
||||||
|
else if (value.length() == 0) {
|
||||||
|
cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cmd = "";
|
||||||
|
}
|
||||||
|
if (cmd.length() != 0) {
|
||||||
|
process.call(cmd, "");
|
||||||
|
this->flag_no_save = false;
|
||||||
|
str_error = process.get_cmd_error();
|
||||||
|
if (str_error.length() != 0) {
|
||||||
|
this->vec_errors.push_back(str_error);
|
||||||
|
str_error = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Save::save_all(string sections, string str_flag_save) {
|
||||||
|
string key = "";
|
||||||
|
string value = "";
|
||||||
|
string cmd_all = "ubconfig --target " + str_flag_save + " set " + sections;
|
||||||
|
size_t len_start_cmd_all = cmd_all.length();
|
||||||
|
string str_error = "";
|
||||||
|
this->flag_no_save = true;
|
||||||
|
string cmd = "";
|
||||||
|
string cmd_remove = "";
|
||||||
|
for (const auto &key: *vec_param_names) {
|
||||||
|
if (map_gui->find(key) != map_gui->end()) {
|
||||||
|
value = (*map_gui)[key];
|
||||||
|
if (this->check_save(str_flag_save, key)) {
|
||||||
|
if (value.length() != 0) {
|
||||||
|
cmd_all += " " + key + "=\"" + value + "\"";
|
||||||
|
}
|
||||||
|
else if (value.length() == 0) {
|
||||||
|
cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cmd = "";
|
||||||
|
}
|
||||||
|
if (cmd.length() != 0) {
|
||||||
|
process.call(cmd, "");
|
||||||
|
this->flag_no_save = false;
|
||||||
|
str_error = process.get_cmd_error();
|
||||||
|
if (str_error.length() != 0) {
|
||||||
|
this->vec_errors.push_back(str_error);
|
||||||
|
str_error = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (len_start_cmd_all != cmd_all.length()) {
|
||||||
|
process.call(cmd, "");
|
||||||
|
this->flag_no_save = false;
|
||||||
|
str_error = process.get_cmd_error();
|
||||||
|
if (str_error.length() != 0) {
|
||||||
|
this->vec_errors.push_back(str_error);
|
||||||
|
str_error = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Save::save_all_1(string sections, string str_flag_save) {
|
||||||
|
string key = "";
|
||||||
|
string value = "";
|
||||||
|
string cmd_all = "ubconfig --target " + str_flag_save + " set " + sections;
|
||||||
|
size_t len_start_cmd_all = cmd_all.length();
|
||||||
|
string str_error = "";
|
||||||
|
this->flag_no_save = true;
|
||||||
|
string cmd = "";
|
||||||
|
string cmd_remove = "";
|
||||||
|
for (const auto &iter: (*map_gui)) {
|
||||||
|
value = iter.second;
|
||||||
|
key = iter.first;
|
||||||
|
if (this->check_save(str_flag_save, key)) {
|
||||||
|
if (value.length() != 0) {
|
||||||
|
cmd_all += " " + key + "=\"" + value + "\"";
|
||||||
|
}
|
||||||
|
else if (value.length() == 0) {
|
||||||
|
cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cmd = "";
|
||||||
|
}
|
||||||
|
if (cmd.length() != 0) {
|
||||||
|
process.call(cmd, "");
|
||||||
|
this->flag_no_save = false;
|
||||||
|
str_error = process.get_cmd_error();
|
||||||
|
if (str_error.length() != 0) {
|
||||||
|
this->vec_errors.push_back(str_error);
|
||||||
|
str_error = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (len_start_cmd_all != cmd_all.length()) {
|
||||||
|
process.call(cmd, "");
|
||||||
|
this->flag_no_save = false;
|
||||||
|
str_error = process.get_cmd_error();
|
||||||
|
if (str_error.length() != 0) {
|
||||||
|
this->vec_errors.push_back(str_error);
|
||||||
|
str_error = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef SAVE_H
|
||||||
|
#define SAVE_H
|
||||||
|
|
||||||
|
#include "my_process.h"
|
||||||
|
#include "project_lib.h"
|
||||||
|
namespace Lib_save {
|
||||||
|
|
||||||
|
class Save {
|
||||||
|
private:
|
||||||
|
std::map <string, string> *map_global;
|
||||||
|
std::map <string, string> *map_local;
|
||||||
|
std::map <string, string> *map_gui;
|
||||||
|
vector<string> vec_errors;
|
||||||
|
vector<string>* vec_param_names;
|
||||||
|
My_Process::My_Process_system process = My_Process::My_Process_system();
|
||||||
|
bool flag_no_save;
|
||||||
|
public:
|
||||||
|
void set_data_global(std::map <string, string> &map_global);
|
||||||
|
void set_data_local(std::map <string, string> &map_local);
|
||||||
|
void set_data_gui(std::map <string, string> &map_gui);
|
||||||
|
bool check_save(string flag_save, string key_name);
|
||||||
|
bool get_state_save();
|
||||||
|
int get_count_error();
|
||||||
|
string get_cmd_error();
|
||||||
|
void save_all(string sections, string str_flag_save);
|
||||||
|
void save_all_1(string sections, string str_flag_save);
|
||||||
|
void set_count_error(int count_error);
|
||||||
|
void set_vec_params(vector<string>& vec_param_names);
|
||||||
|
void save(string sections, string str_flag_save) ;
|
||||||
|
vector<string> get_error();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef SYSTEM_CMD_QUOTAS
|
||||||
|
#define SYSTEM_CMD_QUOTAS
|
||||||
|
#include "project_lib.h"
|
||||||
|
#include "my_type.h"
|
||||||
|
#include "my_process.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
namespace Quotas_sys {
|
||||||
|
class Quotas_sys {
|
||||||
|
public:
|
||||||
|
map_str_str map_hw_or_sw;
|
||||||
|
map_str_str* map_device;
|
||||||
|
map_str_str* map_gui_cfg;
|
||||||
|
map<string, bool> disk_mount;
|
||||||
|
My_Process::My_Process_system obj_process_system = My_Process::My_Process_system();
|
||||||
|
My_Process::My_Process_call obj_process_call = My_Process::My_Process_call();
|
||||||
|
public:
|
||||||
|
Quotas_sys();
|
||||||
|
void set_map_gui(map_str_str &map_gui);
|
||||||
|
void check_partition_mount();
|
||||||
|
void format_cmd_quotas_system(struct struct_quotas& _struct_quota);
|
||||||
|
bool off_quota(string partition, string quota_hw, string quota_sw);
|
||||||
|
bool check_on_quotas_system(string cmd);
|
||||||
|
struct status_quotas check_on_quotas_system_2_hw(string params);
|
||||||
|
bool on_quota_hw(string partition, string cmd_hw, string cmd_sw);
|
||||||
|
bool on_quota_sw(string partition, int mode);
|
||||||
|
vector<data_all_quotas> pars_data(string cmd);
|
||||||
|
void set_map_device(map_str_str &map_device);
|
||||||
|
string wrapper_hw_sw(string partition);
|
||||||
|
bool wrapper_on_quotas(string partition, string flag_mode);
|
||||||
|
protected:
|
||||||
|
struct data_all_quotas part_quotas_line(string line);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,27 @@
|
|||||||
|
#include "ubconfig_quotas.h"
|
||||||
|
|
||||||
|
namespace Quotas_ubconfig {
|
||||||
|
|
||||||
|
void Quotas_ubconfig::format_cmd_quotas(struct struct_quotas& _struct_quota) {
|
||||||
|
string key = "DISK_QUOTA[";
|
||||||
|
key += ":" + _struct_quota.device + "]";
|
||||||
|
string value = _struct_quota.name + ":" + _struct_quota.cmd;
|
||||||
|
(*map_gui_cfg)[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Quotas_ubconfig::off_quota(string partition, string quota_type, string state) {
|
||||||
|
string key = "DISK_QUOTA[" + quota_type + ":" + partition + "]";
|
||||||
|
string value = "disable";
|
||||||
|
(*map_gui_cfg)[key] = state;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void Quotas_ubconfig::set_map_gui(map_str_str &map_gui) {
|
||||||
|
map_gui_cfg = &map_gui;
|
||||||
|
}
|
||||||
|
Quotas_ubconfig::Quotas_ubconfig() {
|
||||||
|
map_hw_or_sw["ext2"] = "hw";
|
||||||
|
map_hw_or_sw["ext3"] = "hw";
|
||||||
|
map_hw_or_sw["nfs"] = "sw";
|
||||||
|
map_hw_or_sw["NFS"] = "sw";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef UBCONFIG_QUOTAS
|
||||||
|
#define UBCONFIG_QUOTAS
|
||||||
|
|
||||||
|
#include "project_lib.h"
|
||||||
|
#include "my_type.h"
|
||||||
|
#include "my_process.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
namespace Quotas_ubconfig {
|
||||||
|
|
||||||
|
|
||||||
|
class Quotas_ubconfig{
|
||||||
|
public:
|
||||||
|
map_str_str map_hw_or_sw;
|
||||||
|
|
||||||
|
map_str_str* map_gui_cfg;
|
||||||
|
My_Process::My_Process_system obj_process_system = My_Process::My_Process_system();
|
||||||
|
My_Process::My_Process_call obj_process_call = My_Process::My_Process_call();
|
||||||
|
Quotas_ubconfig();
|
||||||
|
bool off_quota(string partition, string quota_type, string state);
|
||||||
|
void format_cmd_quotas(struct struct_quotas& _struct_quota);
|
||||||
|
void set_map_gui(map_str_str &map_gui);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,915 @@
|
|||||||
|
#include "ubl-settings-diskquota.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int socket_ext_id_I = 0;
|
||||||
|
int socket_trd_id_I = 0;
|
||||||
|
bool flag_save = false;
|
||||||
|
bool flag_save_local = false;
|
||||||
|
bool flag_save_global = false;
|
||||||
|
bool flag_load_global = false;
|
||||||
|
bool flag_lock_help = false;
|
||||||
|
string version_application = "1.0";
|
||||||
|
|
||||||
|
MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr<Gtk::Builder> const& builder)
|
||||||
|
: Gtk::ApplicationWindow(obj), builder{builder} {
|
||||||
|
this->builder = builder;
|
||||||
|
this->settings();
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::MainWindow(Glib::RefPtr<Gtk::Builder> const& builder) {
|
||||||
|
this->builder = builder;
|
||||||
|
this->settings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::settings() {
|
||||||
|
this->get_builder();
|
||||||
|
this->lacalization();
|
||||||
|
this->add_CSS();
|
||||||
|
this->flag_block_gui();
|
||||||
|
btnBoxAboutDialog->set_visible(false);
|
||||||
|
map_device = obj_device.get_parted();
|
||||||
|
this->filling_device_combo_box_template(groupsDeviceCombo, map_device);
|
||||||
|
this->filling_device_combo_box_template(usersDeviceCombo, map_device);
|
||||||
|
this->filling_device_combo_box_template(quotegroupDeviceCombo, map_device);
|
||||||
|
this->init_tree_view();
|
||||||
|
this->init_spin_all();
|
||||||
|
check_limit(quotegroupSizeSoftLimitCheck
|
||||||
|
,quotegroupSizeSoftLimitSpin
|
||||||
|
,quotegroupSizeSoftLimitCombo);
|
||||||
|
check_limit(quotegroupSizeHardLimitCheck
|
||||||
|
,quotegroupSizeHardLimitSpin
|
||||||
|
,quotegroupSizeHardLimitCombo);
|
||||||
|
check_limit(quotegroupFilesSoftLimitCheck
|
||||||
|
,quotegroupFilesSoftLimitSpin
|
||||||
|
,quotegroupFilesSoftLimitlabel);
|
||||||
|
check_limit(quotegroupFilesHardLimitCheck
|
||||||
|
,quotegroupFilesHardLimitSpin
|
||||||
|
,quotegroupFilesHarLimitLabel);
|
||||||
|
obj_quotas_sys.set_map_gui(map_gui_cfg);
|
||||||
|
obj_quotas_ubconfig.set_map_gui(map_gui_cfg);
|
||||||
|
#ifdef WEBKIT_FOUND
|
||||||
|
one = WEBKIT_WEB_VIEW( webkit_web_view_new() );
|
||||||
|
three = Glib::wrap(GTK_WIDGET(one));
|
||||||
|
wndWeb->add(*three);
|
||||||
|
#endif
|
||||||
|
if (geteuid() == 0) {
|
||||||
|
this->load_system_cfg();
|
||||||
|
this->load_global_cfg();
|
||||||
|
this->event();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
boxFuncs->set_sensitive(false);
|
||||||
|
btnSave->set_sensitive(false);
|
||||||
|
btnLoad->set_sensitive(false);
|
||||||
|
imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU);
|
||||||
|
info_status_app(info_box_error_css);
|
||||||
|
lblWarning->set_text(program_as_root);
|
||||||
|
}
|
||||||
|
Gtk::Widget *boxWidget;
|
||||||
|
builder->get_widget("boxColor", boxWidget);
|
||||||
|
HeadOverlay->add_overlay(*boxWidget);
|
||||||
|
ubl_make_plugs(boxSave, boxButton, socket_ext_id_I, socket_trd_id_I);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::init_spin_all() {
|
||||||
|
generalGroupsSizeWeeksSpi->set_range(0, 52);
|
||||||
|
generalGroupsSizeWeeksSpi->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsSizeWeeksSpi->set_value(0);
|
||||||
|
|
||||||
|
generalGroupsFileWeeksSpin->set_range(0, 52);
|
||||||
|
generalGroupsFileWeeksSpin->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsFileWeeksSpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersSizWeeksSpin->set_range(0, 52);
|
||||||
|
generalUsersSizWeeksSpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersSizWeeksSpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersFileWeeksSpin->set_range(0, 52);
|
||||||
|
generalUsersFileWeeksSpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersFileWeeksSpin->set_value(0);
|
||||||
|
|
||||||
|
generalGroupsSizeDaySpin->set_range(0, 31);
|
||||||
|
generalGroupsSizeDaySpin->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsSizeDaySpin->set_value(0);
|
||||||
|
|
||||||
|
generalGroupsFilesDaySpin->set_range(0, 31);
|
||||||
|
generalGroupsFilesDaySpin->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsFilesDaySpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersSizeDaySpin->set_range(0, 31);
|
||||||
|
generalUsersSizeDaySpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersSizeDaySpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersFilesDaySpin->set_range(0, 31);
|
||||||
|
generalUsersFilesDaySpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersFilesDaySpin->set_value(0);
|
||||||
|
|
||||||
|
generalGroupsSizeHourSpin->set_range(0, 23);
|
||||||
|
generalGroupsSizeHourSpin->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsSizeHourSpin->set_value(0);
|
||||||
|
|
||||||
|
generalGroupsFilesHourSpin->set_range(0, 23);
|
||||||
|
generalGroupsFilesHourSpin->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsFilesHourSpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersSizeHourSpin->set_range(0, 23);
|
||||||
|
generalUsersSizeHourSpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersSizeHourSpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersFilesHoursSpin->set_range(0, 23);
|
||||||
|
generalUsersFilesHoursSpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersFilesHoursSpin->set_value(0);
|
||||||
|
|
||||||
|
generalGroupsSizeMinuteSpin->set_range(0, 59);
|
||||||
|
generalGroupsSizeMinuteSpin->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsSizeMinuteSpin->set_value(0);
|
||||||
|
|
||||||
|
generalGroupsFilesMinuteSpin->set_range(0, 59);
|
||||||
|
generalGroupsFilesMinuteSpin->set_increments(1.0, 1.0);
|
||||||
|
generalGroupsFilesMinuteSpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersSizeMinuteSpin->set_range(0, 59);
|
||||||
|
generalUsersSizeMinuteSpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersSizeMinuteSpin->set_value(0);
|
||||||
|
|
||||||
|
generalUsersFilesMinutesSpin->set_range(0, 59);
|
||||||
|
generalUsersFilesMinutesSpin->set_increments(1.0, 1.0);
|
||||||
|
generalUsersFilesMinutesSpin->set_value(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::init_tree_view() {
|
||||||
|
this->view_add_columns(*usersQuotasTree);
|
||||||
|
this->view_add_columns(*groupsQuotasTree);
|
||||||
|
this->view_add_columns(*ProjectQuotasTree);
|
||||||
|
this->init_tree_view_general();
|
||||||
|
}
|
||||||
|
void MainWindow::init_tree_view_general() {
|
||||||
|
GeneralQuotasTree->append_column_editable(str_status, m_columnsGeneral.status);
|
||||||
|
GeneralQuotasTree->append_column(str_quota, m_columnsGeneral.type_quotas);
|
||||||
|
GeneralQuotasTree->append_column(str_device_project, m_columnsGeneral.device);
|
||||||
|
GeneralQuotasTree->append_column(str_user, m_columnsGeneral.user);
|
||||||
|
GeneralQuotasTree->append_column(str_group, m_columnsGeneral.group);
|
||||||
|
GeneralQuotasTree->append_column(str_projects, m_columnsGeneral.projects);
|
||||||
|
GeneralQuotasTree->append_column(str_tw_soft_limit, m_columnsGeneral.soft_limit_size);
|
||||||
|
GeneralQuotasTree->append_column(str_tw_severe_limitation, m_columnsGeneral.hard_limit_size);
|
||||||
|
GeneralQuotasTree->append_column(str_tw_soft_limit_files, m_columnsGeneral.soft_limit_files);
|
||||||
|
GeneralQuotasTree->append_column(str_tw_severe_limitation_files, m_columnsGeneral.hard_limit_files);
|
||||||
|
GeneralQuotasTree->append_column(str_tw_general_deferring_size, m_columnsGeneral.deferring_size);
|
||||||
|
GeneralQuotasTree->append_column(str_tw_general_deferring_files, m_columnsGeneral.deferring_files);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::view_add_columns(Gtk::TreeView &treeView) {
|
||||||
|
treeView.append_column(str_name, m_columns.name);
|
||||||
|
treeView.append_column_editable(str_quotas, m_columns.quotas);
|
||||||
|
treeView.append_column(str_size, m_columns.size);
|
||||||
|
treeView.append_column(str_tw_soft_limit, m_columns.soft_limit_size);
|
||||||
|
treeView.append_column(str_tw_severe_limitation, m_columns.hard_limit_size);
|
||||||
|
treeView.append_column(str_tw_deferring_size, m_columns.deferring_size);
|
||||||
|
treeView.append_column(str_files, m_columns.files);
|
||||||
|
treeView.append_column(str_tw_soft_limit_files, m_columns.soft_limit_files);
|
||||||
|
treeView.append_column(str_tw_severe_limitation_files, m_columns.hard_limit_delay);
|
||||||
|
treeView.append_column(str_tw_deferring_files, m_columns.deferring_files);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::lacalization() {
|
||||||
|
time_t now = time(0);
|
||||||
|
tm *ltm = localtime(&now);
|
||||||
|
unsigned int year = 1900 + ltm->tm_year;
|
||||||
|
string str_authors = string(copyright) + to_string(year);
|
||||||
|
aboutWindows->set_copyright(str_authors);
|
||||||
|
aboutWindows->set_comments(str_setting_user);
|
||||||
|
aboutWindows->set_website(website);
|
||||||
|
aboutWindows->set_version(_(version_application.c_str()));
|
||||||
|
aboutWindows->set_website_label(project_Home_page);
|
||||||
|
generalTabLabel->set_text(str_general_settings);
|
||||||
|
GroupsTabLabel->set_text(str_groups);
|
||||||
|
headerAboutTopic->set_label(_(app_name));
|
||||||
|
headerTopic->set_label(name_app);
|
||||||
|
UsersTabLabel->set_text(str_users);
|
||||||
|
generalGroupsSizeLabel->set_text(str_excess_size_delay);
|
||||||
|
generalGroupsFilesLabel->set_text(str_excess_files_delay);
|
||||||
|
generalUsersSizeLabel->set_text(str_excess_size_delay);
|
||||||
|
generalUsersFilesLabel->set_text(str_excess_files_delay);
|
||||||
|
generalGroupsSizeWeeksLabel->set_text(str_weeks);
|
||||||
|
generalGroupsFilesWeeksLabel->set_text(str_weeks);
|
||||||
|
generalUsersSizeWeeksLabel->set_text(str_weeks);
|
||||||
|
generalUsersFilesWeeksLabel->set_text(str_weeks);
|
||||||
|
generalGroupsSizeDaysLabel->set_text(str_days);
|
||||||
|
generalGroupsFilesDaysLabel->set_text(str_days);
|
||||||
|
generalUsersSizeDaysLabel->set_text(str_days);
|
||||||
|
generalUsersFilesDaysLabel->set_text(str_days);
|
||||||
|
generalGroupsSizeHoursLabel->set_text(str_hours);
|
||||||
|
generalGroupsFilesHoursLabel->set_text(str_hours);
|
||||||
|
generalUsersSizeHoursLabel->set_text(str_hours);
|
||||||
|
generalUsersFilesHoursLabel->set_text(str_hours);
|
||||||
|
generalGroupsSizeMinutesLabel->set_text(str_minutes);
|
||||||
|
generalGroupsFilesMinutesLabel->set_text(str_minutes);
|
||||||
|
generalUsersSizeMinutesLabel->set_text(str_minutes);
|
||||||
|
generalUsersFilesMinutesLabel->set_text(str_minutes);
|
||||||
|
lblLoad->set_text(str_load_local);
|
||||||
|
lblSave->set_text(str_save_local);
|
||||||
|
groupsDeviceLabel->set_label(str_device);
|
||||||
|
usersDeviceLabel->set_label(str_device);
|
||||||
|
headLabel->set_label(str_lb_head);
|
||||||
|
filtersNameFilterCheckbox->set_label(str_name);
|
||||||
|
filtersQuotasFilterCheckbox->set_label(str_quotas);
|
||||||
|
filtersSizeFilterCheckbox->set_label(str_size);
|
||||||
|
filtersSoftSizeFilterCheckbox->set_label(str_soft_limit_size);
|
||||||
|
filtersHardSizeFilterCheckbox->set_label(str_hard_limit_size);
|
||||||
|
filtersHardSizeDelayFilterCheckbox->set_label(str_deferring_hard_limit_size);
|
||||||
|
filtersHardSizeActivationFilterCheckbox->set_label(str_hard_activation_size);
|
||||||
|
filtersFilesFilterCheckbox->set_label(str_files);
|
||||||
|
filtersSoftFilesFilterCheckbox->set_label(str_soft_restriction_files);
|
||||||
|
filtersHardFilesFilterCheckbox->set_label(str_severe_limitation_files);
|
||||||
|
filtersHardFilesDelayFilterCheckbox->set_label(str_deferring_limit_files);
|
||||||
|
filtersHardFilesActivationFilterCheckbox->set_label(str_hard_limit_time);
|
||||||
|
quotegroupDeviceLabel->set_text(str_device);
|
||||||
|
quotegroupDiskQuotasLabel->set_text(str_disk_quotas_device);
|
||||||
|
quotegroupGroupQuotasLabel->set_text(str_group_quotas_device);
|
||||||
|
quotegroupSizeFrameLabel->set_text(str_size);
|
||||||
|
quotegroupFilesFrameLabel->set_text(str_files);
|
||||||
|
quotegroupSizeCurrentlyLabel->set_text(str_currently_using);
|
||||||
|
quotegroupSizeSoftLimitLabel->set_text(str_soft_limit);
|
||||||
|
quoteSizeHardLimitLabel->set_text(str_hard_limit);
|
||||||
|
quoteFilesHardLimitLabel->set_text(str_hard_limit);
|
||||||
|
quotegroupFilesSoftLimitLabel->set_text(str_soft_limit);
|
||||||
|
quotegroupFilesCurrentlyLabel->set_text(str_currently_using);
|
||||||
|
quoteuserDiskQuotasLabel->set_text(str_disk_quotas_device);
|
||||||
|
quoteuserDeviceLabel->set_text(str_device);
|
||||||
|
quoteuserGroupQuotasLabel->set_text(str_user_quotas_device);
|
||||||
|
quoteuserSizeFrameLabel->set_text(str_size);
|
||||||
|
quoteuserSizeCurrentlyLabel->set_text(str_currently_using);
|
||||||
|
quoteuserSizeSoftLimitLabel->set_text(str_soft_limit);
|
||||||
|
quoteuserSizeHardLimitLabel1->set_text(str_hard_limit);
|
||||||
|
quoteuserFileSystemLabel->set_text(str_file_system);
|
||||||
|
quoteuserFilesFrameLabel->set_text(str_files);
|
||||||
|
quoteuserFilesCurrentlyLabel->set_text(str_currently_using_space);
|
||||||
|
quoteuserFilesSoftLimitLabel->set_text(str_soft_limit);
|
||||||
|
quoteFilesHardLimitLabel1->set_text(str_hard_limit);
|
||||||
|
quoteuserFilesHarLimitLabel->set_text(str_files);
|
||||||
|
quoteuserFilesSoftLimitlabel->set_text(str_files);
|
||||||
|
quotegroupFileSystemLabel->set_text(str_file_system);
|
||||||
|
btnLoadGlob->set_label(load_global);
|
||||||
|
btnLoadLocal->set_label(load_local);
|
||||||
|
btnAbout->set_label(str_about_1);
|
||||||
|
btnSynopsis->set_label(str_help);
|
||||||
|
btnSaveLocalGlob->set_label(save_all);
|
||||||
|
btnSaveGlob->set_label(save_global);
|
||||||
|
btnSaveLocal->set_label(save_local);
|
||||||
|
lblHeadFiltersWindow->set_label(str_filters);
|
||||||
|
ProjectTabLabel->set_label(str_projects);
|
||||||
|
usersProjectLabel->set_text(str_device);
|
||||||
|
lblhelpHeader->set_text(read_documentation_web);
|
||||||
|
lblhelpText->set_text(redirected_documentation);
|
||||||
|
btnReadHelp->set_label(read_online);
|
||||||
|
btnCancelHelp->set_label(cancel);
|
||||||
|
chkAlwaysOpenHelp->set_label(always_redirect);
|
||||||
|
lblwebHeaderName->set_label(name_app);
|
||||||
|
chbMangSystemFile->set_label(str_quotas_mode);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::filling_device_combo_box_template(Gtk::ComboBoxText *combo_box, map_str_str &map_device) {
|
||||||
|
if (map_device.size() != 0) {
|
||||||
|
for (const auto &device : map_device) {
|
||||||
|
combo_box->append(device.first.c_str());
|
||||||
|
}
|
||||||
|
combo_box->set_active(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::flag_block_gui() {
|
||||||
|
if (flag_load_global == true) {
|
||||||
|
btnLoadGlob->set_sensitive(false);
|
||||||
|
}
|
||||||
|
if (flag_save_local == true && flag_save_global == true) {
|
||||||
|
btnSave->set_sensitive(false);
|
||||||
|
}
|
||||||
|
if (flag_save == true) {
|
||||||
|
btnSave->set_sensitive(false);
|
||||||
|
}
|
||||||
|
if (flag_save_local == true) {
|
||||||
|
btnSaveLocal->set_sensitive(false);
|
||||||
|
btnSaveLocalGlob->set_sensitive(false);
|
||||||
|
}
|
||||||
|
if (flag_save_global == true) {
|
||||||
|
btnSaveGlob->set_sensitive(false);
|
||||||
|
btnSaveLocalGlob->set_sensitive(false);
|
||||||
|
}
|
||||||
|
if (flag_lock_help == true) {
|
||||||
|
btnSynopsis->set_sensitive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::entry_combo_box_temp(Gtk::ComboBoxText *combo_box, Gtk::Label *label) {
|
||||||
|
string text = combo_box->get_active_text();
|
||||||
|
if (map_device.find(text) != map_device.end()){
|
||||||
|
label->set_text(map_device[text]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::add_CSS() {
|
||||||
|
Glib::RefPtr<Gtk::CssProvider> cssProvider = Gtk::CssProvider::create();
|
||||||
|
cssProvider->load_from_path(path_css);
|
||||||
|
Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();
|
||||||
|
Glib::RefPtr<Gdk::Screen> screen = Gdk::Screen::get_default();//get default screen
|
||||||
|
styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application
|
||||||
|
HeadBackgroundImage->set(path_img_head_background);
|
||||||
|
Glib::RefPtr<Gtk::StyleContext> headLabel_css = headLabel->get_style_context();
|
||||||
|
Glib::RefPtr<Gtk::StyleContext> boxButton_css = boxButton->get_style_context();
|
||||||
|
Glib::RefPtr<Gtk::StyleContext> boxSave_css = boxSave->get_style_context();
|
||||||
|
Glib::RefPtr<Gtk::StyleContext> headerBar_css = headerBar->get_style_context();
|
||||||
|
if (socket_trd_id_I == 0 && socket_ext_id_I == 0){
|
||||||
|
boxButton_css->add_class("bkim_no_plug");
|
||||||
|
boxSave_css->add_class("bkim_no_plug");
|
||||||
|
}
|
||||||
|
headLabel_css->add_class("textHead");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void init_treeview_user() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::view_add_data(Gtk::TreeModel::Row &row, Glib::RefPtr<Gtk::ListStore> list_store_m , std::array<std::vector<std::string>, 5> &arr_view , size_t index) {
|
||||||
|
row = *(list_store_m->append());
|
||||||
|
bool flag_chb = false;
|
||||||
|
string name = arr_view[0][index];
|
||||||
|
row[m_columns.check_button] = flag_chb;
|
||||||
|
row[m_columns.name] = _(name.c_str());
|
||||||
|
row[m_columns.description] = _(arr_view[1][index].c_str());
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void MainWindow::get_builder() {
|
||||||
|
builder->set_translation_domain(path_app);
|
||||||
|
builder->get_widget("headerTopic", headerTopic);
|
||||||
|
builder->get_widget("boxButton", boxButton);
|
||||||
|
builder->get_widget("boxSave", boxSave);
|
||||||
|
builder->get_widget("aboutWindows", aboutWindows);
|
||||||
|
builder->get_widget("HeadOverlay", HeadOverlay);
|
||||||
|
builder->get_widget("headerBar", headerBar);
|
||||||
|
builder->get_widget("boxFuncs", boxFuncs);
|
||||||
|
builder->get_widget("btnLoad", btnLoad);
|
||||||
|
builder->get_widget("btnSave", btnSave);
|
||||||
|
builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog);
|
||||||
|
builder->get_widget("HeadBackgroundImage", HeadBackgroundImage);
|
||||||
|
builder->get_widget("imgInfo", imgInfo);
|
||||||
|
builder->get_widget("lblWarning", lblWarning);
|
||||||
|
builder->get_widget("boxInfoError", boxInfoError);
|
||||||
|
builder->get_widget("imgInfo", imgInfo);
|
||||||
|
builder->get_widget("generalTabLabel", generalTabLabel);
|
||||||
|
builder->get_widget("GroupsTabLabel", GroupsTabLabel);
|
||||||
|
builder->get_widget("UsersTabLabel", UsersTabLabel);
|
||||||
|
builder->get_widget("generalGroupsSizeLabel", generalGroupsSizeLabel);
|
||||||
|
builder->get_widget("generalGroupsFilesLabel", generalGroupsFilesLabel);
|
||||||
|
builder->get_widget("generalUsersSizeLabel", generalUsersSizeLabel);
|
||||||
|
builder->get_widget("generalUsersFilesLabel", generalUsersFilesLabel);
|
||||||
|
builder->get_widget("generalGroupsSizeWeeksLabel", generalGroupsSizeWeeksLabel);
|
||||||
|
builder->get_widget("generalGroupsFilesWeeksLabel", generalGroupsFilesWeeksLabel);
|
||||||
|
builder->get_widget("generalUsersSizeWeeksLabel", generalUsersSizeWeeksLabel);
|
||||||
|
builder->get_widget("generalUsersFilesWeeksLabel", generalUsersFilesWeeksLabel);
|
||||||
|
builder->get_widget("generalGroupsSizeDaysLabel", generalGroupsSizeDaysLabel);
|
||||||
|
builder->get_widget("generalGroupsFilesDaysLabel", generalGroupsFilesDaysLabel);
|
||||||
|
builder->get_widget("generalUsersSizeDaysLabel", generalUsersSizeDaysLabel);
|
||||||
|
builder->get_widget("generalUsersFilesDaysLabel", generalUsersFilesDaysLabel);
|
||||||
|
builder->get_widget("generalGroupsSizeHoursLabel", generalGroupsSizeHoursLabel);
|
||||||
|
builder->get_widget("generalGroupsFilesHoursLabel", generalGroupsFilesHoursLabel);
|
||||||
|
builder->get_widget("generalUsersSizeHoursLabel", generalUsersSizeHoursLabel);
|
||||||
|
builder->get_widget("generalUsersFilesHoursLabel", generalUsersFilesHoursLabel);
|
||||||
|
builder->get_widget("generalGroupsSizeMinutesLabel", generalGroupsSizeMinutesLabel);
|
||||||
|
builder->get_widget("generalGroupsFilesMinutesLabel", generalGroupsFilesMinutesLabel);
|
||||||
|
builder->get_widget("generalUsersSizeMinutesLabel", generalUsersSizeMinutesLabel);
|
||||||
|
builder->get_widget("generalUsersFilesMinutesLabel", generalUsersFilesMinutesLabel);
|
||||||
|
builder->get_widget("lblLoad", lblLoad);
|
||||||
|
builder->get_widget("lblSave", lblSave);
|
||||||
|
builder->get_widget("btnSettings", btnSettings);
|
||||||
|
builder->get_widget("btnSettings", btnSettings);
|
||||||
|
builder->get_widget("groupsDeviceLabel", groupsDeviceLabel);
|
||||||
|
builder->get_widget("usersDeviceLabel", usersDeviceLabel);
|
||||||
|
builder->get_widget("headLabel", headLabel);
|
||||||
|
builder->get_widget("FiltersWindow", FiltersWindow);
|
||||||
|
builder->get_widget("filtersNameFilterCheckbox", filtersNameFilterCheckbox);
|
||||||
|
builder->get_widget("filtersQuotasFilterCheckbox", filtersQuotasFilterCheckbox);
|
||||||
|
builder->get_widget("filtersSizeFilterCheckbox", filtersSizeFilterCheckbox);
|
||||||
|
builder->get_widget("filtersSoftSizeFilterCheckbox", filtersSoftSizeFilterCheckbox);
|
||||||
|
builder->get_widget("filtersHardSizeFilterCheckbox", filtersHardSizeFilterCheckbox);
|
||||||
|
builder->get_widget("filtersHardSizeDelayFilterCheckbox", filtersHardSizeDelayFilterCheckbox);
|
||||||
|
builder->get_widget("filtersHardSizeActivationFilterCheckbox", filtersHardSizeActivationFilterCheckbox);
|
||||||
|
builder->get_widget("filtersFilesFilterCheckbox", filtersFilesFilterCheckbox);
|
||||||
|
builder->get_widget("filtersSoftFilesFilterCheckbox", filtersSoftFilesFilterCheckbox);
|
||||||
|
builder->get_widget("filtersHardFilesFilterCheckbox", filtersHardFilesFilterCheckbox);
|
||||||
|
builder->get_widget("filtersHardFilesDelayFilterCheckbox", filtersHardFilesDelayFilterCheckbox);
|
||||||
|
builder->get_widget("filtersHardFilesActivationFilterCheckbox", filtersHardFilesActivationFilterCheckbox);
|
||||||
|
builder->get_widget("filtersHardFilesActivationFilterCheckbox", filtersHardFilesActivationFilterCheckbox);
|
||||||
|
builder->get_widget("btnLoadGlob", btnLoadGlob);
|
||||||
|
builder->get_widget("btnLoadLocal", btnLoadLocal);
|
||||||
|
builder->get_widget("btnSynopsis", btnSynopsis);
|
||||||
|
builder->get_widget("btnAbout", btnAbout);
|
||||||
|
builder->get_widget("btnSaveLocalGlob", btnSaveLocalGlob);
|
||||||
|
builder->get_widget("btnSaveGlob", btnSaveGlob);
|
||||||
|
builder->get_widget("btnSaveLocal", btnSaveLocal);
|
||||||
|
builder->get_widget("GroupsTabLabel", GroupsTabLabel);
|
||||||
|
builder->get_widget("groupsQuotasTree", groupsQuotasTree);
|
||||||
|
builder->get_widget("usersQuotasTree", usersQuotasTree);
|
||||||
|
builder->get_widget("quotegroupDeviceLabel", quotegroupDeviceLabel);
|
||||||
|
builder->get_widget("quotegroupFileSystemLabel", quotegroupFileSystemLabel);
|
||||||
|
builder->get_widget("quotegroupDiskQuotasLabel", quotegroupDiskQuotasLabel);
|
||||||
|
builder->get_widget("quotegroupGroupQuotasLabel", quotegroupGroupQuotasLabel);
|
||||||
|
builder->get_widget("quotegroupSizeFrameLabel", quotegroupSizeFrameLabel);
|
||||||
|
builder->get_widget("quotegroupFilesFrameLabel", quotegroupFilesFrameLabel);
|
||||||
|
builder->get_widget("quotegroupSizeCurrentlyLabel", quotegroupSizeCurrentlyLabel);
|
||||||
|
builder->get_widget("quotegroupFilesCurrentlyLabel", quotegroupFilesCurrentlyLabel);
|
||||||
|
builder->get_widget("quotegroupSizeSoftLimitLabel", quotegroupSizeSoftLimitLabel);
|
||||||
|
builder->get_widget("quoteSizeHardLimitLabel", quoteSizeHardLimitLabel);
|
||||||
|
builder->get_widget("quotegroupFilesSoftLimitLabel", quotegroupFilesSoftLimitLabel);
|
||||||
|
builder->get_widget("quoteFilesHardLimitLabel", quoteFilesHardLimitLabel);
|
||||||
|
builder->get_widget("quotegroupFilesHarLimitLabel", quotegroupFilesHarLimitLabel);
|
||||||
|
builder->get_widget("quoteuserDeviceLabel", quoteuserDeviceLabel);
|
||||||
|
builder->get_widget("quoteuserFileSystemLabel", quoteuserFileSystemLabel);
|
||||||
|
builder->get_widget("quoteuserDiskQuotasLabel", quoteuserDiskQuotasLabel);
|
||||||
|
builder->get_widget("quoteuserGroupQuotasLabel", quoteuserGroupQuotasLabel);
|
||||||
|
builder->get_widget("quoteuserSizeFrameLabel", quoteuserSizeFrameLabel);
|
||||||
|
builder->get_widget("quoteuserSizeCurrentlyLabel", quoteuserSizeCurrentlyLabel);
|
||||||
|
builder->get_widget("quoteuserSizeSoftLimitLabel", quoteuserSizeSoftLimitLabel);
|
||||||
|
builder->get_widget("quoteuserSizeHardLimitLabel1", quoteuserSizeHardLimitLabel1);
|
||||||
|
builder->get_widget("quoteuserFilesFrameLabel", quoteuserFilesFrameLabel);
|
||||||
|
builder->get_widget("quoteuserFilesCurrentlyLabel", quoteuserFilesCurrentlyLabel);
|
||||||
|
builder->get_widget("quoteuserFilesSoftLimitLabel", quoteuserFilesSoftLimitLabel);
|
||||||
|
builder->get_widget("quoteFilesHardLimitLabel1", quoteFilesHardLimitLabel1);
|
||||||
|
builder->get_widget("quoteuserFilesHarLimitLabel", quoteuserFilesHarLimitLabel);
|
||||||
|
builder->get_widget("quoteuserFilesSoftLimitlabel", quoteuserFilesSoftLimitlabel);
|
||||||
|
builder->get_widget("QuotasEditWindow", QuotasEditWindow);
|
||||||
|
builder->get_widget("QuotasUserEditWindow", QuotasUserEditWindow);
|
||||||
|
builder->get_widget("headerAboutTopic", headerAboutTopic);
|
||||||
|
builder->get_widget("lblHeadQuotasUserEditWindow", lblHeadQuotasUserEditWindow);
|
||||||
|
builder->get_widget("lblHeadQuotasEditWindow", lblHeadQuotasEditWindow);
|
||||||
|
builder->get_widget("lblHeadFiltersWindow", lblHeadFiltersWindow);
|
||||||
|
builder->get_widget("usersDeviceCombo", usersDeviceCombo);
|
||||||
|
builder->get_widget("GroupsTabLabel", GroupsTabLabel);
|
||||||
|
builder->get_widget("generalTabLabel", generalTabLabel);
|
||||||
|
builder->get_widget("groupsDeviceCombo", groupsDeviceCombo);
|
||||||
|
builder->get_widget("generalGroupsSizeWeeksSpi", generalGroupsSizeWeeksSpi);
|
||||||
|
builder->get_widget("generalGroupsFileWeeksSpin", generalGroupsFileWeeksSpin);
|
||||||
|
builder->get_widget("generalGroupsSizeDaySpin", generalGroupsSizeDaySpin);
|
||||||
|
builder->get_widget("generalGroupsFilesDaySpin", generalGroupsFilesDaySpin);
|
||||||
|
builder->get_widget("generalGroupsSizeHourSpin", generalGroupsSizeHourSpin);
|
||||||
|
builder->get_widget("generalGroupsFilesHourSpin", generalGroupsFilesHourSpin);
|
||||||
|
builder->get_widget("generalGroupsSizeMinuteSpin", generalGroupsSizeMinuteSpin);
|
||||||
|
builder->get_widget("generalGroupsFilesMinuteSpin", generalGroupsFilesMinuteSpin);
|
||||||
|
builder->get_widget("generalUsersSizWeeksSpin", generalUsersSizWeeksSpin);
|
||||||
|
builder->get_widget("generalUsersFileWeeksSpin", generalUsersFileWeeksSpin);
|
||||||
|
builder->get_widget("generalUsersSizeDaySpin", generalUsersSizeDaySpin);
|
||||||
|
builder->get_widget("generalUsersFilesDaySpin", generalUsersFilesDaySpin);
|
||||||
|
builder->get_widget("generalUsersSizeHourSpin", generalUsersSizeHourSpin);
|
||||||
|
builder->get_widget("generalUsersFilesHoursSpin", generalUsersFilesHoursSpin);
|
||||||
|
builder->get_widget("generalUsersSizeMinuteSpin", generalUsersSizeMinuteSpin);
|
||||||
|
builder->get_widget("generalUsersFilesMinutesSpin", generalUsersFilesMinutesSpin);
|
||||||
|
builder->get_widget("lblEditWndFsys", lblEditWndFsys);
|
||||||
|
builder->get_widget("quotegroupSizeSoftLimitCheck", quotegroupSizeSoftLimitCheck);
|
||||||
|
builder->get_widget("quotegroupSizeHardLimitCheck", quotegroupSizeHardLimitCheck);
|
||||||
|
builder->get_widget("quotegroupFilesSoftLimitCheck", quotegroupFilesSoftLimitCheck);
|
||||||
|
builder->get_widget("quotegroupFilesHardLimitCheck", quotegroupFilesHardLimitCheck);
|
||||||
|
builder->get_widget("quotegroupSizeSoftLimitSpin", quotegroupSizeSoftLimitSpin);
|
||||||
|
builder->get_widget("quotegroupSizeSoftLimitCombo", quotegroupSizeSoftLimitCombo);
|
||||||
|
builder->get_widget("quotegroupSizeHardLimitSpin", quotegroupSizeHardLimitSpin);
|
||||||
|
builder->get_widget("quotegroupSizeHardLimitCombo", quotegroupSizeHardLimitCombo);
|
||||||
|
builder->get_widget("quotegroupFilesSoftLimitSpin", quotegroupFilesSoftLimitSpin);
|
||||||
|
builder->get_widget("quotegroupFilesSoftLimitlabel", quotegroupFilesSoftLimitlabel);
|
||||||
|
builder->get_widget("quotegroupFilesHardLimitSpin", quotegroupFilesHardLimitSpin);
|
||||||
|
builder->get_widget("quotegroupSaveButton", quotegroupSaveButton);
|
||||||
|
builder->get_widget("quotegroupCancelButton", quotegroupCancelButton);
|
||||||
|
builder->get_widget("quotegroupDeviceCombo", quotegroupDeviceCombo);
|
||||||
|
builder->get_widget("GeneralQuotasTree", GeneralQuotasTree);
|
||||||
|
builder->get_widget("ProjectQuotasTree", ProjectQuotasTree);
|
||||||
|
builder->get_widget("ProjectTabLabel", ProjectTabLabel);
|
||||||
|
builder->get_widget("usersProjectLabel", usersProjectLabel);
|
||||||
|
builder->get_widget("btnFilterProject", btnFilterProject);
|
||||||
|
builder->get_widget("btnFilterUsers", btnFilterUsers);
|
||||||
|
builder->get_widget("btnFilterGroups", btnFilterGroups);
|
||||||
|
#ifdef WEBKIT_FOUND
|
||||||
|
builder->get_widget("wndWeb", wndWeb);
|
||||||
|
#endif
|
||||||
|
builder->get_widget("lblHeadeWndWeb", lblHeadeWndWeb);
|
||||||
|
builder->get_widget("lblwebHeaderName", lblwebHeaderName);
|
||||||
|
builder->get_widget("lblhelpText", lblhelpText);
|
||||||
|
builder->get_widget("lblhelpHeader", lblhelpHeader);
|
||||||
|
builder->get_widget("chkAlwaysOpenHelp", chkAlwaysOpenHelp);
|
||||||
|
builder->get_widget("btnReadHelp", btnReadHelp);
|
||||||
|
builder->get_widget("btnCancelHelp", btnCancelHelp);
|
||||||
|
builder->get_widget("wndShowWeb", wndShowWeb);
|
||||||
|
builder->get_widget("chbMangSystemFile", chbMangSystemFile);
|
||||||
|
builder->get_widget("btnDelGroups", btnDelGroups);
|
||||||
|
builder->get_widget("btnDelProject", btnDelProject);
|
||||||
|
builder->get_widget("btnDelUsers", btnDelUsers);
|
||||||
|
builder->get_widget("btnAddGroups", btnAddGroups);
|
||||||
|
builder->get_widget("btnAddUsers", btnAddUsers);
|
||||||
|
builder->get_widget("btnAddProject", btnAddProject);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::event() {
|
||||||
|
btnCancelHelp->signal_clicked().connect([&]() {wndShowWeb->hide();});
|
||||||
|
chkAlwaysOpenHelp->signal_toggled().connect([&]() {flag_open_browser = true;});
|
||||||
|
btnReadHelp->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_browser));
|
||||||
|
btnFilterGroups->signal_clicked().connect([&]() {this->groupsFilters_show();});
|
||||||
|
btnFilterUsers->signal_clicked().connect([&]() {this->groupsFilters_show();});
|
||||||
|
btnFilterProject->signal_clicked().connect([&]() {this->groupsFilters_show();});
|
||||||
|
quotegroupSaveButton->signal_clicked().connect([&]() {});
|
||||||
|
btnLoadGlob->signal_activate().connect([&]() {this->load_global_cfg();});
|
||||||
|
btnLoadLocal->signal_activate().connect([&]() {this->load_system_cfg();});
|
||||||
|
btnSynopsis->signal_activate().connect([&]() {this->synopsis_show();});
|
||||||
|
btnAbout->signal_activate().connect([&]() {aboutWindows->show();});
|
||||||
|
btnSaveLocalGlob->signal_activate().connect([&]() {this->wrapper_save_all_cfg();});
|
||||||
|
btnSaveGlob->signal_activate().connect([&]() {this->wrapper_save_global_cfg();});
|
||||||
|
btnSaveLocal->signal_activate().connect([&]() {this->wrapper_save_system_cfg();});
|
||||||
|
chbMangSystemFile->signal_toggled().connect([&]() {this->mode_switch_quota();});
|
||||||
|
quotegroupDeviceCombo->signal_changed().connect([&]() {entry_combo_box_temp(quotegroupDeviceCombo, lblEditWndFsys);});
|
||||||
|
quotegroupSizeSoftLimitCheck->signal_toggled().connect([&]() {
|
||||||
|
check_limit(quotegroupSizeSoftLimitCheck
|
||||||
|
,quotegroupSizeSoftLimitSpin
|
||||||
|
,quotegroupSizeSoftLimitCombo);
|
||||||
|
});
|
||||||
|
quotegroupSizeHardLimitCheck->signal_toggled().connect([&]() {
|
||||||
|
check_limit(quotegroupSizeHardLimitCheck
|
||||||
|
,quotegroupSizeHardLimitSpin
|
||||||
|
,quotegroupSizeHardLimitCombo);
|
||||||
|
});
|
||||||
|
quotegroupFilesSoftLimitCheck->signal_toggled().connect([&]() {
|
||||||
|
check_limit(quotegroupFilesSoftLimitCheck
|
||||||
|
,quotegroupFilesSoftLimitSpin
|
||||||
|
,quotegroupFilesSoftLimitlabel);
|
||||||
|
});
|
||||||
|
quotegroupFilesHardLimitCheck->signal_toggled().connect([&]() {
|
||||||
|
check_limit(quotegroupFilesHardLimitCheck
|
||||||
|
,quotegroupFilesHardLimitSpin
|
||||||
|
,quotegroupFilesHarLimitLabel);
|
||||||
|
});
|
||||||
|
quotegroupCancelButton->signal_clicked().connect([&]() {QuotasEditWindow->hide();});
|
||||||
|
// QuotasEditWindow->show();
|
||||||
|
btnDelGroups->signal_clicked().connect(
|
||||||
|
sigc::bind<Glib::RefPtr<Gtk::ListStore>*, const Gtk::TreeModel::iterator*, bool&> (sigc::mem_fun( *this,
|
||||||
|
&MainWindow::remove_template), &list_store_groups, &iter_groups, flag_validate_del_groups));
|
||||||
|
btnDelUsers->signal_clicked().connect(
|
||||||
|
sigc::bind<Glib::RefPtr<Gtk::ListStore>*, const Gtk::TreeModel::iterator*, bool&> (sigc::mem_fun( *this,
|
||||||
|
&MainWindow::remove_template), &list_store_users, &iter_users, flag_validate_del_users));
|
||||||
|
btnDelProject->signal_clicked().connect(
|
||||||
|
sigc::bind<Glib::RefPtr<Gtk::ListStore>*, const Gtk::TreeModel::iterator*, bool&> (sigc::mem_fun( *this,
|
||||||
|
&MainWindow::remove_template), &list_store_project, &iter_project, flag_validate_del_project));
|
||||||
|
btnAddProject->signal_clicked().connect(
|
||||||
|
sigc::bind<Gtk::TreeModel::Row&, Glib::RefPtr<Gtk::ListStore>, struct tv_g_u_p> (sigc::mem_fun( *this,
|
||||||
|
&MainWindow::set_add_tv_g_u_p), row, list_store_project, obj_tv_g_u_p));
|
||||||
|
btnAddUsers->signal_clicked().connect(
|
||||||
|
sigc::bind<Gtk::TreeModel::Row&, Glib::RefPtr<Gtk::ListStore>, struct tv_g_u_p> (sigc::mem_fun( *this,
|
||||||
|
&MainWindow::set_add_tv_g_u_p), row, list_store_users, obj_tv_g_u_p));
|
||||||
|
btnAddGroups->signal_clicked().connect(
|
||||||
|
sigc::bind<Gtk::TreeModel::Row&, Glib::RefPtr<Gtk::ListStore>, struct tv_g_u_p> (sigc::mem_fun( *this,
|
||||||
|
&MainWindow::set_add_tv_g_u_p), row, list_store_groups, obj_tv_g_u_p));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::remove_template(Glib::RefPtr<Gtk::ListStore>* list_store, const Gtk::TreeModel::iterator* iter, bool& flag_validate_del) {
|
||||||
|
if (flag_validate_del && (*list_store)->iter_is_valid(*(iter))) {
|
||||||
|
Gtk::TreeModel::Row row = *(*iter);
|
||||||
|
if(row) {
|
||||||
|
string name = row[m_columns.name] + "";
|
||||||
|
// TODO:
|
||||||
|
string key = "GRUB_PASSWORD[" + name + "]";
|
||||||
|
map_gui_cfg[key] = "";
|
||||||
|
}
|
||||||
|
(*list_store)->erase((*iter));
|
||||||
|
flag_validate_del = false;
|
||||||
|
info_status_app(info_box_ok_css);
|
||||||
|
imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU);
|
||||||
|
lblWarning->set_text("");
|
||||||
|
}
|
||||||
|
flag_validate_del = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::set_add_tv_g_u_p(Gtk::TreeModel::Row &row, Glib::RefPtr<Gtk::ListStore> list_store, struct tv_g_u_p obj_tv_g_u_p) {
|
||||||
|
row = *(list_store->append());
|
||||||
|
row[m_columns.name] = obj_tv_g_u_p.name;
|
||||||
|
row[m_columns.quotas] = obj_tv_g_u_p.quotas;
|
||||||
|
row[m_columns.size] = obj_tv_g_u_p.size;
|
||||||
|
row[m_columns.soft_limit_size] = obj_tv_g_u_p.soft_limit_size;
|
||||||
|
row[m_columns.hard_limit_size] = obj_tv_g_u_p.hard_limit_size;
|
||||||
|
row[m_columns.deferring_size] = obj_tv_g_u_p.deferring_size;
|
||||||
|
row[m_columns.files] = obj_tv_g_u_p.files;
|
||||||
|
row[m_columns.soft_limit_files] = obj_tv_g_u_p.soft_limit_files;
|
||||||
|
row[m_columns.hard_limit_delay] = obj_tv_g_u_p.hard_limit_delay;
|
||||||
|
row[m_columns.deferring_files] = obj_tv_g_u_p.deferring_files;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::mode_switch_quota() {
|
||||||
|
if (chbMangSystemFile->get_active()) {
|
||||||
|
mode_quota = "filesystem";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mode_quota = "ubconfig";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::wrapper_settings_quotas_temp(string save_user_or_group) {
|
||||||
|
struct partition_cmd _struct_partition_cmd = this->wrapper_settings_quotas();
|
||||||
|
string device = _struct_partition_cmd.device;
|
||||||
|
string cmd = _struct_partition_cmd.cmd;
|
||||||
|
string type_quotas = save_user_or_group;
|
||||||
|
string user = "";
|
||||||
|
struct struct_quotas _struct_quota;
|
||||||
|
_struct_quota.device = device;
|
||||||
|
_struct_quota.cmd = cmd;
|
||||||
|
_struct_quota.type_quotas = type_quotas;
|
||||||
|
_struct_quota.name = user;
|
||||||
|
obj_quotas_ubconfig.format_cmd_quotas(_struct_quota);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::save_quotegroupSaveButton() {
|
||||||
|
if (sys_or_ubconfig == "ubconfig") {
|
||||||
|
if (save_user_or_group == "usrquota") {
|
||||||
|
this->wrapper_settings_quotas_temp(save_user_or_group);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this->wrapper_settings_quotas_temp(save_user_or_group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (save_user_or_group == "usrquota") {
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct partition_cmd MainWindow::wrapper_settings_quotas() {
|
||||||
|
string str_parted = quotegroupDeviceCombo->get_active_text();
|
||||||
|
string value = "";
|
||||||
|
if (quotegroupSizeSoftLimitCheck->get_active()) {
|
||||||
|
value = Utils::format_str_size(quotegroupSizeSoftLimitSpin->get_value(), quotegroupSizeSoftLimitCombo->get_active_row_number());
|
||||||
|
value += ":";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value += "0:";
|
||||||
|
}
|
||||||
|
if (quotegroupSizeHardLimitCheck->get_active()) {
|
||||||
|
value += Utils::format_str_size(quotegroupSizeHardLimitSpin->get_value(), quotegroupSizeHardLimitCombo->get_active_row_number());
|
||||||
|
value += ":";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value += "0:";
|
||||||
|
}
|
||||||
|
if (quotegroupFilesSoftLimitCheck->get_active()) {
|
||||||
|
value += to_string(quotegroupFilesSoftLimitSpin->get_value());
|
||||||
|
value += ":";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value += "0:";
|
||||||
|
}
|
||||||
|
if (quotegroupFilesHardLimitCheck->get_active()) {
|
||||||
|
value += to_string(quotegroupFilesHardLimitSpin->get_value());
|
||||||
|
value += ":";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value += "0:";
|
||||||
|
}
|
||||||
|
struct partition_cmd _struct_partition_cmd;
|
||||||
|
_struct_partition_cmd.device = str_parted;
|
||||||
|
_struct_partition_cmd.cmd = value;
|
||||||
|
return _struct_partition_cmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::groupsFilters_show() {
|
||||||
|
FiltersWindow->show_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::check_limit(Gtk::CheckButton *check_button, Gtk::SpinButton *spin, Gtk::ComboBoxText *combo_box) {
|
||||||
|
spin->set_sensitive(check_button->get_active());
|
||||||
|
combo_box->set_sensitive(check_button->get_active());
|
||||||
|
}
|
||||||
|
void MainWindow::check_limit(Gtk::CheckButton *check_button, Gtk::SpinButton *spin, Gtk::Label *combo_box) {
|
||||||
|
spin->set_sensitive(check_button->get_active());
|
||||||
|
combo_box->set_sensitive(check_button->get_active());
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::info_status_app(string stule) {
|
||||||
|
Glib::RefPtr<Gtk::StyleContext> boxInfo = boxInfoError->get_style_context();
|
||||||
|
boxInfo->remove_class(info_box_ok_css);
|
||||||
|
boxInfo->remove_class(info_box_error_css);
|
||||||
|
boxInfo->add_class(stule);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::init_dict(string flag_load) {
|
||||||
|
std::map<std::string, std::string> map_gui_cfg_n;
|
||||||
|
map_gui_cfg_n[""] = "";
|
||||||
|
|
||||||
|
map_gui_cfg = map_gui_cfg_n;
|
||||||
|
if (flag_load == "global") {
|
||||||
|
map_global_cfg = map_gui_cfg_n;
|
||||||
|
}
|
||||||
|
else if (flag_load == "system") {
|
||||||
|
map_system_cfg = map_gui_cfg_n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MainWindow::save_template(string section, string flag_save) {
|
||||||
|
bool flag_no_save = true;
|
||||||
|
obj_save.set_data_local(map_system_cfg);
|
||||||
|
obj_save.set_data_global(map_global_cfg);
|
||||||
|
obj_save.set_data_gui(map_gui_cfg);
|
||||||
|
obj_save.set_vec_params(vec_param_names);
|
||||||
|
obj_save.save(section, flag_save);
|
||||||
|
vector<string> obj_vec_error = obj_save.get_error();
|
||||||
|
flag_no_save = obj_save.get_state_save();
|
||||||
|
return flag_no_save;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::wrapper_save_all_cfg() {
|
||||||
|
this->set_data_cfg();
|
||||||
|
bool _flag_save_global = this->save_template("boot", "global");;
|
||||||
|
bool _flag_save_local = this->save_template("boot", "system");
|
||||||
|
if (_flag_save_global && _flag_save_local) {
|
||||||
|
this->info_warning_error(5);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info_warning_error(4);
|
||||||
|
}
|
||||||
|
map_global_cfg = map_gui_cfg;
|
||||||
|
map_system_cfg = map_gui_cfg;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::load_global_cfg() {
|
||||||
|
this->load_template(&map_global_cfg, "global");
|
||||||
|
info_warning_error(1);
|
||||||
|
map_gui_cfg = map_global_cfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::load_system_cfg() {
|
||||||
|
this->load_template(&map_system_cfg, "system");
|
||||||
|
info_warning_error(0);
|
||||||
|
map_gui_cfg = map_system_cfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::set_data_cfg() {
|
||||||
|
// TODO:
|
||||||
|
// Написать функцию
|
||||||
|
}
|
||||||
|
void MainWindow::wrapper_save_global_cfg() {
|
||||||
|
this->set_data_cfg();
|
||||||
|
if (this->save_template("boot", "global")) {
|
||||||
|
this->info_warning_error(5);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info_warning_error(3);
|
||||||
|
}
|
||||||
|
map_global_cfg = map_gui_cfg;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::synopsis_show() {
|
||||||
|
if (flag_open_browser == true) {
|
||||||
|
this->open_browser();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wndShowWeb->show_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::open_browser() {
|
||||||
|
#ifdef WEBKIT_FOUND
|
||||||
|
webkit_web_view_load_uri(one, link_doc);
|
||||||
|
wndWeb->show_all();
|
||||||
|
#else
|
||||||
|
this->template_open_browser();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::template_open_browser() {
|
||||||
|
string cmd = cmd_xdg + string(_(link_doc)) + " &";
|
||||||
|
string buf = "";
|
||||||
|
if (geteuid() == 0) {
|
||||||
|
string response_user = getlogin();
|
||||||
|
int size_s = std::snprintf(nullptr, 0, cmd_execute, response_user.c_str(), cmd.c_str()) + 1;
|
||||||
|
auto size = static_cast<size_t>(size_s);
|
||||||
|
std::unique_ptr<char[]> buf(new char[ size ]);
|
||||||
|
std::snprintf( buf.get(), size, cmd_execute, response_user.c_str(), cmd.c_str() );
|
||||||
|
cmd = std::string( buf.get(), buf.get() + size - 1 );
|
||||||
|
}
|
||||||
|
obj_process_system.call(cmd, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::wrapper_save_system_cfg() {
|
||||||
|
this->set_data_cfg();
|
||||||
|
if (this->save_template("boot", "system")) {
|
||||||
|
this->info_warning_error(5);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info_warning_error(2);
|
||||||
|
}
|
||||||
|
map_system_cfg = map_gui_cfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::init_work_tv_g_u_p() {
|
||||||
|
groupsQuotasTree->remove_all_columns();
|
||||||
|
ProjectQuotasTree->remove_all_columns();
|
||||||
|
usersQuotasTree->remove_all_columns();
|
||||||
|
list_store_groups = Gtk::ListStore::create(m_columns);
|
||||||
|
list_store_project = Gtk::ListStore::create(m_columns);
|
||||||
|
list_store_users = Gtk::ListStore::create(m_columns);
|
||||||
|
groupsQuotasTree->set_model(list_store_groups);
|
||||||
|
ProjectQuotasTree->set_model(list_store_project);
|
||||||
|
usersQuotasTree->set_model(list_store_users);
|
||||||
|
Glib::RefPtr<Gtk::TreeModel> groupsQuotasTreeModel = groupsQuotasTree->get_model();
|
||||||
|
groupsQuotasTreeModel->signal_row_changed().connect(sigc::bind<Gtk::TreeModel::iterator&, bool&>
|
||||||
|
(sigc::mem_fun(*this, &MainWindow::remove_line_template), iter_groups, flag_validate_del_groups));
|
||||||
|
Glib::RefPtr<Gtk::TreeModel> ProjectQuotasTreeModel = ProjectQuotasTree->get_model();
|
||||||
|
ProjectQuotasTreeModel->signal_row_changed().connect(sigc::bind<Gtk::TreeModel::iterator&, bool&>
|
||||||
|
(sigc::mem_fun(*this, &MainWindow::remove_line_template), iter_project, flag_validate_del_project));
|
||||||
|
Glib::RefPtr<Gtk::TreeModel> usersQuotasTreeModel = usersQuotasTree->get_model();
|
||||||
|
usersQuotasTreeModel->signal_row_changed().connect(sigc::bind<Gtk::TreeModel::iterator&, bool&>
|
||||||
|
(sigc::mem_fun(*this, &MainWindow::remove_line_template),iter_users, flag_validate_del_users));
|
||||||
|
this->view_add_columns(*groupsQuotasTree);
|
||||||
|
this->view_add_columns(*ProjectQuotasTree);
|
||||||
|
this->view_add_columns(*usersQuotasTree);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::load_template(map_str_str* map_temp, string str_load) {
|
||||||
|
this->init_work_tv_g_u_p();
|
||||||
|
this->init_dict(str_load);
|
||||||
|
string sections;
|
||||||
|
sections = "security";
|
||||||
|
obj_load.set_sections(sections);
|
||||||
|
*map_temp = obj_load.get_load_data(*map_temp, str_load);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::remove_line_template(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter, Gtk::TreeModel::iterator& iter_del, bool& flag_del) {
|
||||||
|
iter_del = iter;
|
||||||
|
flag_del = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::info_warning_error(int mess) {
|
||||||
|
if (obj_load.get_count_error() > 0 || obj_save.get_count_error() > 0) {
|
||||||
|
info_status_app(info_box_error_css);
|
||||||
|
imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU);
|
||||||
|
string mess_error = "";
|
||||||
|
if (mess == 0) {
|
||||||
|
mess_error = string(local_read_error) + str_cmd_error;
|
||||||
|
lblWarning->set_text(mess_error);
|
||||||
|
}
|
||||||
|
else if (mess == 1) {
|
||||||
|
mess_error = string(global_read_error) + str_cmd_error;
|
||||||
|
lblWarning->set_text(mess_error);
|
||||||
|
}
|
||||||
|
else if (mess == 2) {
|
||||||
|
mess_error = string(local_write_error) + str_cmd_error;
|
||||||
|
lblWarning->set_text(mess_error);
|
||||||
|
}
|
||||||
|
else if (mess == 3) {
|
||||||
|
mess_error = string(global_write_error) + str_cmd_error;
|
||||||
|
lblWarning->set_text(mess_error);
|
||||||
|
}
|
||||||
|
else if (mess == 4) {
|
||||||
|
mess_error = string(error_save_all) + str_cmd_error;
|
||||||
|
lblWarning->set_text(mess_error);
|
||||||
|
}
|
||||||
|
str_cmd_error = "";
|
||||||
|
obj_load.set_count_error(0);
|
||||||
|
obj_save.set_count_error(0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info_status_app(info_box_ok_css);
|
||||||
|
imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU);
|
||||||
|
if (mess == 0) {
|
||||||
|
lblWarning->set_text(local_load_ok);
|
||||||
|
}
|
||||||
|
else if (mess == 1) {
|
||||||
|
lblWarning->set_text(global_load_ok);
|
||||||
|
}
|
||||||
|
else if (mess == 2) {
|
||||||
|
lblWarning->set_text(local_ok_written);
|
||||||
|
}
|
||||||
|
else if (mess == 3) {
|
||||||
|
lblWarning->set_text(global_ok_written);
|
||||||
|
}
|
||||||
|
else if (mess == 4) {
|
||||||
|
lblWarning->set_text(successfully_save_all);
|
||||||
|
}
|
||||||
|
else if (mess == 5) {
|
||||||
|
lblWarning->set_text(nothing_save);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow() {}
|
||||||
|
|
||||||
|
void help() {
|
||||||
|
string version = string(str_version) + version_application + "\n";
|
||||||
|
cout << version.c_str();
|
||||||
|
cout << str_help_h;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
#cmakedefine WEBKIT_FOUND
|
@ -0,0 +1,91 @@
|
|||||||
|
#include "ubl-util-standard.h"
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#ifndef UBL_GET_STANDARD_UI
|
||||||
|
#define UBL_GET_STANDARD_UI
|
||||||
|
|
||||||
|
|
||||||
|
inline returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id){
|
||||||
|
returnstruct *ret=(returnstruct*)malloc(sizeof(returnstruct*));
|
||||||
|
if (left_plug_id>0&&LeftWidget){
|
||||||
|
GtkWidget *plug=gtk_plug_new(left_plug_id);
|
||||||
|
GtkWidget *toplug=LeftWidget;
|
||||||
|
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
|
||||||
|
g_object_ref(G_OBJECT(toplug));
|
||||||
|
GtkWidget *parent=gtk_widget_get_parent(toplug);
|
||||||
|
gtk_container_remove(GTK_CONTAINER(parent),toplug);
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
} else
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
gtk_widget_show(GTK_WIDGET(plug));
|
||||||
|
ret->plugLeft=plug;
|
||||||
|
}
|
||||||
|
if (right_plug_id>0&&RightWidget){
|
||||||
|
GtkWidget *plug=gtk_plug_new(right_plug_id);
|
||||||
|
GtkWidget *toplug=RightWidget;
|
||||||
|
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
|
||||||
|
g_object_ref(G_OBJECT(toplug));
|
||||||
|
GtkWidget *parent=gtk_widget_get_parent(toplug);
|
||||||
|
gtk_container_remove(GTK_CONTAINER(parent),toplug);
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
} else
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
gtk_widget_show(GTK_WIDGET(plug));
|
||||||
|
ret->plugRight=plug;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
|
||||||
|
inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id){
|
||||||
|
if (left_plug_id>0&&LeftWidget){
|
||||||
|
GtkWidget *plug=gtk_plug_new(left_plug_id);
|
||||||
|
GtkWidget *toplug=GTK_WIDGET(LeftWidget->gobj());
|
||||||
|
{GdkScreen *screen = gtk_widget_get_screen(plug);
|
||||||
|
gtk_widget_set_app_paintable(plug,TRUE);
|
||||||
|
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
|
||||||
|
gtk_widget_set_visual(plug, colormap);}
|
||||||
|
{GdkScreen *screen = gtk_widget_get_screen(toplug);
|
||||||
|
gtk_widget_set_app_paintable(toplug,TRUE);
|
||||||
|
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
|
||||||
|
gtk_widget_set_visual(toplug, colormap);}
|
||||||
|
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
|
||||||
|
g_object_ref(G_OBJECT(toplug));
|
||||||
|
GtkWidget *parent=gtk_widget_get_parent(toplug);
|
||||||
|
gtk_container_remove(GTK_CONTAINER(parent),toplug);
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
} else
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
gtk_widget_show(GTK_WIDGET(plug));
|
||||||
|
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkim");
|
||||||
|
gtk_style_context_add_class(gtk_widget_get_style_context(toplug),"bkim");
|
||||||
|
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar");
|
||||||
|
}
|
||||||
|
if (right_plug_id>0&&RightWidget){
|
||||||
|
GtkWidget *plug=gtk_plug_new(right_plug_id);
|
||||||
|
GtkWidget *toplug=GTK_WIDGET(RightWidget->gobj());
|
||||||
|
{GdkScreen *screen = gtk_widget_get_screen(plug);
|
||||||
|
gtk_widget_set_app_paintable(plug,TRUE);
|
||||||
|
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
|
||||||
|
gtk_widget_set_visual(plug, colormap);}
|
||||||
|
{GdkScreen *screen = gtk_widget_get_screen(toplug);
|
||||||
|
gtk_widget_set_app_paintable(toplug,TRUE);
|
||||||
|
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
|
||||||
|
gtk_widget_set_visual(toplug, colormap);}
|
||||||
|
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
|
||||||
|
g_object_ref(G_OBJECT(toplug));
|
||||||
|
GtkWidget *parent=gtk_widget_get_parent(toplug);
|
||||||
|
gtk_container_remove(GTK_CONTAINER(parent),toplug);
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
} else
|
||||||
|
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
|
||||||
|
gtk_widget_show(GTK_WIDGET(plug));
|
||||||
|
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkim");
|
||||||
|
gtk_style_context_add_class(gtk_widget_get_style_context(toplug),"bkim");
|
||||||
|
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef __cplusplus
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include <gtk/gtkx.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GtkWidget *plugLeft;
|
||||||
|
GtkWidget *plugRight;
|
||||||
|
|
||||||
|
|
||||||
|
} returnstruct;
|
||||||
|
static returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id);
|
||||||
|
#else
|
||||||
|
#include <gtkmm.h>
|
||||||
|
#include <gtkmm/stock.h>
|
||||||
|
#include <gtkmm/window.h>
|
||||||
|
#include <gtkmm/plug.h>
|
||||||
|
|
||||||
|
|
||||||
|
static void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id);
|
||||||
|
#endif
|
@ -0,0 +1,149 @@
|
|||||||||||||
|
#include "util.h"
|
||||||||||||
|
|
||||||||||||
|
namespace Utils {
|
||||||||||||
|
|
||||||||||||
|
string format_str_size(int num, int index) {
|
||||||||||||
|
string value = "";
|
||||||||||||
|
value = to_string(num);
|
||||||||||||
|
if (num == 0) {
|
||||||||||||
|
return value;
|
||||||||||||
|
}
|
||||||||||||
|
if (index == 1) {
|
||||||||||||
|
value += "M";
|
||||||||||||
|
}
|
||||||||||||
|
else if (index == 2) {
|
||||||||||||
|
value += "G";
|
||||||||||||
|
}
|
||||||||||||
|
else if (index == 3) {
|
||||||||||||
|
value += "T";
|
||||||||||||
|
}
|
||||||||||||
|
return value;
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
array<vector<string>, 5> read_csv(const string& filename) {
|
||||||||||||
|
array<vector<string>, 5> array_vectors;
|
||||||||||||
|
vector<string> vec_option;
|
||||||||||||
|
vector<string> vec_opcision;
|
||||||||||||
|
ifstream file(filename);
|
||||||||||||
|
string line;
|
||||||||||||
|
char delimiter = ',';
|
||||||||||||
|
getline(file, line);
|
||||||||||||
|
while (getline(file, line)) {
|
||||||||||||
|
stringstream stream(line);
|
||||||||||||
|
string option;
|
||||||||||||
|
string opcision;
|
||||||||||||
|
getline(stream, option, delimiter);
|
||||||||||||
|
string line_local = stream.str();
|
||||||||||||
|
if (line_local.find("\"") != string::npos) {
|
||||||||||||
|
string str_delimiter = "\"";
|
||||||||||||
|
vector<int> point = find_all(line_local, str_delimiter);
|
||||||||||||
|
size_t len = point.size();
|
||||||||||||
|
if (len >= 2) {
|
||||||||||||
|
int index_start = point[len-2];
|
||||||||||||
|
int index_end = point[len-1];
|
||||||||||||
|
opcision = line_local.substr(index_start, index_end);
|
||||||||||||
|
index_end = opcision.find("\"");
|
||||||||||||
|
if (opcision.find("\"") != string::npos) {
|
||||||||||||
|
opcision.replace(index_end, opcision.length(), "");
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
}
|
||||||||||||
|
else {
|
||||||||||||
|
opcision = "error";
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
}
|
||||||||||||
|
else{
|
||||||||||||
|
getline(stream, opcision, delimiter);
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
vec_option.push_back(option);
|
||||||||||||
|
vec_opcision.push_back(opcision);
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
array_vectors[0] = vec_option;
|
||||||||||||
|
array_vectors[1] = vec_opcision;
|
||||||||||||
|
return array_vectors;
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
string call(string cmd) {
|
||||||||||||
|
FILE *fp;
|
||||||||||||
|
int status;
|
||||||||||||
|
char path[PATH_MAX] = {0};
|
||||||||||||
|
fp = popen(cmd.c_str(), "r");
|
||||||||||||
|
if (fp == NULL) {
|
||||||||||||
|
exit(1);
|
||||||||||||
|
}
|
||||||||||||
|
while (fgets(path, PATH_MAX, fp) != NULL) {
|
||||||||||||
|
break;
|
||||||||||||
|
}
|
||||||||||||
|
status = pclose(fp);
|
||||||||||||
|
if (status == -1) {
|
||||||||||||
|
exit(1);
|
||||||||||||
|
}
|
||||||||||||
|
return path;
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
vector<int> find_all(string &str_ntp, string substr) {
|
||||||||||||
|
size_t index = 0;
|
||||||||||||
|
vector<int> sub_index;
|
||||||||||||
|
while ((index = str_ntp.find(substr, index)) != std::string::npos) {
|
||||||||||||
|
index += substr.length();
|
||||||||||||
|
sub_index.push_back(index);
|
||||||||||||
|
}
|
||||||||||||
|
return sub_index;
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
void str_remove(std::string& source, std::string to_remove) {
|
||||||||||||
|
string::size_type n = to_remove.length();
|
||||||||||||
|
for (string::size_type i = source.find(to_remove);
|
||||||||||||
|
i != string::npos;
|
||||||||||||
|
i = source.find(to_remove))
|
||||||||||||
|
source.erase(i, n);
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
void str_replace_all(std::string& str_base, string str_find, string sReplacement)
|
||||||||||||
|
{
|
||||||||||||
|
size_t pos = 0, fpos;
|
||||||||||||
|
while ((fpos = str_base.find(str_find, pos)) != std::string::npos)
|
||||||||||||
|
{
|
||||||||||||
|
str_base.replace(fpos, str_find.size(), sReplacement);
|
||||||||||||
|
pos = fpos + sReplacement.size();
|
||||||||||||
|
}
|
||||||||||||
|
}
|
||||||||||||
|
std::vector<std::string> split(std::string text, char delim) {
|
||||||||||||
|
std::string line;
|
||||||||||||
|
std::vector<std::string> vec;
|
||||||||||||
|
std::stringstream ss(text);
|
||||||||||||
|
while(std::getline(ss, line, delim)) {
|
||||||||||||
|
vec.push_back(line);
|
||||||||||||
|
}
|
||||||||||||
|
return vec;
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
asmeron
commented 2 years ago
Review
Зачем это в квотах ?
Igor1
commented 2 years ago
Review
Убрал. |
|||||||||||||
|
int synopsis_show(string str_link) {
|
||||||||||||
|
// gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")
|
||||||||||||
|
string cmd = "xdg-open " + str_link;
|
||||||||||||
|
if (geteuid() == 0) {
|
||||||||||||
|
string response_user = getlogin();
|
||||||||||||
|
cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \"";
|
||||||||||||
|
}
|
||||||||||||
|
return system(cmd.c_str());
|
||||||||||||
|
}
|
||||||||||||
|
|
||||||||||||
|
string file_read(string filename) {
|
||||||||||||
|
string line;
|
||||||||||||
|
string buffer;
|
||||||||||||
|
std::ifstream in(filename); // окрываем файл для чтения
|
||||||||||||
|
if (in.is_open())
|
||||||||||||
|
{
|
||||||||||||
|
while (getline(in, line))
|
||||||||||||
|
{
|
||||||||||||
|
buffer += line;
|
||||||||||||
|
}
|
||||||||||||
|
}
|
||||||||||||
|
return buffer;
|
||||||||||||
|
}
|
||||||||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef UTIL_H
|
||||||
|
#define UTIL_H
|
||||||
|
#include "project_lib.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace Utils {
|
||||||
|
template<typename Type>
|
||||||
|
struct Result{
|
||||||
|
Type response;
|
||||||
|
int error;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Passwd {
|
||||||
|
string user;
|
||||||
|
int uid;
|
||||||
|
};
|
||||||
|
|
||||||
|
string format_str_size(int num, int index);
|
||||||
|
std::array<std::vector<std::string>, 5> read_csv(const std::string& filename);
|
||||||
|
std::string call(std::string cmd);
|
||||||
|
vector<int> find_all(string &str_ntp, string substr);
|
||||||
|
void str_remove(std::string& source, std::string to_remove);
|
||||||
|
void str_replace_all(string &str_base, string str_find, string str_replace);
|
||||||
|
std::vector<std::string> split(std::string text, char delim);
|
||||||
|
vector <string> pars_users();
|
||||||
|
int synopsis_show(string str_link);
|
||||||
|
string file_read(string filename);
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,149 @@
|
|||||||
|
.textHead{
|
||||||
|
text-shadow: 2px 2px @theme_bg_color;
|
||||||
|
color: @theme_text_color;
|
||||||
|
}
|
||||||
|
.boxInfoMessError{
|
||||||
|
background-color: #ea9999;
|
||||||
|
}
|
||||||
|
.boxInfoMessOK{
|
||||||
|
background-color: #f3f0ac;
|
||||||
|
}
|
||||||
|
.bannerbackground {
|
||||||
|
background-color: #404040;
|
||||||
|
}
|
||||||
|
.textHead{
|
||||||
|
text-shadow: 1px 1px #ffffff;
|
||||||
|
}
|
||||||
|
.view_app {
|
||||||
|
background-color: @theme_bg_color;
|
||||||
|
}
|
||||||
|
.view_app.view.cell:selected {
|
||||||
|
background-color:@theme_selected_bg_color;
|
||||||
|
color:@theme_selected_text_color;
|
||||||
|
transition: 10ms ease-out;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
#GnomeIcon{
|
||||||
|
border-style:solid;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
border-image: linear-gradient(90deg, alpha(@theme_text_color,0.4) 55%, alpha(@theme_bg_color, 0) 100%);
|
||||||
|
border-image-slice: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#SepIcon{
|
||||||
|
background-color: alpha(@theme_text_color, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#iconlabel {
|
||||||
|
font-size:14px;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
}
|
||||||
|
.roundborder * {
|
||||||
|
border-width:0px;
|
||||||
|
border-radius:5px;
|
||||||
|
}
|
||||||
|
.noborder {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.menu:hover {
|
||||||
|
border-color:alpha(@theme_text_color, 0.01);
|
||||||
|
}
|
||||||
|
.menu {
|
||||||
|
border-color:alpha(@theme_text_color, 0.01);
|
||||||
|
}
|
||||||
|
.menu:hover >* {
|
||||||
|
border-color:alpha(@theme_text_color, 0.01);
|
||||||
|
}
|
||||||
|
.menuitembottom{
|
||||||
|
margin-top:0px;
|
||||||
|
margin-bottom:3px;
|
||||||
|
}
|
||||||
|
.menuitemmiddle{
|
||||||
|
margin-top:0px;
|
||||||
|
margin-bottom:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menuitemtop{
|
||||||
|
margin-bottom:0px;
|
||||||
|
}
|
||||||
|
.menuitemtop *{
|
||||||
|
margin:2px 2px 0 2px;
|
||||||
|
padding: 5px 10px 3px 5px;
|
||||||
|
}
|
||||||
|
.menuitemmiddle *{
|
||||||
|
margin:0 2px 0 2px;
|
||||||
|
padding: 3px 10px 3px 5px;
|
||||||
|
}
|
||||||
|
.menuitembottom *{
|
||||||
|
margin:0 2px 2px 2px;
|
||||||
|
padding: 3px 10px 5px 5px;
|
||||||
|
}
|
||||||
|
.menuitemtop:hover {
|
||||||
|
background:@theme_bg_color;
|
||||||
|
border-color:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
}
|
||||||
|
.menuitemmiddle:hover {
|
||||||
|
background:@theme_bg_color;
|
||||||
|
border-color:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
}
|
||||||
|
.menuitembottom:hover {
|
||||||
|
background:@theme_bg_color;
|
||||||
|
border-color:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
|
||||||
|
}
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workingbg, #workingbg {
|
||||||
|
background-color:@theme_base_color;
|
||||||
|
}
|
||||||
|
.workingbg.view.cell:selected {
|
||||||
|
background-color:@theme_selected_bg_color;
|
||||||
|
}
|
||||||
|
.workingbg.view.cell:hover {
|
||||||
|
background-color:darker(@theme_selected_bg_color);
|
||||||
|
color:@theme_selected_text_color;
|
||||||
|
border-radius:3px;
|
||||||
|
}
|
||||||
|
.bkim {
|
||||||
|
transition: 200ms ease-out;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.noborder{
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bkim{
|
||||||
|
opacity:0.99;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bkim_no_plug{
|
||||||
|
background-color: transparent;
|
||||||
|
opacity:0.99;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Name=ubl-settings-diskquota
|
||||||
|
Name[ru]=Настройка дисковых квот
|
||||||
|
GenericName=ubl-settings-diskquota
|
||||||
|
GenericName[ru]=Настройка дисковых квот
|
||||||
|
Comment=Application for managing and configuring disk quotas
|
||||||
|
Comment[ru]=Приложение по управлению и настройке дисковых квот
|
||||||
|
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-SystemSettings;
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,814 @@
|
|||||||||||||
|
# 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 <info@ublinux.com>, 2022
|
||||||||||||
|
#
|
||||||||||||
|
#, fuzzy
|
||||||||||||
|
msgid ""
|
||||||||||||
|
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 <info@ublinux.com>\n"
|
||||||||||||
|
"Language-Team: Russian - UBLinux Team <info@ublinux.com>\n"
|
||||||||||||
|
"Language: Russian\n"
|
||||||||||||
|
"MIME-Version: 1.0\n"
|
||||||||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||||||||
|
|
||||||||||||
|
msgid "Would you like to read documentation in the Web?"
|
||||||||||||
|
msgstr "Вы хотите прочитать справку в Сети?"
|
||||||||||||
|
|
||||||||||||
|
msgid ""
|
||||||||||||
|
"You will be redirected to documentation site, where user help pages are "
|
||||||||||||
|
"translated and supported by community."
|
||||||||||||
|
msgstr ""
|
||||||||||||
|
"Вы будете перенаправлены на сайт с документацией где страницы помощи "
|
||||||||||||
|
"переводятся и поддерживаются сообществом."
|
||||||||||||
|
|
||||||||||||
|
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 "Настройка параметров дисковых квот для системных групп и пользователей"
|
||||||||||||
|
|
||||||||||||
|
#: 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 "User"
|
||||||||||||
|
msgstr "Пользователь"
|
||||||||||||
|
|
||||||||||||
|
msgid "Group"
|
||||||||||||
|
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 ""
|
||||||||||||
|
"Мягкий лимит\n"
|
||||||||||||
|
"(объём)"
|
||||||||||||
|
|
||||||||||||
|
#: 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"
|
||||||||||||
asmeron
commented 2 years ago
Review
?? |
|||||||||||||
|
msgstr "Квоты"
|
||||||||||||
|
|
||||||||||||
|
#~ msgid "Severe limitation (size)"
|
||||||||||||
|
#~ msgstr "Жесткое лимит (объём)"
|
||||||||||||
|
|
||||||||||||
|
#, fuzzy
|
||||||||||||
|
#~ msgid "Hard limit activation time (files)"
|
||||||||||||
|
#~ msgstr "Время активации жесткого граничения (файла)"
|
Loading…
Reference in new issue
Указать правильное название !
Если я правильно понял то, исправил
7391ba0f89
Не исправил !
Правильное название: Настройка дисковых квот