Merge pull request 'master' (#62) from YanTheKaller/ubl-settings-logging:master into master

Reviewed-on: #62
pull/139/head
Dmitry Razumov 2 years ago
commit 2c797d7998

@ -139,6 +139,7 @@ install: check uninstall
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.trash-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.sort-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.sync-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.funnel-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.generic1-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.generic2-symbolic.svg"
@ -150,6 +151,7 @@ install: check uninstall
@install -Dm644 -t "${DESTDIR}/usr/share/${PKGNAME}/csv/" "journals_list.csv"
@install -Dm644 -t "${DESTDIR}/usr/share/${PKGNAME}/csv/" "logging_services.csv"
@install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy"
@install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "com.ublinux.${PKGNAME}.auth.policy"
@if [ -z ${DESTDIR} ]; then \
[ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \
update-desktop-database --quiet &>/dev/null || true; \

@ -0,0 +1,23 @@
<?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="com.ublinux.ubl-settings-logging">
<description>Run ubl-settings-logging as root</description>
<description xml:lang="ru">Запуск утилиты ubl-settings-logging с правами root</description>
<message>Authentication is required to run ubl-settings-logging</message>
<message xml:lang="ru">Требуется авторизация для запуска утилиты ubl-settings-logging с правами root</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pkexec</annotate>
</action>
</policyconfig>

@ -10,6 +10,7 @@
<file>ubl-settings-logging-rules.glade</file>
<file>ubl-settings-logging-filechooser.glade</file>
<file>ubl-settings-logging-logrotate-table.glade</file>
<file>ubl-settings-logging-terminal.glade</file>
</gresource>
<gresource prefix="/com/ublinux/css">
<file>ubl-settings-logging.css</file>

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1359"
width="256"
height="256"
viewBox="0 0 256 256"
sodipodi:docname="funnel.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1363" />
<sodipodi:namedview
id="namedview1361"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="1.5333252"
inkscape:cx="133.37027"
inkscape:cy="231.84906"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g1365" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g1365">
<path
style="fill:#313131;stroke-width:0.499256;fill-opacity:1"
d="m 104.65705,237.70905 c -0.62183,-0.24981 -1.35199,-1.03652 -1.62259,-1.74825 -0.31065,-0.81708 -0.49199,-18.8221 -0.49199,-48.8496 V 139.55564 L 63.364841,95.35613 24.187217,51.156622 18.806245,50.863604 C 12.784621,50.535703 10.172614,49.782271 6.8934643,47.427365 -3.1207996,40.235664 -1.3333195,24.490308 10.106237,19.127045 l 2.819779,-1.322011 H 128.00452 243.08303 l 2.81978,1.322011 c 3.59114,1.683651 6.65629,4.748951 8.33921,8.33961 1.8728,3.995783 1.8839,9.615451 0.0268,13.553783 -3.22543,6.840051 -9.19011,9.973686 -19.00052,9.982229 l -3.32143,0.0029 -39.24013,44.276883 -39.24012,44.27689 -0.011,35.72889 c -0.0103,33.46974 -0.0684,35.85515 -0.9194,37.72591 -0.49963,1.09836 -1.22486,2.25007 -1.61161,2.55936 -1.04329,0.83431 -44.14983,22.65836 -44.68151,22.62142 -0.25051,-0.0174 -0.96424,-0.23604 -1.58606,-0.48586 z"
id="path1444" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -1,5 +1,5 @@
Service_Name;Service_Description;command_start;command_stop;command_enable;command_disable;command_status
journald;System event log;systemctl start systemd-journald.service;systemctl stop systemd-journald.service;ubconfig set config SERVICESSTART+=systemd-journald.service;ubconfig set config SERVICESSTART-=systemd-journald.service;systemctl status systemd-journald.service
logrotate;System event log rotation service;systemctl start logrotate.timer;systemctl stop logrotate.timer,systemctl stop logrotate.service;ubconfig set config SERVICESNOSTART-=,logrotate.timer;ubconfig set config SERVICESNOSTART+=,logrotate.timer;systemctl status logrotate.service
logrotate;System event log rotation service;systemctl start logrotate.timer;systemctl stop logrotate.timer logrotate.service;ubconfig set config SERVICESNOSTART-=,logrotate.timer;ubconfig set config SERVICESNOSTART+=,logrotate.timer;systemctl status logrotate.service
#metalog;System event log;systemctl start metalog.service;systemctl stop metalog.service;ubconfig set config SERVICESSTART+=metalog.service;ubconfig set config SERVICESSTART-=metalog.service;systemctl status metalog.service
#syslog-ng;Service for collecting messages from system events of active network devices;systemctl start syslog-ng.service;systemctl stop syslog-ng.service;ubconfig set config SERVICESSTART+=syslog-ng.service;ubconfig set config SERVICESSTART-=syslog-ng.service;systemctl status syslog-ng.service
1 Service_Name Service_Description command_start command_stop command_enable command_disable command_status
2 journald System event log systemctl start systemd-journald.service systemctl stop systemd-journald.service ubconfig set config SERVICESSTART+=systemd-journald.service ubconfig set config SERVICESSTART-=systemd-journald.service systemctl status systemd-journald.service
3 logrotate System event log rotation service systemctl start logrotate.timer systemctl stop logrotate.timer,systemctl stop logrotate.service systemctl stop logrotate.timer logrotate.service ubconfig set config SERVICESNOSTART-=,logrotate.timer ubconfig set config SERVICESNOSTART+=,logrotate.timer systemctl status logrotate.service
4 #metalog System event log systemctl start metalog.service systemctl stop metalog.service ubconfig set config SERVICESSTART+=metalog.service ubconfig set config SERVICESSTART-=metalog.service systemctl status metalog.service
5 #syslog-ng Service for collecting messages from system events of active network devices systemctl start syslog-ng.service systemctl stop syslog-ng.service ubconfig set config SERVICESSTART+=syslog-ng.service ubconfig set config SERVICESSTART-=syslog-ng.service systemctl status syslog-ng.service

@ -13,6 +13,11 @@ include_directories(${VTE291_INCLUDE_DIRS})
link_directories(${VTE291_LIBRARY_DIRS})
add_definitions(${VTE291_CFLAGS_OTHER})
pkg_check_modules(POLKIT REQUIRED polkit-agent-1)
include_directories(${POLKIT_INCLUDE_DIRS})
link_directories(${POLKIT_LIBRARY_DIRS})
add_definitions(${POLKIT_CFLAGS_OTHER})
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
option(WEBKIT_FOUND "No" OFF)
@ -44,6 +49,7 @@ set(DEPENDFILES
../ubl-settings-logging-logrotate.glade
../ubl-settings-logging-logrotate-table.glade
../ubl-settings-logging-filechooser.glade
../ubl-settings-logging-terminal.glade
../gresource.xml
../ubl-settings-logging-banner.png
../ubl-settings-logging.css
@ -89,7 +95,8 @@ set(SOURCE_FILES
set(LIBRARIES
${GTK_LIBRARIES}
${WEBKIT_LIBRARIES}
${VTE291_LIBRARIES}
${VTE291_LIBRARIES}
${POLKIT_LIBRARIES}
pthread)

File diff suppressed because it is too large Load Diff

@ -10,12 +10,14 @@
#include <libintl.h>
#include <vte/vte.h>
#include <sys/types.h>
#include <sys/select.h>
#include <pwd.h>
#include "../compile/ubl-cmake.h"
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
#endif
#include "ubl-strings.h"
#include <polkit/polkit.h>
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-logging"
@ -30,6 +32,7 @@
#define glade_logrotate_table_path "/com/ublinux/ui/ubl-settings-logging-logrotate-table.glade"
#define glade_rules_path "/com/ublinux/ui/ubl-settings-logging-rules.glade"
#define glade_filechooser_path "/com/ublinux/ui/ubl-settings-logging-filechooser.glade"
#define glade_terminal_path "/com/ublinux/ui/ubl-settings-logging-terminal.glade"
#define banner_path "/com/ublinux/images/ubl-settings-logging-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-logging.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
@ -39,6 +42,7 @@
#define journald_size_command "journalctl --disk-usage | grep -oE \"[0-9]{1,}.[0-9]{1,}[A-Z]\""
#define logrotate_size_command(paths) yon_char_unite("du ",paths," |grep -oE '^[0-9]{1,}'",NULL)
#define logrotate_config_path "/etc/logrotate.d/"
#define custom_logs_saving_file_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/logwatcher.csv",NULL)
#define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-logging"
@ -46,14 +50,14 @@
#define JOURNALD(key) yon_char_unite("JOURNALD[",key,"]",NULL)
#define LOGROTATE(key) yon_char_unite("LOGROTATE[",key,"]",NULL)
#define get_journal_output_command "clear;journalctl --no-pager"
#define get_journal_output_since_boot_command "clear;journalctl --no-pager -b"
#define get_journal_output_followed_command "clear;journalctl --no-pager -f"
#define get_journal_output_kernel_command "clear;journalctl --no-pager -k"
#define get_journal_output_prioritied_command "clear;journalctl --no-pager -p err..alert"
#define get_journal_all_boots_command "clear;journalctl --list-boots"
#define get_journal_all_units_command "clear;systemd-analyze blame --no-pager"
#define get_journal_init_tree_command "clear;systemd-analyze critical-chain"
#define get_journal_output_command "clear;SYSTEMD_COLORS=false journalctl --no-pager"
#define get_journal_output_since_boot_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -b"
#define get_journal_output_followed_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -f"
#define get_journal_output_kernel_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -k"
#define get_journal_output_prioritied_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -p err..alert"
#define get_journal_all_boots_command "clear;SYSTEMD_COLORS=false journalctl --no-pager --list-boots"
#define get_journal_all_units_command "clear;SYSTEMD_COLORS=false systemd-analyze blame --no-pager"
#define get_journal_init_tree_command "clear;SYSTEMD_COLORS=false systemd-analyze critical-chain --no-pager"
#define group_list_path "/etc/group"
@ -69,6 +73,7 @@ string version_application;
char *local;
typedef struct {
char **envp;
int always_open_documentation;
int win_pos_x;
int win_pos_y;
@ -88,8 +93,16 @@ typedef struct {
GtkListStore *logrotate_list;
GtkListStore *logrotate_apps_list;
config_str groups;
int groups_size;
config_str *saved_logs;
GPermission *permissions;
pthread_t inspector_thread;
int remove_thread;
} config;
typedef struct {
@ -136,6 +149,8 @@ typedef struct {
GtkWidget *ServicesEnableDisableButton;
GtkListStore *list;
GtkListStore *ServicesList;
GtkWidget *UpgradePermissionsMenuItem;
GtkWidget *PermissionsLock;
// Custom
} main_window;
@ -154,6 +169,7 @@ typedef struct {
typedef struct {
GtkWidget *MainWindow;
GtkWidget *StatusBox;
GtkWidget *adjustment1;
GtkWidget *adjustment2;
GtkWidget *CancelButton;
@ -176,21 +192,25 @@ typedef struct {
} add_log_window;
typedef struct {
GtkWidget *MainWindow;
GtkWidget *plugBox;
GtkWidget *ShowSinceBootButton;
GtkWidget *NewMessagesButton;
GtkWidget *ShowKernelButton;
GtkWidget *ShowPriorityButton;
GtkWidget *UpdateButton;
GtkWidget *ShowAllBootsButton;
GtkWidget *ShowAllUnitsButton;
GtkWidget *ShowInitTreeButton;
GtkWidget *LoggingTerminal;
GtkWidget *JournalActionsBox;
int last_mode;
char *journal_name;
char *journal_paths;
GtkWidget *MainWindow;
GtkWidget *plugBox;
GtkWidget *ShowSinceBootButton;
GtkWidget *NewMessagesButton;
GtkWidget *ShowKernelButton;
GtkWidget *ShowPriorityButton;
GtkWidget *UpdateButton;
GtkWidget *ShowAllBootsButton;
GtkWidget *ShowAllUnitsButton;
GtkWidget *ShowInitTreeButton;
GtkWidget *LoggingNotebook;
GtkWidget *JournalActionsBox;
GtkListStore *list;
GtkWidget *JournaldTree;
dictionary *terminals;
int last_mode;
char *journal_name;
int journal_size;
config_str journal_paths;
} inspector_window;
@ -235,6 +255,7 @@ typedef struct {
GtkWidget *MainWindow;
GtkWidget *CancelButton;
GtkWidget *SaveButton;
GtkWidget *ResetButton;
GtkWidget *LogNameLabel;
GtkWidget *LogDescriptionLabel;
GtkWidget *LogStorageCombo;

@ -101,6 +101,7 @@
#define DAYS_LABEL _("Days")
#define WEEKS_LABEL _("Weeks")
#define YEARS_LABEL _("Years")
#define RESET_LABEL _("Reset")
//ubl-settings-logging-logrotate.glade
#define LOGROTATE_LOG_JOURNAL_TAB_LABEL _("Log/Journal:")
@ -175,6 +176,9 @@
#define SATURDAY_LABEL _("Saturday")
#define SUNDAY_LABEL _("Sunday*")
#define REPEATED_PATHS_LABEL _("Same record already exists")
#define EMPTY_IMPORTANT_LABEL _("Empty important field")
#define REPEAT_PATHS_LABEL _("Repeating paths")
#define WRITE_IMPORTANT_LABEL _("Write down all important fields")
//ubl-settings-logging-logrotate-table.glade
#define SYSTEM_CONFIGURATION_LABEL _("System configuration")
@ -184,4 +188,16 @@
#define ADD_PATHS_LABEL _("Path (-s):")
#define CONTROL_LABEL _("Control:")
#define LOG_LABEL _("Log file")
#define NAME_LABEL _("Name:")
#define NAME_LABEL _("Name:")
//ubl-settings-logging-rules.glade
#define OWNER_LABEL _("Owner rules")
#define GROUP_LABEL _("Group rules")
#define PUBLIC_LABEL _("Public rules")
#define READ_LABEL _("Read")
#define WRITE_LABEL _("Write")
#define EXECUTE_LABEL _("Execute")
#define VALUE_LABEL _("Value:")
//ubl-settings-logging-terminal.glade
#define PATH_NOT_FOUND_LABEL _(": no such file(s)")

@ -622,8 +622,8 @@ char *yon_char_from_float(float int_to_convert)
{
convert_check = convert_check / 10;
}
char *ch = g_malloc0(i * sizeof(char) + 1);
sprintf(ch, "%f", int_to_convert);
char *ch = g_malloc0((i + 9)* sizeof(char));
sprintf(ch, "%.2f", int_to_convert);
return ch;
}
@ -680,24 +680,22 @@ char *yon_char_replace(char *source, char *find, char*replace){
* size of returned array
*/
char **yon_char_parse(char *parameters, int *size, char *divider){
char **string=NULL;
int i=1;
string=malloc(sizeof(char*));
char *paramline=yon_char_new(parameters);
char *param;
while ((param=yon_char_divide_search(paramline,divider,1))){
string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(param);
i++;
if (strcmp(param,paramline)==0) break;
}
// string=realloc(string,sizeof(char*)*i);
// string[i-1]=yon_char_new(paramline);
// i++;
// printf("%d\n",i);
*size=i-1;
return string;
if (parameters){
char **string=NULL;
*size=0;
char *paramline=yon_char_new(parameters);
char *param = strstr(paramline,divider);
for (;param;param=strstr(paramline,divider)){
string = yon_remalloc(string,sizeof(char*)*((*size)+1));
string[(*size)]=yon_char_divide(paramline,strlen(paramline)-strlen(param));
*size=(*size)+1;
}
string = yon_remalloc(string,sizeof(char*)*((*size)+1));
string[(*size)]=paramline;
(*size)+=1;
return string;
}
return NULL;
}
/**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete)
@ -746,6 +744,30 @@ int yon_char_parsed_check_exist(char **parameters, int size, char *param){
return -1;
}
/**yon_char_parsed_check_repeats(char **parameters, int size)
* [EN]
* Checks if [parameters] string array of length [size]
* has repeated elements;
* [RU]
* Проверяет есть ли в массиве строк [parameters], размера [size]
* повторения
*/
int yon_char_parsed_check_repeats(char **parameters, int size, int *first_overlap, int *second_overlap){
if (parameters){
*first_overlap=0;
*second_overlap=0;
for ((*first_overlap)=0;(*first_overlap)<size;(*first_overlap)++){
for ((*second_overlap)=0;(*second_overlap)<size;(*second_overlap)++){
if (parameters[(*first_overlap)]&&parameters[(*second_overlap)]){
if (!strcmp(parameters[(*first_overlap)],parameters[(*second_overlap)])&&(*first_overlap)!=(*second_overlap))
return 1;
}
}
}
}
return 0;
}
/**yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size)
* [EN]
*
@ -1192,7 +1214,7 @@ void *yon_config_get_by_key(char *key){
check_config{
dictionary *dict = NULL;
for_dictionaries(dict, (dictionary*)__yon__config__strings){
if (strcmp(dict->key,key)==0){
if (strcmp(dict->key,key)==0&&((yon_config_parameter*)dict)->flag1!=-1){
return dict->data;
}
}
@ -1205,7 +1227,7 @@ void *yon_config_get_all_by_key(char *key, int *size){
config_str ret_data=NULL;
dictionary *dict = NULL;
for_dictionaries(dict, (dictionary*)__yon__config__strings){
if (strstr(dict->key,key)) {
if (strstr(dict->key,key)&&((yon_config_parameter*)dict)->flag1!=-1) {
char *ret_string = yon_char_unite(dict->key,"=",(char*)dict->data,NULL);
if (ret_data) ret_data = yon_char_parsed_append(ret_data,size,ret_string);
else ret_data = yon_char_parsed_new(size,ret_string,NULL);
@ -1334,12 +1356,17 @@ config_str yon_config_load(char *command, int *str_len){
}
}
/**int yon_config_save_registered(char *path, char *section)
/**int yon_config_save_registered(char *path)
* [EN]
* Saves config with [command]
* Saves config at [path] config.
* [path] can be:
* system
* global
* [RU]
* Выполняет команду [command], добавляя в конец все записи конфига в таком виде:
* [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]"
* Сохраняет конфигурацию в [path] конфиг.
* [path] может быть
* system - локальный конфиг
* global - глобальный конфиг
*/
int yon_config_save_registered(char *path){
check_config{
@ -1350,7 +1377,7 @@ int yon_config_save_registered(char *path){
if (dct->data&&strcmp(yon_dictionary_get_data(dct,char*),"")!=0){
if (((yon_config_parameter*)dct)->flag1==1){
((yon_config_parameter*)dct)->flag1=0;
if (sections_add&&yon_dictionary_get(&sections_add,((yon_config_parameter*)dct)->section)) sections_add->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_add,char*)," ",dct->key,"=",yon_dictionary_get_data(dct,char*),NULL);
if (sections_add&&yon_dictionary_get(&sections_add,((yon_config_parameter*)dct)->section)) sections_add->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_add,char*)," ",dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL);
else yon_dictionary_add_or_create_if_exists_with_data(sections_add,((yon_config_parameter*)dct)->section,yon_char_unite (ubconfig_save_command,path ? yon_char_append(" --target ",path):"", " set ", ((yon_config_parameter*)dct)->section, " ",dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL));
} else if (((yon_config_parameter*)dct)->flag1==-1){
((yon_config_parameter*)dct)->flag1=0;
@ -1376,10 +1403,15 @@ int yon_config_save_registered(char *path){
/**int yon_config_force_save_registered(char *path, char *section)
* [EN]
* Saves config with [command]
* Force config to save at [path] config ignoring parameter save status.
* [path] can be:
* system
* global
* [RU]
* Выполняет команду [command], добавляя в конец все записи конфига в таком виде:
* [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]"
* Принудительно сохраняет конфигурацию в [path] конфиг игнорируя статус параметра.
* [path] может быть
* system - локальный конфиг
* global - глобальный конфиг
*/
int yon_config_force_save_registered(char *path){
check_config{
@ -1389,7 +1421,7 @@ int yon_config_force_save_registered(char *path){
for_dictionaries(dct,(dictionary*)__yon__config__strings){
if (dct->data&&strcmp(yon_dictionary_get_data(dct,char*),"")!=0){
if (((yon_config_parameter*)dct)->flag1==1||((yon_config_parameter*)dct)->flag1==0){
if (sections_add&&yon_dictionary_get(&sections_add,((yon_config_parameter*)dct)->section)) sections_add->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_add,char*)," ",dct->key,"=",yon_dictionary_get_data(dct,char*),NULL);
if (sections_add&&yon_dictionary_get(&sections_add,((yon_config_parameter*)dct)->section)) sections_add->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_add,char*)," ",dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL);
else yon_dictionary_add_or_create_if_exists_with_data(sections_add,((yon_config_parameter*)dct)->section,yon_char_unite (ubconfig_save_command,path ? yon_char_append(" --target ",path):"", " set ", ((yon_config_parameter*)dct)->section, " ",dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL));
} else if (((yon_config_parameter*)dct)->flag1==-1){
if (sections_remove&&yon_dictionary_get(&sections_remove,((yon_config_parameter*)dct)->section)) sections_remove->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_remove,char*)," ",dct->key,NULL);
@ -1481,7 +1513,60 @@ config_str yon_file_open(char *file_path, int *size){
}
return final_string;
}
}
}
/**yon_file_create(char *path, char *name, int rules)
* [EN]
*
* [RU]
* Создать файл с названием [name], находящимся по пути [path]
* С правами доступа [rules] (от 0000 до 0777)
*/
int yon_file_create(char *path, char *name, int rules){
if (path&&name){
char *full_path = yon_char_unite(path,"/",name,NULL);
if (access(full_path,F_OK)){
FILE *fl = fopen(full_path,"w");
if (fl){
chmod(full_path,rules);
fclose(fl);
return 1;
} else {
return 0;
}
} else {
return -1;
}
} else {
return 0;
}
}
/**yon_file_create_full_path(char *path, char *name, int rules)
* [EN]
*
* [RU]
* Создать файл по пути [path]
* С правами доступа [rules] (от 0000 до 0777)
*/
int yon_file_create_full_path(char *path, int rules){
if (path){
if (access(path,F_OK)){
FILE *fl = fopen(path,"w");
if (fl){
chmod(path,rules);
fclose(fl);
return 1;
} else {
return 0;
}
} else {
return -1;
}
} else {
return 0;
}
}
// terminal-using functions
@ -1552,8 +1637,7 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi
VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL);
vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
gtk_container_add(GTK_CONTAINER(place_to_show),terminal);
char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL);
printf("%s\n",install_command);
char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL);
if(endwork_function)
g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument);
vte_terminal_spawn_async(VTE_TERMINAL(terminal),
@ -1606,7 +1690,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
vte_terminal_set_size(VTE_TERMINAL(terminal),10,15);
VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL);
vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL);
char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed; ",command," ; sleep 5; stty -echo; unset PS1","\n",NULL);
if(endwork_function)
g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument);
vte_terminal_spawn_async(VTE_TERMINAL(terminal),
@ -1679,6 +1763,11 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
g_key_file_set_integer(__yon_window_config_file,"window","WindowHeight",__yon_main_window_config.height);
g_key_file_set_integer(__yon_window_config_file,"window","fullscreen",__yon_main_window_config.fullscreen);
dictionary *dict=NULL;
if (__yon_main_window_config.deleted_parameters)
for_dictionaries(dict,__yon_main_window_config.deleted_parameters){
__yon_custom_parameter *param = yon_dictionary_get_data(dict,__yon_custom_parameter*);
g_key_file_remove_key(__yon_window_config_file,param->section,param->parameter_name,NULL);
}
if (__yon_main_window_config.custom_listeners)
for_dictionaries(dict,__yon_main_window_config.custom_listeners){
__yon_listener_parameter *param = yon_dictionary_get_data(dict,__yon_listener_parameter*);
@ -1714,11 +1803,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
break;
}
}
if (__yon_main_window_config.deleted_parameters)
for_dictionaries(dict,__yon_main_window_config.deleted_parameters){
__yon_custom_parameter *param = yon_dictionary_get_data(dict,__yon_custom_parameter*);
g_key_file_remove_key(__yon_window_config_file,param->section,param->parameter_name,NULL);
}
g_key_file_save_to_file(__yon_window_config_file,__yon_window_config_path,NULL);
}
@ -1787,6 +1872,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
}
FILE *fp;
fp=fopen(__yon_window_config_path,"w");
chmod(__yon_window_config_path,0777);
fclose(fp);
g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL);
}
@ -1868,6 +1954,17 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
}
}
void yon_window_config_add_instant_parameter(char *param_name, char *section, void *tracked_value, enum YON_TYPE val_type){
switch (val_type){
case YON_TYPE_BOOLEAN: g_key_file_set_boolean(__yon_window_config_file,section,param_name,*((gboolean*)tracked_value));
break;
case YON_TYPE_INT: g_key_file_set_integer(__yon_window_config_file,section,param_name,*((int*)tracked_value));
break;
case YON_TYPE_STRING: g_key_file_set_string(__yon_window_config_file,section,param_name,(char*)tracked_value);
break;
}
}
void yon_window_config_erase_custom_parameter(char *param_name, char *section){
__yon_custom_parameter *param = NULL;
param = yon_remalloc(param,sizeof(__yon_custom_parameter));
@ -1901,6 +1998,81 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
}
}
void yon_on_window_config_custom_window_destroy(GtkWindow *window, char *window_name){
if (!gtk_window_is_maximized(window)){
int height=0;
int width=0;
int X=0;
int Y=0;
gtk_window_get_position(window,&X,&Y);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"PosX"),"window",&X,YON_TYPE_INT);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"PosY"),"window",&Y,YON_TYPE_INT);
}
}
void yon_on_window_config_custom_window_resize(GtkWindow *window, char *window_name){
if (!gtk_window_is_maximized(window)){
int height=0;
int width=0;
int X=0;
int Y=0;
gtk_window_get_size(window,&width,&height);
gtk_window_get_position(window,&X,&Y);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"Width"),"window",&width,YON_TYPE_INT);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"Height"),"window",&height,YON_TYPE_INT);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"PosX"),"window",&X,YON_TYPE_INT);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"PosY"),"window",&Y,YON_TYPE_INT);
}
}
void yon_window_config_custom_window_setup(GtkWindow *window, char *window_name){
int height=0;
int width=0;
int X=0;
int Y=0;
yon_window_config_get_parameter("window",yon_char_append(window_name,"Width"),&width,YON_TYPE_INT);
yon_window_config_get_parameter("window",yon_char_append(window_name,"Height"),&height,YON_TYPE_INT);
yon_window_config_get_parameter("window",yon_char_append(window_name,"PosX"),&X,YON_TYPE_INT);
yon_window_config_get_parameter("window",yon_char_append(window_name,"PosY"),&Y,YON_TYPE_INT);
if (width&&height)
gtk_window_resize(window,width,height);
if (X&&Y)
gtk_window_move(window,X,Y);
char *signals_window_name = yon_char_new(window_name);
g_signal_connect(G_OBJECT(window),"check-resize",G_CALLBACK(yon_on_window_config_custom_window_resize),signals_window_name);
g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(yon_on_window_config_custom_window_destroy),signals_window_name);
}
void yon_window_config_custom_window_get(GtkWindow *window, char *window_name){
int height=0;
int width=0;
int X=0;
int Y=0;
yon_window_config_get_parameter("window",yon_char_append(window_name,"Width"),&width,YON_TYPE_INT);
yon_window_config_get_parameter("window",yon_char_append(window_name,"Height"),&height,YON_TYPE_INT);
yon_window_config_get_parameter("window",yon_char_append(window_name,"PosX"),&X,YON_TYPE_INT);
yon_window_config_get_parameter("window",yon_char_append(window_name,"PosY"),&Y,YON_TYPE_INT);
if (width&&height)
gtk_window_resize(window,width,height);
if (X&&Y)
gtk_window_move(window,X,Y);
}
void yon_window_config_custom_window_set(GtkWindow *window, char *window_name){
int height=0;
int width=0;
int X=0;
int Y=0;
gtk_window_get_size(window,&width,&height);
gtk_window_get_position(window,&X,&Y);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"Width"),"window",&width,YON_TYPE_INT);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"Height"),"window",&height,YON_TYPE_INT);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"PosX"),"window",&X,YON_TYPE_INT);
yon_window_config_add_instant_parameter(yon_char_append(window_name,"PosY"),"window",&Y,YON_TYPE_INT);
}
GtkWidget *yon_ubl_menu_item_about_new(char *buttonname){
GtkWidget *menu_item = gtk_menu_item_new();
gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"menuitembottom");
@ -2092,6 +2264,30 @@ void yon_ubl_status_highlight_incorrect(GtkWidget *widget){
GThread *thread = g_thread_new(NULL,(GThreadFunc)_yon_ubl_status_highlight_incorrect,widget);
}
void _yon_ubl_status_list_store_highlight_incorrect(GtkWidget **widget_pack){
GtkListStore *list = (GtkListStore*)widget_pack[0];
GtkTreeIter *iter = (GtkTreeIter*)widget_pack[1];
GdkRGBA rgba,rgba2;
rgba.alpha=1;
rgba.blue=153.0/255.0;
rgba.green=153.0/255.0;
rgba.red=234.0/255.0;
rgba2.alpha=1;
rgba2.blue=0;
rgba2.green=0;
rgba2.red=0;
gtk_list_store_set(list,iter,1,gdk_rgba_to_string(&rgba2),2,gdk_rgba_to_string(&rgba),-1);
sleep(5);
gtk_list_store_set(list,iter,1,NULL,2,NULL,-1);
}
void yon_ubl_status_list_store_highlight_incorrect(GtkListStore *list, GtkTreeIter *iter){
GtkWidget **pack = malloc(sizeof(GtkWidget *)*2);
pack[0]=(GtkWidget*)list;
pack[1]=(GtkWidget*)iter;
GThread *thread = g_thread_new(NULL,(GThreadFunc)_yon_ubl_status_list_store_highlight_incorrect,pack);
}
struct temp_statusbox {
int times;
GtkWidget *revealer;
@ -2099,7 +2295,7 @@ struct temp_statusbox {
void _yon_ubl_status_box_timed_remove(struct temp_statusbox *statusstruct){
sleep(statusstruct->times);
if (statusstruct->revealer){
if (status_thread_busy){
gtk_revealer_set_reveal_child(GTK_REVEALER(statusstruct->revealer),0);
sleep(1);
gtk_widget_destroy(statusstruct->revealer);
@ -2108,6 +2304,10 @@ void _yon_ubl_status_box_timed_remove(struct temp_statusbox *statusstruct){
status_thread_busy=0;
}
void __yon_ubl_status_box_destroyed(){
status_thread_busy=0;
}
void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int timeout,BACKGROUND_IMAGE_TYPE type){
if (!status_thread_busy){
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
@ -2121,6 +2321,7 @@ void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int ti
gtk_widget_show_all(revealer);
gtk_revealer_set_reveal_child(GTK_REVEALER(revealer),1);
g_signal_connect(G_OBJECT(revealer),"destroy", G_CALLBACK(__yon_ubl_status_box_destroyed),NULL);
gtk_widget_set_margin_bottom(label,9);
gtk_widget_set_margin_top(label,9);

@ -15,6 +15,7 @@
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <vte/vte.h>
#include <time.h>
#include "../compile/ubl-cmake.h"
#ifdef WEBKIT_FOUND
@ -154,6 +155,8 @@ char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete);
int yon_char_parsed_check_exist(char **parameters, int size, char *param);
int yon_char_parsed_check_repeats(char **parameters, int size, int *first_overlap, int *second_overlap);
int yon_char_find_count(char *source, char *find);
int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size);
@ -188,6 +191,10 @@ apps *yon_apps_get_by_name(apps *applist, char *name, int size);
config_str yon_file_open(char *file_path, int *size);
int yon_file_create(char *path, char *name, int rules);
int yon_file_create_full_path(char *path, int rules);
config_str yon_dir_get_contents(char *dir_path, int *size);
//config functions
@ -288,6 +295,12 @@ void yon_window_config_erase_custom_parameter(char *param_name, char *section);
int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type);
void yon_window_config_custom_window_setup(GtkWindow *window, char *window_name);
void yon_window_config_custom_window_get(GtkWindow *window, char *window_name);
void yon_window_config_custom_window_set(GtkWindow *window, char *window_name);
int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size);
int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find);
@ -354,6 +367,8 @@ void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type);
void yon_ubl_status_highlight_incorrect(GtkWidget *widget);
void yon_ubl_status_list_store_highlight_incorrect(GtkListStore *list, GtkTreeIter *iter);
static int status_thread_busy;
void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int timeout,BACKGROUND_IMAGE_TYPE type);

