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

Reviewed-on: #127
pull/132/head v2.19
Dmitry Razumov 3 months ago
commit 89029d6e1b

@ -570,3 +570,7 @@ msgstr ""
#: source/ubl-strings.h:183 #: source/ubl-strings.h:183
msgid "Chosen storage directory is inside of another storage" msgid "Chosen storage directory is inside of another storage"
msgstr "" msgstr ""
#: source/ubl-strings.h:183
msgid "Repository were not added"
msgstr ""

@ -584,3 +584,7 @@ msgstr "Не подписан"
#: source/ubl-strings.h:183 #: source/ubl-strings.h:183
msgid "Chosen storage directory is inside of another storage" msgid "Chosen storage directory is inside of another storage"
msgstr "Выбранный каталог хранилища находится внутри другого хранилища" msgstr "Выбранный каталог хранилища находится внутри другого хранилища"
#: source/ubl-strings.h:183
msgid "Repository were not added"
msgstr "Репозиторий не добавлен"

@ -100,6 +100,12 @@ void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict){
void on_add_package(GtkWidget *self, repo_add_window *window){ void on_add_package(GtkWidget *self, repo_add_window *window){
filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN);
if (yon_char_is_empty(main_config.last_selection)){
char *user_folder_path = yon_ubl_user_get_home_directory();
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),user_folder_path);
} else {
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),main_config.last_selection);
}
yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"filechooserWindow"); yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"filechooserWindow");
gtk_label_set_text(GTK_LABEL(dialog->HeaderTopic),CHOSE_PACKAGES_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(dialog->HeaderTopic),CHOSE_PACKAGES_TITLE_LABEL);
@ -114,6 +120,8 @@ void on_add_package(GtkWidget *self, repo_add_window *window){
dictionary *dict = NULL; dictionary *dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog);
if (!yon_char_is_empty(main_config.last_selection)) free(main_config.last_selection);
main_config.last_selection = yon_char_new(dialog->last_any_selection);
on_add_accept(self,dict); on_add_accept(self,dict);
} }
gtk_widget_destroy(dialog->Window); gtk_widget_destroy(dialog->Window);

