|
|
|
|
@ -87,6 +87,38 @@ void on_additional_settings_changed(GtkWidget *self, ubl_settings_usergroups_add
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_additional_settings_user_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_additional_settings_user_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->UsersTree)),&model,&iter)){
|
|
|
|
|
gboolean is_indeletable;
|
|
|
|
|
gtk_tree_model_get(model,&iter,4,&is_indeletable,-1);
|
|
|
|
|
if (!is_indeletable){
|
|
|
|
|
gtk_list_store_remove(window->UsersShutdownList,&iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_additional_settings_group_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_additional_settings_group_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),&model,&iter)){
|
|
|
|
|
gboolean is_indeletable;
|
|
|
|
|
gtk_tree_model_get(model,&iter,4,&is_indeletable,-1);
|
|
|
|
|
if (!is_indeletable){
|
|
|
|
|
gtk_list_store_remove(window->GroupsShutdownList,&iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(){
|
|
|
|
|
ubl_settings_usergroups_additional_settings_window *window = malloc(sizeof(ubl_settings_usergroups_additional_settings_window));
|
|
|
|
|
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_additional_settings);
|
|
|
|
|
@ -116,6 +148,8 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_
|
|
|
|
|
window->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree");
|
|
|
|
|
window->GroupAddButton=yon_gtk_builder_get_widget(builder,"GroupAddButton");
|
|
|
|
|
window->GroupRemoveButton=yon_gtk_builder_get_widget(builder,"GroupRemoveButton");
|
|
|
|
|
window->UsersShutdownList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersShutdownList"));
|
|
|
|
|
window->GroupsShutdownList=GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsShutdownList"));
|
|
|
|
|
|
|
|
|
|
window->default_password=NULL;
|
|
|
|
|
window->default_root_password=NULL;
|
|
|
|
|
@ -125,6 +159,16 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_
|
|
|
|
|
window->user_boot=-1;
|
|
|
|
|
window->password_hash=NULL;
|
|
|
|
|
|
|
|
|
|
g_signal_connect(G_OBJECT(window->UserAddButton),"clicked",G_CALLBACK(on_additional_settings_user_sync_add),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->UserRemoveButton),"clicked",G_CALLBACK(on_additional_settings_user_sync_remove),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->GroupAddButton),"clicked",G_CALLBACK(on_additional_settings_group_sync_add),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->GroupRemoveButton),"clicked",G_CALLBACK(on_additional_settings_group_sync_remove),window);
|
|
|
|
|
|
|
|
|
|
g_signal_connect(G_OBJECT(window->UsersShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->GroupsShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->UserShutdownRevealer),GTK_SWITCH(window->UsersShutdownSwitch));
|
|
|
|
|
yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->GroupShutdownRevealer),GTK_SWITCH(window->GroupsShutdownSwitch));
|
|
|
|
|
|
|
|
|
|
yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"AdditionalSettingsWindow");
|
|
|
|
|
gtk_window_set_title(GTK_WINDOW(window->Window),ADDITIONAL_SETTINGS_TITLE_LABEL);
|
|
|
|
|
char *sync_parameters = yon_config_get_by_key(USERADD_SYNC_parameter);
|
|
|
|
|
@ -211,10 +255,14 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_
|
|
|
|
|
int sync_parsed_size;
|
|
|
|
|
config_str sync_parsed = yon_char_parse(sync_parameters[j],&sync_parsed_size,":");
|
|
|
|
|
int cur_size;
|
|
|
|
|
int yes = yon_parameter_check_tag(parsed[i],sync_parsed[0]);
|
|
|
|
|
if (yes) {
|
|
|
|
|
config_str cur = yon_parameter_get_by_template(parsed[i],sync_parameters[i],&cur_size);
|
|
|
|
|
if (cur){};
|
|
|
|
|
int sync_check = yon_parameter_check_tag(parsed[i],sync_parsed[0]);
|
|
|
|
|
if (sync_check) {
|
|
|
|
|
config_str cur = yon_parameter_get_by_template(parsed[i],sync_parsed[0],&cur_size);
|
|
|
|
|
if (cur){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
gtk_list_store_append(window->UsersShutdownList,&iter);
|
|
|
|
|
gtk_list_store_set(window->UsersShutdownList,&iter,1,sync_parsed[0],2,cur[0],3,cur_size>1?cur[1]:"",-1);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(sync_parsed,sync_parsed_size);
|
|
|
|
|
}
|
|
|
|
|
@ -248,11 +296,7 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_
|
|
|
|
|
g_signal_connect(G_OBJECT(window->PasswordHashCombo),"changed",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->DefaultUserAdministratorCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->UsersBootCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->UsersShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->GroupsBootCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->GroupsShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window);
|
|
|
|
|
yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->UserShutdownRevealer),GTK_SWITCH(window->UsersShutdownSwitch));
|
|
|
|
|
yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->GroupShutdownRevealer),GTK_SWITCH(window->GroupsShutdownSwitch));
|
|
|
|
|
|
|
|
|
|
// g_signal_connect(G_OBJECT(window->UsersBootCheck),"toggled",G_CALLBACK(on_users_boot_toggled),NULL);
|
|
|
|
|
// g_signal_connect(G_OBJECT(window->UsersShutdownCheck),"toggled",G_CALLBACK(on_users_shutdown_toggled),NULL);
|
|
|
|
|
@ -290,7 +334,7 @@ config_str yon_parameter_parse(char *parameter, int *size){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int yon_parameter_check_tag(char *parameter, char *pattern){
|
|
|
|
|
char *tag_template = "<([^>]+)>";
|
|
|
|
|
char *tag_template = "[0-9]{1,}";
|
|
|
|
|
char *converted = "";
|
|
|
|
|
char *current = pattern;
|
|
|
|
|
while (!yon_char_is_empty(current)){
|
|
|
|
|
@ -314,6 +358,8 @@ int yon_parameter_check_tag(char *parameter, char *pattern){
|
|
|
|
|
if (regex){
|
|
|
|
|
GMatchInfo *match;
|
|
|
|
|
if (g_regex_match(regex,parameter,0,&match)){
|
|
|
|
|
char *value = g_match_info_fetch(match, 0);
|
|
|
|
|
if (!strcmp(parameter,value))
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -324,7 +370,7 @@ int yon_parameter_check_tag(char *parameter, char *pattern){
|
|
|
|
|
|
|
|
|
|
config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *size){
|
|
|
|
|
config_str final = NULL;
|
|
|
|
|
char *tag_template = "<([^>]+)>";
|
|
|
|
|
char *tag_template = "[0-9]{1,}";
|
|
|
|
|
char *converted = "";
|
|
|
|
|
char *current = pattern;
|
|
|
|
|
while (!yon_char_is_empty(current)){
|
|
|
|
|
@ -337,18 +383,21 @@ config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *si
|
|
|
|
|
// закрытие тэга не найдено
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
yon_char_append_c(converted,*current);
|
|
|
|
|
char *temp = yon_char_append_c(converted,*current);
|
|
|
|
|
if (!yon_char_is_empty(converted)) free(converted);
|
|
|
|
|
converted=temp;
|
|
|
|
|
current++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
GRegex *regex = g_regex_new(converted,G_REGEX_EXTENDED,0,NULL);
|
|
|
|
|
GRegex *regex = g_regex_new("[0-9]{1,}",G_REGEX_EXTENDED,0,NULL);
|
|
|
|
|
if (regex){
|
|
|
|
|
GMatchInfo *match;
|
|
|
|
|
if (g_regex_match(regex, parameter, 0, &match)) {
|
|
|
|
|
int match_count = g_match_info_get_match_count(match);
|
|
|
|
|
for (int i=0;i<match_count;i++){
|
|
|
|
|
char *value = g_match_info_fetch(match,i);
|
|
|
|
|
while (g_match_info_matches(match)) {
|
|
|
|
|
char *value = g_match_info_fetch(match, 0);
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(final, size, value);
|
|
|
|
|
g_free(value);
|
|
|
|
|
g_match_info_next(match, NULL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
g_match_info_free(match);
|
|
|
|
|
|