@ -3,6 +3,13 @@
<interface domain="ubl-settings-logging">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-logging.css -->
<object class="GtkSizeGroup">
<widgets>
<widget name="label1"/>
<widget name="label2"/>
<widget name="label3"/>
</widgets>
</object>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">1024</property>
<property name="step-increment">1</property>
@ -28,26 +35,6 @@
<property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property>
</object>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
<object class="GtkDialog" id="MainWindow">
<property name="width-request">450</property>
<property name="can-focus">False</property>
@ -57,9 +44,6 @@
<child internal-child="vbox">
<object class="GtkBox">
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
@ -103,29 +87,161 @@
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="StatusBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="LogAddingBox">
<object class="GtkFrame" id="StatisticsFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="top-padding">5</property>
<property name="bottom-padding">12</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Log size:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="LogSizeLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0.0 Mb</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Statistics</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<object class="GtkBox" id="LogAddingBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Log/Journal:</property>
<property name="xalign">0</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Log/Journal:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="LogTypeCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="has-frame">False</property>
<items>
<item translatable="yes">Log file</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Name:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="NameEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@ -134,14 +250,34 @@
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="LogTypeCombo">
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="has-frame">False</property>
<items>
<item translatable="yes">Log file</item>
</items>
<property name="can-focus">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<property name="min-content-height">150</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<child>
<object class="GtkBox" id="LogPathsBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
@ -150,10 +286,34 @@
</packing>
</child>
<child>
<object class="GtkLabel">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Name:</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Description:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="LogDescriptionEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@ -161,80 +321,65 @@
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="NameEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="ControlSectionBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkScrolledWindow">
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<property name="min-content-height">150</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<child>
<object class="GtkBox" id="LogPathsBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Control:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<property name="spacing">19</property>
<child>
<object class="GtkLabel" id="label2">
<object class="GtkButton" id="LogrotateButton">
<property name="label" translatable="yes">Logrotate</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Description:</property>
<property name="xalign">0</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="LogDescriptionEntry">
<object class="GtkButton" id="MetalogButton">
<property name="label" translatable="yes">Metalog</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image7</property>
</object>
<packing>
<property name="expand">True</property>
@ -242,196 +387,67 @@
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="ControlSectionBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Control:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">19</property>
<child>
<object class="GtkButton" id="LogrotateButton">
<property name="label" translatable="yes">Logrotate</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="MetalogButton">
<property name="label" translatable="yes">Metalog</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image7</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SyslogButton">
<property name="label" translatable="yes">Syslog-ng</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image6</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="JournaldButton">
<property name="label" translatable="yes">Journald</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image8</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="StatisticsFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="top-padding">5</property>
<property name="bottom-padding">12</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<object class="GtkButton" id="SyslogButton">
<property name="label" translatable="yes">Syslog-ng</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Log size:</property>
<property name="xalign">0</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image6</property>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="LogSizeLabel">
<object class="GtkButton" id="JournaldButton">
<property name="label" translatable="yes">Journald</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0.0 Mb</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image8</property>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child type="label">
<object class="GtkLabel">
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Statistics</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">4</property>
<property name="position">1</property>
</packing>
</child>
</object>
@ -476,11 +492,24 @@
</object>
</child>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label1"/>
<widget name="label2"/>
<widget name="label3"/>
</widgets>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.sort-symbolic</property>
</object>
</interface>