@ -41,6 +41,13 @@ 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");
gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(dialog->MainFileChooser),1);
if (yon_char_is_empty(main_config.last_selection)){
char *user_folder_path = yon_ubl_user_get_home_directory();
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),user_folder_path);
} else {
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),main_config.last_selection);
}
if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){
char *filename = dialog->last_success_selection; char *filename = dialog->last_success_selection;
int exist_size=0; int exist_size=0;
@ -55,6 +62,8 @@ void on_storage_open(GtkWidget *self, storage_config_window *window){
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);
if (!yon_char_is_empty(main_config.last_selection)) free(main_config.last_selection);
main_config.last_selection = 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,'/')));
g_hash_table_insert(window->storages_copy,storage->path,storage); g_hash_table_insert(window->storages_copy,storage->path,storage);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage->path,storage->path); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage->path,storage->path);
@ -68,6 +77,12 @@ void on_storage_open(GtkWidget *self, storage_config_window *window){
void on_storage_create(GtkWidget *self, storage_config_window *window){ void on_storage_create(GtkWidget *self, storage_config_window *window){
filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER);
if (yon_char_is_empty(main_config.last_selection)){
char *user_folder_path = yon_ubl_user_get_home_directory();
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),user_folder_path);
} else {
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),main_config.last_selection);
}
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){
@ -84,6 +99,8 @@ void on_storage_create(GtkWidget *self, storage_config_window *window){
yon_char_parsed_free(exist_storages,exist_size); 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);
if (!yon_char_is_empty(main_config.last_selection)) free(main_config.last_selection);
main_config.last_selection = 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,'/')));
g_hash_table_insert(window->storages_copy,storage->path,storage); g_hash_table_insert(window->storages_copy,storage->path,storage);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage->path,storage->path); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage->path,storage->path);
@ -168,11 +185,13 @@ void yon_storage_config_update(storage_config_window *window){
const char *active = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); const char *active = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo));
if (active){ if (active){
storage_struct *storage = g_hash_table_lookup(window->storages_copy,active); storage_struct *storage = g_hash_table_lookup(window->storages_copy,active);
GList *repos = g_hash_table_get_values(storage->repos); int size;
config_str repo_keys = (config_str)g_hash_table_get_keys_as_array(storage->repos,&size);
qsort(repo_keys,size,sizeof(char*),yon_char_parsed_compare);
for (int i = 0;i<size;i++){
repo_struct *repos = g_hash_table_lookup(storage->repos,repo_keys[i]);
if (repos){ if (repos){
GList *iter; repo_struct *cur_repo = repos;
for (iter = repos;iter;iter=iter->next){
repo_struct *cur_repo = (repo_struct*)iter->data;
storage_repo_block *cur_block = NULL; storage_repo_block *cur_block = NULL;
cur_block = yon_storage_repo_block_new(); cur_block = yon_storage_repo_block_new();
g_object_set_data(G_OBJECT(cur_block->SignatureCombo),"repo_storage",cur_repo); g_object_set_data(G_OBJECT(cur_block->SignatureCombo),"repo_storage",cur_repo);
@ -213,14 +232,40 @@ void yon_storage_remove(char *key, storage_struct *storage,void*){
yon_storage_sturct_free_full(storage); yon_storage_sturct_free_full(storage);
} }
int yon_char_parsed_compare(const void *a, const void *b){
const config_str str_a = (const config_str)a;
const config_str str_b = (const config_str)b;
return strcmp(*str_a,*str_b);
}
void on_storage_accept(GtkWidget *self, dictionary *dict){ void on_storage_accept(GtkWidget *self, dictionary *dict){
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
storage_config_window *window = yon_dictionary_get_data(dict->first->next,storage_config_window*); storage_config_window *window = yon_dictionary_get_data(dict->first->next,storage_config_window*);
if (gtk_entry_get_text(GTK_ENTRY(window->AddEntry))){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),UNADDED_REPO_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->AddRepoButton);
return;
}
gtk_widget_destroy(window->MainWindow); gtk_widget_destroy(window->MainWindow);
g_hash_table_foreach_remove(window->storages_copy,(GHRFunc)yon_storage_remove,NULL); int size;
config_str keys = (config_str)g_hash_table_get_keys_as_array(window->storages_copy,&size);
for (int i=0;i<size;i++){
int repos_size;
config_str repos = yon_char_parse(config(keys[i]),&repos_size,",");
qsort(repos,repos_size,sizeof(char*),yon_char_parsed_compare);
char *repos_string = yon_char_parsed_to_string(repos,repos_size,",");
yon_config_set(keys[i],repos_string);
free(repos_string);
yon_char_parsed_free(repos,repos_size);
yon_storage_remove(keys[i],g_hash_table_lookup(window->storages_copy,keys[i]),NULL);
}
g_hash_table_remove_all(window->storages_copy);
// g_hash_table_foreach_remove(window->storages_copy,(GHRFunc)yon_storage_remove,NULL);
g_hash_table_unref(window->storages_copy); g_hash_table_unref(window->storages_copy);
free(window); free(window);
yon_interface_update(widgets); yon_interface_update(widgets);
} }
void on_storage_changed(GtkWidget *self, storage_config_window *window){ void on_storage_changed(GtkWidget *self, storage_config_window *window){
@ -265,6 +310,7 @@ storage_config_window *yon_storage_config_window_new(){
repo_struct *repo = (repo_struct*)iter2->data; repo_struct *repo = (repo_struct*)iter2->data;
yon_char_parsed_add_or_create_if_exists(paths,&repos_size,repo->path); yon_char_parsed_add_or_create_if_exists(paths,&repos_size,repo->path);
} }
qsort(paths,repos_size,sizeof(char*),yon_char_parsed_compare);
yon_config_register(storage->path,STORAGE_command,yon_char_parsed_to_string(paths,repos_size,",")); yon_config_register(storage->path,STORAGE_command,yon_char_parsed_to_string(paths,repos_size,","));
} }
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);

@ -444,10 +444,10 @@ int main(int argc, char *argv[]){
yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL);
gtk_init(&argc,&argv); gtk_init(&argc,&argv);
template_main_window *widgets = yon_ubl_window_setup(); template_main_window *widgets = yon_ubl_window_setup();
yon_window_remove_exit_config_check(widgets);
gtk_widget_hide(gtk_menu_get_attach_widget(GTK_MENU(gtk_widget_get_parent(widgets->SaveMenuItem)))); gtk_widget_hide(gtk_menu_get_attach_widget(GTK_MENU(gtk_widget_get_parent(widgets->SaveMenuItem))));
gtk_widget_hide(gtk_menu_get_attach_widget(GTK_MENU(gtk_widget_get_parent(widgets->LoadGlobalMenuItem)))); gtk_widget_hide(gtk_menu_get_attach_widget(GTK_MENU(gtk_widget_get_parent(widgets->LoadGlobalMenuItem))));
widgets = (template_main_window*)yon_main_window_complete((main_window*)widgets); widgets = (template_main_window*)yon_main_window_complete((main_window*)widgets);
yon_window_remove_exit_config_check(widgets);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(path); yon_window_config_load(path);
// yon_config_load_update((main_window*)widgets); // yon_config_load_update((main_window*)widgets);

@ -418,4 +418,5 @@ 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); int yon_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
int yon_char_parsed_compare(const void *a, const void *b);

@ -180,4 +180,6 @@
#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") #define INSIDE_STORAGE_ERROR_LABEL _("Chosen storage directory is inside of another storage")
#define UNADDED_REPO_LABEL _("Repository were not added")

@ -111,7 +111,6 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="CreateNewButton"> <object class="GtkButton" id="CreateNewButton">
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Create new</property> <property name="tooltip-text" translatable="yes">Create new</property>

Loading…
Cancel
Save