diff --git a/locale/ubl-settings-repomanager.pot b/locale/ubl-settings-repomanager.pot index 7b5453d..9235aae 100644 --- a/locale/ubl-settings-repomanager.pot +++ b/locale/ubl-settings-repomanager.pot @@ -539,26 +539,34 @@ msgstr "" msgid "Packages successfully signed" msgstr "" -#: source/ubl-strings.h:171 +#: source/ubl-strings.h:170 +msgid "Package sign has failed" +msgstr "" + +#: source/ubl-strings.h:172 msgid "Folder must contain repositories" msgstr "" -#: source/ubl-strings.h:173 +#: source/ubl-strings.h:174 msgid "Folder must not be empty" msgstr "" -#: source/ubl-strings.h:175 +#: source/ubl-strings.h:176 msgid "Name must be 5 or more symbols" msgstr "" -#: source/ubl-strings.h:177 +#: source/ubl-strings.h:178 msgid "Same repository was chosen for source and target" msgstr "" -#: source/ubl-strings.h:179 +#: source/ubl-strings.h:180 msgid "Signed" msgstr "" -#: source/ubl-strings.h:180 +#: source/ubl-strings.h:181 msgid "Unsigned" msgstr "" + +#: source/ubl-strings.h:183 +msgid "Chosen storage directory is inside of another storage" +msgstr "" diff --git a/locale/ubl-settings-repomanager_ru.po b/locale/ubl-settings-repomanager_ru.po index 7019b3b..4cd2087 100644 --- a/locale/ubl-settings-repomanager_ru.po +++ b/locale/ubl-settings-repomanager_ru.po @@ -553,26 +553,34 @@ msgstr "Подписать пакеты" msgid "Packages successfully signed" msgstr "Пакеты успешно подписаны" -#: source/ubl-strings.h:171 +#: source/ubl-strings.h:170 +msgid "Package sign has failed" +msgstr "Ошибка перемещения пакетов" + +#: source/ubl-strings.h:172 msgid "Folder must contain repositories" msgstr "Директория должна содержать репозитории" -#: source/ubl-strings.h:173 +#: source/ubl-strings.h:174 msgid "Folder must not be empty" msgstr "Директория должна быть пустой" -#: source/ubl-strings.h:175 +#: source/ubl-strings.h:176 msgid "Name must be 5 or more symbols" msgstr "Имя должно содержать больше 5 символов" -#: source/ubl-strings.h:177 +#: source/ubl-strings.h:178 msgid "Same repository was chosen for source and target" msgstr "Для источника и назначения был выбран один и тот же репозиторий" -#: source/ubl-strings.h:179 +#: source/ubl-strings.h:180 msgid "Signed" msgstr "Подписан" -#: source/ubl-strings.h:180 +#: source/ubl-strings.h:181 msgid "Unsigned" msgstr "Не подписан" + +#: source/ubl-strings.h:183 +msgid "Chosen storage directory is inside of another storage" +msgstr "Выбранный каталог хранилища находится внутри другого хранилища" diff --git a/source/ubl-settings-repomanager-storage-window.c b/source/ubl-settings-repomanager-storage-window.c index 9735258..daa3246 100644 --- a/source/ubl-settings-repomanager-storage-window.c +++ b/source/ubl-settings-repomanager-storage-window.c @@ -42,7 +42,16 @@ void on_storage_open(GtkWidget *self, storage_config_window *window){ filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),OPEN_EXISTING_TOOLTIP_LABEL,icon_path,"file_chooser_window"); if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ - char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->MainFileChooser)); + char *filename = dialog->last_success_selection; + int exist_size=0; + config_str exist_storages = (config_str)g_hash_table_get_keys_as_array(main_config.storages,&exist_size); + for (int i=0;iStatusBox),INSIDE_STORAGE_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } + yon_char_parsed_free(exist_storages,exist_size); storage_struct *storage = yon_storage_struct_new(); storage->path=dialog->last_success_selection; storage->name = yon_char_new(storage->path); @@ -62,7 +71,17 @@ void on_storage_create(GtkWidget *self, storage_config_window *window){ yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CREATE_NEW_STORAGE_LABEL,icon_path,"file_chooser_window"); gtk_button_set_label(GTK_BUTTON(dialog->SaveButton),yon_char_get_localised_from_lib(CREATE_NEW_TOOLTIP_LABEL)); if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){ + int exist_size=0; + config_str exist_storages = (config_str)g_hash_table_get_keys_as_array(main_config.storages,&exist_size); + for (int i=0;ilast_success_selection,exist_storages[i])){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),INSIDE_STORAGE_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } + storage_struct *storage = yon_storage_struct_new(); + yon_char_parsed_free(exist_storages,exist_size); storage->path=dialog->last_success_selection; storage->name = yon_char_new(storage->path); free(yon_char_divide(storage->name,yon_char_find_last(storage->name,'/'))); diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index d86c2c5..cf690b1 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -309,6 +309,17 @@ void yon_sign_list_update(){ } } +int yon_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer ){ + char *str_a, *str_b; + gtk_tree_model_get(model, a, 2, &str_a, -1); + gtk_tree_model_get(model, b, 2, &str_b, -1); + + if (!str_a) str_a = ""; + if (!str_b) str_b = ""; + + return g_utf8_collate(str_a, str_b); +} + void on_ubl_settings_update_launch(){ yon_launch_app_with_arguments(ubl_settings_update_command,NULL); } @@ -376,6 +387,8 @@ main_window *yon_main_window_complete(main_window *widgets){ widgets->RepoFileList = GTK_LIST_STORE(gtk_builder_get_object(builder,"RepoFileList")); widgets->RepoPackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"RepoPackageList")); { + gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->RepoList),2,(GtkTreeIterCompareFunc)yon_sort_func,NULL,NULL); + gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->ReposTree),0)); widgets->KeyMenuItem = gtk_menu_item_new(); gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->AboutMenuItem)),widgets->KeyMenuItem); GtkWidget *icon = gtk_image_new_from_icon_name(key_icon_name,GTK_ICON_SIZE_BUTTON); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index da30b94..272722f 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -417,4 +417,5 @@ void yon_package_info_set_markup(config_str parsed, int size); void on_remove_window_tree_changed(GtkWidget *self, repo_add_window *window); void on_move_window_tree_changed(GtkWidget *self, repo_add_window *window); void on_move_check_fill(GtkWidget *self, repo_add_window *window); -void yon_repo_creation_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target); \ No newline at end of file +void yon_repo_creation_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target); +int yon_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index d78e540..07ba2b1 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -178,4 +178,6 @@ #define REPO_SAME_CHOSEN_LABEL _("Same repository was chosen for source and target") #define SIGNED_LABEL _("Signed") -#define UNSIGNED_LABEL _("Unsigned") \ No newline at end of file +#define UNSIGNED_LABEL _("Unsigned") + +#define INSIDE_STORAGE_ERROR_LABEL _("Chosen storage directory is inside of another storage") \ No newline at end of file diff --git a/ubl-settings-repomanager.glade b/ubl-settings-repomanager.glade index e9a8b07..831c40a 100644 --- a/ubl-settings-repomanager.glade +++ b/ubl-settings-repomanager.glade @@ -242,7 +242,9 @@ column - 1 + True + descending + 2 4