@ -33,7 +33,6 @@
<child>
<object class="GtkCheckButton" id="FileOrDirCheck">
<property name="label" translatable="yes">Choose directory instead of file</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>

@ -2,7 +2,6 @@
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-logging">
<requires lib="gtk+" version="3.24"/>
<requires lib="vte-2.91" version="0.68"/>
<!-- interface-css-provider-path ubl-settings-logging.css -->
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
@ -14,11 +13,6 @@
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment3">
<property name="upper">100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -59,10 +53,19 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.generic7-symbolic</property>
</object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="MainWindow">
<property name="width-request">800</property>
<property name="height-request">600</property>
<property name="can-focus">False</property>
<property name="modal">True</property>
<property name="default-width">800</property>
<property name="default-height">600</property>
<property name="icon-name">com.ublinux.ubl-settings-logging</property>
@ -242,16 +245,10 @@
</packing>
</child>
<child>
<object class="VteTerminal" id="LoggingTerminal">
<object class="GtkNotebook" id="MainNotebook">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hscroll-policy">natural</property>
<property name="vadjustment">adjustment3</property>
<property name="vscroll-policy">natural</property>
<property name="encoding">UTF-8</property>
<property name="scrollback-lines">0</property>
<property name="scroll-on-keystroke">True</property>
<property name="scroll-on-output">False</property>
<property name="can-focus">True</property>
<property name="scrollable">True</property>
</object>
<packing>
<property name="expand">True</property>
@ -260,14 +257,53 @@
</packing>
</child>
<child>
<object class="GtkScrollbar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="adjustment">adjustment3</property>
<object class="GtkScrolledWindow">
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="JournaldTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">liststore1</property>
<property name="headers-visible">False</property>
<property name="enable-grid-lines">both</property>
<property name="tooltip-column">0</property>
<child>
<object class="GtkTreeViewColumn">
<property name="sizing">fixed</property>
<property name="fixed-width">175</property>
<property name="min-width">75</property>
<property name="title" translatable="yes">column</property>
<child>
<object class="GtkCellRendererText">
<property name="ellipsize">end</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">column</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText">
<property name="wrap-mode">word</property>
<property name="wrap-width">500</property>
</object>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
@ -321,5 +357,4 @@
</object>
</child>
</object>
<object class="GtkTextBuffer" id="textbuffer1"/>
</interface>

