Added sort; Added check for adding/creating storage from inside of another storage #121

Merged
asmeron merged 1 commits from YanTheKaller/ubl-settings-repomanager:master into master 4 months ago

@ -539,26 +539,34 @@ msgstr ""
msgid "Packages successfully signed" msgid "Packages successfully signed"
msgstr "" 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" msgid "Folder must contain repositories"
msgstr "" msgstr ""
#: source/ubl-strings.h:173 #: source/ubl-strings.h:174
msgid "Folder must not be empty" msgid "Folder must not be empty"
msgstr "" msgstr ""
#: source/ubl-strings.h:175 #: source/ubl-strings.h:176
msgid "Name must be 5 or more symbols" msgid "Name must be 5 or more symbols"
msgstr "" msgstr ""
#: source/ubl-strings.h:177 #: source/ubl-strings.h:178
msgid "Same repository was chosen for source and target" msgid "Same repository was chosen for source and target"
msgstr "" msgstr ""
#: source/ubl-strings.h:179 #: source/ubl-strings.h:180
msgid "Signed" msgid "Signed"
msgstr "" msgstr ""
#: source/ubl-strings.h:180 #: source/ubl-strings.h:181
msgid "Unsigned" msgid "Unsigned"
msgstr "" msgstr ""
#: source/ubl-strings.h:183
msgid "Chosen storage directory is inside of another storage"
msgstr ""

@ -553,26 +553,34 @@ msgstr "Подписать пакеты"
msgid "Packages successfully signed" msgid "Packages successfully signed"
msgstr "Пакеты успешно подписаны" 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" msgid "Folder must contain repositories"
msgstr "Директория должна содержать репозитории" msgstr "Директория должна содержать репозитории"
#: source/ubl-strings.h:173 #: source/ubl-strings.h:174
msgid "Folder must not be empty" msgid "Folder must not be empty"
msgstr "Директория должна быть пустой" msgstr "Директория должна быть пустой"
#: source/ubl-strings.h:175 #: source/ubl-strings.h:176
msgid "Name must be 5 or more symbols" msgid "Name must be 5 or more symbols"
msgstr "Имя должно содержать больше 5 символов" msgstr "Имя должно содержать больше 5 символов"
#: source/ubl-strings.h:177 #: source/ubl-strings.h:178
msgid "Same repository was chosen for source and target" msgid "Same repository was chosen for source and target"
msgstr "Для источника и назначения был выбран один и тот же репозиторий" msgstr "Для источника и назначения был выбран один и тот же репозиторий"
#: source/ubl-strings.h:179 #: source/ubl-strings.h:180
msgid "Signed" msgid "Signed"
msgstr "Подписан" msgstr "Подписан"
#: source/ubl-strings.h:180 #: source/ubl-strings.h:181
msgid "Unsigned" msgid "Unsigned"
msgstr "Не подписан" msgstr "Не подписан"
#: source/ubl-strings.h:183
msgid "Chosen storage directory is inside of another storage"
msgstr "Выбранный каталог хранилища находится внутри другого хранилища"

@ -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); 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"); 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){ 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;i<exist_size;i++){
if (strstr(filename,exist_storages[i])){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),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_struct *storage = yon_storage_struct_new();
storage->path=dialog->last_success_selection; storage->path=dialog->last_success_selection;
storage->name = yon_char_new(storage->path); 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"); 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)); 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){ 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;i<exist_size;i++){
if (strstr(dialog->last_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(); storage_struct *storage = yon_storage_struct_new();
yon_char_parsed_free(exist_storages,exist_size);
storage->path=dialog->last_success_selection; storage->path=dialog->last_success_selection;
storage->name = yon_char_new(storage->path); storage->name = yon_char_new(storage->path);
free(yon_char_divide(storage->name,yon_char_find_last(storage->name,'/'))); free(yon_char_divide(storage->name,yon_char_find_last(storage->name,'/')));

@ -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(){ void on_ubl_settings_update_launch(){
yon_launch_app_with_arguments(ubl_settings_update_command,NULL); 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->RepoFileList = GTK_LIST_STORE(gtk_builder_get_object(builder,"RepoFileList"));
widgets->RepoPackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"RepoPackageList")); 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(); widgets->KeyMenuItem = gtk_menu_item_new();
gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->AboutMenuItem)),widgets->KeyMenuItem); 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); GtkWidget *icon = gtk_image_new_from_icon_name(key_icon_name,GTK_ICON_SIZE_BUTTON);

@ -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_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_window_tree_changed(GtkWidget *self, repo_add_window *window);
void on_move_check_fill(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); 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);

@ -178,4 +178,6 @@
#define REPO_SAME_CHOSEN_LABEL _("Same repository was chosen for source and target") #define REPO_SAME_CHOSEN_LABEL _("Same repository was chosen for source and target")
#define SIGNED_LABEL _("Signed") #define SIGNED_LABEL _("Signed")
#define UNSIGNED_LABEL _("Unsigned") #define UNSIGNED_LABEL _("Unsigned")
#define INSIDE_STORAGE_ERROR_LABEL _("Chosen storage directory is inside of another storage")

@ -242,7 +242,9 @@
<child> <child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1"> <object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="title" translatable="yes">column</property> <property name="title" translatable="yes">column</property>
<property name="sort-column-id">1</property> <property name="sort-indicator">True</property>
<property name="sort-order">descending</property>
<property name="sort-column-id">2</property>
<child> <child>
<object class="GtkCellRendererPixbuf"> <object class="GtkCellRendererPixbuf">
<property name="stock_size">4</property> <property name="stock_size">4</property>

Loading…
Cancel
Save