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
Не исправил !
Правильное название: Настройка дисковых квот