@ -94,6 +94,7 @@
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@ -963,6 +964,20 @@
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="ResetButton">
<property name="label" translatable="yes">Reset</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
@ -974,7 +989,7 @@
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
<child>
@ -988,7 +1003,7 @@
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
</object>
@ -1047,4 +1062,9 @@
<widget name="label2"/>
</widgets>
</object>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-logging.funnel-symbolic</property>
</object>
</interface>

@ -92,6 +92,10 @@
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<column type="gchararray"/>
<!-- column-name gchararray3 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="MainWindow">
@ -318,12 +322,17 @@
<property name="can-focus">True</property>
<property name="model">liststore1</property>
<property name="headers-visible">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Path</property>
<child>
<object class="GtkCellRendererText" id="PathCell"/>
<attributes>
<attribute name="background">2</attribute>
<attribute name="foreground">1</attribute>
<attribute name="text">0</attribute>
</attributes>
</child>

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<interface domain="ubl-settings-logging">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-logging.css -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-logging">
<requires lib="gtk+" version="3.24"/>
<requires lib="vte-2.91" version="0.68"/>
<object class="GtkAdjustment" id="adjustment3">
<property name="upper">100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkBox" id="TerminalBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="VteTerminal" id="LoggingTerminal">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hscroll-policy">natural</property>
<property name="vadjustment">adjustment3</property>
<property name="vscroll-policy">natural</property>
<property name="cursor-blink-mode">off</property>
<property name="cursor-shape">underline</property>
<property name="encoding">UTF-8</property>
<property name="pointer-autohide">True</property>
<property name="scrollback-lines">0</property>
<property name="scroll-on-keystroke">True</property>
<property name="scroll-on-output">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="UnfoundLabel">
<property name="can-focus">False</property>
<property name="label" translatable="yes">Label</property>
<property name="xalign">0.019999999552965164</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="foreground" value="#e0e01b1b2424"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrollbar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="adjustment">adjustment3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</interface>

