From b645de6fd51ac818549e0eceecc416c5a6ca14c4 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 2 Aug 2023 11:40:20 +0600 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D1=8F=202.0=20Beta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/controler.c | 48 +++++++++++++--------- source/model/model.c | 79 ++++++++++++++++++++++++++++++++---- source/model/model.h | 5 +++ source/model/philos_utils.h | 1 - source/view_set_disk.c | 6 +-- source/view_temp_u_g_p.c | 38 +++++++---------- ubl-settings-diskquota.glade | 40 ++++++++++++------ ubl-settings-diskquota.pot | 2 + ubl-settings-diskquota_ru.po | 5 ++- 9 files changed, 156 insertions(+), 68 deletions(-) diff --git a/source/controler.c b/source/controler.c index 65479b6..4187182 100644 --- a/source/controler.c +++ b/source/controler.c @@ -219,6 +219,22 @@ void tree_view_select(GtkWidget* self, vector* vec_temp, hotebook* widgets) { gtk_widget_set_sensitive(widgets->btnEdit, 0); } } + if (vec_temp->vectorList.total > 0 && all_config.v_disk_status.vectorList.total==0) { + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->tree_view)); + if(gtk_tree_selection_get_selected(selection, &model, &iter)) { + gtk_widget_set_sensitive(widgets->btnDel, 1); + } + else { + if (main_config.lock_save_global == 0 || main_config.lock_save_local == 0) { + gtk_widget_set_sensitive(widgets->btnAdd,1); + } + gtk_widget_set_sensitive(widgets->btnAdd, 0); + gtk_widget_set_sensitive(widgets->btnDel, 0); + gtk_widget_set_sensitive(widgets->btnEdit, 0); + } + } else if (!all_config.v_disk_status.vectorList.total && note_selected != 3) { gtk_widget_set_sensitive(widgets->btnAdd, 0); } @@ -252,12 +268,13 @@ void device_remove() { index_selected = -1; disk_status* _config = (disk_status*)all_config.v_disk_status.pfVectorGet(&all_config.v_disk_status, index); all_config.v_disk_remove.pfVectorAdd(&all_config.v_disk_remove, yon_char_new(_config->device)); - del_disk_to_vector_device(&all_config.v_user, _config->device); - del_disk_to_vector_device(&all_config.v_group, _config->device); - del_disk_to_vector_device(&all_config.v_general, _config->device); + model_search_disk_remove(&all_config.v_user, &all_config.v_remove, _config->device); + model_search_disk_remove(&all_config.v_group, &all_config.v_remove, _config->device); + model_search_disk_remove_project(&all_config.v_project,&all_config.v_disk_status, &all_config.v_remove, _config->device); model_clear_cfg_device(_config); all_config.v_disk_status.pfVectorDelete(&all_config.v_disk_status, index); all_config.flag_save = 1; + } } } @@ -270,19 +287,6 @@ void device_remove() { } - -void template_remove(vector* vec_temp, hotebook* widgets, int index) { - if (index!=-1) { - index_selected = -1; - config_u_g_p* _config = (config_u_g_p*)vec_temp->pfVectorGet(vec_temp, index); - char* load_key = yon_char_new(_config->loaded_keys); - all_config.v_remove.pfVectorAdd(&all_config.v_remove, load_key); - model_clear_cfg(_config); - vec_temp->pfVectorDelete(vec_temp, index); - all_config.flag_save = 1; - } -} - void user_remove() { if (note_selected == 0) { GtkTreeIter iter; @@ -291,7 +295,9 @@ void user_remove() { if(gtk_tree_selection_get_selected(selection, &model, &iter)) { int index = wrapper_select_tree_view(&cfg_custom_gui.user); gtk_list_store_remove(cfg_custom_gui.user.liststore, &iter); - template_remove(&all_config.v_user, &cfg_custom_gui.user,index); + model_template_remove(&all_config.v_user, &all_config.v_remove, index); + index_selected = -1; + all_config.flag_save = 1; } } @@ -305,7 +311,9 @@ void group_remove() { if(gtk_tree_selection_get_selected(selection, &model, &iter)) { int index = wrapper_select_tree_view(&cfg_custom_gui.group); gtk_list_store_remove(cfg_custom_gui.group.liststore, &iter); - template_remove(&all_config.v_group ,&cfg_custom_gui.group,index); + model_template_remove(&all_config.v_group, &all_config.v_remove, index); + index_selected = -1; + all_config.flag_save = 1; } } } @@ -318,7 +326,9 @@ void project_remove() { if(gtk_tree_selection_get_selected(selection, &model, &iter)) { int index = wrapper_select_tree_view(&cfg_custom_gui.project); gtk_list_store_remove(cfg_custom_gui.project.liststore, &iter); - template_remove(&all_config.v_project, &cfg_custom_gui.project, index); + model_template_remove(&all_config.v_project, &all_config.v_remove, index); + index_selected = -1; + all_config.flag_save = 1; } } diff --git a/source/model/model.c b/source/model/model.c index 6aa97e5..673f03f 100644 --- a/source/model/model.c +++ b/source/model/model.c @@ -107,15 +107,16 @@ int fill_tree_view_project(config_all* all_config,hotebook* widget , char* str_f char* deferring_size = wrapper_str_time(_config->deferring_size); char* deferring_file = wrapper_str_time(_config->deferring_file); gtk_list_store_set(widget->liststore,&iter, - 0,fill_tree_view_id(_config->id), + 0,model_find_path_to_disk(&all_config->v_disk_status, _config->UNIX_file), 1,_config->UNIX_file, - 2,format_actors(&_config->actors), - 3,philos_format_cfg_str_size_memory("", check_null(_config->soft_restriction_size),_config->soft_restriction_size_pow), - 4,philos_format_cfg_str_size_memory("", check_null(_config->severe_limitation_size),_config->severe_limitation_size_pow), - 5,deferring_size, - 6,check_null_to_str(_config->soft_restriction_file), - 7,check_null_to_str(_config->severe_limitation_file), - 8,deferring_file, + 2,fill_tree_view_id(_config->id), + 3,format_actors(&_config->actors), + 4,philos_format_cfg_str_size_memory("", check_null(_config->soft_restriction_size),_config->soft_restriction_size_pow), + 5,philos_format_cfg_str_size_memory("", check_null(_config->severe_limitation_size),_config->severe_limitation_size_pow), + 6,deferring_size, + 7,check_null_to_str(_config->soft_restriction_file), + 8,check_null_to_str(_config->severe_limitation_file), + 9,deferring_file, -1); } @@ -301,4 +302,66 @@ void del_disk_to_vector_device(vector* vec_temp, char* str_disk) { vec_temp->pfVectorDelete(vec_temp, i); } } +} + +void model_template_remove(vector* vec_temp, vector* vec_remove, int index) { + if (index!=-1) { + config_u_g_p* _config = (config_u_g_p*)vec_temp->pfVectorGet(vec_temp, index); + char* load_key = yon_char_new(_config->loaded_keys); + vec_remove->pfVectorAdd(vec_remove, load_key); + model_clear_cfg(_config); + vec_temp->pfVectorDelete(vec_temp, index); + } +} + +void model_search_disk_remove(vector* vec_temp, vector* vec_remove, char* str_disk) { + for (int i = 0; i < vec_temp->vectorList.total; i++) { + config_u_g_p* _config = (config_u_g_p*)vec_temp->pfVectorGet(vec_temp, i); + if (strstr(_config->UNIX_file, str_disk)) { + model_template_remove(vec_temp,vec_remove, i); + } + } +} + +char* model_find_path_to_disk(vector* vec_temp, char* str_path) { + for (int i = 0; i < vec_temp->vectorList.total; i++) { + disk_status* _config = (disk_status*)vec_temp->pfVectorGet(vec_temp, i); + if (strstr(str_path, _config->mount_point)) { + return _config->device; + } + } + return "-"; +} + +void model_search_disk_remove_project(vector* vec_temp,vector* vec_status, vector* vec_remove, char* str_disk) { + for (int i = 0; i < vec_temp->vectorList.total; i++) { + config_u_g_p* _config_project = (config_u_g_p*)vec_temp->pfVectorGet(vec_temp, i); + for (int j = 0; j < vec_status->vectorList.total; j++) { + disk_status* _config = (disk_status*)vec_status->pfVectorGet(vec_status, j); + if (strstr(_config_project->UNIX_file, _config->mount_point)) { + model_template_remove(vec_temp,vec_remove, i); + } + } + } +} + +void model_format_del_str(config_u_g_p* _config) { + char* loaded_keys = yon_char_new(""); + if (strstr(_config->type_arr,"prjquota")) { + if (strcmp(format_actors(&_config->actors), "-") == 0) { + loaded_keys = yon_char_unite(_config->type_arr,":" , _config->UNIX_file,":", fill_tree_view_id(_config->id), ",", format_actors(&_config->actors), NULL); + } + else { + loaded_keys = yon_char_unite(_config->type_arr,":" , _config->UNIX_file,":", fill_tree_view_id(_config->id), NULL); + } + } + else { + if (strcmp(format_actors(&_config->actors), "-") == 0) { + loaded_keys = yon_char_unite(_config->type_arr,":" , _config->UNIX_file, NULL); + } + else { + loaded_keys = yon_char_unite(_config->type_arr,":" , _config->UNIX_file,":", format_actors(&_config->actors), NULL); + } + } + _config->loaded_keys = loaded_keys; } \ No newline at end of file diff --git a/source/model/model.h b/source/model/model.h index fcc6392..c85646b 100644 --- a/source/model/model.h +++ b/source/model/model.h @@ -66,11 +66,16 @@ typedef struct{ void model_clear_cfg_device(disk_status* _config); char* wrapper_str_time(size_t seconds); +void model_template_remove(vector* vec_temp, vector* vec_remove, int index); +void model_search_disk_remove(vector* vec_temp, vector* vec_remove, char* str_disk); void model_null_str_writing(config_u_g_p* _config); void model_clear_cfg(config_u_g_p* _config); void model_array_size_memory(); char* format_actors(vector* vec_actors); +char* model_find_path_to_disk(vector* vec_temp, char* str_path); +void model_search_disk_remove_project(vector* vec_temp,vector* vec_status, vector* vec_remove, char* str_disk); void model_free_vector_string(vector* vec_str); +void model_format_del_str(config_u_g_p* _config); void del_disk_to_vector_device(vector* vec_temp, char* str_disk); int fill_tree_view_user_group(config_all* all_config, hotebook* widget,char* str_fill , int flag_gui_add); int fill_tree_view_project(config_all* all_config, hotebook* widget, char* str_fill , int flag_gui_add); diff --git a/source/model/philos_utils.h b/source/model/philos_utils.h index f124537..94f1b75 100644 --- a/source/model/philos_utils.h +++ b/source/model/philos_utils.h @@ -41,7 +41,6 @@ typedef struct { GtkWidget* lblHeadQuotasEditWindow; GtkWidget* btnOpenUserGroup; - GtkWidget* lblOpenUserGroup; GtkWidget* btnReviewProject; GtkWidget* btnGenerateProject; diff --git a/source/view_set_disk.c b/source/view_set_disk.c index 9598d00..bc5b9e7 100644 --- a/source/view_set_disk.c +++ b/source/view_set_disk.c @@ -199,10 +199,10 @@ void view_device_get_gui_data() { } } else { - del_disk_to_vector_device(&view_device_all_config_temp->v_user, _config->device); - del_disk_to_vector_device(&view_device_all_config_temp->v_group, _config->device); - del_disk_to_vector_device(&view_device_all_config_temp->v_general, _config->device); if (status_id == 0) { + model_search_disk_remove(&view_device_all_config_temp->v_user, &view_device_all_config_temp->v_remove, _config->device); + model_search_disk_remove(&view_device_all_config_temp->v_group, &view_device_all_config_temp->v_remove, _config->device); + model_search_disk_remove_project(&view_device_all_config_temp->v_project,&view_device_all_config_temp->v_disk_status, &view_device_all_config_temp->v_remove, _config->device); _config->status = 1; } else { diff --git a/source/view_temp_u_g_p.c b/source/view_temp_u_g_p.c index 6870f35..f743312 100644 --- a/source/view_temp_u_g_p.c +++ b/source/view_temp_u_g_p.c @@ -28,36 +28,31 @@ void destroy_show_warning(GtkWidget *self) { temp_widgets->CancelWarrningButton = NULL; temp_widgets->lblWarningText = NULL; } -void show_warning() { + +void show_warning_no_fill(char* text_mess) { GtkBuilder *builder = gtk_builder_new_from_resource(_glade_path); - char* text_mess = yon_char_new(""); temp_widgets->WarrningWindow = yon_gtk_builder_get_widget(builder,"WarrningWindow"); temp_widgets->lblWarningText = yon_gtk_builder_get_widget(builder,"lblWarningText"); temp_widgets->CancelWarrningButton = yon_gtk_builder_get_widget(builder,"CancelWarrningButton"); + gtk_label_set_label(GTK_LABEL(temp_widgets->lblWarningText), text_mess); + gtk_widget_show(temp_widgets->WarrningWindow); + g_signal_connect(G_OBJECT(temp_widgets->WarrningWindow), "destroy", G_CALLBACK(destroy_show_warning), temp_widgets->WarrningWindow); + g_signal_connect(G_OBJECT(temp_widgets->CancelWarrningButton),"clicked",G_CALLBACK(destroy_show_warning),temp_widgets->WarrningWindow); +} + +void show_warning_disk() { + char* text_mess = NULL; char* str_disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(temp_widgets->UserDeviceCombo)); for (int i = 0; i < _all_config_temp->v_disk_status.vectorList.total; i++) { disk_status* _config = (disk_status*)_all_config_temp->v_disk_status.pfVectorGet(&_all_config_temp->v_disk_status, i); if (strstr(str_disk, _config->device)) { text_mess = _("The selected directory is not located on the target device"); text_mess = yon_char_unite(text_mess, " ", _config->device, NULL); + show_warning_no_fill(text_mess); } } - gtk_label_set_label(GTK_LABEL(temp_widgets->lblWarningText), text_mess); - gtk_widget_show(temp_widgets->WarrningWindow); - g_signal_connect(G_OBJECT(temp_widgets->WarrningWindow), "destroy", G_CALLBACK(destroy_show_warning), temp_widgets->WarrningWindow); - g_signal_connect(G_OBJECT(temp_widgets->CancelWarrningButton),"clicked",G_CALLBACK(destroy_show_warning),temp_widgets->WarrningWindow); } -void show_warning_no_fill(char* text_mess) { - GtkBuilder *builder = gtk_builder_new_from_resource(_glade_path); - temp_widgets->WarrningWindow = yon_gtk_builder_get_widget(builder,"WarrningWindow"); - temp_widgets->lblWarningText = yon_gtk_builder_get_widget(builder,"lblWarningText"); - temp_widgets->CancelWarrningButton = yon_gtk_builder_get_widget(builder,"CancelWarrningButton"); - gtk_label_set_label(GTK_LABEL(temp_widgets->lblWarningText), text_mess); - gtk_widget_show(temp_widgets->WarrningWindow); - g_signal_connect(G_OBJECT(temp_widgets->WarrningWindow), "destroy", G_CALLBACK(destroy_show_warning), temp_widgets->WarrningWindow); - g_signal_connect(G_OBJECT(temp_widgets->CancelWarrningButton),"clicked",G_CALLBACK(destroy_show_warning),temp_widgets->WarrningWindow); -} void set_disk(char* _disk) { disk = yon_char_new(_disk); @@ -105,7 +100,7 @@ void temp_check_path() { } else { gtk_widget_set_sensitive(temp_widgets->btnSaveTempSave, 0); - show_warning(); + show_warning_disk(); } } } @@ -132,7 +127,6 @@ temp_set_window *temp_setup_window_custom(temp_set_window* temp_widgets, GtkBuil temp_widgets->boxProjectAddEdit = yon_gtk_builder_get_widget(builder, "boxProjectAddEdit"); temp_widgets->boxProject = yon_gtk_builder_get_widget(builder, "boxProject"); temp_widgets->boxProjectAddEditboxProjectId = yon_gtk_builder_get_widget(builder, "boxProjectAddEditboxProjectId"); - temp_widgets->lblOpenUserGroup = yon_gtk_builder_get_widget(builder, "lblOpenUserGroup"); temp_widgets->lblHeadQuotasEditWindow = yon_gtk_builder_get_widget(builder, "lblHeadQuotasEditWindow"); temp_widgets->quotegroupSizeSoftLimitCheck = yon_gtk_builder_get_widget(builder, "quotegroupSizeSoftLimitCheck"); @@ -212,11 +206,9 @@ void temp_settings() { else { gtk_widget_hide(temp_widgets->boxProjectAddEditboxProjectId); if (strcmp(flag_temp_u_g_p, "usrquota")==0) { - gtk_label_set_label(GTK_LABEL(temp_widgets->lblOpenUserGroup), _("User")); gtk_label_set_label(GTK_LABEL(temp_widgets->lblSetUGP), yon_char_unite(_("User"),":",NULL)); } else if (strcmp(flag_temp_u_g_p, "grpquota")==0) { - gtk_label_set_label(GTK_LABEL(temp_widgets->lblOpenUserGroup), _("Group")); gtk_label_set_label(GTK_LABEL(temp_widgets->lblSetUGP), yon_char_unite(_("Group"),":",NULL)); } @@ -551,6 +543,7 @@ void get_add_gui_data_base(config_all* all_config) { _config->actors.pfVectorCopy(&_config->actors, &t); } } + model_format_del_str(_config); vec_temp->pfVectorAdd(vec_temp, _config); @@ -724,9 +717,7 @@ config_u_g_p* get_temp_gui_data_base(config_u_g_p* _config) { } if (strcmp(set_add_edit, "add")==0) { char* file_dir = (char*)gtk_entry_get_text(GTK_ENTRY(temp_widgets->entryCatalogProject)); - char* activ_disk = yon_char_new(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(temp_widgets->UserDeviceCombo))); - activ_disk = yon_char_divide_search(activ_disk, " ", -1); - _config->UNIX_file = activ_disk; + _config->UNIX_file = yon_char_new(file_dir); _config->type_arr = yon_char_new(flag_temp_u_g_p); } } @@ -796,3 +787,4 @@ void set_activ_project_id() { gtk_widget_set_sensitive(temp_widgets->btnGenerateProject, !active); } + diff --git a/ubl-settings-diskquota.glade b/ubl-settings-diskquota.glade index e8e8dbb..8da8fa3 100644 --- a/ubl-settings-diskquota.glade +++ b/ubl-settings-diskquota.glade @@ -2577,6 +2577,8 @@ translated and supported by community. + + @@ -4277,13 +4279,10 @@ limit - autosize - ID + Device True - - word - + 0 @@ -4292,7 +4291,7 @@ limit - Device + Catalog True @@ -4305,7 +4304,7 @@ limit autosize - Project Name + ID True @@ -4317,6 +4316,21 @@ limit + + + autosize + Project Name + True + + + word + + + 3 + + + + autosize @@ -4329,7 +4343,7 @@ restriction word - 3 + 4 @@ -4346,7 +4360,7 @@ limit word - 4 + 5 @@ -4365,7 +4379,7 @@ limit word - 5 + 6 @@ -4382,7 +4396,7 @@ restriction word - 6 + 7 @@ -4399,7 +4413,7 @@ limit word - 7 + 8 @@ -4418,7 +4432,7 @@ limit word - 8 + 9 diff --git a/ubl-settings-diskquota.pot b/ubl-settings-diskquota.pot index f3d174d..0a8442a 100644 --- a/ubl-settings-diskquota.pot +++ b/ubl-settings-diskquota.pot @@ -434,3 +434,5 @@ msgstr "" msgid "Project name mandatory field" msgstr "" +msgid "Project" +msgstr "" diff --git a/ubl-settings-diskquota_ru.po b/ubl-settings-diskquota_ru.po index 5c58a43..5f7c1f1 100644 --- a/ubl-settings-diskquota_ru.po +++ b/ubl-settings-diskquota_ru.po @@ -443,4 +443,7 @@ msgid "Project name mandatory field" msgstr "Имя проекта обязательное поле" msgid "To save, you need to select a disk" -msgstr "Для сохранения нужно выбрать диск" \ No newline at end of file +msgstr "Для сохранения нужно выбрать диск" + +msgid "Project" +msgstr "Проект" \ No newline at end of file