@ -473,7 +473,7 @@ translated and supported by community.</property>
<col id="0">journald</col>
<col id="1">/var/log/journal/</col>
<col id="2" translatable="yes">System event log</col>
<col id="3">False</col>
<col id="3">True</col>
<col id="4">0</col>
</row>
</data>
@ -508,6 +508,12 @@ translated and supported by community.</property>
<property name="can-focus">False</property>
<property name="take-focus">False</property>
<property name="reserve-toggle-size">False</property>
<child>
<object class="GtkCheckMenuItem" id="UpgradePermissionsMenuItem">
<property name="can-focus">False</property>
<property name="label" translatable="yes">Upgrade permissions to root</property>
</object>
</child>
</object>
<object class="GtkMenu" id="menu3">
<property name="visible">True</property>
@ -719,7 +725,6 @@ translated and supported by community.</property>
<child>
<object class="GtkButton" id="MainAddButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Add log</property>
@ -1043,6 +1048,7 @@ translated and supported by community.</property>
<object class="GtkHeaderBar" id="headerBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="headerTopic">

@ -413,304 +413,356 @@ msgstr ""
msgid "Years"
msgstr ""
#: source/ubl-strings.h:106
msgid "Log/Journal:"
#: source/ubl-strings.h:104
msgid "Reset"
msgstr ""
#: source/ubl-strings.h:107
msgid "Paths to log and journals files"
msgid "Log/Journal:"
msgstr ""
#: source/ubl-strings.h:108
msgid "On"
msgid "Paths to log and journals files"
msgstr ""
#: source/ubl-strings.h:109
msgid "On"
msgstr ""
#: source/ubl-strings.h:110
msgid "Off"
msgstr ""
#: source/ubl-strings.h:110 source/ubl-strings.h:164
#: source/ubl-strings.h:111 source/ubl-strings.h:165
msgid "Scenarios"
msgstr ""
#: source/ubl-strings.h:111 source/ubl-strings.h:163
#: source/ubl-strings.h:112 source/ubl-strings.h:164
msgid "Scenarios are running for each rotated journal"
msgstr ""
#: source/ubl-strings.h:112
#: source/ubl-strings.h:113
msgid "Command before rotation (one time):"
msgstr ""
#: source/ubl-strings.h:113
#: source/ubl-strings.h:114
msgid "Command after rotation (one time):"
msgstr ""
#: source/ubl-strings.h:114
#: source/ubl-strings.h:115
msgid "Command before rotation:"
msgstr ""
#: source/ubl-strings.h:115
#: source/ubl-strings.h:116
msgid "Command after rotation:"
msgstr ""
#: source/ubl-strings.h:116
#: source/ubl-strings.h:117
msgid "Rotation period:"
msgstr ""
#: source/ubl-strings.h:117
#: source/ubl-strings.h:118
msgid "Maximum size of file:"
msgstr ""
#: source/ubl-strings.h:118
#: source/ubl-strings.h:119
msgid "Checking frequency configuration"
msgstr ""
#: source/ubl-strings.h:119
#: source/ubl-strings.h:120
msgid "File amount:"
msgstr ""
#: source/ubl-strings.h:120
#: source/ubl-strings.h:121
msgid "Store at:"
msgstr ""
#: source/ubl-strings.h:121
#: source/ubl-strings.h:122
msgid "Rotation as user:"
msgstr ""
#: source/ubl-strings.h:122
#: source/ubl-strings.h:123
msgid "Rotation as group:"
msgstr ""
#: source/ubl-strings.h:123
#: source/ubl-strings.h:124
msgid "Rotation configuration"
msgstr ""
#: source/ubl-strings.h:124
#: source/ubl-strings.h:125
msgid "Error processing:"
msgstr ""
#: source/ubl-strings.h:125
#: source/ubl-strings.h:126
msgid "Rotation of jurnal even when it is empty:"
msgstr ""
#: source/ubl-strings.h:126
#: source/ubl-strings.h:127
msgid "Do not rotate journal younger than"
msgstr ""
#: source/ubl-strings.h:127
#: source/ubl-strings.h:128
msgid "days"
msgstr ""
#: source/ubl-strings.h:128
#: source/ubl-strings.h:129
msgid "Delete rotated journals older than"
msgstr ""
#: source/ubl-strings.h:129
#: source/ubl-strings.h:130
msgid "Rotate journals if size more than"
msgstr ""
#: source/ubl-strings.h:130
#: source/ubl-strings.h:131
msgid "but not earlier than the specified time interval"
msgstr ""
#: source/ubl-strings.h:131
#: source/ubl-strings.h:132
msgid "before specified time interval"
msgstr ""
#: source/ubl-strings.h:132
#: source/ubl-strings.h:133
msgid "File choosing configuration"
msgstr ""
#: source/ubl-strings.h:133
#: source/ubl-strings.h:134
msgid "Create log"
msgstr ""
#: source/ubl-strings.h:134
#: source/ubl-strings.h:135
msgid "as user:"
msgstr ""
#: source/ubl-strings.h:135
#: source/ubl-strings.h:136
msgid "as group:"
msgstr ""
#: source/ubl-strings.h:136
#: source/ubl-strings.h:137
msgid "rules:"
msgstr ""
#: source/ubl-strings.h:137
#: source/ubl-strings.h:138
msgid ""
"Cut source journal fileafter copy creating instead of moving old journal "
"file and creating new one"
msgstr ""
#: source/ubl-strings.h:138
#: source/ubl-strings.h:139
msgid "Files and directories configuration"
msgstr ""
#: source/ubl-strings.h:139
#: source/ubl-strings.h:140
msgid "Delay compression by one journal in queue:"
msgstr ""
#: source/ubl-strings.h:140
#: source/ubl-strings.h:141
msgid "Compression configuration"
msgstr ""
#: source/ubl-strings.h:141
#: source/ubl-strings.h:142
msgid "Save original log file after rotation if it has specified extension:"
msgstr ""
#: source/ubl-strings.h:142
#: source/ubl-strings.h:143
msgid "Add date of rotation before log header"
msgstr ""
#: source/ubl-strings.h:143
#: source/ubl-strings.h:144
msgid "Number from which numbering of old logs will begin"
msgstr ""
#: source/ubl-strings.h:144
#: source/ubl-strings.h:145
msgid "Filename configuration"
msgstr ""
#: source/ubl-strings.h:145
#: source/ubl-strings.h:146
msgid "Email after rotation:"
msgstr ""
#: source/ubl-strings.h:146
#: source/ubl-strings.h:147
msgid "adress:"
msgstr ""
#: source/ubl-strings.h:147
#: source/ubl-strings.h:148
msgid "contents:"
msgstr ""
#: source/ubl-strings.h:148 source/ubl-strings.h:161
#: source/ubl-strings.h:149 source/ubl-strings.h:162
msgid "Message configuration"
msgstr ""
#: source/ubl-strings.h:149
#: source/ubl-strings.h:150
msgid "Manual input:"
msgstr ""
#: source/ubl-strings.h:150
#: source/ubl-strings.h:151
msgid "Log (-s) size:"
msgstr ""
#: source/ubl-strings.h:151
#: source/ubl-strings.h:152
msgid "Same directory"
msgstr ""
#: source/ubl-strings.h:152
#: source/ubl-strings.h:153
msgid "Separate directory"
msgstr ""
#: source/ubl-strings.h:153
#: source/ubl-strings.h:154
msgid "Output errors if log file does not exist*"
msgstr ""
#: source/ubl-strings.h:154
#: source/ubl-strings.h:155
msgid "Do not output errors if log file does not exist"
msgstr ""
#: source/ubl-strings.h:155
#: source/ubl-strings.h:156
msgid "Do not output"
msgstr ""
#: source/ubl-strings.h:156
#: source/ubl-strings.h:157
msgid "Output errors"
msgstr ""
#: source/ubl-strings.h:157
#: source/ubl-strings.h:158
msgid "Send Email"
msgstr ""
#: source/ubl-strings.h:158
#: source/ubl-strings.h:159
msgid "Don't send Email"
msgstr ""
#: source/ubl-strings.h:159
#: source/ubl-strings.h:160
msgid "First rotated copy"
msgstr ""
#: source/ubl-strings.h:160
#: source/ubl-strings.h:161
msgid "Last rotated copy"
msgstr ""
#: source/ubl-strings.h:162
#: source/ubl-strings.h:163
msgid "Endwork command:"
msgstr ""
#: source/ubl-strings.h:165
#: source/ubl-strings.h:166
msgid "Hourly"
msgstr ""
#: source/ubl-strings.h:166
#: source/ubl-strings.h:167
msgid "Daily"
msgstr ""
#: source/ubl-strings.h:167
#: source/ubl-strings.h:168
msgid "Weekly*"
msgstr ""
#: source/ubl-strings.h:168
#: source/ubl-strings.h:169
msgid "Monthly"
msgstr ""
#: source/ubl-strings.h:169
#: source/ubl-strings.h:170
msgid "Yearly"
msgstr ""
#: source/ubl-strings.h:170
#: source/ubl-strings.h:171
msgid "Monday"
msgstr ""
#: source/ubl-strings.h:171
#: source/ubl-strings.h:172
msgid "Tuesday"
msgstr ""
#: source/ubl-strings.h:172
#: source/ubl-strings.h:173
msgid "Wednesday"
msgstr ""
#: source/ubl-strings.h:173
#: source/ubl-strings.h:174
msgid "Thursday"
msgstr ""
#: source/ubl-strings.h:174
#: source/ubl-strings.h:175
msgid "Friday"
msgstr ""
#: source/ubl-strings.h:175
#: source/ubl-strings.h:176
msgid "Saturday"
msgstr ""
#: source/ubl-strings.h:176
#: source/ubl-strings.h:177
msgid "Sunday*"
msgstr ""
#: source/ubl-strings.h:178
msgid "Same record already exists"
msgstr ""
#: source/ubl-strings.h:179
msgid "System configuration"
msgid "Empty important field"
msgstr ""
#: source/ubl-strings.h:180
msgid "Repeating paths"
msgstr ""
#: source/ubl-strings.h:181
msgid "Write down all important fields"
msgstr ""
#: source/ubl-strings.h:184
msgid "System configuration"
msgstr ""
#: source/ubl-strings.h:185
msgid "Applications configuration"
msgstr ""
#: source/ubl-strings.h:183
#: source/ubl-strings.h:188
msgid "Path (-s):"
msgstr ""
#: source/ubl-strings.h:184
#: source/ubl-strings.h:189
msgid "Control:"
msgstr ""
#: source/ubl-strings.h:185
#: source/ubl-strings.h:190
msgid "Log file"
msgstr ""
#: source/ubl-strings.h:186
#: source/ubl-strings.h:191
msgid "Name:"
msgstr ""
#: source/ubl-strings.h:194
msgid "Owner rules"
msgstr ""
#: source/ubl-strings.h:195
msgid "Group rules"
msgstr ""
#: source/ubl-strings.h:196
msgid "Public rules"
msgstr ""
#: source/ubl-strings.h:197
msgid "Read"
msgstr ""
#: source/ubl-strings.h:198
msgid "Write"
msgstr ""
#: source/ubl-strings.h:199
msgid "Execute"
msgstr ""
#: source/ubl-strings.h:200
msgid "Value:"
msgstr ""
#: source/ubl-strings.h:203
msgid ": no such file(s)"
msgstr ""
msgid "System event log rotation service"
msgstr ""

@ -423,131 +423,135 @@ msgstr "Недель"
msgid "Years"
msgstr "Лет"
#: source/ubl-strings.h:106
#: source/ubl-strings.h:104
msgid "Reset"
msgstr "По умлочанию"
#: source/ubl-strings.h:107
msgid "Log/Journal:"
msgstr "Лог/Журнал:"
#: source/ubl-strings.h:107
#: source/ubl-strings.h:108
msgid "Paths to log and journals files"
msgstr "Пути к файлам лога/журнала"
#: source/ubl-strings.h:108
#: source/ubl-strings.h:109
msgid "On"
msgstr "Включено"
#: source/ubl-strings.h:109
#: source/ubl-strings.h:110
msgid "Off"
msgstr "Выключено"
#: source/ubl-strings.h:110 source/ubl-strings.h:164
#: source/ubl-strings.h:111 source/ubl-strings.h:165
msgid "Scenarios"
msgstr "Сценарии"
#: source/ubl-strings.h:111 source/ubl-strings.h:163
#: source/ubl-strings.h:112 source/ubl-strings.h:164
msgid "Scenarios are running for each rotated journal"
msgstr "Сценарии запускаются для каждого ротируемого журнала"
#: source/ubl-strings.h:112
#: source/ubl-strings.h:113
msgid "Command before rotation (one time):"
msgstr "Команда перед ротацией (один раз):"
#: source/ubl-strings.h:113
#: source/ubl-strings.h:114
msgid "Command after rotation (one time):"
msgstr "Команда после ротации (один раз):"
#: source/ubl-strings.h:114
#: source/ubl-strings.h:115
msgid "Command before rotation:"
msgstr "Команда перед ротацией:"
#: source/ubl-strings.h:115
#: source/ubl-strings.h:116
msgid "Command after rotation:"
msgstr "Команда после ротации:"
#: source/ubl-strings.h:116
#: source/ubl-strings.h:117
msgid "Rotation period:"
msgstr "Период ротации:"
#: source/ubl-strings.h:117
#: source/ubl-strings.h:118
msgid "Maximum size of file:"
msgstr "Максимальный размер файла:"
#: source/ubl-strings.h:118
#: source/ubl-strings.h:119
msgid "Checking frequency configuration"
msgstr "Настройки частоты проверки"
#: source/ubl-strings.h:119
#: source/ubl-strings.h:120
msgid "File amount:"
msgstr "Количество файлов:"
#: source/ubl-strings.h:120
#: source/ubl-strings.h:121
msgid "Store at:"
msgstr "Хранить в:"
#: source/ubl-strings.h:121
#: source/ubl-strings.h:122
msgid "Rotation as user:"
msgstr "Ротация от пользователя:"
#: source/ubl-strings.h:122
#: source/ubl-strings.h:123
msgid "Rotation as group:"
msgstr "Ротация от группы:"
#: source/ubl-strings.h:123
#: source/ubl-strings.h:124
msgid "Rotation configuration"
msgstr "Настройки ротации"
#: source/ubl-strings.h:124
#: source/ubl-strings.h:125
msgid "Error processing:"
msgstr "Обработка ошибок:"
#: source/ubl-strings.h:125
#: source/ubl-strings.h:126
msgid "Rotation of jurnal even when it is empty:"
msgstr "Ротация файла журнала даже если он пуст:"
#: source/ubl-strings.h:126
#: source/ubl-strings.h:127
msgid "Do not rotate journal younger than"
msgstr "Не ротировать журналы, возраст которых меньше"
#: source/ubl-strings.h:127
#: source/ubl-strings.h:128
msgid "days"
msgstr "дней"
#: source/ubl-strings.h:128
#: source/ubl-strings.h:129
msgid "Delete rotated journals older than"
msgstr "Удалить ротированные журналы старше"
#: source/ubl-strings.h:129
#: source/ubl-strings.h:130
msgid "Rotate journals if size more than"
msgstr "Ротация журналов, если размер превышает"
#: source/ubl-strings.h:130
#: source/ubl-strings.h:131
msgid "but not earlier than the specified time interval"
msgstr "но не раньше указанного интервала времени"
#: source/ubl-strings.h:131
#: source/ubl-strings.h:132
msgid "before specified time interval"
msgstr "до истечения указанного интервала времени"
#: source/ubl-strings.h:132
#: source/ubl-strings.h:133
msgid "File choosing configuration"
msgstr "Настройки выбора файла"
#: source/ubl-strings.h:133
#: source/ubl-strings.h:134
msgid "Create log"
msgstr "Создавать лог"
#: source/ubl-strings.h:134
#: source/ubl-strings.h:135
msgid "as user:"
msgstr "от пользователя:"
#: source/ubl-strings.h:135
#: source/ubl-strings.h:136
msgid "as group:"
msgstr "от группы:"
#: source/ubl-strings.h:136
#: source/ubl-strings.h:137
msgid "rules:"
msgstr "права:"
#: source/ubl-strings.h:137
#: source/ubl-strings.h:138
msgid ""
"Cut source journal fileafter copy creating instead of moving old journal "
"file and creating new one"
@ -555,176 +559,225 @@ msgstr ""
"После создания копии, обрезать исходный файл журнала взамен перемещения "
"старого файла журнала и создания нового"
#: source/ubl-strings.h:138
#: source/ubl-strings.h:139
msgid "Files and directories configuration"
msgstr "Настройки файлов и папок"
#: source/ubl-strings.h:139
#: source/ubl-strings.h:140
msgid "Delay compression by one journal in queue:"
msgstr "Отложить сжание на один журнал в очереди:"
#: source/ubl-strings.h:140
#: source/ubl-strings.h:141
msgid "Compression configuration"
msgstr "Настройка сжатия"
#: source/ubl-strings.h:141
#: source/ubl-strings.h:142
msgid "Save original log file after rotation if it has specified extension:"
msgstr ""
"Сохранять оригинальный лог после ротации, если у него указано расширение:"
#: source/ubl-strings.h:142
#: source/ubl-strings.h:143
msgid "Add date of rotation before log header"
msgstr "Добавлять дату ротации перед заголовком старого лога:"
#: source/ubl-strings.h:143
#: source/ubl-strings.h:144
msgid "Number from which numbering of old logs will begin"
msgstr "Номер, с которого будет начата нумерация старых логов:"
#: source/ubl-strings.h:144
#: source/ubl-strings.h:145
msgid "Filename configuration"
msgstr "Настройка имени файлов"
#: source/ubl-strings.h:145
#: source/ubl-strings.h:146
msgid "Email after rotation:"
msgstr "Отправка Email после ротации:"
#: source/ubl-strings.h:146
#: source/ubl-strings.h:147
msgid "adress:"
msgstr "на адрес:"
#: source/ubl-strings.h:147
#: source/ubl-strings.h:148
msgid "contents:"
msgstr "содержимое:"
#: source/ubl-strings.h:148 source/ubl-strings.h:161
#: source/ubl-strings.h:149 source/ubl-strings.h:162
msgid "Message configuration"
msgstr "Настройка сообщения"
#: source/ubl-strings.h:149
#: source/ubl-strings.h:150
msgid "Manual input:"
msgstr "Команды настройки"
#: source/ubl-strings.h:150
#: source/ubl-strings.h:151
msgid "Log (-s) size:"
msgstr "Общий размер лога (-ов):"
#: source/ubl-strings.h:151
#: source/ubl-strings.h:152
msgid "Same directory"
msgstr "Той же папке"
#: source/ubl-strings.h:152
#: source/ubl-strings.h:153
msgid "Separate directory"
msgstr "Другой папке"
#: source/ubl-strings.h:153
#: source/ubl-strings.h:154
msgid "Output errors if log file does not exist*"
msgstr "Выводить ошибки, если лог файла не существует*"
#: source/ubl-strings.h:154
#: source/ubl-strings.h:155
msgid "Do not output errors if log file does not exist"
msgstr "Не выводить ошибки, если лог файла не существует"
#: source/ubl-strings.h:155
#: source/ubl-strings.h:156
msgid "Do not output"
msgstr "Не выводить"
#: source/ubl-strings.h:156
#: source/ubl-strings.h:157
msgid "Output errors"
msgstr "Выводить ошибки"
#: source/ubl-strings.h:157
#: source/ubl-strings.h:158
msgid "Send Email"
msgstr "Отправлять Email"
#: source/ubl-strings.h:158
#: source/ubl-strings.h:159
msgid "Don't send Email"
msgstr "Не отправлять Email"
#: source/ubl-strings.h:159
#: source/ubl-strings.h:160
msgid "First rotated copy"
msgstr "Первая ротированная копия"
#: source/ubl-strings.h:160
#: source/ubl-strings.h:161
msgid "Last rotated copy"
msgstr "Последняя ротированная копия"
#: source/ubl-strings.h:162
#: source/ubl-strings.h:163
msgid "Endwork command:"
msgstr "Команда перед удалением файла журнала:"
#: source/ubl-strings.h:165
#: source/ubl-strings.h:166
#, fuzzy
msgid "Hourly"
msgstr "Час"
#: source/ubl-strings.h:166
#: source/ubl-strings.h:167
msgid "Daily"
msgstr "День"
#: source/ubl-strings.h:167
#: source/ubl-strings.h:168
msgid "Weekly*"
msgstr "Неделя*"
#: source/ubl-strings.h:168
#: source/ubl-strings.h:169
msgid "Monthly"
msgstr "Месяц"
#: source/ubl-strings.h:169
#: source/ubl-strings.h:170
msgid "Yearly"
msgstr "Год"
#: source/ubl-strings.h:170
#: source/ubl-strings.h:171
msgid "Monday"
msgstr "Понедельник"
#: source/ubl-strings.h:171
#: source/ubl-strings.h:172
msgid "Tuesday"
msgstr "Вторник"
#: source/ubl-strings.h:172
#: source/ubl-strings.h:173
msgid "Wednesday"
msgstr "Среда"
#: source/ubl-strings.h:173
#: source/ubl-strings.h:174
msgid "Thursday"
msgstr "Четверг"
#: source/ubl-strings.h:174
#: source/ubl-strings.h:175
msgid "Friday"
msgstr "Пятница"
#: source/ubl-strings.h:175
#: source/ubl-strings.h:176
msgid "Saturday"
msgstr "Суббота"
#: source/ubl-strings.h:176
#: source/ubl-strings.h:177
msgid "Sunday*"
msgstr "Воскресенье*"
#: source/ubl-strings.h:178
msgid "Same record already exists"
msgstr "Такая запись уже существует"
#: source/ubl-strings.h:179
msgid "Empty important field"
msgstr "Важное поле не заполнено"
#: source/ubl-strings.h:180
msgid "Repeating paths"
msgstr "Повторяющиеся пути"
#: source/ubl-strings.h:181
#, fuzzy
msgid "Write down all important fields"
msgstr "Введите все необходимые поля"
#: source/ubl-strings.h:184
msgid "System configuration"
msgstr "Настройки системы"
#: source/ubl-strings.h:180
#: source/ubl-strings.h:185
msgid "Applications configuration"
msgstr "Настройки приложений"
#: source/ubl-strings.h:183
#: source/ubl-strings.h:188
msgid "Path (-s):"
msgstr "Путь (-и):"
#: source/ubl-strings.h:184
#: source/ubl-strings.h:189
msgid "Control:"
msgstr "Управление:"
#: source/ubl-strings.h:185
#: source/ubl-strings.h:190
msgid "Log file"
msgstr "Файл лога"
#: source/ubl-strings.h:186
#: source/ubl-strings.h:191
msgid "Name:"
msgstr "Имя:"
#: source/ubl-strings.h:194
msgid "Owner rules"
msgstr "Правила владельца"
#: source/ubl-strings.h:195
msgid "Group rules"
msgstr "Правила группы"
#: source/ubl-strings.h:196
msgid "Public rules"
msgstr "Правила остальных"
#: source/ubl-strings.h:197
msgid "Read"
msgstr "Чтение"
#: source/ubl-strings.h:198
msgid "Write"
msgstr "Запись"
#: source/ubl-strings.h:199
msgid "Execute"
msgstr "Исполнение"
#: source/ubl-strings.h:200
msgid "Value:"
msgstr "Значение:"
#: source/ubl-strings.h:203
msgid ": no such file(s)"
msgstr ": файл(ы) не найден(ы)"
msgid "System event log rotation service"
msgstr "Служба ротации системных журналов событий"

Loading…
Cancel
Save