From 3203ec784460e6b2b8693f8c7cc67a687a34e9bc Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 11 Jun 2025 05:45:26 +0000 Subject: [PATCH 1/3] Fixed added package name conversion --- source/ubl-settings-repomanager-add-window.c | 3 ++- source/ubl-settings-repomanager.c | 21 ++++---------------- source/ubl-settings-repomanager.h | 2 +- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/source/ubl-settings-repomanager-add-window.c b/source/ubl-settings-repomanager-add-window.c index dbc17c2..037fe6e 100644 --- a/source/ubl-settings-repomanager-add-window.c +++ b/source/ubl-settings-repomanager-add-window.c @@ -216,7 +216,7 @@ void on_add_package(GtkWidget *self, repo_add_window *window){ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); g_signal_connect(G_OBJECT(dialog->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_add_accept),dict); - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),window); + g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); } void on_remove_package(GtkWidget *self, repo_add_window *window){ @@ -296,6 +296,7 @@ void on_add_packages_accept(GtkWidget *self, dictionary *dict){ } yon_debug_output("%s\n",command); if (!system(command)){ + yon_window_config_add_instant_parameter(yon_char_unite(storage,"/",repo,"/",arch,NULL),"package_info",yon_char_parsed_to_string(packages,size,","),YON_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); gtk_tree_store_clear(widgets->RepoList); yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 9c495b2..bea008e 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -114,21 +114,8 @@ void on_file_chooser_entry_changed(GtkEntry *self, file_chooser_window *window){ if (!yon_char_is_empty(text)) free(pattern); } -void on_file_chooser_file_activate(GtkFileChooser *self, repo_add_window *window){ - GtkTreeIter iter; - GSList *list = gtk_file_chooser_get_filenames(self); - if (list){ - for (int i=0;iPackagesList,&iter); - gtk_list_store_set(window->PackagesList,&iter,1,filename,2,path,-1); - free(filename); - } - g_slist_free(list); - } - gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(self))); +void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict){ + on_add_accept(self,dict); } file_chooser_window *yon_file_chooser_new(){ @@ -289,7 +276,7 @@ void on_move_add_package(GtkWidget *self, repo_add_window *window){ g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),window); + g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); gtk_widget_show(dialog->Window); } } @@ -464,7 +451,7 @@ void on_remove_add_package(GtkWidget *self, repo_add_window *window){ g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),window); + g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); gtk_widget_show(dialog->Window); } } diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 88edd1d..f4c17a0 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -296,7 +296,7 @@ void on_add_target_arch_selection_changed(GtkWidget *target,repo_add_window *win void on_add_target_repo_selection_changed(GtkWidget *target,repo_add_window *window); config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level); gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data); -void on_file_chooser_file_activate(GtkFileChooser *self, repo_add_window *window); +void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict); file_chooser_window *yon_file_chooser_new(); gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data); void on_storage_configure_clicked(GtkWidget *self, main_window *widgets); -- 2.35.1 From 9a7869a4dec20dbaacf3b9d917f8accdb329623f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 18 Jun 2025 12:25:38 +0000 Subject: [PATCH 2/3] WIP repomanager structure rework --- source/CMakeLists.txt | 4 + source/ubl-settings-repomanager-add-window.c | 838 +++++---- .../ubl-settings-repomanager-data-structs.c | 70 + source/ubl-settings-repomanager-move.c | 275 +++ source/ubl-settings-repomanager-remove.c | 134 ++ .../ubl-settings-repomanager-storage-list.c | 75 + .../ubl-settings-repomanager-storage-window.c | 524 +++--- source/ubl-settings-repomanager.c | 1610 ++++++----------- source/ubl-settings-repomanager.h | 97 +- ubl-settings-repomanager.glade | 6 + 10 files changed, 1916 insertions(+), 1717 deletions(-) create mode 100644 source/ubl-settings-repomanager-data-structs.c create mode 100644 source/ubl-settings-repomanager-move.c create mode 100644 source/ubl-settings-repomanager-remove.c create mode 100644 source/ubl-settings-repomanager-storage-list.c diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index dc72f88..8326c24 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -72,6 +72,10 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin set(SOURCE_FILES ubl-settings-repomanager.c ubl-settings-repomanager-add-window.c + ubl-settings-repomanager-data-structs.c + ubl-settings-repomanager-move.c + ubl-settings-repomanager-remove.c + ubl-settings-repomanager-storage-list.c ubl-settings-repomanager-storage-window.c ubl-settings-repomanager.h ubl-strings.h diff --git a/source/ubl-settings-repomanager-add-window.c b/source/ubl-settings-repomanager-add-window.c index 037fe6e..1a49323 100644 --- a/source/ubl-settings-repomanager-add-window.c +++ b/source/ubl-settings-repomanager-add-window.c @@ -1,406 +1,440 @@ -#include "ubl-settings-repomanager.h" - - -gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data){ - GtkTreeIter parent; - if (gtk_tree_model_iter_parent(model, &parent, iter)) - return 0; - return 1; - } - -config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level){ - (*size)=0; - config_str final = NULL; - GtkTreePath *path=NULL, *parent_path=NULL; - GtkTreeIter iter; - if (parent){ - parent_path = gtk_tree_model_get_path(GTK_TREE_MODEL(target),parent); - } - int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,parent); - for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ - path = gtk_tree_model_get_path(GTK_TREE_MODEL(target),&iter); - if (path && gtk_tree_path_get_depth(path)==level&&(!parent_path||gtk_tree_path_is_descendant(path,parent_path))){ - char *append=NULL; - gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,column,&append,-1); - yon_char_parsed_add_or_create_if_exists(final,size,append); - } - gtk_tree_path_free(path); - } - return final; -} - -void on_add_target_repo_selection_changed(GtkWidget *target,repo_add_window *window){ - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); - char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); - if (!yon_char_is_empty(path_str)){ - GtkTreeIter iter, itar; - GtkTreePath *path = gtk_tree_path_new_from_string(path_str); - if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ +// #include "ubl-settings-repomanager.h" + + +// gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data){ +// GtkTreeIter parent; +// if (gtk_tree_model_iter_parent(model, &parent, iter)) +// return 0; +// return 1; +// } + +// config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level){ +// (*size)=0; +// config_str final = NULL; +// GtkTreePath *path=NULL, *parent_path=NULL; +// GtkTreeIter iter; +// if (parent){ +// parent_path = gtk_tree_model_get_path(GTK_TREE_MODEL(target),parent); +// } +// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,parent); +// for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ +// path = gtk_tree_model_get_path(GTK_TREE_MODEL(target),&iter); +// if (path && gtk_tree_path_get_depth(path)==level&&(!parent_path||gtk_tree_path_is_descendant(path,parent_path))){ +// char *append=NULL; +// gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,column,&append,-1); +// yon_char_parsed_add_or_create_if_exists(final,size,append); +// } +// gtk_tree_path_free(path); +// } +// return final; +// } + +// void on_add_target_repo_selection_changed(GtkWidget *target,repo_add_window *window){ +// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); +// char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); +// if (!yon_char_is_empty(path_str)){ +// GtkTreeIter iter, itar; +// GtkTreePath *path = gtk_tree_path_new_from_string(path_str); +// if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ - int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); - for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ - char *current; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,-1); - if (!yon_char_is_empty(current)){ - char *path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->RepositoryCombo),path_str,current); - } - } - } - - } -} - -void on_add_target_arch_selection_changed(GtkWidget *target,repo_add_window *window){ - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); - char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); - if (!yon_char_is_empty(path_str)){ - GtkTreeIter iter, itar; - GtkTreePath *path = gtk_tree_path_new_from_string(path_str); - if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ +// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); +// for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ +// char *current; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,-1); +// if (!yon_char_is_empty(current)){ +// char *path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->RepositoryCombo),path_str,current); +// } +// } +// } + +// } +// } + +// void on_add_target_arch_selection_changed(GtkWidget *target,repo_add_window *window){ +// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); +// char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); +// if (!yon_char_is_empty(path_str)){ +// GtkTreeIter iter, itar; +// GtkTreePath *path = gtk_tree_path_new_from_string(path_str); +// if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ - int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); - for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ - char *current, *current_path; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,3,¤t_path,-1); - if (!yon_char_is_empty(current)){ - char *path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo),path_str,current); +// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); +// for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ +// char *current, *current_path; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,3,¤t_path,-1); +// if (!yon_char_is_empty(current)){ +// char *path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo),path_str,current); - } - } - } - gtk_widget_set_sensitive(window->RepoSignCombo,1); - - } else { - gtk_widget_set_sensitive(window->RepoSignCombo,0); - - } -} - -void on_arch_chosen(GtkWidget *target,repo_add_window *window){ - char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); - if (!yon_char_is_empty(path_str)){ - gtk_widget_set_sensitive(window->PackageSignCombo,1); - } else { - gtk_widget_set_sensitive(window->PackageSignCombo,0); - } -} - -void on_add_target_package_selection_changed(GtkWidget *target,repo_add_window *window){ - gtk_list_store_clear(GTK_LIST_STORE(window->PackagesList)); - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))==-1){ - gtk_widget_set_sensitive(window->AddPackageButton,0); - } else { - gtk_widget_set_sensitive(window->AddPackageButton,1); - } -} - -void on_move_storage_changed(GtkWidget *self, repo_add_window *window){ - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry)); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveSourceRepoEntry)); - GtkTreeIter iter,itar; - char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveTargetStorageEntry),id); - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); - int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,&target,-1); - char *child_id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry),child_id,target); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveSourceRepoEntry),child_id,target); - } -} - -void on_move_repo_changed(GtkWidget *self, repo_add_window *window){ - GtkWidget *ArchCombo = NULL; - ArchCombo = self==window->MoveSourceRepoEntry?window->MoveSourceArchEntry:window->MoveTargetArchEntry; - - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(ArchCombo)); - GtkTreeIter iter,itar; - char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); - int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,&target,-1); - char *child_id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ArchCombo),child_id,target); - } +// } +// } +// } +// gtk_widget_set_sensitive(window->RepoSignCombo,1); + +// } else { +// gtk_widget_set_sensitive(window->RepoSignCombo,0); + +// } +// } + +// void on_arch_chosen(GtkWidget *target,repo_add_window *window){ +// char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); +// if (!yon_char_is_empty(path_str)){ +// gtk_widget_set_sensitive(window->PackageSignCombo,1); +// } else { +// gtk_widget_set_sensitive(window->PackageSignCombo,0); +// } +// } + +// void on_add_target_package_selection_changed(GtkWidget *target,repo_add_window *window){ +// gtk_list_store_clear(GTK_LIST_STORE(window->PackagesList)); +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))==-1){ +// gtk_widget_set_sensitive(window->AddPackageButton,0); +// } else { +// gtk_widget_set_sensitive(window->AddPackageButton,1); +// } +// } + +// void on_move_storage_changed(GtkWidget *self, repo_add_window *window){ +// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry)); +// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveSourceRepoEntry)); +// GtkTreeIter iter,itar; +// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveTargetStorageEntry),id); +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); +// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); +// for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ +// char *target; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,&target,-1); +// char *child_id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry),child_id,target); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveSourceRepoEntry),child_id,target); +// } +// } + +// void on_add_accept(GtkWidget *self, dictionary *dict){ +// repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); +// file_chooser_window *dialog = yon_dictionary_get_data(dict->first->next,file_chooser_window*); +// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); +// char *path,*arch_name; +// GtkTreeIter iter,itar,itor; +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&arch_name,3,&path,-1); +// char *packages; +// yon_window_config_get_parameter("package_info",path,&packages,YON_TYPE_STRING); +// int size; +// config_str parsed = yon_char_parse(packages,&size,","); +// GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog->FileChooserWidget)); +// for (int i=0;iStatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return; +// } +// yon_char_remove_last_symbol(name[0],'\n'); +// if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ +// if (name_size<=0){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return; +// } +// gtk_list_store_append(window->PackagesList,&itar); +// gtk_list_store_set(window->PackagesList,&itar,1,name[0],2,current,3,1,-1); +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// } +// yon_char_parsed_free(name,name_size); +// } +// } +// gtk_widget_destroy(dialog->Window); +// if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ +// gtk_widget_set_sensitive(window->StorageCombo,0); +// gtk_widget_set_sensitive(window->RepositoryCombo,0); +// gtk_widget_set_sensitive(window->ArchitectureCombo,0); +// } +// } + +// void on_add_package(GtkWidget *self, repo_add_window *window){ +// file_chooser_window *dialog = yon_file_chooser_new(); +// 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->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); +// gtk_widget_show(dialog->Window); +// GtkFileFilter *filter = gtk_file_filter_new(); +// gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); +// gtk_file_filter_set_name(filter,"*.pkg.tar*"); +// 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,"dialog",dialog); +// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); +// g_signal_connect(G_OBJECT(dialog->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); +// g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_add_accept),dict); +// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); +// } + +// void on_remove_package(GtkWidget *self, repo_add_window *window){ +// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); +// char *storage = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); +// char *repo; +// char *path; +// GtkTreeModel *model; +// GtkTreeIter iter,itar,itor; +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&itor,storage); +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itor,3,&storage,-1); + +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&itar)){ +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&repo,3,&path,-1); +// gtk_list_store_remove(window->PackagesList,&itar); +// } +// if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ +// gtk_widget_set_sensitive(window->StorageCombo,1); +// gtk_widget_set_sensitive(window->RepositoryCombo,1); +// gtk_widget_set_sensitive(window->ArchitectureCombo,1); +// } +// } + +// void on_add_window_tree_changed(GtkWidget *self, repo_add_window *window){ +// gtk_label_set_text(GTK_LABEL(window->InfoLabel),""); +// GtkTreeModel *model; +// GtkTreeIter iter; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ +// gtk_widget_set_sensitive(window->RemoveButton,1); +// char *target; +// gtk_tree_model_get(model,&iter,2,&target,-1); +// int size; +// config_str info = yon_config_load(get_package_info_command(target),&size); +// char *result = yon_char_parsed_to_string(info,size,""); +// gtk_label_set_text(GTK_LABEL(window->InfoLabel),result); +// yon_char_parsed_free(info,size); +// free(result); +// } else { +// gtk_widget_set_sensitive(window->RemoveButton,0); +// } +// } + + +// void on_add_packages_accept(GtkWidget *self, dictionary *dict){ +// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); +// repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); + +// GtkTreeIter iter, itar; +// char *storage; +// if (yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->StorageCombo),GTK_TREE_MODEL(window->tree_copy),&itar)){ +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&storage,-1); +// const char *repo = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); +// const char *arch = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); +// GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); +// int size=0; +// config_str packages=NULL; +// int valid = gtk_tree_model_get_iter_first(model,&iter); +// for (;valid;valid=gtk_tree_model_iter_next(model,&iter)){ +// char *target; +// gtk_tree_model_get(model,&iter,2,&target,-1); +// yon_char_parsed_add_or_create_if_exists(packages,&size,target); +// free(target); +// } +// if (size>0){ +// char *command = NULL; +// int repo_sign = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RepoSignCombo)); +// int pack_sign = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PackageSignCombo)); +// if (repo_sign&&pack_sign){ +// command = add_packages_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)),gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)),yon_char_parsed_to_string(packages,size," ")); +// } else if (repo_sign){ +// command = add_packages_repo_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)),yon_char_parsed_to_string(packages,size," ")); +// } else if (pack_sign){ +// command = add_packages_package_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)),yon_char_parsed_to_string(packages,size," ")); +// } else { +// command = add_packages_command(storage,arch,repo,yon_char_parsed_to_string(packages,size," ")); +// } +// yon_debug_output("%s\n",command); +// if (!system(command)){ +// yon_window_config_add_instant_parameter(yon_char_unite(storage,"/",repo,"/",arch,NULL),"package_info",yon_char_parsed_to_string(packages,size,","),YON_TYPE_STRING); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); +// gtk_tree_store_clear(widgets->RepoList); +// yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); + +// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); +// if (!yon_char_is_empty(id)){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); +// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); +// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); +// on_main_tree_selection_changed(NULL,widgets); +// } +// gtk_widget_destroy(window->MainWindow); +// yon_ubl_status_box_render(PACKAGES_ADD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +// yon_config_load_update(widgets); +// } +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// } +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// } +// } + +// void on_repo_sign_load(GtkWidget *self, repo_add_window *window){ +// GtkTreeIter iter; +// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(self),GTK_TREE_MODEL(window->tree_copy),&iter); +// char *sign; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,5,&sign,-1); +// if (!yon_char_is_empty(sign)) +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepoSignCombo),sign); +// } + +// void on_add_clicked(GtkWidget *self, main_window *widgets){ +// repo_add_window *window = yon_repo_add_window_new(); +// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),ADD_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); +// gtk_label_set_text(GTK_LABEL(window->HeadLabel),ADD_PACKAGES_TITLE_LABEL); +// GtkTreeIter iter; +// for_iter (window->tree_copy,&iter){ +// char *current; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); +// if (!yon_char_is_empty(current)){ +// char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StorageCombo),path,current); +// } +// } + +// yon_sign_list_update(); +// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); +// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); + +// gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); +// gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); + +// dictionary *dict = NULL; +// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); +// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + +// g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); +// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); +// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); +// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_selection_changed),window); +// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_add_packages_accept),dict); +// g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_add_package),window); +// g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_remove_package),window); +// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); +// yon_add_window_set_selected(widgets,window); +// GtkTreeModel *model; +// GList *list = NULL; +// char *full_path; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&full_path,-1); +// if (list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoPackagesTree)),&model)){ +// for (int i=0; iPackagesList,&itar); +// char *temp = yon_char_unite(full_path,"/",path,NULL); +// free(full_path); +// full_path = temp; +// gtk_list_store_set(window->PackagesList,&itar,1,path,2,full_path,-1); +// } +// } +// } +// gtk_widget_show(window->MainWindow); +// } + + +// void on_rmb_move(GtkWidget *self, main_window *widgets){ +// repo_add_window *window = on_move_clicked(NULL,widgets); +// GtkTreeModel *model; +// GtkTreeIter iter; +// char *path; +// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter); +// gtk_tree_model_get(model,&iter,3,&path,-1); +// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model); +// for (int i=0;iPackagesList,&itar); +// gtk_list_store_set(window->PackagesList,&itar,1,name,2,full_path,-1); +// free(full_path); +// free(filename); +// free(name); +// } +// } + +// repo_add_window *yon_repo_add_window_new(){ +// repo_add_window *window = malloc(sizeof(repo_add_window)); +// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_add); +// window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); +// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); +// window->StorageCombo = yon_gtk_builder_get_widget(builder,"StorageCombo"); +// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); +// window->RepositoryCombo = yon_gtk_builder_get_widget(builder,"RepositoryCombo"); +// window->ArchitectureCombo = yon_gtk_builder_get_widget(builder,"ArchitectureCombo"); +// window->MoveSourceFrame = yon_gtk_builder_get_widget(builder,"MoveSourceFrame"); +// window->MoveSourceStorageEntry = yon_gtk_builder_get_widget(builder,"MoveSourceStorageEntry"); +// window->MoveSourceRepoEntry = yon_gtk_builder_get_widget(builder,"MoveSourceRepoEntry"); +// window->MoveSourceArchEntry = yon_gtk_builder_get_widget(builder,"MoveSourceArchEntry"); +// window->MoveTargetFrame = yon_gtk_builder_get_widget(builder,"MoveTargetFrame"); +// window->MoveTargetStorageEntry = yon_gtk_builder_get_widget(builder,"MoveTargetStorageEntry"); +// window->MoveTargetRepoEntry = yon_gtk_builder_get_widget(builder,"MoveTargetRepoEntry"); +// window->MoveTargetArchEntry = yon_gtk_builder_get_widget(builder,"MoveTargetArchEntry"); +// window->PackageSignCombo = yon_gtk_builder_get_widget(builder,"PackageSignCombo"); +// window->RepoSignCombo = yon_gtk_builder_get_widget(builder,"RepoSignCombo"); +// window->AddPackageButton = yon_gtk_builder_get_widget(builder,"AddPackageButton"); +// window->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); +// window->PackagesTree = yon_gtk_builder_get_widget(builder,"PackagesTree"); +// window->InfoLabel = yon_gtk_builder_get_widget(builder,"InfoLabel"); +// window->PackagesToAddLabel = yon_gtk_builder_get_widget(builder,"PackagesToAddLabel"); +// window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); +// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); +// window->PackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PackagesList")); +// window->tree_copy = gtk_tree_store_new(7,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT); +// yon_gtk_tree_store_copy_full(main_config.tree_store,window->tree_copy); + +// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); +// g_signal_connect(G_OBJECT(window->PackagesTree),"cursor-changed",G_CALLBACK(on_add_window_tree_changed),window); -} - -void on_move_arch_changed(GtkWidget *self, repo_add_window *window){ - GtkWidget *TargetArchCombo = self==window->MoveTargetArchEntry?window->MoveSourceArchEntry:window->MoveTargetArchEntry; - GtkWidget *TargetRepoCombo = self==window->MoveTargetArchEntry?window->MoveSourceRepoEntry:window->MoveTargetRepoEntry; - if (gtk_combo_box_get_active(GTK_COMBO_BOX(self))>-1){ - - const char *current = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(self)); - const char *repo_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(TargetRepoCombo)); - - if (!yon_char_is_empty(current)&&!yon_char_is_empty(repo_id)){ - - GtkTreeIter iter, itar; - - g_signal_handlers_block_by_func(G_OBJECT(TargetArchCombo),on_move_arch_changed,window); - if (yon_gtk_combo_box_text_find(TargetArchCombo,(char*)current)==-1){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,repo_id); - gtk_tree_store_append(window->tree_copy,&itar,&iter); - char *id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); - yon_debug_output("%s\n","arch"); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(TargetArchCombo),id,current); - } - g_signal_handlers_unblock_by_func(G_OBJECT(TargetArchCombo),on_move_arch_changed,window); - gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); - gtk_widget_set_sensitive(window->AddPackageButton,1); - } - } -} - -void on_add_accept(GtkWidget *self, dictionary *dict){ - repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); - file_chooser_window *dialog = yon_dictionary_get_data(dict->first->next,file_chooser_window*); - char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); - char *path,*arch_name; - GtkTreeIter iter,itar,itor; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&arch_name,3,&path,-1); - char *packages; - yon_window_config_get_parameter("package_info",path,&packages,YON_TYPE_STRING); - int size; - config_str parsed = yon_char_parse(packages,&size,","); - GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog->FileChooserWidget)); - for (int i=0;iStatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - yon_char_remove_last_symbol(name[0],'\n'); - if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ - if (name_size<=0){ - yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - gtk_list_store_append(window->PackagesList,&itar); - gtk_list_store_set(window->PackagesList,&itar,1,name[0],2,current,3,1,-1); - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } - yon_char_parsed_free(name,name_size); - } - } - gtk_widget_destroy(dialog->Window); - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ - gtk_widget_set_sensitive(window->StorageCombo,0); - gtk_widget_set_sensitive(window->RepositoryCombo,0); - gtk_widget_set_sensitive(window->ArchitectureCombo,0); - } -} - -void on_add_package(GtkWidget *self, repo_add_window *window){ - file_chooser_window *dialog = yon_file_chooser_new(); - 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->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); - gtk_widget_show(dialog->Window); - GtkFileFilter *filter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); - gtk_file_filter_set_name(filter,"*.pkg.tar*"); - 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,"dialog",dialog); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); - g_signal_connect(G_OBJECT(dialog->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_add_accept),dict); - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); -} - -void on_remove_package(GtkWidget *self, repo_add_window *window){ - char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); - char *storage = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); - char *repo; - char *path; - GtkTreeModel *model; - GtkTreeIter iter,itar,itor; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&itor,storage); - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itor,3,&storage,-1); - - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&itar)){ - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&repo,3,&path,-1); - gtk_list_store_remove(window->PackagesList,&itar); - } - if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ - gtk_widget_set_sensitive(window->StorageCombo,1); - gtk_widget_set_sensitive(window->RepositoryCombo,1); - gtk_widget_set_sensitive(window->ArchitectureCombo,1); - } -} - -void on_add_window_tree_changed(GtkWidget *self, repo_add_window *window){ - gtk_label_set_text(GTK_LABEL(window->InfoLabel),""); - GtkTreeModel *model; - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ - gtk_widget_set_sensitive(window->RemoveButton,1); - char *target; - gtk_tree_model_get(model,&iter,2,&target,-1); - int size; - config_str info = yon_config_load(get_package_info_command(target),&size); - char *result = yon_char_parsed_to_string(info,size,""); - gtk_label_set_text(GTK_LABEL(window->InfoLabel),result); - yon_char_parsed_free(info,size); - free(result); - } else { - gtk_widget_set_sensitive(window->RemoveButton,0); - } -} - - -void on_add_packages_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); - - GtkTreeIter iter, itar; - char *storage; - if (yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->StorageCombo),GTK_TREE_MODEL(window->tree_copy),&itar)){ - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&storage,-1); - const char *repo = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); - const char *arch = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); - GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); - int size=0; - config_str packages=NULL; - int valid = gtk_tree_model_get_iter_first(model,&iter); - for (;valid;valid=gtk_tree_model_iter_next(model,&iter)){ - char *target; - gtk_tree_model_get(model,&iter,2,&target,-1); - yon_char_parsed_add_or_create_if_exists(packages,&size,target); - free(target); - } - if (size>0){ - char *command = NULL; - int repo_sign = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RepoSignCombo)); - int pack_sign = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PackageSignCombo)); - if (repo_sign&&pack_sign){ - command = add_packages_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)),gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)),yon_char_parsed_to_string(packages,size," ")); - } else if (repo_sign){ - command = add_packages_repo_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)),yon_char_parsed_to_string(packages,size," ")); - } else if (pack_sign){ - command = add_packages_package_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)),yon_char_parsed_to_string(packages,size," ")); - } else { - command = add_packages_command(storage,arch,repo,yon_char_parsed_to_string(packages,size," ")); - } - yon_debug_output("%s\n",command); - if (!system(command)){ - yon_window_config_add_instant_parameter(yon_char_unite(storage,"/",repo,"/",arch,NULL),"package_info",yon_char_parsed_to_string(packages,size,","),YON_TYPE_STRING); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); - gtk_tree_store_clear(widgets->RepoList); - yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); - - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); - if (!yon_char_is_empty(id)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); - gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); - on_main_tree_selection_changed(NULL,widgets); - } - gtk_widget_destroy(window->MainWindow); - yon_ubl_status_box_render(PACKAGES_ADD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - yon_config_load_update(widgets); - } - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } -} - -void on_repo_sign_load(GtkWidget *self, repo_add_window *window){ - GtkTreeIter iter; - yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(self),GTK_TREE_MODEL(window->tree_copy),&iter); - char *sign; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,5,&sign,-1); - if (!yon_char_is_empty(sign)) - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepoSignCombo),sign); -} - -repo_add_window *yon_repo_add_window_new(){ - repo_add_window *window = malloc(sizeof(repo_add_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_add); - window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); - window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); - window->StorageCombo = yon_gtk_builder_get_widget(builder,"StorageCombo"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); - window->RepositoryCombo = yon_gtk_builder_get_widget(builder,"RepositoryCombo"); - window->ArchitectureCombo = yon_gtk_builder_get_widget(builder,"ArchitectureCombo"); - window->MoveSourceFrame = yon_gtk_builder_get_widget(builder,"MoveSourceFrame"); - window->MoveSourceStorageEntry = yon_gtk_builder_get_widget(builder,"MoveSourceStorageEntry"); - window->MoveSourceRepoEntry = yon_gtk_builder_get_widget(builder,"MoveSourceRepoEntry"); - window->MoveSourceArchEntry = yon_gtk_builder_get_widget(builder,"MoveSourceArchEntry"); - window->MoveTargetFrame = yon_gtk_builder_get_widget(builder,"MoveTargetFrame"); - window->MoveTargetStorageEntry = yon_gtk_builder_get_widget(builder,"MoveTargetStorageEntry"); - window->MoveTargetRepoEntry = yon_gtk_builder_get_widget(builder,"MoveTargetRepoEntry"); - window->MoveTargetArchEntry = yon_gtk_builder_get_widget(builder,"MoveTargetArchEntry"); - window->PackageSignCombo = yon_gtk_builder_get_widget(builder,"PackageSignCombo"); - window->RepoSignCombo = yon_gtk_builder_get_widget(builder,"RepoSignCombo"); - window->AddPackageButton = yon_gtk_builder_get_widget(builder,"AddPackageButton"); - window->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); - window->PackagesTree = yon_gtk_builder_get_widget(builder,"PackagesTree"); - window->InfoLabel = yon_gtk_builder_get_widget(builder,"InfoLabel"); - window->PackagesToAddLabel = yon_gtk_builder_get_widget(builder,"PackagesToAddLabel"); - window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); - window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - window->PackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PackagesList")); - window->tree_copy = gtk_tree_store_new(7,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT); - yon_gtk_tree_store_copy_full(main_config.tree_store,window->tree_copy); - - g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->PackagesTree),"cursor-changed",G_CALLBACK(on_add_window_tree_changed),window); - - window->added_packages_archs = NULL; - window->removed_packages_archs = NULL; - - return window; -} - -void yon_add_window_set_selected(main_window *widgets, repo_add_window *window){ - GtkTreeIter iter; - - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ - - char *target = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->RepoList),&iter); - int mod = yon_char_count(target,":")+1; - char *arc=NULL; - char *repo=NULL; - char *stor=NULL; - if (mod ==3){ - arc = yon_char_new(target); - char *temp = yon_char_new(target); - repo = yon_char_divide(temp,yon_char_find_last(temp,':')); - free(temp); - temp = yon_char_new(repo); - stor = yon_char_divide(temp,yon_char_find_last(temp,':')); - free(temp); - } else if (mod>=2){ - repo = yon_char_new(target); - char *temp = yon_char_new(target); - stor = yon_char_divide(temp,yon_char_find_last(temp,':')); - free(temp); - } else if (mod>=1){ - stor = yon_char_new(target); - } - - if (stor) - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->StorageCombo),stor); - if (repo) - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepositoryCombo),repo); - if (arc) - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ArchitectureCombo),arc); - } -} \ No newline at end of file +// window->added_packages_archs = NULL; +// window->removed_packages_archs = NULL; + +// return window; +// } + +// void yon_add_window_set_selected(main_window *widgets, repo_add_window *window){ +// GtkTreeIter iter; + +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ + +// char *target = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->RepoList),&iter); +// int mod = yon_char_count(target,":")+1; +// char *arc=NULL; +// char *repo=NULL; +// char *stor=NULL; +// if (mod ==3){ +// arc = yon_char_new(target); +// char *temp = yon_char_new(target); +// repo = yon_char_divide(temp,yon_char_find_last(temp,':')); +// free(temp); +// temp = yon_char_new(repo); +// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); +// free(temp); +// } else if (mod>=2){ +// repo = yon_char_new(target); +// char *temp = yon_char_new(target); +// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); +// free(temp); +// } else if (mod>=1){ +// stor = yon_char_new(target); +// } + +// if (stor) +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->StorageCombo),stor); +// if (repo) +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepositoryCombo),repo); +// if (arc) +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ArchitectureCombo),arc); +// } +// } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-data-structs.c b/source/ubl-settings-repomanager-data-structs.c new file mode 100644 index 0000000..37dbbac --- /dev/null +++ b/source/ubl-settings-repomanager-data-structs.c @@ -0,0 +1,70 @@ +#include "ubl-settings-repomanager.h" + +void yon_storage_fill_repos(storage_struct *storage, config_str repos, int repos_size){ + for (int i=0;iname=yon_path_get_name(repos[i]); + repo->path=yon_char_new(repos[i]); + repo->storage_path=storage->path; + yon_repo_fill_archs(repo); + g_hash_table_insert(storage->repos,repo->name,repo); + } +} + +storage_struct *yon_storage_struct_new(){ + storage_struct *storage = malloc(sizeof(storage_struct)); + storage->name=NULL; + storage->path=NULL; + storage->repos = g_hash_table_new(g_str_hash,g_str_equal); + storage->sign_status=0; + return storage; +} + +void yon_repo_fill_archs(repo_struct *repo){ + int size; + config_str folders = yon_dir_get_contents(repo->path,&size); + for (int i=0;iname = yon_char_new(folders[i]); + arch->path = yon_char_unite(repo->path,"/",arch->name,NULL); + arch->storage_path=repo->storage_path; + arch->repo_name=repo->name; + yon_arch_fill_packages(arch); + g_hash_table_insert(repo->archs,arch->name,arch); + } + } +} + +repo_struct *yon_repo_struct_new(){ + repo_struct *storage = malloc(sizeof(repo_struct)); + storage->name=NULL; + storage->path=NULL; + storage->storage_path=NULL; + storage->archs = g_hash_table_new(g_str_hash,g_str_equal); + storage->sign_status=0; + return storage; +} + +void yon_arch_fill_packages(arch_struct *arch){ + int size; + char *command = yon_get_packages_command(arch->storage_path, arch->repo_name, arch->name); + config_str packages = yon_config_load(command,&size); + for (int i=0;ipackages,parsed[0],parsed[1]); + free(parsed); + } +} + +arch_struct *yon_arch_struct_new(){ + arch_struct *storage = malloc(sizeof(arch_struct)); + storage->name=NULL; + storage->storage_path=NULL; + storage->repo_name=NULL; + storage->path=NULL; + storage->packages = g_hash_table_new(g_str_hash,g_str_equal); + return storage; +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager-move.c b/source/ubl-settings-repomanager-move.c new file mode 100644 index 0000000..fdbcfcf --- /dev/null +++ b/source/ubl-settings-repomanager-move.c @@ -0,0 +1,275 @@ +// #include "ubl-settings-repomanager.h" + + +// void on_move_repo_changed(GtkWidget *self, repo_add_window *window){ +// GtkWidget *ArchCombo = NULL; +// ArchCombo = self==window->MoveSourceRepoEntry?window->MoveSourceArchEntry:window->MoveTargetArchEntry; + +// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(ArchCombo)); +// GtkTreeIter iter,itar; +// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); +// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); +// for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ +// char *target; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,&target,-1); +// char *child_id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ArchCombo),child_id,target); +// } + +// } + +// void on_move_arch_changed(GtkWidget *self, repo_add_window *window){ +// GtkWidget *TargetArchCombo = self==window->MoveTargetArchEntry?window->MoveSourceArchEntry:window->MoveTargetArchEntry; +// GtkWidget *TargetRepoCombo = self==window->MoveTargetArchEntry?window->MoveSourceRepoEntry:window->MoveTargetRepoEntry; +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(self))>-1){ + +// const char *current = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(self)); +// const char *repo_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(TargetRepoCombo)); + +// if (!yon_char_is_empty(current)&&!yon_char_is_empty(repo_id)){ + +// GtkTreeIter iter, itar; + +// g_signal_handlers_block_by_func(G_OBJECT(TargetArchCombo),on_move_arch_changed,window); +// if (yon_gtk_combo_box_text_find(TargetArchCombo,(char*)current)==-1){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,repo_id); +// gtk_tree_store_append(window->tree_copy,&itar,&iter); +// char *id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); +// yon_debug_output("%s\n","arch"); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(TargetArchCombo),id,current); +// } +// g_signal_handlers_unblock_by_func(G_OBJECT(TargetArchCombo),on_move_arch_changed,window); +// gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); +// gtk_widget_set_sensitive(window->AddPackageButton,1); +// } +// } +// } + +// void on_move_add_accept(GtkWidget *self, dictionary *dict){ +// repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); +// file_chooser_window *dialog = yon_dictionary_get_data(dict->first->next,file_chooser_window*); +// GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog->FileChooserWidget)); +// for (int i=0;iPackagesList,&iter); +// gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,files[k],-1); +// } +// } +// } else { +// GtkTreeIter iter; +// int temp_size; +// config_str name = yon_config_load(yon_get_package_name_from_filename(path),&temp_size); +// if (temp_size<=0){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return; +// } +// yon_char_remove_last_symbol(name[0],'\n'); +// if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ +// gtk_list_store_append(window->PackagesList,&iter); +// gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,path,-1); +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// } + +// } +// } +// gtk_widget_destroy(dialog->Window); +// free(dialog); +// GtkTreeIter iter; +// if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ +// gtk_widget_set_sensitive(window->MoveSourceStorageEntry,0); +// gtk_widget_set_sensitive(window->MoveSourceRepoEntry,0); +// gtk_widget_set_sensitive(window->MoveSourceArchEntry,0); + +// gtk_widget_set_sensitive(window->MoveTargetRepoEntry,0); +// gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); + +// if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ +// gtk_widget_set_sensitive(window->StorageCombo,0); +// gtk_widget_set_sensitive(window->RepositoryCombo,0); +// gtk_widget_set_sensitive(window->ArchitectureCombo,0); +// } +// } +// } + +// void on_move_add_package(GtkWidget *self, repo_add_window *window){ +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->MoveTargetArchEntry))>-1&>k_combo_box_get_active(GTK_COMBO_BOX(window->MoveSourceStorageEntry))>-1){ +// file_chooser_window *dialog = yon_file_chooser_new(); +// yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); +// gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); +// GtkFileFilter *filter = gtk_file_filter_new(); +// gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); +// gtk_file_filter_set_name(filter,"*.pkg.tar.*"); +// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); +// GtkTreeIter iter,itar; +// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),GTK_TREE_MODEL(window->tree_copy),&iter); +// char *target; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&target,3,&dialog->root_path,-1); +// gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->FileChooserWidget),target); + +// 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,"dialog",dialog); + +// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); +// g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); +// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); +// gtk_widget_show(dialog->Window); +// } +// } + +// void on_move_accept(GtkWidget *self, dictionary *dict){ +// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); +// repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); + +// int size = 0; +// config_str packages = NULL; +// GtkTreeIter iter,itar; +// for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){ +// char *target=NULL; +// gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&iter,2,&target,-1); +// if (!yon_char_is_empty(target)){ +// free(yon_char_divide(target,yon_char_find_last(target,'/'))); +// yon_char_parsed_add_or_create_if_exists(packages,&size,target); +// free(target); +// } +// } +// if (size){ +// char *arch = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->MoveSourceArchEntry)); +// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry),GTK_TREE_MODEL(window->tree_copy),&iter); +// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveTargetRepoEntry),GTK_TREE_MODEL(window->tree_copy),&itar); +// char *source_path, *source_repo, *target_path, *target_repo; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&source_repo,-1); +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&target_repo,-1); +// source_path = yon_char_divide(source_repo,yon_char_find_last(source_repo,'/')); +// target_path = yon_char_divide(target_repo,yon_char_find_last(target_repo,'/')); +// char *command = yon_move_packages_command(source_path,arch,source_repo, target_repo, yon_char_parsed_to_string(packages,size," ")); +// yon_debug_output("%s\n",command); +// if (!system(command)){ +// yon_ubl_status_box_render(PACKAGES_MOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); +// gtk_tree_store_clear(widgets->RepoList); +// yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); + +// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); +// if (!yon_char_is_empty(id)){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); +// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); +// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); +// on_main_tree_selection_changed(NULL,widgets); +// } +// yon_config_load_update(widgets); +// on_subwindow_close(window->MainWindow); +// } +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// } +// } + +// void on_move_remove_package(GtkWidget *self, repo_add_window *window){ +// GtkTreeIter iter; +// GtkTreeModel *model; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ +// gtk_list_store_remove(window->PackagesList,&iter); +// } +// if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->PackagesList),&iter)){ + +// gtk_widget_set_sensitive(window->MoveSourceStorageEntry,1); +// gtk_widget_set_sensitive(window->MoveSourceRepoEntry,1); +// gtk_widget_set_sensitive(window->MoveSourceArchEntry,1); + +// gtk_widget_set_sensitive(window->MoveTargetRepoEntry,1); +// if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ +// gtk_widget_set_sensitive(window->StorageCombo,1); +// gtk_widget_set_sensitive(window->RepositoryCombo,1); +// gtk_widget_set_sensitive(window->ArchitectureCombo,1); +// } +// } +// } + +// repo_add_window *on_move_clicked(GtkWidget *self, main_window *widgets){ +// repo_add_window *window = yon_repo_add_window_new(); +// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MOVE_PACKAGES_TITLE_LABEL,icon_path,"move-repo-window"); +// gtk_label_set_text(GTK_LABEL(window->HeadLabel),MOVE_PACKAGES_TITLE_LABEL); +// gtk_button_set_label(GTK_BUTTON(window->AddButton),MOVE_LABEL); +// gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),MOVE_PACKAGES_LABEL); +// gtk_widget_show(window->MoveSourceFrame); +// gtk_widget_show(window->MoveTargetFrame); +// gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); +// GtkTreeIter iter; +// for_iter (window->tree_copy,&iter){ +// char *current; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); +// if (!yon_char_is_empty(current)){ +// char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveSourceStorageEntry),path,current); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetStorageEntry),path,current); +// } +// } + +// yon_sign_list_update(); +// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); +// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); +// gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); +// gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); + +// gtk_widget_destroy(gtk_widget_get_parent(window->StorageCombo)); +// dictionary *dict = NULL; +// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); +// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); +// g_signal_connect(G_OBJECT(window->MoveSourceStorageEntry),"changed",G_CALLBACK(on_move_storage_changed),window); +// g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); +// g_signal_connect(G_OBJECT(window->MoveSourceArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); + +// g_signal_connect(G_OBJECT(window->MoveTargetRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); +// g_signal_connect(G_OBJECT(window->MoveTargetArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); + +// g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_move_add_package),window); +// g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); +// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_move_accept),dict); +// g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_repo_sign_load),window); +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ + +// char *target = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->RepoList),&iter); +// int mod = yon_char_count(target,":")+1; +// char *arc=NULL; +// char *repo=NULL; +// char *stor=NULL; +// if (mod ==3){ +// arc = yon_char_new(target); +// char *temp = yon_char_new(target); +// repo = yon_char_divide(temp,yon_char_find_last(temp,':')); +// free(temp); +// temp = yon_char_new(repo); +// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); +// free(temp); +// } else if (mod>=2){ +// repo = yon_char_new(target); +// char *temp = yon_char_new(target); +// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); +// free(temp); +// } else if (mod>=1){ +// stor = yon_char_new(target); +// } + +// if (stor) +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry),stor); +// if (repo) +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry),repo); +// if (arc) +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),arc); +// } +// gtk_widget_show(window->MainWindow); +// return window; +// } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-remove.c b/source/ubl-settings-repomanager-remove.c new file mode 100644 index 0000000..70ad2f3 --- /dev/null +++ b/source/ubl-settings-repomanager-remove.c @@ -0,0 +1,134 @@ +// #include "ubl-settings-repomanager.h" + + +// void on_remove_arch_selection_changed(GtkWidget *self, repo_add_window *window){ +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))==-1){ +// gtk_widget_set_sensitive(window->AddPackageButton,0); +// } else { +// gtk_widget_set_sensitive(window->AddPackageButton,1); +// } +// } + +// void on_remove_accept(GtkWidget *self, dictionary *dict){ +// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); +// repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); +// GtkTreeModel *model; +// GtkTreeIter iter; +// const char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); +// char *storage_path; +// char *repo = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); +// char *arch = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); + +// if (!yon_char_is_empty(storage_id)){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,storage_id); +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&storage_path,-1); +// int size=0; +// config_str packages=NULL; +// for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){ +// char *target; +// gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&iter,1,&target,-1); +// yon_char_parsed_add_or_create_if_exists(packages,&size,target); +// } +// if (size){ +// char *sign = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); +// char *command; +// if (yon_char_is_empty(sign)){ +// command = yon_delete_packages_command(storage_path,arch,repo,yon_char_parsed_to_string(packages,size," ")); +// } else { +// command = yon_delete_packages_sign_command(storage_path,arch,repo,sign,yon_char_parsed_to_string(packages,size," ")); +// } +// yon_debug_output("%s\n",command); +// if (!system(command)){ +// yon_ubl_status_box_render(PACKAGES_REMOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); +// gtk_tree_store_clear(widgets->RepoList); +// yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); + +// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); +// if (!yon_char_is_empty(id)){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); +// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); +// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); +// on_main_tree_selection_changed(NULL,widgets); +// } +// } +// yon_config_load_update(widgets); +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return; +// } +// }else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return; +// } +// gtk_widget_destroy(window->MainWindow); +// } + +// void on_remove_add_package(GtkWidget *self, repo_add_window *window){ +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))>-1){ +// file_chooser_window *dialog = yon_file_chooser_new(); +// yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); +// gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); +// GtkFileFilter *filter = gtk_file_filter_new(); +// gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); +// gtk_file_filter_set_name(filter,"*.pkg.tar.*"); +// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); +// GtkTreeIter iter,itar; +// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->ArchitectureCombo),GTK_TREE_MODEL(window->tree_copy),&iter); +// char *target; +// int temp_size=0; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&target,-1); +// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->ArchitectureCombo),GTK_TREE_MODEL(window->tree_copy),&itar); +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&dialog->root_path,-1); +// gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->FileChooserWidget),target); + +// 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,"dialog",dialog); + +// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); +// g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); +// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); +// gtk_widget_show(dialog->Window); +// } +// } + + +// repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets){ +// repo_add_window *window = yon_repo_add_window_new(); +// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),REMOVE_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); +// gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGES_TITLE_LABEL); +// GtkTreeIter iter; +// for_iter (window->tree_copy,&iter){ +// char *current; +// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); +// if (!yon_char_is_empty(current)){ +// char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StorageCombo),path,current); +// } +// } +// gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),REMOVE_PACKAGES_LABEL); +// yon_sign_list_update(); +// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); +// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); +// gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); + +// gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); + +// gtk_button_set_label(GTK_BUTTON(window->AddButton),REMOVE_LABEL); +// dictionary *dict = NULL; +// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); +// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); +// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); +// g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); +// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); +// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_remove_arch_selection_changed),window); +// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),dict); +// g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_remove_add_package),window); +// g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); +// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); +// yon_add_window_set_selected(widgets,window); +// gtk_widget_show(window->MainWindow); +// return window; +// } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-storage-list.c b/source/ubl-settings-repomanager-storage-list.c new file mode 100644 index 0000000..36e4717 --- /dev/null +++ b/source/ubl-settings-repomanager-storage-list.c @@ -0,0 +1,75 @@ +#include "ubl-settings-repomanager.h" + + +void on_repo_signed(){ + +} + +void on_repo_removed(GtkWidget *self,storage_config_window *window){ + GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(self))); + char *repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); + GtkTreeIter iter, itar; + char *storage; + char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + if (!yon_char_is_empty(id)){ + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id); + int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter); + for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){ + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&target,-1); + if (!strcmp(target,repo)){ + gtk_tree_store_remove(window->storages_copy,&itar); + break; + } + } + } + // yon_storage_config_update(window); + +} + +// void on_repo_sign_changed(GtkWidget *self, storage_repo_block *block){ +// GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(self))); +// const char *sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(g_list_nth_data(list,2))); +// char *target_repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); +// if (!yon_char_is_empty(target_repo)){ +// GtkTreeIter iter,itar; +// int size; +// char *storage_path; +// int found = yon_char_parsed_check_exist(repos,size,target_repo); +// if (found>-1){ +// char *child_id = yon_char_unite((char*)id,":",yon_char_from_int(found),NULL); +// if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,child_id)){ +// if (!yon_char_is_empty(sign)){ +// gtk_tree_store_set(window->storages_copy,&itar,6,1,5,sign,-1); +// if (system(yon_debug_output("%s\n",yon_sign_repo(storage_path,target_repo,sign)))){ +// gtk_combo_box_set_active(GTK_COMBO_BOX((GtkWidget*)g_list_nth_data(list,2)),0); +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),REPO_SIGN_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// } +// }else +// gtk_tree_store_set(window->storages_copy,&itar,6,-1,5,NULL,-1); +// } +// } +// } +// } + +storage_repo_block *yon_storage_repo_block_new(){ + storage_repo_block *block = malloc(sizeof(storage_repo_block)); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_block); + block->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); + block->SignatureCombo = yon_gtk_builder_get_widget(builder,"SignatureCombo"); + block->SignatureButton = yon_gtk_builder_get_widget(builder,"SignatureButton"); + block->RepoNameEntry = yon_gtk_builder_get_widget(builder,"RepoNameEntry"); + block->RepoRemoveButton = yon_gtk_builder_get_widget(builder,"RepoRemoveButton"); + + block->repo_name=NULL; + block->storage_path=NULL; + + // g_signal_connect(block->SignatureButton,"clicked",G_CALLBACK(on_repo_signed),block); + // g_signal_connect(block->RepoRemoveButton,"clicked",G_CALLBACK(on_repo_removed),block); + // g_signal_connect(block->SignatureButton,"clicked",G_CALLBACK(on_repo_sign_changed),block); + + g_object_set_data(G_OBJECT(block->MainBox),"block_data",block); + // yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(block->SignatureCombo)); + gtk_combo_box_set_active(GTK_COMBO_BOX(block->SignatureCombo),0); +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager-storage-window.c b/source/ubl-settings-repomanager-storage-window.c index c6048e3..96fc066 100644 --- a/source/ubl-settings-repomanager-storage-window.c +++ b/source/ubl-settings-repomanager-storage-window.c @@ -1,279 +1,279 @@ -#include "ubl-settings-repomanager.h" +// #include "ubl-settings-repomanager.h" -// storage-configure window section +// // storage-configure window section -void on_storage_open(GtkWidget *self, storage_config_window *window){ - GtkWidget *dialog = gtk_file_chooser_dialog_new(CHOSE_FOLDER_TITLE_LABEL,GTK_WINDOW(window->MainWindow),GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CLOSE_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); - yon_gtk_window_setup(GTK_WINDOW(dialog),GTK_WINDOW(window->MainWindow),CHOSE_FOLDER_TITLE_LABEL,icon_path,"file_chooser"); - int responce = gtk_dialog_run(GTK_DIALOG(dialog)); - if (responce == GTK_RESPONSE_ACCEPT){ - char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - if (!yon_char_is_empty(path)){ - int size; - config_str files = yon_file_list_dirs(path,&size); - if (!files){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_FOLDER_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_widget_destroy(dialog); - return; - } else { - yon_char_parsed_free(files,size); - GtkTreeIter iter, itar; - gtk_tree_store_append(window->storages_copy,&iter,NULL); - char *name = yon_char_new(path); - free(yon_char_divide(name,yon_char_find_last(name,'/'))); - gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1); - gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); - char *iterpath = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),iterpath,path); - char *repos=NULL; - int repos_size=0; - g_signal_handlers_block_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); - yon_gtk_combo_box_text_find(window->StoragePathCombo,path); - g_signal_handlers_unblock_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); - yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING); - config_str repos_list = yon_file_list_dirs(path,&repos_size); - for (int i=0;iAddEntry),render_name); - on_repo_add(self,window); - free(render_name); - } - } - yon_char_parsed_free(repos_list,repos_size); - } +// void on_storage_open(GtkWidget *self, storage_config_window *window){ +// GtkWidget *dialog = gtk_file_chooser_dialog_new(CHOSE_FOLDER_TITLE_LABEL,GTK_WINDOW(window->MainWindow),GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CLOSE_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); +// yon_gtk_window_setup(GTK_WINDOW(dialog),GTK_WINDOW(window->MainWindow),CHOSE_FOLDER_TITLE_LABEL,icon_path,"file_chooser"); +// int responce = gtk_dialog_run(GTK_DIALOG(dialog)); +// if (responce == GTK_RESPONSE_ACCEPT){ +// char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); +// if (!yon_char_is_empty(path)){ +// int size; +// config_str files = yon_file_list_dirs(path,&size); +// if (!files){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_FOLDER_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// gtk_widget_destroy(dialog); +// return; +// } else { +// yon_char_parsed_free(files,size); +// GtkTreeIter iter, itar; +// gtk_tree_store_append(window->storages_copy,&iter,NULL); +// char *name = yon_char_new(path); +// free(yon_char_divide(name,yon_char_find_last(name,'/'))); +// gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1); +// gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); +// char *iterpath = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),iterpath,path); +// char *repos=NULL; +// int repos_size=0; +// g_signal_handlers_block_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); +// yon_gtk_combo_box_text_find(window->StoragePathCombo,path); +// g_signal_handlers_unblock_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); +// yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING); +// config_str repos_list = yon_file_list_dirs(path,&repos_size); +// for (int i=0;iAddEntry),render_name); +// on_repo_add(self,window); +// free(render_name); +// } +// } +// yon_char_parsed_free(repos_list,repos_size); +// } - } - } - yon_storage_config_update(window); - gtk_widget_destroy(dialog); -} +// } +// } +// yon_storage_config_update(window); +// gtk_widget_destroy(dialog); +// } -void on_storage_create(GtkWidget *self, storage_config_window *window){ - GtkWidget *dialog = gtk_file_chooser_dialog_new(CHOSE_FOLDER_TITLE_LABEL,GTK_WINDOW(window->MainWindow),GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CLOSE_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); - yon_gtk_window_setup(GTK_WINDOW(dialog),GTK_WINDOW(window->MainWindow),CHOSE_FOLDER_TITLE_LABEL,icon_path,"file_chooser"); - int responce = gtk_dialog_run(GTK_DIALOG(dialog)); - if (responce == GTK_RESPONSE_ACCEPT){ - char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - if (!yon_char_is_empty(path)){ - int size; - config_str files = yon_file_list_dirs(path,&size); - if (files){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),FILES_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_widget_destroy(dialog); - return; - } else { - yon_char_parsed_free(files,size); - GtkTreeIter iter; - gtk_tree_store_append(window->storages_copy,&iter,NULL); - char *name = yon_char_new(path); - free(yon_char_divide(name,yon_char_find_last(name,'/'))); - gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1); - char *iterpath = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),iterpath,path); - g_signal_handlers_block_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); - yon_gtk_combo_box_text_find(window->StoragePathCombo,path); - g_signal_handlers_unblock_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); - gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); - yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING); - } - } - } - yon_storage_config_update(window); - gtk_widget_destroy(dialog); -} +// void on_storage_create(GtkWidget *self, storage_config_window *window){ +// GtkWidget *dialog = gtk_file_chooser_dialog_new(CHOSE_FOLDER_TITLE_LABEL,GTK_WINDOW(window->MainWindow),GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CLOSE_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); +// yon_gtk_window_setup(GTK_WINDOW(dialog),GTK_WINDOW(window->MainWindow),CHOSE_FOLDER_TITLE_LABEL,icon_path,"file_chooser"); +// int responce = gtk_dialog_run(GTK_DIALOG(dialog)); +// if (responce == GTK_RESPONSE_ACCEPT){ +// char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); +// if (!yon_char_is_empty(path)){ +// int size; +// config_str files = yon_file_list_dirs(path,&size); +// if (files){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),FILES_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// gtk_widget_destroy(dialog); +// return; +// } else { +// yon_char_parsed_free(files,size); +// GtkTreeIter iter; +// gtk_tree_store_append(window->storages_copy,&iter,NULL); +// char *name = yon_char_new(path); +// free(yon_char_divide(name,yon_char_find_last(name,'/'))); +// gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1); +// char *iterpath = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),iterpath,path); +// g_signal_handlers_block_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); +// yon_gtk_combo_box_text_find(window->StoragePathCombo,path); +// g_signal_handlers_unblock_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); +// gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); +// yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING); +// } +// } +// } +// yon_storage_config_update(window); +// gtk_widget_destroy(dialog); +// } -void on_storage_disable(GtkWidget *self, storage_config_window *window){ - dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); - data->action_text=DISABLE_CONFIRMATION_LABEL; - GtkTreeIter iter,itar; - if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter)){ - if (yon_confirmation_dialog_call(self,data)){ - char *storage; - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); - if (id){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&storage,-1); - char *repos; - yon_window_config_get_parameter("storage_info",storage,&repos,YON_TYPE_STRING); - int repo_size; - config_str repo_list = yon_char_parse(repos,&repo_size,","); - for (int i=0;istorages_copy,&itar); - gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); - } - } - yon_storage_config_update(window); - } -} +// void on_storage_disable(GtkWidget *self, storage_config_window *window){ +// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); +// data->action_text=DISABLE_CONFIRMATION_LABEL; +// GtkTreeIter iter,itar; +// if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter)){ +// if (yon_confirmation_dialog_call(self,data)){ +// char *storage; +// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); +// if (id){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); +// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&storage,-1); +// char *repos; +// yon_window_config_get_parameter("storage_info",storage,&repos,YON_TYPE_STRING); +// int repo_size; +// config_str repo_list = yon_char_parse(repos,&repo_size,","); +// for (int i=0;istorages_copy,&itar); +// gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); +// } +// } +// yon_storage_config_update(window); +// } +// } -void on_storage_remove(GtkWidget *self, storage_config_window *window){ - dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); - data->action_text=REMOVE_CONFIRMATION_LABEL; - if (yon_confirmation_dialog_call(self,data)){ - GtkTreeIter itar; - char *storage; - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); - if (id){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&storage,-1); - char *repos; - yon_window_config_get_parameter("storage_info",storage,&repos,YON_TYPE_STRING); - int repo_size; - config_str repo_list = yon_char_parse(repos,&repo_size,","); - for (int i=0;istorages_copy,&itar); - gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); - } - } - yon_storage_config_update(window); -} +// void on_storage_remove(GtkWidget *self, storage_config_window *window){ +// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); +// data->action_text=REMOVE_CONFIRMATION_LABEL; +// if (yon_confirmation_dialog_call(self,data)){ +// GtkTreeIter itar; +// char *storage; +// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); +// if (id){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); +// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&storage,-1); +// char *repos; +// yon_window_config_get_parameter("storage_info",storage,&repos,YON_TYPE_STRING); +// int repo_size; +// config_str repo_list = yon_char_parse(repos,&repo_size,","); +// for (int i=0;istorages_copy,&itar); +// gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); +// } +// } +// yon_storage_config_update(window); +// } -void on_repo_add(GtkWidget *self, storage_config_window *window){ - char *new_repo = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->AddEntry))); - gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); - if (yon_char_is_empty(new_repo)){ - yon_ubl_status_highlight_incorrect(window->AddEntry); - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_NAME_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - GtkTreeIter iter,itar, childiter; - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); - if (id){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); - char *path; - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&path,-1); - char *child_path = yon_char_unite(path,"/",new_repo,NULL); - gtk_tree_store_append(window->storages_copy,&childiter,&itar); - gtk_tree_store_set(window->storages_copy,&childiter,2,new_repo,3,child_path,-1); - yon_storage_config_update(window); - char *old; - yon_window_config_get_parameter("storage_info",path,&old,YON_TYPE_STRING); - int old_repos_size; - config_str old_repos_parsed = yon_char_parse(old,&old_repos_size,","); - if (yon_char_parsed_check_exist(old_repos_parsed,old_repos_size,child_path)==-1){ - yon_char_parsed_add_or_create_if_exists(old_repos_parsed,&old_repos_size,child_path); - } - yon_window_config_add_instant_parameter(path,"storage_info",yon_char_parsed_to_string(old_repos_parsed,old_repos_size,","),YON_TYPE_STRING); - yon_char_parsed_free(old_repos_parsed,old_repos_size); - yon_debug_output("%s\n",create_storage_command(path, new_repo)); - yon_launch(create_storage_command(path, new_repo)); - int size; - config_str dirs = yon_file_list_dirs(child_path,&size); - for (int i=0;istorages_copy,&iter,&childiter); - gtk_tree_store_set(window->storages_copy,&iter,2,dirs[i],3,arch_path,-1); +// void on_repo_add(GtkWidget *self, storage_config_window *window){ +// char *new_repo = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->AddEntry))); +// gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); +// if (yon_char_is_empty(new_repo)){ +// yon_ubl_status_highlight_incorrect(window->AddEntry); +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_NAME_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return; +// } +// GtkTreeIter iter,itar, childiter; +// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); +// if (id){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); +// char *path; +// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&path,-1); +// char *child_path = yon_char_unite(path,"/",new_repo,NULL); +// gtk_tree_store_append(window->storages_copy,&childiter,&itar); +// gtk_tree_store_set(window->storages_copy,&childiter,2,new_repo,3,child_path,-1); +// yon_storage_config_update(window); +// char *old; +// yon_window_config_get_parameter("storage_info",path,&old,YON_TYPE_STRING); +// int old_repos_size; +// config_str old_repos_parsed = yon_char_parse(old,&old_repos_size,","); +// if (yon_char_parsed_check_exist(old_repos_parsed,old_repos_size,child_path)==-1){ +// yon_char_parsed_add_or_create_if_exists(old_repos_parsed,&old_repos_size,child_path); +// } +// yon_window_config_add_instant_parameter(path,"storage_info",yon_char_parsed_to_string(old_repos_parsed,old_repos_size,","),YON_TYPE_STRING); +// yon_char_parsed_free(old_repos_parsed,old_repos_size); +// yon_debug_output("%s\n",create_storage_command(path, new_repo)); +// yon_launch(create_storage_command(path, new_repo)); +// int size; +// config_str dirs = yon_file_list_dirs(child_path,&size); +// for (int i=0;istorages_copy,&iter,&childiter); +// gtk_tree_store_set(window->storages_copy,&iter,2,dirs[i],3,arch_path,-1); - if (!yon_char_is_empty(arch_path)&&!access(arch_path,F_OK)){ - config_str final = NULL; - int final_size=0; - DIR *current_dir = opendir(arch_path); - struct dirent* cur_dir; - while ((cur_dir=readdir(current_dir))){ - if (strlen(cur_dir->d_name)>8){ - char *extension = yon_char_new(cur_dir->d_name); - free(yon_char_divide(extension,yon_char_find_last(extension,'.')-4)); - if ((strcmp(cur_dir->d_name, ".") && strcmp(cur_dir->d_name, ".."))&&strstr(extension,"tar.")){ - yon_char_parsed_add_or_create_if_exists(final,&final_size,cur_dir->d_name); - } - } - } - closedir(current_dir); - if (size) - yon_window_config_add_instant_parameter(arch_path,"package_info",yon_char_parsed_to_string(final,final_size,","),YON_TYPE_STRING); - } - } - yon_char_parsed_free(dirs,size); - } - free(new_repo); -} +// if (!yon_char_is_empty(arch_path)&&!access(arch_path,F_OK)){ +// config_str final = NULL; +// int final_size=0; +// DIR *current_dir = opendir(arch_path); +// struct dirent* cur_dir; +// while ((cur_dir=readdir(current_dir))){ +// if (strlen(cur_dir->d_name)>8){ +// char *extension = yon_char_new(cur_dir->d_name); +// free(yon_char_divide(extension,yon_char_find_last(extension,'.')-4)); +// if ((strcmp(cur_dir->d_name, ".") && strcmp(cur_dir->d_name, ".."))&&strstr(extension,"tar.")){ +// yon_char_parsed_add_or_create_if_exists(final,&final_size,cur_dir->d_name); +// } +// } +// } +// closedir(current_dir); +// if (size) +// yon_window_config_add_instant_parameter(arch_path,"package_info",yon_char_parsed_to_string(final,final_size,","),YON_TYPE_STRING); +// } +// } +// yon_char_parsed_free(dirs,size); +// } +// free(new_repo); +// } -void on_storage_accept(GtkWidget *self, dictionary *dict){ - 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*); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); - gtk_tree_store_clear(main_config.tree_store); - yon_gtk_tree_store_copy_full(window->storages_copy,main_config.tree_store); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(main_config.tree_store)); - yon_window_config_save_instant(); - GtkTreeIter iter; - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); - if (!yon_char_is_empty(id)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); - gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); - on_main_tree_selection_changed(NULL,widgets); - } - on_subwindow_close(self); - yon_config_load_update(widgets); - yon_ubl_status_box_render(STORAGES_SAVED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -} +// void on_storage_accept(GtkWidget *self, dictionary *dict){ +// 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*); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); +// gtk_tree_store_clear(main_config.tree_store); +// yon_gtk_tree_store_copy_full(window->storages_copy,main_config.tree_store); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(main_config.tree_store)); +// yon_window_config_save_instant(); +// GtkTreeIter iter; +// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); +// if (!yon_char_is_empty(id)){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); +// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); +// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); +// on_main_tree_selection_changed(NULL,widgets); +// } +// on_subwindow_close(self); +// yon_config_load_update(widgets); +// yon_ubl_status_box_render(STORAGES_SAVED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +// } -void on_storage_changed(GtkWidget *self, storage_config_window *window){ - yon_storage_config_update(window); -} +// void on_storage_changed(GtkWidget *self, storage_config_window *window){ +// yon_storage_config_update(window); +// } -storage_config_window *yon_storage_config_window_new(){ - storage_config_window *window = malloc(sizeof(storage_config_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_storage_config); - window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); - window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); - window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); - window->StoragePathCombo = yon_gtk_builder_get_widget(builder,"StoragePathCombo"); - window->OpenExistingButton = yon_gtk_builder_get_widget(builder,"OpenExistingButton"); - window->CreateNewButton = yon_gtk_builder_get_widget(builder,"CreateNewButton"); - window->DisableButton = yon_gtk_builder_get_widget(builder,"DisableButton"); - window->DeleteButton = yon_gtk_builder_get_widget(builder,"DeleteButton"); - window->ReposBox = yon_gtk_builder_get_widget(builder,"ReposBox"); - window->AddEntry = yon_gtk_builder_get_widget(builder,"AddEntry"); - window->AddRepoButton = yon_gtk_builder_get_widget(builder,"AddRepoButton"); - window->storages_copy = gtk_tree_store_new(7,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT); - yon_gtk_tree_store_copy_full(main_config.tree_store,window->storages_copy); - g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->OpenExistingButton),"clicked",G_CALLBACK(on_storage_open),window); - g_signal_connect(G_OBJECT(window->CreateNewButton),"clicked",G_CALLBACK(on_storage_create),window); - g_signal_connect(G_OBJECT(window->DisableButton),"clicked",G_CALLBACK(on_storage_disable),window); - g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window); - g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window); - g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window); +// storage_config_window *yon_storage_config_window_new(){ +// storage_config_window *window = malloc(sizeof(storage_config_window)); +// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_storage_config); +// window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); +// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); +// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); +// window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); +// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); +// window->StoragePathCombo = yon_gtk_builder_get_widget(builder,"StoragePathCombo"); +// window->OpenExistingButton = yon_gtk_builder_get_widget(builder,"OpenExistingButton"); +// window->CreateNewButton = yon_gtk_builder_get_widget(builder,"CreateNewButton"); +// window->DisableButton = yon_gtk_builder_get_widget(builder,"DisableButton"); +// window->DeleteButton = yon_gtk_builder_get_widget(builder,"DeleteButton"); +// window->ReposBox = yon_gtk_builder_get_widget(builder,"ReposBox"); +// window->AddEntry = yon_gtk_builder_get_widget(builder,"AddEntry"); +// window->AddRepoButton = yon_gtk_builder_get_widget(builder,"AddRepoButton"); +// window->storages_copy = gtk_tree_store_new(7,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT); +// yon_gtk_tree_store_copy_full(main_config.tree_store,window->storages_copy); +// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); +// g_signal_connect(G_OBJECT(window->OpenExistingButton),"clicked",G_CALLBACK(on_storage_open),window); +// g_signal_connect(G_OBJECT(window->CreateNewButton),"clicked",G_CALLBACK(on_storage_create),window); +// g_signal_connect(G_OBJECT(window->DisableButton),"clicked",G_CALLBACK(on_storage_disable),window); +// g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window); +// g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window); +// g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window); - return window; -} +// return window; +// } -void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){ - storage_config_window *window = yon_storage_config_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MANAGE_STORAGES_TITLE_LABEL,icon_path,"storage-configuration-window"); - gtk_label_set_text(GTK_LABEL(window->HeadLabel),MANAGE_STORAGES_TITLE_LABEL); - gtk_window_set_transient_for(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window)); - GtkTreeIter iter,itar; - for_iter(window->storages_copy,&iter){ - char *storage; - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&iter,3,&storage,-1); - char *id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),id,storage); - } +// void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){ +// storage_config_window *window = yon_storage_config_window_new(); +// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MANAGE_STORAGES_TITLE_LABEL,icon_path,"storage-configuration-window"); +// gtk_label_set_text(GTK_LABEL(window->HeadLabel),MANAGE_STORAGES_TITLE_LABEL); +// gtk_window_set_transient_for(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window)); +// GtkTreeIter iter,itar; +// for_iter(window->storages_copy,&iter){ +// char *storage; +// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&iter,3,&storage,-1); + +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage,storage); +// } - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_storage_accept),dict); - gtk_widget_show(window->MainWindow); -} +// dictionary *dict = NULL; +// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); +// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); +// g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_storage_accept),dict); +// gtk_widget_show(window->MainWindow); +// } diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index bea008e..e63189a 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -2,195 +2,82 @@ config main_config; -void on_repo_signed(){ -} - -void on_repo_removed(GtkWidget *self,storage_config_window *window){ - GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(self))); - char *repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); - GtkTreeIter iter, itar; - char *storage; - char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); - if (!yon_char_is_empty(id)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id); - int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){ - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&target,-1); - if (!strcmp(target,repo)){ - gtk_tree_store_remove(window->storages_copy,&itar); - break; - } - } - } - yon_storage_config_update(window); -} - -void on_repo_sign_changed(GtkWidget *self, storage_config_window *window){ - GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(self))); - const char *sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(g_list_nth_data(list,2))); - char *target_repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); - if (!yon_char_is_empty(id)){ - GtkTreeIter iter,itar; - int size; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id); - char *storage_path; - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&iter,3,&storage_path,-1); - config_str repos = yon_tree_store_get_all_at_level(window->storages_copy,&iter,&size,2,2); - int found = yon_char_parsed_check_exist(repos,size,target_repo); - if (found>-1){ - char *child_id = yon_char_unite((char*)id,":",yon_char_from_int(found),NULL); - if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,child_id)){ - if (!yon_char_is_empty(sign)){ - gtk_tree_store_set(window->storages_copy,&itar,6,1,5,sign,-1); - if (system(yon_debug_output("%s\n",yon_sign_repo(storage_path,target_repo,sign)))){ - gtk_combo_box_set_active(GTK_COMBO_BOX((GtkWidget*)g_list_nth_data(list,2)),0); - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),REPO_SIGN_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } - }else - gtk_tree_store_set(window->storages_copy,&itar,6,-1,5,NULL,-1); - } - } - } -} - -void yon_storage_config_update(storage_config_window *window){ - GList *children = gtk_container_get_children(GTK_CONTAINER(window->ReposBox)); - for (int i=0;iStoragePathCombo)); - if (id){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id); - if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter)){ - int valid = 1; - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){ - char *repo; - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&repo,-1); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_block); - GtkWidget *box = yon_gtk_builder_get_widget(builder,"MainBox"); - gtk_box_pack_start(GTK_BOX(window->ReposBox),box,0,0,0); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(gtk_builder_get_object(builder,"SignatureCombo"))); - gtk_combo_box_set_active(GTK_COMBO_BOX(gtk_builder_get_object(builder,"SignatureCombo")),0); - g_signal_connect(gtk_builder_get_object(builder,"SignatureButton"),"clicked",G_CALLBACK(on_repo_signed),window); - g_signal_connect(gtk_builder_get_object(builder,"RepoRemoveButton"),"clicked",G_CALLBACK(on_repo_removed),window); - gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(builder,"RepoNameEntry")),repo); - char *storage = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->StoragePathCombo)); - int sign_size; - char *command = yon_repo_get_signature(storage,repo); - yon_debug_output("%s\n",command); - config_str sign = yon_config_load(command,&sign_size); - if (sign_size>0){ - yon_char_remove_last_symbol(sign[2],'\n'); - char *mail = strstr(sign[2],"\""); - if (!yon_char_is_empty(mail)){ - char *email = yon_char_new(mail); - yon_char_remove_brackets(email); - gtk_combo_box_set_active_id(GTK_COMBO_BOX(gtk_builder_get_object(builder,"SignatureCombo")),email); - free(email); - } - yon_char_parsed_free(sign,sign_size); - } - g_signal_connect(gtk_builder_get_object(builder,"SignatureButton"),"clicked",G_CALLBACK(on_repo_sign_changed),window); - } - } - } -} - -// filechooser window section - -void on_file_chooser_entry_changed(GtkEntry *self, file_chooser_window *window){ - const char *text = gtk_entry_get_text(self); - GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(window->FileChooserWidget)); - gtk_file_chooser_remove_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); - filter = gtk_file_filter_new(); - char *pattern = !yon_char_is_empty(text)?yon_char_unite("*",text,"*.pkg.tar*[^.sig]",NULL) : "*.pkg.tar*[^.sig]"; - gtk_file_filter_add_pattern(filter,pattern); - gtk_file_filter_set_name(filter,"*.pkg.tar*"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); - if (!yon_char_is_empty(text)) free(pattern); -} - -void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict){ - on_add_accept(self,dict); -} - -file_chooser_window *yon_file_chooser_new(){ - file_chooser_window *window = malloc(sizeof(file_chooser_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_filechooser); - window->Window = yon_gtk_builder_get_widget(builder,"Window"); - window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel2"); - window->ChooseButton = yon_gtk_builder_get_widget(builder,"ChooseButton"); - window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); - window->FileChooserWidget = yon_gtk_builder_get_widget(builder,"FileChooserWidget"); - g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->NameEntry),"changed",G_CALLBACK(on_file_chooser_entry_changed),window); - - return window; -} - -// main window -void on_add_clicked(GtkWidget *self, main_window *widgets){ - repo_add_window *window = yon_repo_add_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),ADD_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); - gtk_label_set_text(GTK_LABEL(window->HeadLabel),ADD_PACKAGES_TITLE_LABEL); - GtkTreeIter iter; - for_iter (window->tree_copy,&iter){ - char *current; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); - if (!yon_char_is_empty(current)){ - char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StorageCombo),path,current); - } - } - - - yon_sign_list_update(); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); - - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); - - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - - g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); - g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); - g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); - g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_selection_changed),window); - g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_add_packages_accept),dict); - g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_add_package),window); - g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_remove_package),window); - g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); - yon_add_window_set_selected(widgets,window); - GtkTreeModel *model; - GList *list = NULL; - char *full_path; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&full_path,-1); - if (list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoPackagesTree)),&model)){ - for (int i=0; iPackagesList,&itar); - char *temp = yon_char_unite(full_path,"/",path,NULL); - free(full_path); - full_path = temp; - gtk_list_store_set(window->PackagesList,&itar,1,path,2,full_path,-1); - } - } - } - gtk_widget_show(window->MainWindow); -} +// void yon_storage_config_update(storage_config_window *window){ +// GList *children = gtk_container_get_children(GTK_CONTAINER(window->ReposBox)); +// for (int i=0;iStoragePathCombo)); +// if (id){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id); +// if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter)){ +// int valid = 1; +// for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){ +// char *storage = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->StoragePathCombo)); +// char *repo; +// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&repo,-1); +// storage_repo_block *block = yon_storage_repo_block_new(); +// block->repo_name = yon_char_new(repo); +// block->storage_path = yon_char_new(storage); +// gtk_box_pack_start(GTK_BOX(window->ReposBox),block->MainBox,0,0,0); +// gtk_entry_set_text(GTK_ENTRY(block->RepoNameEntry),repo); +// int sign_size; +// char *command = yon_repo_get_signature(storage,repo); +// yon_debug_output("%s\n",command); +// config_str sign = yon_config_load(command,&sign_size); +// if (sign_size>0){ +// yon_char_remove_last_symbol(sign[2],'\n'); +// char *mail = strstr(sign[2],"\""); +// if (!yon_char_is_empty(mail)){ +// char *email = yon_char_new(mail); +// yon_char_remove_brackets(email); +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(block->SignatureCombo),email); +// free(email); +// } +// yon_char_parsed_free(sign,sign_size); +// } +// } +// } +// } +// } + +// // filechooser window section + +// void on_file_chooser_entry_changed(GtkEntry *self, file_chooser_window *window){ +// const char *text = gtk_entry_get_text(self); +// GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(window->FileChooserWidget)); +// gtk_file_chooser_remove_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); +// filter = gtk_file_filter_new(); +// char *pattern = !yon_char_is_empty(text)?yon_char_unite("*",text,"*.pkg.tar*[^.sig]",NULL) : "*.pkg.tar*[^.sig]"; +// gtk_file_filter_add_pattern(filter,pattern); +// gtk_file_filter_set_name(filter,"*.pkg.tar*"); +// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); +// if (!yon_char_is_empty(text)) free(pattern); +// } + +// void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict){ +// on_add_accept(self,dict); +// } + +// file_chooser_window *yon_file_chooser_new(){ +// file_chooser_window *window = malloc(sizeof(file_chooser_window)); +// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_filechooser); +// window->Window = yon_gtk_builder_get_widget(builder,"Window"); +// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); +// window->HeadLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel2"); +// window->ChooseButton = yon_gtk_builder_get_widget(builder,"ChooseButton"); +// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); +// window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); +// window->FileChooserWidget = yon_gtk_builder_get_widget(builder,"FileChooserWidget"); +// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); +// g_signal_connect(G_OBJECT(window->NameEntry),"changed",G_CALLBACK(on_file_chooser_entry_changed),window); + +// return window; +// } + +// // main window void on_folder_changed(GtkFileChooser *self, file_chooser_window *dialog){ const char *current = gtk_file_chooser_get_current_folder(self); @@ -199,778 +86,410 @@ void on_folder_changed(GtkFileChooser *self, file_chooser_window *dialog){ } } -void on_move_add_accept(GtkWidget *self, dictionary *dict){ - repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); - file_chooser_window *dialog = yon_dictionary_get_data(dict->first->next,file_chooser_window*); - GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog->FileChooserWidget)); - for (int i=0;iPackagesList,&iter); - gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,files[k],-1); - } - } - } else { - GtkTreeIter iter; - int temp_size; - config_str name = yon_config_load(yon_get_package_name_from_filename(path),&temp_size); - if (temp_size<=0){ - yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - yon_char_remove_last_symbol(name[0],'\n'); - if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ - gtk_list_store_append(window->PackagesList,&iter); - gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,path,-1); - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } - - } - } - gtk_widget_destroy(dialog->Window); - free(dialog); - GtkTreeIter iter; - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ - gtk_widget_set_sensitive(window->MoveSourceStorageEntry,0); - gtk_widget_set_sensitive(window->MoveSourceRepoEntry,0); - gtk_widget_set_sensitive(window->MoveSourceArchEntry,0); - - gtk_widget_set_sensitive(window->MoveTargetRepoEntry,0); - gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); - - if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ - gtk_widget_set_sensitive(window->StorageCombo,0); - gtk_widget_set_sensitive(window->RepositoryCombo,0); - gtk_widget_set_sensitive(window->ArchitectureCombo,0); - } - } -} - -void on_move_add_package(GtkWidget *self, repo_add_window *window){ - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->MoveTargetArchEntry))>-1&>k_combo_box_get_active(GTK_COMBO_BOX(window->MoveSourceStorageEntry))>-1){ - file_chooser_window *dialog = yon_file_chooser_new(); - yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); - gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); - GtkFileFilter *filter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); - gtk_file_filter_set_name(filter,"*.pkg.tar.*"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); - GtkTreeIter iter,itar; - yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),GTK_TREE_MODEL(window->tree_copy),&iter); - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&target,3,&dialog->root_path,-1); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->FileChooserWidget),target); - - 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,"dialog",dialog); - - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); - g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); - gtk_widget_show(dialog->Window); - } -} - -void on_move_remove_package(GtkWidget *self, repo_add_window *window){ - GtkTreeIter iter; - GtkTreeModel *model; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ - gtk_list_store_remove(window->PackagesList,&iter); - } - if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->PackagesList),&iter)){ - - gtk_widget_set_sensitive(window->MoveSourceStorageEntry,1); - gtk_widget_set_sensitive(window->MoveSourceRepoEntry,1); - gtk_widget_set_sensitive(window->MoveSourceArchEntry,1); - - gtk_widget_set_sensitive(window->MoveTargetRepoEntry,1); - if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ - gtk_widget_set_sensitive(window->StorageCombo,1); - gtk_widget_set_sensitive(window->RepositoryCombo,1); - gtk_widget_set_sensitive(window->ArchitectureCombo,1); - } - } +// /* setup functions */ +void config_init(){ + main_config.tree_store=NULL; + main_config.signs=NULL; + main_config.signs_size=0; + // yon_sign_list_update(); + main_config.last_selection = NULL; + main_config.storages = g_hash_table_new(g_str_hash,g_str_equal); } -void on_move_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); - - int size = 0; - config_str packages = NULL; - GtkTreeIter iter,itar; - for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){ - char *target=NULL; - gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&iter,2,&target,-1); - if (!yon_char_is_empty(target)){ - free(yon_char_divide(target,yon_char_find_last(target,'/'))); - yon_char_parsed_add_or_create_if_exists(packages,&size,target); - free(target); - } - } - if (size){ - char *arch = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->MoveSourceArchEntry)); - yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry),GTK_TREE_MODEL(window->tree_copy),&iter); - yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveTargetRepoEntry),GTK_TREE_MODEL(window->tree_copy),&itar); - char *source_path, *source_repo, *target_path, *target_repo; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&source_repo,-1); - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&target_repo,-1); - source_path = yon_char_divide(source_repo,yon_char_find_last(source_repo,'/')); - target_path = yon_char_divide(target_repo,yon_char_find_last(target_repo,'/')); - char *command = yon_move_packages_command(source_path,arch,source_repo, target_repo, yon_char_parsed_to_string(packages,size," ")); - yon_debug_output("%s\n",command); - if (!system(command)){ - yon_ubl_status_box_render(PACKAGES_MOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); - gtk_tree_store_clear(widgets->RepoList); - yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); - - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); - if (!yon_char_is_empty(id)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); - gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); - on_main_tree_selection_changed(NULL,widgets); - } - yon_config_load_update(widgets); - on_subwindow_close(window->MainWindow); - } - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - } +char *yon_path_get_name(char *path){ + char *name=NULL; + char *copy = yon_char_new(path); + int last = yon_char_find_last(copy,'/'); + if (last>-1) + free(yon_char_divide(copy,last)); + return copy; } -repo_add_window *on_move_clicked(GtkWidget *self, main_window *widgets){ - repo_add_window *window = yon_repo_add_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MOVE_PACKAGES_TITLE_LABEL,icon_path,"move-repo-window"); - gtk_label_set_text(GTK_LABEL(window->HeadLabel),MOVE_PACKAGES_TITLE_LABEL); - gtk_button_set_label(GTK_BUTTON(window->AddButton),MOVE_LABEL); - gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),MOVE_PACKAGES_LABEL); - gtk_widget_show(window->MoveSourceFrame); - gtk_widget_show(window->MoveTargetFrame); - gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); - GtkTreeIter iter; - for_iter (window->tree_copy,&iter){ - char *current; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); - if (!yon_char_is_empty(current)){ - char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveSourceStorageEntry),path,current); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetStorageEntry),path,current); - } - } +int yon_storages_load(main_window *widgets){ - yon_sign_list_update(); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); - - gtk_widget_destroy(gtk_widget_get_parent(window->StorageCombo)); - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - g_signal_connect(G_OBJECT(window->MoveSourceStorageEntry),"changed",G_CALLBACK(on_move_storage_changed),window); - g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); - g_signal_connect(G_OBJECT(window->MoveSourceArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); - - g_signal_connect(G_OBJECT(window->MoveTargetRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); - g_signal_connect(G_OBJECT(window->MoveTargetArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); - - g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_move_add_package),window); - g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); - g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_move_accept),dict); - g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_repo_sign_load),window); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ - - char *target = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->RepoList),&iter); - int mod = yon_char_count(target,":")+1; - char *arc=NULL; - char *repo=NULL; - char *stor=NULL; - if (mod ==3){ - arc = yon_char_new(target); - char *temp = yon_char_new(target); - repo = yon_char_divide(temp,yon_char_find_last(temp,':')); - free(temp); - temp = yon_char_new(repo); - stor = yon_char_divide(temp,yon_char_find_last(temp,':')); - free(temp); - } else if (mod>=2){ - repo = yon_char_new(target); - char *temp = yon_char_new(target); - stor = yon_char_divide(temp,yon_char_find_last(temp,':')); - free(temp); - } else if (mod>=1){ - stor = yon_char_new(target); + gsize size; + config_str storages = yon_window_config_get_section("storage_info",&size); + GtkTreeIter storageiter, repoiter, architer; + for(int i=0;iname=storage_name; + storage->path=yon_char_new(storages[i]); + + int repos_size; + config_str repo_names = yon_char_parse(repos,&repos_size,","); + yon_storage_fill_repos(storage,repo_names,repos_size); } - if (stor) - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry),stor); - if (repo) - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry),repo); - if (arc) - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),arc); - } - gtk_widget_show(window->MainWindow); - return window; -} - -void on_remove_add_package(GtkWidget *self, repo_add_window *window){ - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))>-1){ - file_chooser_window *dialog = yon_file_chooser_new(); - yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); - gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); - GtkFileFilter *filter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); - gtk_file_filter_set_name(filter,"*.pkg.tar.*"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); - GtkTreeIter iter,itar; - yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->ArchitectureCombo),GTK_TREE_MODEL(window->tree_copy),&iter); - char *target; - int temp_size=0; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&target,-1); - yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->ArchitectureCombo),GTK_TREE_MODEL(window->tree_copy),&itar); - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&dialog->root_path,-1); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->FileChooserWidget),target); - - 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,"dialog",dialog); - - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); - g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); - g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); - gtk_widget_show(dialog->Window); } + if (size) return 1; + return 0; } -void on_remove_arch_selection_changed(GtkWidget *self, repo_add_window *window){ - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))==-1){ - gtk_widget_set_sensitive(window->AddPackageButton,0); - } else { - gtk_widget_set_sensitive(window->AddPackageButton,1); - } +void yon_repo_tree_build_storage(char *key, storage_struct *storage, main_window *widgets){ + struct repo_tree_build data; + data.widgets=widgets; + gtk_tree_store_append(widgets->RepoList,&data.storageiter,NULL); + gtk_tree_store_set(widgets->RepoList,&data.storageiter,2,storage->name,3,storage->path,7,storage,8,0,-1); + g_hash_table_foreach(storage->repos,(GHFunc)yon_repo_tree_build_repo,&data); } -void on_remove_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); - GtkTreeModel *model; - GtkTreeIter iter; - const char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); - char *storage_path; - char *repo = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); - char *arch = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); - - if (!yon_char_is_empty(storage_id)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,storage_id); - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&storage_path,-1); - int size=0; - config_str packages=NULL; - for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){ - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&iter,1,&target,-1); - yon_char_parsed_add_or_create_if_exists(packages,&size,target); - } - if (size){ - char *sign = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); - char *command; - if (yon_char_is_empty(sign)){ - command = yon_delete_packages_command(storage_path,arch,repo,yon_char_parsed_to_string(packages,size," ")); - } else { - command = yon_delete_packages_sign_command(storage_path,arch,repo,sign,yon_char_parsed_to_string(packages,size," ")); - } - yon_debug_output("%s\n",command); - if (!system(command)){ - yon_ubl_status_box_render(PACKAGES_REMOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); - gtk_tree_store_clear(widgets->RepoList); - yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); - - const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); - if (!yon_char_is_empty(id)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); - gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); - on_main_tree_selection_changed(NULL,widgets); - } - } - yon_config_load_update(widgets); - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - }else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - gtk_widget_destroy(window->MainWindow); +void yon_repo_tree_build_repo(char *key, repo_struct *repo, struct repo_tree_build *data){ + gtk_tree_store_append(data->widgets->RepoList,&data->repoiter,&data->storageiter); + gtk_tree_store_set(data->widgets->RepoList,&data->repoiter,2,repo->name,3,repo->path,7,repo,8,1,-1); + g_hash_table_foreach(repo->archs,(GHFunc)yon_repo_tree_build_arch,data); } -repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets){ - repo_add_window *window = yon_repo_add_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),REMOVE_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); - gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGES_TITLE_LABEL); - GtkTreeIter iter; - for_iter (window->tree_copy,&iter){ - char *current; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); - if (!yon_char_is_empty(current)){ - char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StorageCombo),path,current); - } - } - gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),REMOVE_PACKAGES_LABEL); - yon_sign_list_update(); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); - - gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); - - gtk_button_set_label(GTK_BUTTON(window->AddButton),REMOVE_LABEL); - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); - g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); - g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); - g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_remove_arch_selection_changed),window); - g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),dict); - g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_remove_add_package),window); - g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); - g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); - yon_add_window_set_selected(widgets,window); - gtk_widget_show(window->MainWindow); - return window; -} - - /* setup functions */ -void config_init(){ - main_config.tree_store=NULL; - main_config.always_open_documentation=0; - main_config.socket_id=-1; - main_config.save_socket_id=-1; - main_config.load_socket_id=-1; - main_config.lock_help=0; - main_config.lock_help=0; - main_config.lock_load_global=0; - main_config.lock_save_global=0; - main_config.lock_save_local=0; - main_config.signs=NULL; - main_config.signs_size=0; - yon_sign_list_update(); - main_config.last_selection = NULL; +void yon_repo_tree_build_arch(char *key, arch_struct *arch, struct repo_tree_build *data){ + gtk_tree_store_append(data->widgets->RepoList,&data->architer,&data->repoiter); + gtk_tree_store_set(data->widgets->RepoList,&data->architer,2,arch->name,3,arch->path,7,arch,8,2,-1); } -void yon_config_load_update(main_window *widgets){ +void yon_interface_update(main_window *widgets){ gtk_tree_store_clear(widgets->RepoList); - gsize size=0; - config_str storages = yon_window_config_get_section("storage_info",&size); - GtkTreeIter iter,itar,childiter; - for (int i=0;iRepoList,&iter,NULL); - gtk_tree_store_set(widgets->RepoList,&iter,0,folder_no_edits,2,name,3,storages[i],-1); - free(name); - yon_window_config_get_parameter("storage_info",storages[i],&name,YON_TYPE_STRING); - if (!yon_char_is_empty(name)){ - int parsed_size; - config_str name_parsed = yon_char_parse(name,&parsed_size,","); - for (int j=0;jRepoList,&itar,&iter); - gtk_tree_store_set(widgets->RepoList,&itar,2,nm,3,name_parsed[j],-1); - int size; - config_str dirs = yon_file_list_dirs(name_parsed[j],&size); - for (int k=0;kRepoList,&childiter,&itar); - gtk_tree_store_set(widgets->RepoList,&childiter,0,sign_status_image,2,dirs[k],3,arch_path,-1); - } - } - free(nm); - } - yon_char_parsed_free(name_parsed,parsed_size); - } + gtk_list_store_clear(widgets->RepoFileList); + gtk_list_store_clear(widgets->RepoPackagesList); + + yon_storages_load(widgets); + g_hash_table_foreach(main_config.storages,(GHFunc)yon_repo_tree_build_storage,widgets); +} + +// void yon_config_load_update(main_window *widgets){ +// gtk_tree_store_clear(widgets->RepoList); +// gsize size=0; +// config_str storages = yon_window_config_get_section("storage_info",&size); +// GtkTreeIter iter,itar,childiter; +// for (int i=0;iRepoList,&iter,NULL); +// gtk_tree_store_set(widgets->RepoList,&iter,0,folder_no_edits,2,name,3,storages[i],-1); +// free(name); +// yon_window_config_get_parameter("storage_info",storages[i],&name,YON_TYPE_STRING); +// if (!yon_char_is_empty(name)){ +// int parsed_size; +// config_str name_parsed = yon_char_parse(name,&parsed_size,","); +// for (int j=0;jRepoList,&itar,&iter); +// gtk_tree_store_set(widgets->RepoList,&itar,2,nm,3,name_parsed[j],-1); +// int size; +// config_str dirs = yon_file_list_dirs(name_parsed[j],&size); +// for (int k=0;kRepoList,&childiter,&itar); +// gtk_tree_store_set(widgets->RepoList,&childiter,0,sign_status_image,2,dirs[k],3,arch_path,-1); +// } +// } +// free(nm); +// } +// yon_char_parsed_free(name_parsed,parsed_size); +// } - } - if (size) - yon_char_parsed_free(storages,size); -} +// } +// if (size) +// yon_char_parsed_free(storages,size); +// } + +// config_str yon_tree_store_storage_get_archs(GtkTreeStore *target, GtkTreeIter *storage, int *size){ +// config_str final = NULL; +// GtkTreeIter iter,itar; +// int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,storage); +// for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ +// int archs_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&itar,&iter); +// for (;archs_valid;archs_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&itar)){ +// char *current; +// gtk_tree_model_get(GTK_TREE_MODEL(target),&itar,2,¤t,-1); +// if (yon_char_parsed_check_exist(final,*size,current)==-1) +// yon_char_parsed_add_or_create_if_exists(final,size,current); +// } +// } +// return final; +// } + +// config_str yon_tree_store_repo_get_archs(GtkTreeStore *target, GtkTreeIter *repo, int *size){ +// config_str final = NULL; +// GtkTreeIter iter; +// int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,repo); +// for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ +// char *current; +// gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,2,¤t,-1); +// if (yon_char_parsed_check_exist(final,*size,current)==-1) +// yon_char_parsed_add_or_create_if_exists(final,size,current); +// } +// return final; +// } + +// char *yon_signature_get(GtkTreeView *target, GtkTreeIter *iter){ +// GtkTreeIter itar; +// GtkTreeModel *model = gtk_tree_view_get_model(target); +// char *full_path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model),iter); +// int size; +// config_str parsed = yon_char_parse(full_path,&size,":"); +// if (size==2){ +// char *storage_path = parsed[0]; +// char *repo_path = yon_char_unite(parsed[0],":",parsed[1],NULL); +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,storage_path); +// char *path; +// gtk_tree_model_get(GTK_TREE_MODEL(model),&itar,3,&path,-1); +// char *repo; +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,repo_path); +// gtk_tree_model_get(GTK_TREE_MODEL(model),&itar,2,&repo,-1); +// int status_size; +// config_str status = yon_config_load(yon_repo_get_signature(path,repo),&status_size); +// char *final_string = NULL; +// if (status_size>4){ +// final_string = yon_char_unite(status[0],status[1],status[2],status[3],NULL); +// } +// free(full_path); +// free(path); +// free(repo); +// yon_char_parsed_free(parsed,size); +// yon_char_parsed_free(status,status_size); + +// return final_string; +// } +// return NULL; +// } -config_str yon_tree_store_storage_get_archs(GtkTreeStore *target, GtkTreeIter *storage, int *size){ - config_str final = NULL; - GtkTreeIter iter,itar; - int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,storage); - for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ - int archs_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&itar,&iter); - for (;archs_valid;archs_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&itar)){ - char *current; - gtk_tree_model_get(GTK_TREE_MODEL(target),&itar,2,¤t,-1); - if (yon_char_parsed_check_exist(final,*size,current)==-1) - yon_char_parsed_add_or_create_if_exists(final,size,current); - } - } - return final; -} -config_str yon_tree_store_repo_get_archs(GtkTreeStore *target, GtkTreeIter *repo, int *size){ - config_str final = NULL; +void yon_sublist_build(char *key, storage_struct *storage, main_window *widgets){ GtkTreeIter iter; - int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,repo); - for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ - char *current; - gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,2,¤t,-1); - if (yon_char_parsed_check_exist(final,*size,current)==-1) - yon_char_parsed_add_or_create_if_exists(final,size,current); - } - return final; + gtk_list_store_append(widgets->RepoFileList,&iter); + gtk_list_store_set(widgets->RepoFileList,&iter,1,storage->name,-1); } -char *yon_signature_get(GtkTreeView *target, GtkTreeIter *iter){ - GtkTreeIter itar; - GtkTreeModel *model = gtk_tree_view_get_model(target); - char *full_path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model),iter); - int size; - config_str parsed = yon_char_parse(full_path,&size,":"); - if (size==2){ - char *storage_path = parsed[0]; - char *repo_path = yon_char_unite(parsed[0],":",parsed[1],NULL); - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,storage_path); - char *path; - gtk_tree_model_get(GTK_TREE_MODEL(model),&itar,3,&path,-1); - char *repo; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,repo_path); - gtk_tree_model_get(GTK_TREE_MODEL(model),&itar,2,&repo,-1); - int status_size; - config_str status = yon_config_load(yon_repo_get_signature(path,repo),&status_size); - char *final_string = NULL; - if (status_size>4){ - final_string = yon_char_unite(status[0],status[1],status[2],status[3],NULL); - } - free(full_path); - free(path); - free(repo); - yon_char_parsed_free(parsed,size); - yon_char_parsed_free(status,status_size); - - return final_string; - } - return NULL; +void yon_sublist_packages_build(char *key, char *file, main_window *widgets){ + GtkTreeIter iter; + gtk_list_store_append(widgets->RepoFileList,&iter); + gtk_list_store_set(widgets->RepoFileList,&iter,1,key,-1); } void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ - gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),""); gtk_list_store_clear(widgets->RepoFileList); gtk_list_store_clear(widgets->RepoPackagesList); - GtkTreeIter iter,itar; - GtkTreeModel *model=NULL; + GtkTreeIter iter; + GtkTreeModel *model; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ - GtkTreePath *path = gtk_tree_model_get_path(model,&iter); - int depth = gtk_tree_path_get_depth(path); - char *target, *name; - gtk_tree_model_get(model, &iter,2,&name,3,&target,-1); - switch (depth){ - case 1:{ - int size, arch_size; - config_str repos = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&size,2,2); - config_str archs = yon_tree_store_storage_get_archs(widgets->RepoList,&iter,&arch_size); - if (size>0&&arch_size>0){ - char *repo_string = yon_char_parsed_to_string(repos,size,", "); - char *archs_string = yon_char_parsed_to_string(archs,arch_size,", "); - char *info = get_storage_info_label(target,repo_string,archs_string); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info); - int lvlsize; - config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,2); - for (int i=0;iRepoFileList,&itar); - gtk_list_store_set(widgets->RepoFileList,&itar,1,level[i],-1); - } - if (!yon_char_is_empty(repo_string))free(repo_string); - if (!yon_char_is_empty(archs_string)) free(archs_string); - if (!yon_char_is_empty(info))free(info); - yon_char_parsed_free(repos,size); - yon_char_parsed_free(archs,arch_size); - } - } - break; - case 2:{ - int size, arch_size; - config_str archs = yon_tree_store_repo_get_archs(widgets->RepoList,&iter,&arch_size); - char *archs_string = yon_char_parsed_to_string(archs,arch_size,", "); - char *sign = yon_signature_get(GTK_TREE_VIEW(widgets->ReposTree),&iter); - char *info = get_repo_info_label(name,archs_string,sign); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info); - int lvlsize; - config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,3); - for (int i=0;iRepoFileList,&itar); - gtk_list_store_set(widgets->RepoFileList,&itar,1,level[i],-1); - } - if (!yon_char_is_empty(archs_string)) free(archs_string); - if (!yon_char_is_empty(info))free(info); - yon_char_parsed_free(archs,arch_size); - - } - break; - case 3:{ - GtkTreeIter itor; - gtk_tree_model_iter_parent(GTK_TREE_MODEL(widgets->RepoList),&itor,&iter); - char *trg; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&itor,2,&trg,-1); - char *info = get_arch_info_label(trg,name); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info); - char *packages; - int size; - char *arch = yon_char_new(target); - char *repo = yon_char_divide(arch,yon_char_find_last(arch,'/')); - char *storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); - char *command = yon_get_packages_command(storage,repo,arch); - yon_debug_output("%s\n",command); - config_str parsed = yon_config_load(command,&size); - for (int i=0;i0){ - yon_char_remove_last_symbol(load[0],'\n'); - int package_status = system(yon_debug_output("%s\n",yon_repo_get_signature_status(storage,repo,arch,load[0]))); - char *sign_status_icon = ""; - if (!package_status) - sign_status_icon = package_signature_icon_name; - else - sign_status_icon = package_signature_error_icon_name; - gtk_list_store_append(widgets->RepoFileList,&itar); - gtk_list_store_set(widgets->RepoFileList,&itar,0,sign_status_icon,1,line[0],2,line[1],-1); - yon_char_parsed_free(load,load_size); - } - } else { - gtk_list_store_append(widgets->RepoPackagesList,&itar); - gtk_list_store_set(widgets->RepoPackagesList,&itar,0,package_signature_error_icon_name,1,line[1],-1); - } - } - if (!yon_char_is_empty(info))free(info); - } - break; - } - if (main_config.last_selection){ - if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoFileList),&itar,main_config.last_selection)) - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&itar); + char *path; + enum YON_REPO_DATA_TYPE data_type; + storage_struct *data_struct; + gtk_tree_model_get(model,&iter,7,&data_struct,8,&data_type,-1); + + if (data_type!=YON_REPO_DATA_ARCH){ + g_hash_table_foreach(data_struct->repos,(GHFunc)yon_sublist_build,widgets); + } else { + g_hash_table_foreach(data_struct->repos,(GHFunc)yon_sublist_packages_build,widgets); } } } void on_package_selection_changed(GtkWidget *self, main_window *widgets){ - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),""); - GtkTreeIter iter,itar; - GtkTreeModel *model, *model2; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ - if (main_config.last_selection) free(main_config.last_selection); - main_config.last_selection = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->RepoFileList),&iter); - gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model2,&itar); - switch (gtk_tree_store_iter_depth(widgets->RepoList,&itar)){ - case 0: - break; - case 1: - break; - case 2: - char *path, *filename; - gtk_tree_model_get(model,&iter,2,&filename,-1); - gtk_tree_model_get(model2,&itar,3,&path,-1); + GtkTreeIter iter; + GtkTreeModel *model; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ + GtkTreeIter subiter; + GtkTreeModel *submodel; + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&submodel,&subiter)) return; + char *target; + gtk_tree_model_get(submodel,&subiter,1,&target,-1); + enum YON_REPO_DATA_TYPE data_type; + gtk_tree_model_get(model,&iter,8,&data_type,-1); + switch (data_type){ + case YON_REPO_DATA_STORAGE:{ + storage_struct *storage; + gtk_tree_model_get(model,&iter,7,&storage,-1); + repo_struct *repo = g_hash_table_lookup(storage->repos,target); + + int size; + config_str archs = (config_str)g_hash_table_get_keys_as_array(repo->archs,&size); + char *archs_str = yon_char_parsed_to_string(archs,size,","); + char *info_label = get_repo_info_label(repo->name,archs_str,""); + gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info_label); + } break; + case YON_REPO_DATA_REPO: { + repo_struct *repo; + gtk_tree_model_get(model,&iter,7,&repo,-1); + int size; + config_str archs = (config_str)g_hash_table_get_keys_as_array(repo->archs,&size); + char *archs_str = yon_char_parsed_to_string(archs,size,","); + + char *info_label = get_arch_info_label(repo->name,archs_str); + gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info_label); + } break; + case YON_REPO_DATA_ARCH: { + arch_struct *arch; + gtk_tree_model_get(model,&iter,7,&arch,-1); + char *filename = g_hash_table_lookup(arch->packages,target); + + char *path = yon_char_unite(arch->storage_path,"/",arch->repo_name,"/",arch->name,"/",filename,NULL); + char *command = get_package_info_command(path); int size; - char *command = get_package_info_command(yon_char_unite(path,"/",filename,NULL)); - yon_debug_output("%s\n",command); config_str parsed = yon_config_load(command,&size); - for (int i=0;i")) temp = g_markup_escape_text(temp,strlen(temp)); - temp = yon_char_replace(temp,">",">"); - temp = yon_char_replace(temp,"<","<"); - parsed[i] = yon_char_unite("",title,":",temp,NULL); - if (!yon_char_is_empty(temp)) free(temp); - if (!yon_char_is_empty(title)) free(title); - } - } - char *full = yon_char_parsed_to_string(parsed,size,""); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),full); + char *info_label = yon_char_parsed_to_string(parsed,size,""); + gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),g_markup_escape_text(info_label,strlen(info_label))); yon_char_parsed_free(parsed,size); - if (!yon_char_is_empty(full)) free(full); - break; - } - } -} + if (!yon_char_is_empty(info_label)) free(info_label); -void yon_combo_box_text_set_signs(GtkComboBoxText *target){ - g_return_if_fail(GTK_IS_COMBO_BOX_TEXT(target)); - gtk_combo_box_text_remove_all(target); - gtk_combo_box_text_append_text(target,DO_NOT_SIGN_LABEL); - for (int i=0;i")) - yon_char_remove_last_symbol(temp,'>'); - gtk_combo_box_text_append(target,temp,main_config.signs[i]); - free(temp); + } break; + } } } -void yon_sign_list_update(){ - if (main_config.signs&&main_config.signs_size) yon_char_parsed_free(main_config.signs,main_config.signs_size); - main_config.signs = yon_config_load(get_gpg_keys_command,&main_config.signs_size); - for (int i=0;i")) +// yon_char_remove_last_symbol(temp,'>'); +// gtk_combo_box_text_append(target,temp,main_config.signs[i]); +// free(temp); +// } +// } + +// void yon_sign_list_update(){ +// if (main_config.signs&&main_config.signs_size) yon_char_parsed_free(main_config.signs,main_config.signs_size); +// main_config.signs = yon_config_load(get_gpg_keys_command,&main_config.signs_size); +// for (int i=0;iExpireEntry),self); -} - -void on_key_generate_accept(GtkWidget *self, key_creation_window* window){ - const char *name = gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); - const char *type = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->EncryptionCombo)); - const char *email = gtk_entry_get_text(GTK_ENTRY(window->EmailEntry)); - char *strength = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->KeyStrengthSpin))); - const char *comment = gtk_entry_get_text(GTK_ENTRY(window->CommentsEntry)); - if (!yon_char_is_empty(name)&&strlen(name)<5){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_SHORT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->NameEntry); - return; - } - GtkWidget *highlight_target=NULL; - if (yon_char_is_empty(name)){ - highlight_target=window->NameEntry; - } else if (yon_char_is_empty(type)){ - highlight_target=window->EncryptionCombo; - } else if (yon_char_is_empty(email)){ - highlight_target=window->EmailEntry; - } else if (yon_char_is_empty(strength)){ - highlight_target=window->KeyStrengthSpin; - } - if (highlight_target){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(highlight_target); - return; - } - char *expire = NULL; - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ExpireCombo))==1){ - GDateTime *datetime = g_date_time_new_from_unix_local(yon_calendar_get_last_date()); - expire = g_date_time_format(datetime,"%Y%m%dT000000"); - g_date_time_unref(datetime); - - } - const char *password = gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - const char *password_confirm = gtk_entry_get_text(GTK_ENTRY(window->PasswordConfirmationEntry)); - int ex_status=0; - if (yon_char_is_empty(password)&&yon_char_is_empty(password_confirm)){ - yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password)); - ex_status = system(yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password))); - } else if (!strcmp(password,password_confirm)){ - yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password)); - ex_status = system(yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password))); - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_INCORRECT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->PasswordConfirmationEntry); - yon_ubl_status_highlight_incorrect(window->PasswordEntry); - return; - } - if (!ex_status) - yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - else - yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_widget_destroy(window->Window); - yon_sign_list_update(); -} - -key_creation_window *yon_key_creation_window_new(){ - key_creation_window *window = malloc(sizeof(key_creation_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_key); - window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); - window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); - window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); - window->EmailEntry = yon_gtk_builder_get_widget(builder,"EmailEntry"); - window->CommentsEntry = yon_gtk_builder_get_widget(builder,"CommentsEntry"); - window->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); - window->KeyStrengthSpin = yon_gtk_builder_get_widget(builder,"KeyStrengthSpin"); - window->ExpireCombo = yon_gtk_builder_get_widget(builder,"ExpireCombo"); - window->ExpireEntry = yon_gtk_builder_get_widget(builder,"ExpireEntry"); - window->ExpireButton = yon_gtk_builder_get_widget(builder,"ExpireButton"); - window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); - window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); - window->PasswordConfirmationEntry = yon_gtk_builder_get_widget(builder,"PasswordConfirmationEntry"); - - yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordConfirmationEntry)); - yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); - - g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireButton); - g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireEntry); - g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->ExpireButton),"clicked",G_CALLBACK(on_calendar_open),window); - g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window); - - int size; - config_str encription_keys = yon_file_open(key_encription_path,&size); - window->expire_time=0; - - for (int i=1;iEncryptionCombo),parsed[2],parsed[0]); - yon_char_parsed_free(parsed,parsed_size); - } - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->EncryptionCombo),"RSA"); - return window; -} - -void on_key_clicked(GtkWidget *self, main_window *widgets){ - key_creation_window *window = yon_key_creation_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEY_CREATION_TITLE_LABEL,icon_path,"key-create-window"); - gtk_label_set_text(GTK_LABEL(window->HeadLabel),KEY_CREATION_TITLE_LABEL); - gtk_widget_show(window->Window); -} +// void on_calendar_open(GtkWidget *self,key_creation_window *window){ +// yon_calendar_popover_open(GTK_ENTRY(window->ExpireEntry),self); +// } + +// void on_key_generate_accept(GtkWidget *self, key_creation_window* window){ +// const char *name = gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); +// const char *type = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->EncryptionCombo)); +// const char *email = gtk_entry_get_text(GTK_ENTRY(window->EmailEntry)); +// char *strength = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->KeyStrengthSpin))); +// const char *comment = gtk_entry_get_text(GTK_ENTRY(window->CommentsEntry)); +// if (!yon_char_is_empty(name)&&strlen(name)<5){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_SHORT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// yon_ubl_status_highlight_incorrect(window->NameEntry); +// return; +// } +// GtkWidget *highlight_target=NULL; +// if (yon_char_is_empty(name)){ +// highlight_target=window->NameEntry; +// } else if (yon_char_is_empty(type)){ +// highlight_target=window->EncryptionCombo; +// } else if (yon_char_is_empty(email)){ +// highlight_target=window->EmailEntry; +// } else if (yon_char_is_empty(strength)){ +// highlight_target=window->KeyStrengthSpin; +// } +// if (highlight_target){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// yon_ubl_status_highlight_incorrect(highlight_target); +// return; +// } +// char *expire = NULL; +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ExpireCombo))==1){ +// GDateTime *datetime = g_date_time_new_from_unix_local(yon_calendar_get_last_date()); +// expire = g_date_time_format(datetime,"%Y%m%dT000000"); +// g_date_time_unref(datetime); + +// } +// const char *password = gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); +// const char *password_confirm = gtk_entry_get_text(GTK_ENTRY(window->PasswordConfirmationEntry)); +// int ex_status=0; +// if (yon_char_is_empty(password)&&yon_char_is_empty(password_confirm)){ +// yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password)); +// ex_status = system(yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password))); +// } else if (!strcmp(password,password_confirm)){ +// yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password)); +// ex_status = system(yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password))); +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_INCORRECT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// yon_ubl_status_highlight_incorrect(window->PasswordConfirmationEntry); +// yon_ubl_status_highlight_incorrect(window->PasswordEntry); +// return; +// } +// if (!ex_status) +// yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +// else +// yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); +// gtk_widget_destroy(window->Window); +// yon_sign_list_update(); +// } + +// key_creation_window *yon_key_creation_window_new(){ +// key_creation_window *window = malloc(sizeof(key_creation_window)); +// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_key); +// window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); +// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); +// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); +// window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); +// window->EmailEntry = yon_gtk_builder_get_widget(builder,"EmailEntry"); +// window->CommentsEntry = yon_gtk_builder_get_widget(builder,"CommentsEntry"); +// window->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); +// window->KeyStrengthSpin = yon_gtk_builder_get_widget(builder,"KeyStrengthSpin"); +// window->ExpireCombo = yon_gtk_builder_get_widget(builder,"ExpireCombo"); +// window->ExpireEntry = yon_gtk_builder_get_widget(builder,"ExpireEntry"); +// window->ExpireButton = yon_gtk_builder_get_widget(builder,"ExpireButton"); +// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); +// window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); +// window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); +// window->PasswordConfirmationEntry = yon_gtk_builder_get_widget(builder,"PasswordConfirmationEntry"); + +// yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordConfirmationEntry)); +// yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); + +// g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireButton); +// g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireEntry); +// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); +// g_signal_connect(G_OBJECT(window->ExpireButton),"clicked",G_CALLBACK(on_calendar_open),window); +// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window); + +// int size; +// config_str encription_keys = yon_file_open(key_encription_path,&size); +// window->expire_time=0; + +// for (int i=1;iEncryptionCombo),parsed[2],parsed[0]); +// yon_char_parsed_free(parsed,parsed_size); +// } +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->EncryptionCombo),"RSA"); +// return window; +// } + +// void on_key_clicked(GtkWidget *self, main_window *widgets){ +// key_creation_window *window = yon_key_creation_window_new(); +// yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEY_CREATION_TITLE_LABEL,icon_path,"key-create-window"); +// gtk_label_set_text(GTK_LABEL(window->HeadLabel),KEY_CREATION_TITLE_LABEL); +// gtk_widget_show(window->Window); +// } void on_tree_view_activate(GtkWidget *self, GtkTreePath* path, GtkTreeViewColumn* column, main_window *widgets){ gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),path); @@ -982,6 +501,28 @@ void on_repo_item_activate(GtkWidget *self, GtkTreePath *path, GtkTreeViewColumn GtkTreeIter iter; GtkTreeSelection *tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)); gtk_tree_selection_get_selected(tree_selection,&model,&iter); + // storage_struct *target_struct; + // gtk_tree_model_get(model,&iter,7,&target_struct,-1); + // if (gtk_tree_model_iter_has_child(model,&iter)){ + // GtkTreeModel *submodel; + // GtkTreeIter subiter; + // if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&submodel,&subiter)) return; + // char *target; + // gtk_tree_model_get(submodel,&subiter,1,&target,-1); + // GtkTreeIter childiter; + // gtk_tree_model_iter_children(model,&childiter, &iter); + // for_iter(model,&childiter){ + // char *check_target; + // gtk_tree_model_get(model,&childiter,2,&check_target,-1); + // if (!strcmp(check_target,target)){ + // GtkTreePath *path = gtk_tree_model_get_path(model,&iter); + // gtk_tree_selection_select_path(tree_selection,path); + // g_signal_emit_by_name(G_OBJECT(widgets->ReposTree),"cursor-changed",widgets,G_TYPE_NONE,NULL); + + // } + // } + // } + if (gtk_tree_store_iter_depth(GTK_TREE_STORE(widgets->RepoList),&iter)<2){ char *path_id = gtk_tree_model_get_string_from_iter(model,&iter); char *target_id = gtk_tree_path_to_string(path); @@ -995,125 +536,104 @@ void on_repo_item_activate(GtkWidget *self, GtkTreePath *path, GtkTreeViewColumn } void on_update_clicked(GtkWidget *self, main_window *widgets){ - yon_config_load_update(widgets); -} - -void on_sign_window_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - sign_window *window = yon_dictionary_get_data(dict->first->next,sign_window*); - GtkTreeModel *model; - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ - char *arch; - char *repo; - char *storage; - char *signature = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->SignCombo)); - gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&arch,-1); - char *full_path = yon_char_new(arch); - repo = yon_char_divide(arch,yon_char_find_last(arch,'/')); - storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); - storage = yon_char_append(storage,"/"); - GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL); - char *targets = ""; - for (int i=0;iRepoFileList),&iter,(GtkTreePath*)g_list_nth_data(list,i)); - gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoFileList),&iter,2,&pack,-1); - char *temp = yon_char_unite(targets, " ", full_path,"/",pack,NULL); - if (!yon_char_is_empty(targets)) free(targets); - targets=temp; - } - if (!system(yon_debug_output("%s\n",yon_sign_package(storage,repo,arch,targets,signature)))){ - yon_ubl_status_box_render(SIGN_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } - on_subwindow_close(window->Window); - } -} - -sign_window *yon_sign_window_new(){ - sign_window *window = malloc(sizeof(sign_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_sign); - - window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); - window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); - window->SignCombo = yon_gtk_builder_get_widget(builder,"SignCombo"); - window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - window->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); - - g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - - return window; -} - -void on_packages_sign(GtkWidget *self, main_window *widgets){ - sign_window *window = yon_sign_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),SIGNATURE_TITLE_LABEL,icon_path,"sign-window"); - yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->SignCombo)); - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - g_signal_connect(G_OBJECT(window->SignButton),"clicked",G_CALLBACK(on_sign_window_accept),dict); - gtk_widget_show(window->Window); -} - -int yon_tree_is_selected(void *widget){ - main_window *widgets = (main_window*)widget; - GtkTreeModel *model; - GtkTreeIter iter, itar; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ - gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&itar); - if (gtk_tree_store_iter_depth(widgets->RepoList,&itar)==2){ - return 1; - } - } - return 0; -} - -void on_rmb_move(GtkWidget *self, main_window *widgets){ - repo_add_window *window = on_move_clicked(NULL,widgets); - GtkTreeModel *model; - GtkTreeIter iter; - char *path; - gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter); - gtk_tree_model_get(model,&iter,3,&path,-1); - GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model); - for (int i=0;iPackagesList,&itar); - gtk_list_store_set(window->PackagesList,&itar,1,name,2,full_path,-1); - free(full_path); - free(filename); - free(name); - } -} - -void on_rmb_remove(GtkWidget *self, main_window *widgets){ - - repo_add_window *window = on_remove_clicked(NULL,widgets); - GtkTreeModel *model; - GtkTreeIter iter; - char *path; - gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter); - gtk_tree_model_get(model,&iter,3,&path,-1); - GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model); - for (int i=0;iPackagesList,&itar); - gtk_list_store_set(window->PackagesList,&itar,1,name,2,full_path,-1); - free(full_path); - free(filename); - free(name); - } -} + yon_interface_update(widgets); +} + +// void on_sign_window_accept(GtkWidget *self, dictionary *dict){ +// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); +// sign_window *window = yon_dictionary_get_data(dict->first->next,sign_window*); +// GtkTreeModel *model; +// GtkTreeIter iter; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ +// char *arch; +// char *repo; +// char *storage; +// char *signature = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->SignCombo)); +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&arch,-1); +// char *full_path = yon_char_new(arch); +// repo = yon_char_divide(arch,yon_char_find_last(arch,'/')); +// storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); +// storage = yon_char_append(storage,"/"); +// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL); +// char *targets = ""; +// for (int i=0;iRepoFileList),&iter,(GtkTreePath*)g_list_nth_data(list,i)); +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoFileList),&iter,2,&pack,-1); +// char *temp = yon_char_unite(targets, " ", full_path,"/",pack,NULL); +// if (!yon_char_is_empty(targets)) free(targets); +// targets=temp; +// } +// if (!system(yon_debug_output("%s\n",yon_sign_package(storage,repo,arch,targets,signature)))){ +// yon_ubl_status_box_render(SIGN_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +// } +// on_subwindow_close(window->Window); +// } +// } + +// sign_window *yon_sign_window_new(){ +// sign_window *window = malloc(sizeof(sign_window)); +// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_sign); + +// window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); +// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); +// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); +// window->SignCombo = yon_gtk_builder_get_widget(builder,"SignCombo"); +// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); +// window->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); + +// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + +// return window; +// } + +// void on_packages_sign(GtkWidget *self, main_window *widgets){ +// sign_window *window = yon_sign_window_new(); +// yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),SIGNATURE_TITLE_LABEL,icon_path,"sign-window"); +// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->SignCombo)); +// dictionary *dict = NULL; +// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); +// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); +// g_signal_connect(G_OBJECT(window->SignButton),"clicked",G_CALLBACK(on_sign_window_accept),dict); +// gtk_widget_show(window->Window); +// } + +// int yon_tree_is_selected(void *widget){ +// main_window *widgets = (main_window*)widget; +// GtkTreeModel *model; +// GtkTreeIter iter, itar; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ +// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&itar); +// if (gtk_tree_store_iter_depth(widgets->RepoList,&itar)==2){ +// return 1; +// } +// } +// return 0; +// } + + +// void on_rmb_remove(GtkWidget *self, main_window *widgets){ + +// repo_add_window *window = on_remove_clicked(NULL,widgets); +// GtkTreeModel *model; +// GtkTreeIter iter; +// char *path; +// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter); +// gtk_tree_model_get(model,&iter,3,&path,-1); +// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model); +// for (int i=0;iPackagesList,&itar); +// gtk_list_store_set(window->PackagesList,&itar,1,name,2,full_path,-1); +// free(full_path); +// free(filename); +// free(name); +// } +// } main_window *yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); @@ -1150,20 +670,20 @@ main_window *yon_main_window_complete(main_window *widgets){ gtk_style_context_add_class(gtk_widget_get_style_context(widgets->KeyMenuItem),"menuitemtop"); gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); - g_signal_connect(G_OBJECT(widgets->KeyMenuItem),"activate",G_CALLBACK(on_key_clicked),widgets); + // g_signal_connect(G_OBJECT(widgets->KeyMenuItem),"activate",G_CALLBACK(on_key_clicked),widgets); } main_config.tree_store = widgets->RepoList; - rmb_menu_window *rmb = yon_rmb_menu_setup(widgets->RepoFileTree, yon_tree_is_selected,widgets, - SIGN_LABEL,lib_key_icon_name,G_CALLBACK(on_packages_sign),widgets, - MOVE_PACKAGES_TITLE_LABEL,move_icon,G_CALLBACK(on_rmb_move),widgets, - REMOVE_PACKAGES_TITLE_LABEL,remove_icon,G_CALLBACK(on_rmb_remove),widgets, - NULL); + // rmb_menu_window *rmb = yon_rmb_menu_setup(widgets->RepoFileTree, yon_tree_is_selected,widgets, + // SIGN_LABEL,lib_key_icon_name,G_CALLBACK(on_packages_sign),widgets, + // MOVE_PACKAGES_TITLE_LABEL,move_icon,G_CALLBACK(on_rmb_move),widgets, + // REMOVE_PACKAGES_TITLE_LABEL,remove_icon,G_CALLBACK(on_rmb_remove),widgets, + // NULL); - g_signal_connect(G_OBJECT(widgets->DBConfigurationButton),"clicked",G_CALLBACK(on_storage_configure_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->MoveButton),"clicked",G_CALLBACK(on_move_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); + // g_signal_connect(G_OBJECT(widgets->DBConfigurationButton),"clicked",G_CALLBACK(on_storage_configure_clicked),widgets); + // g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_clicked),widgets); + // g_signal_connect(G_OBJECT(widgets->MoveButton),"clicked",G_CALLBACK(on_move_clicked),widgets); + // g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ReposTree),"cursor-changed",G_CALLBACK(on_main_tree_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->CloudButton),"clicked",G_CALLBACK(on_ubl_settings_update_launch),widgets); g_signal_connect(G_OBJECT(widgets->RepoFileTree),"cursor-changed",G_CALLBACK(on_package_selection_changed),widgets); @@ -1177,7 +697,6 @@ main_window *yon_main_window_complete(main_window *widgets){ /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ /* Localisation | Локализация */ - // gtk_widget_show(widgets->Window); return widgets; } } @@ -1199,7 +718,8 @@ int main(int argc, char *argv[]){ widgets = (template_main_window*)yon_main_window_complete((main_window*)widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); - yon_config_load_update((main_window*)widgets); + // yon_config_load_update((main_window*)widgets); + yon_interface_update((main_window*)widgets); yon_ubl_status_box_render(DATA_LOADED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); gtk_main(); return 0; diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index f4c17a0..5360dd4 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -62,17 +62,17 @@ typedef char* string; #define create_storage_command(path,name) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"'",NULL) #define add_packages_command(path,arch,name,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' ",packages_path,NULL) #define add_packages_sign_command(path,arch,name,repo_sign,pack_sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -S ",repo_sign," -s ",pack_sign," ",packages_path,NULL) -#define add_packages_package_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -s ",sign," ",packages_path,NULL) -#define add_packages_repo_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -S ",sign," ",packages_path,NULL) +#define add_packages_package_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -s '",sign,"' ",packages_path,NULL) +#define add_packages_repo_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -S '",sign,"' ",packages_path,NULL) #define remove_packages_command(path,arch,name,packages_path) yon_char_unite("repo-manager remove -r '",name,"' -a '",arch,"' -d '", path,"' ",packages_path,NULL) #define yon_move_packages_command(storage,arch, source_repo, target_repo, packages) yon_char_unite("repo-manager move -d '",storage,"' -a '",arch,"' -R '",source_repo,"' -r '",target_repo,"' ", packages,NULL) #define yon_delete_packages_command(storage,arch, target_repo, packages) yon_char_unite("repo-manager remove -d '",storage,"' -a '",arch,"' -r '",target_repo,"' ", packages,NULL) -#define yon_delete_packages_sign_command(storage,arch, target_repo,sign, packages) yon_char_unite("repo-manager remove -d '",storage,"' -a '",arch,"' -r '",target_repo,"' -S ",sign," ", packages,NULL) +#define yon_delete_packages_sign_command(storage,arch, target_repo,sign, packages) yon_char_unite("repo-manager remove -d '",storage,"' -a '",arch,"' -r '",target_repo,"' -S '",sign,"' ", packages,NULL) #define ubl_settings_update_command "ubl-settings-update" -#define yon_get_packages_command(path,repo,arch) yon_char_unite("repo-manager show --quiet -d '",path,"' -a ",arch," -r '",repo,"' | sed -E 's/(\\S+)(\\s+)(\\S+)/\\1 \\3/g'",NULL) +#define yon_get_packages_command(path,repo,arch) yon_char_unite("repo-manager show --quiet -d '",path,"' -a ",arch," -r '",repo,"' | sed -E 's/(\\S+)(\\s+)(\\S+)/\\1;\\3/g'",NULL) #define yon_repo_get_signature(path, repo) yon_char_unite("repo-manager verify --quiet -d ",path," -r '",repo,"' . 2>&1 | cut -d: -f2 |sed -E 's/ *//g'",NULL) #define yon_repo_get_signature_status(path,repo,arch, package) yon_char_unite("repo-manager verify --quiet -d ",path," -r '",repo,"' ",package,NULL) @@ -83,10 +83,10 @@ typedef char* string; #define yon_get_filename_from_package_name(target) yon_char_unite("find ${PATH} -maxdepth 1 -regextype egrep -regex \".*/",target,"-[^-]+-[^-]+-[^-]+\\.pkg\\.tar\\.[^-.]*\"",NULL) -#define get_gpg_keys_command yon_char_unite(yon_ubl_check_root()==1 ? yon_char_unite("su - ",yon_ubl_root_user_get()," -c \"gpg --list-signatures\"",NULL):"gpg --list-signatures"," | grep '^uid' | cut -d' ' -f10,11,13- | sort -u |sed -e 's/[0-9]*-[0-9]*-[0-9]* //g'",NULL) +#define get_gpg_keys_command yon_char_unite(yon_ubl_check_root()==1 ? yon_char_unite("su - ",yon_ubl_root_user_get()," -c \"gpg --list-signatures\"",NULL):"gpg --list-signatures"," | grep '^uid' | cut -d' ' -f10,11,12,13- | sort -u |sed -e 's/[0-9]*-[0-9]*-[0-9]* //g'",NULL) -#define yon_sign_package(storage,repo,arch,target,sign) yon_char_unite("repo-manager add -r ''",repo,"'' -a '",arch,"' -d '", storage,"' -s ",sign," ",target,NULL) -#define yon_sign_repo(storage,repo,sign) yon_char_unite("repo-manager add -f -r ''",repo,"'' -d '", storage,"' --sign-repo=",sign,NULL) +#define yon_sign_package(storage,repo,arch,target,sign) yon_char_unite("repo-manager add -r ''",repo,"'' -a '",arch,"' -d '", storage,"' -s '",sign,"' ",target,NULL) +#define yon_sign_repo(storage,repo,sign) yon_char_unite("repo-manager add -f -r ''",repo,"'' -d '", storage,"' --sign-repo='",sign,"'",NULL) #define get_package_info_command(filename) yon_char_unite("pacman -Q --info --file '",filename,"' 2>/dev/null|sed -e 's/ */ /g' -e 's/ : /: /g' -e 's/\\n/ /g' -e 's/^ /\\t/g'",NULL) @@ -138,6 +138,7 @@ typedef struct { config_str signs; int signs_size; char *last_selection; + GHashTable *storages; } config; extern config main_config; @@ -258,6 +259,54 @@ typedef struct { GtkWidget *SignCombo; } sign_window; +typedef struct { + GtkWidget *MainBox; + GtkWidget *RepoNameEntry; + GtkWidget *SignatureCombo; + GtkWidget *SignatureButton; + GtkWidget *RepoRemoveButton; + + char *storage_path; + char *repo_name; + +} storage_repo_block; + +typedef struct { + char *name; + char *path; + GHashTable *repos; + int sign_status; +} storage_struct; + +typedef struct { + char *name; + char *storage_path; + GHashTable *archs; + char *path; + int sign_status; +} repo_struct; + +typedef struct { + char *name; + char *storage_path; + GHashTable *packages; + char *repo_name; + char *path; +} arch_struct; + +struct repo_tree_build { + main_window *widgets; + GtkTreeIter storageiter; + GtkTreeIter repoiter; + GtkTreeIter architer; +}; + +enum YON_REPO_DATA_TYPE { + YON_REPO_DATA_STORAGE, + YON_REPO_DATA_REPO, + YON_REPO_DATA_ARCH +}; + main_window *setup_window(); void yon_storage_config_update(storage_config_window *window); @@ -266,6 +315,10 @@ void yon_storage_config_update(storage_config_window *window); void yon_sign_list_update(); +void on_key_clicked(GtkWidget *self, main_window *widgets); + +storage_repo_block *yon_storage_repo_block_new(); + void yon_combo_box_text_set_signs(GtkComboBoxText *target); void on_storage_changed(GtkWidget *self, storage_config_window *window); @@ -307,4 +360,32 @@ void on_repo_add(GtkWidget *self, storage_config_window *window); void on_storage_remove(GtkWidget *self, storage_config_window *window); void on_storage_disable(GtkWidget *self, storage_config_window *window); void on_storage_create(GtkWidget *self, storage_config_window *window); -void on_storage_open(GtkWidget *self, storage_config_window *window); \ No newline at end of file +void on_storage_open(GtkWidget *self, storage_config_window *window); +void on_repo_signed(); +void on_repo_removed(GtkWidget *self,storage_config_window *window); +void on_repo_sign_changed(GtkWidget *self, storage_repo_block *block); +void on_add_clicked(GtkWidget *self, main_window *widgets); +void on_rmb_move(GtkWidget *self, main_window *widgets); +repo_add_window *on_move_clicked(GtkWidget *self, main_window *widgets); +repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets); +void on_folder_changed(GtkFileChooser *self, file_chooser_window *dialog); +void on_move_remove_package(GtkWidget *self, repo_add_window *window); +void on_move_add_accept(GtkWidget *self, dictionary *dict); +void on_ubl_settings_update_launch(); +void on_package_selection_changed(GtkWidget *self, main_window *widgets); +void on_tree_view_activate(GtkWidget *self, GtkTreePath* path, GtkTreeViewColumn* column, main_window *widgets); +void on_repo_item_activate(GtkWidget *self, GtkTreePath *path, GtkTreeViewColumn *column, main_window *widgets); +void on_update_clicked(GtkWidget *self, main_window *widgets); +storage_struct *yon_storage_struct_new(); +repo_struct *yon_repo_struct_new(); +arch_struct *yon_arch_struct_new(); +char *yon_path_get_name(char *path); +void yon_storage_fill_repos(storage_struct *storage, config_str repos, int repos_size); +void yon_repo_fill_archs(repo_struct *repo); +void yon_arch_fill_packages(arch_struct *arch); +void yon_repo_tree_build_storage(char *key, storage_struct *storage, main_window *widgets); +void yon_repo_tree_build_repo(char *key, repo_struct *repo, struct repo_tree_build *data); +void yon_repo_tree_build_arch(char *key, arch_struct *arch, struct repo_tree_build *data); +void yon_interface_update(main_window *widgets); +void yon_sublist_packages_build(char *key, char *file, main_window *widgets); +void yon_sublist_build(char *key, storage_struct *storage, main_window *widgets); \ No newline at end of file diff --git a/ubl-settings-repomanager.glade b/ubl-settings-repomanager.glade index 3f0e0ba..4ec5e0f 100644 --- a/ubl-settings-repomanager.glade +++ b/ubl-settings-repomanager.glade @@ -42,6 +42,10 @@ + + + + @@ -233,6 +237,7 @@ column + 1 4 @@ -305,6 +310,7 @@ column + 1 -- 2.35.1 From e9df273e484ee1f670723b30748659ba044de6ef Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 19 Jun 2025 11:59:31 +0000 Subject: [PATCH 3/3] WIP Storage configuration window --- .../ubl-settings-repomanager-data-structs.c | 107 +++++ .../ubl-settings-repomanager-storage-list.c | 80 ++-- .../ubl-settings-repomanager-storage-window.c | 421 +++++++----------- source/ubl-settings-repomanager.c | 107 +---- source/ubl-settings-repomanager.h | 33 +- ubl-settings-repomanager-configuration.glade | 2 + ubl-settings-repomanager-repo-block.glade | 22 - 7 files changed, 352 insertions(+), 420 deletions(-) diff --git a/source/ubl-settings-repomanager-data-structs.c b/source/ubl-settings-repomanager-data-structs.c index 37dbbac..27619e5 100644 --- a/source/ubl-settings-repomanager-data-structs.c +++ b/source/ubl-settings-repomanager-data-structs.c @@ -1,5 +1,8 @@ #include "ubl-settings-repomanager.h" +void yon_arch_sturct_free_full(arch_struct *arch); +void yon_repo_sturct_free_full(repo_struct *repo); + void yon_storage_fill_repos(storage_struct *storage, config_str repos, int repos_size){ for (int i=0;iname)) free(storage->name); + if (!yon_char_is_empty(storage->path)) free(storage->path); + GList *repos = g_hash_table_get_values(storage->repos); + GList *iter; + for (iter=repos;iter;iter=iter->next){ + yon_repo_sturct_free_full((repo_struct*)iter->data); + } + free(storage); +} + storage_struct *yon_storage_struct_new(){ storage_struct *storage = malloc(sizeof(storage_struct)); storage->name=NULL; @@ -36,6 +50,18 @@ void yon_repo_fill_archs(repo_struct *repo){ } } +void yon_repo_sturct_free_full(repo_struct *repo){ + if (!yon_char_is_empty(repo->name)) free(repo->name); + if (!yon_char_is_empty(repo->path)) free(repo->path); + if (!yon_char_is_empty(repo->storage_path)) free(repo->storage_path); + GList *archs = g_hash_table_get_values(repo->archs); + GList *iter; + for (iter=archs;iter;iter=iter->next){ + yon_arch_sturct_free_full((arch_struct*)iter->data); + } + free(repo); +} + repo_struct *yon_repo_struct_new(){ repo_struct *storage = malloc(sizeof(repo_struct)); storage->name=NULL; @@ -59,6 +85,18 @@ void yon_arch_fill_packages(arch_struct *arch){ } } +void yon_arch_sturct_free_full(arch_struct *arch){ + if (!yon_char_is_empty(arch->name)) free(arch->name); + if (!yon_char_is_empty(arch->path)) free(arch->path); + if (!yon_char_is_empty(arch->storage_path)) free(arch->storage_path); + GList *archs = g_hash_table_get_values(arch->packages); + GList *iter; + for (iter=archs;iter;iter=iter->next){ + free(iter->data); + } + free(arch); +} + arch_struct *yon_arch_struct_new(){ arch_struct *storage = malloc(sizeof(arch_struct)); storage->name=NULL; @@ -67,4 +105,73 @@ arch_struct *yon_arch_struct_new(){ storage->path=NULL; storage->packages = g_hash_table_new(g_str_hash,g_str_equal); return storage; +} + +void yon_package_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash){ + GList *list = g_hash_table_get_keys(source_hash); + GList *iter; + for (iter = list;iter;iter=iter->next){ + char *key = (char*)iter->data; + char *package_name = g_hash_table_lookup(source_hash,key); + g_hash_table_insert(target_hash,key,yon_char_new(package_name)); + } +} + +arch_struct *yon_arch_copy_full(arch_struct *repo){ + arch_struct *copy = yon_arch_struct_new(); + copy->name=yon_char_new(repo->name); + copy->path=yon_char_new(repo->name); + copy->storage_path=yon_char_new(repo->storage_path); + copy->repo_name=yon_char_new(repo->repo_name); + yon_package_hash_table_clone(repo->packages,copy->packages); + return copy; +} + +void yon_arch_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash){ + GList *list = g_hash_table_get_values(source_hash); + GList *iter; + for (iter = list;iter;iter=iter->next){ + arch_struct *storage = (arch_struct*)iter->data; + arch_struct *storage_copy = yon_arch_copy_full(storage); + g_hash_table_insert(target_hash,storage_copy->name,storage_copy); + } +} + +repo_struct *yon_repo_copy_full(repo_struct *repo){ + repo_struct *copy = yon_repo_struct_new(); + copy->name=yon_char_new(repo->name); + copy->path=yon_char_new(repo->name); + copy->storage_path=yon_char_new(repo->storage_path); + copy->sign_status=repo->sign_status; + yon_arch_hash_table_clone(repo->archs,copy->archs); + return copy; +} + +void yon_repo_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash){ + GList *list = g_hash_table_get_values(source_hash); + GList *iter; + for (iter = list;iter;iter=iter->next){ + repo_struct *storage = (repo_struct*)iter->data; + repo_struct *storage_copy = yon_repo_copy_full(storage); + g_hash_table_insert(target_hash,storage_copy->name,storage_copy); + } +} + +storage_struct *yon_storage_copy_full(storage_struct *storage){ + storage_struct *copy = yon_storage_struct_new(); + copy->name=yon_char_new(storage->name); + copy->path=yon_char_new(storage->name); + copy->sign_status=storage->sign_status; + yon_repo_hash_table_clone(storage->repos,copy->repos); + return copy; +} + +void yon_storage_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash){ + GList *list = g_hash_table_get_values(source_hash); + GList *iter; + for (iter = list;iter;iter=iter->next){ + storage_struct *storage = (storage_struct*)iter->data; + storage_struct *storage_copy = yon_storage_copy_full(storage); + g_hash_table_insert(target_hash,storage_copy->path,storage_copy); + } } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-storage-list.c b/source/ubl-settings-repomanager-storage-list.c index 36e4717..6b85cbe 100644 --- a/source/ubl-settings-repomanager-storage-list.c +++ b/source/ubl-settings-repomanager-storage-list.c @@ -1,75 +1,53 @@ #include "ubl-settings-repomanager.h" -void on_repo_signed(){ - +void on_repo_signed(GtkWidget *self, storage_repo_block *block){ + storage_config_window *window = g_object_get_data(G_OBJECT(self),"window"); + const char *sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(block->SignatureCombo)); + if (!yon_char_is_empty(block->sign_request)) free(block->sign_request); + block->sign_request = yon_char_new(sign); } -void on_repo_removed(GtkWidget *self,storage_config_window *window){ - GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(self))); - char *repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); - GtkTreeIter iter, itar; - char *storage; - char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); - if (!yon_char_is_empty(id)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id); - int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){ - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&target,-1); - if (!strcmp(target,repo)){ - gtk_tree_store_remove(window->storages_copy,&itar); - break; - } - } +void on_repo_removed(GtkWidget *self,storage_repo_block *block){ + storage_config_window *window = g_object_get_data(G_OBJECT(self),"window"); + const char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_id); + if (g_hash_table_lookup(storage->repos,block->repo_name)){ + g_hash_table_remove(storage->repos,block->repo_name); + gtk_widget_destroy(block->MainBox); + yon_storage_repo_block_destroy(block); } - // yon_storage_config_update(window); } -// void on_repo_sign_changed(GtkWidget *self, storage_repo_block *block){ -// GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(self))); -// const char *sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(g_list_nth_data(list,2))); -// char *target_repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); -// if (!yon_char_is_empty(target_repo)){ -// GtkTreeIter iter,itar; -// int size; -// char *storage_path; -// int found = yon_char_parsed_check_exist(repos,size,target_repo); -// if (found>-1){ -// char *child_id = yon_char_unite((char*)id,":",yon_char_from_int(found),NULL); -// if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,child_id)){ -// if (!yon_char_is_empty(sign)){ -// gtk_tree_store_set(window->storages_copy,&itar,6,1,5,sign,-1); -// if (system(yon_debug_output("%s\n",yon_sign_repo(storage_path,target_repo,sign)))){ -// gtk_combo_box_set_active(GTK_COMBO_BOX((GtkWidget*)g_list_nth_data(list,2)),0); -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),REPO_SIGN_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// } -// }else -// gtk_tree_store_set(window->storages_copy,&itar,6,-1,5,NULL,-1); -// } -// } -// } -// } - storage_repo_block *yon_storage_repo_block_new(){ storage_repo_block *block = malloc(sizeof(storage_repo_block)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_block); block->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); block->SignatureCombo = yon_gtk_builder_get_widget(builder,"SignatureCombo"); - block->SignatureButton = yon_gtk_builder_get_widget(builder,"SignatureButton"); block->RepoNameEntry = yon_gtk_builder_get_widget(builder,"RepoNameEntry"); block->RepoRemoveButton = yon_gtk_builder_get_widget(builder,"RepoRemoveButton"); block->repo_name=NULL; block->storage_path=NULL; + block->sign_request=NULL; + + g_object_set_data(G_OBJECT(block->MainBox),"repo_block",block); + g_object_set_data(G_OBJECT(block->SignatureCombo),"repo_block",block); + g_object_set_data(G_OBJECT(block->RepoRemoveButton),"repo_block",block); - // g_signal_connect(block->SignatureButton,"clicked",G_CALLBACK(on_repo_signed),block); - // g_signal_connect(block->RepoRemoveButton,"clicked",G_CALLBACK(on_repo_removed),block); - // g_signal_connect(block->SignatureButton,"clicked",G_CALLBACK(on_repo_sign_changed),block); - g_object_set_data(G_OBJECT(block->MainBox),"block_data",block); - // yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(block->SignatureCombo)); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(block->SignatureCombo)); gtk_combo_box_set_active(GTK_COMBO_BOX(block->SignatureCombo),0); + + g_signal_connect(block->SignatureCombo,"changed",G_CALLBACK(on_repo_signed),block); + g_signal_connect(block->RepoRemoveButton,"clicked",G_CALLBACK(on_repo_removed),block); + return block; +} + +void yon_storage_repo_block_destroy(storage_repo_block *block){ + if (!yon_char_is_empty(block->repo_name)) free(block->repo_name); + if (!yon_char_is_empty(block->storage_path)) free(block->storage_path); + free(block); } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-storage-window.c b/source/ubl-settings-repomanager-storage-window.c index 96fc066..fb2e287 100644 --- a/source/ubl-settings-repomanager-storage-window.c +++ b/source/ubl-settings-repomanager-storage-window.c @@ -1,208 +1,119 @@ -// #include "ubl-settings-repomanager.h" +#include "ubl-settings-repomanager.h" // // storage-configure window section -// void on_storage_open(GtkWidget *self, storage_config_window *window){ -// GtkWidget *dialog = gtk_file_chooser_dialog_new(CHOSE_FOLDER_TITLE_LABEL,GTK_WINDOW(window->MainWindow),GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CLOSE_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); -// yon_gtk_window_setup(GTK_WINDOW(dialog),GTK_WINDOW(window->MainWindow),CHOSE_FOLDER_TITLE_LABEL,icon_path,"file_chooser"); -// int responce = gtk_dialog_run(GTK_DIALOG(dialog)); -// if (responce == GTK_RESPONSE_ACCEPT){ -// char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); -// if (!yon_char_is_empty(path)){ -// int size; -// config_str files = yon_file_list_dirs(path,&size); -// if (!files){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_FOLDER_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// gtk_widget_destroy(dialog); -// return; -// } else { -// yon_char_parsed_free(files,size); -// GtkTreeIter iter, itar; -// gtk_tree_store_append(window->storages_copy,&iter,NULL); -// char *name = yon_char_new(path); -// free(yon_char_divide(name,yon_char_find_last(name,'/'))); -// gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1); -// gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); -// char *iterpath = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),iterpath,path); -// char *repos=NULL; -// int repos_size=0; -// g_signal_handlers_block_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); -// yon_gtk_combo_box_text_find(window->StoragePathCombo,path); -// g_signal_handlers_unblock_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); -// yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING); -// config_str repos_list = yon_file_list_dirs(path,&repos_size); -// for (int i=0;iAddEntry),render_name); -// on_repo_add(self,window); -// free(render_name); -// } -// } -// yon_char_parsed_free(repos_list,repos_size); -// } - -// } -// } -// yon_storage_config_update(window); -// gtk_widget_destroy(dialog); -// } - -// void on_storage_create(GtkWidget *self, storage_config_window *window){ -// GtkWidget *dialog = gtk_file_chooser_dialog_new(CHOSE_FOLDER_TITLE_LABEL,GTK_WINDOW(window->MainWindow),GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CLOSE_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); -// yon_gtk_window_setup(GTK_WINDOW(dialog),GTK_WINDOW(window->MainWindow),CHOSE_FOLDER_TITLE_LABEL,icon_path,"file_chooser"); -// int responce = gtk_dialog_run(GTK_DIALOG(dialog)); -// if (responce == GTK_RESPONSE_ACCEPT){ -// char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); -// if (!yon_char_is_empty(path)){ -// int size; -// config_str files = yon_file_list_dirs(path,&size); -// if (files){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),FILES_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// gtk_widget_destroy(dialog); -// return; -// } else { -// yon_char_parsed_free(files,size); -// GtkTreeIter iter; -// gtk_tree_store_append(window->storages_copy,&iter,NULL); -// char *name = yon_char_new(path); -// free(yon_char_divide(name,yon_char_find_last(name,'/'))); -// gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1); -// char *iterpath = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),iterpath,path); -// g_signal_handlers_block_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); -// yon_gtk_combo_box_text_find(window->StoragePathCombo,path); -// g_signal_handlers_unblock_by_func(G_OBJECT(window->StoragePathCombo),on_storage_changed,window); -// gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); -// yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING); -// } -// } -// } -// yon_storage_config_update(window); -// gtk_widget_destroy(dialog); -// } - -// void on_storage_disable(GtkWidget *self, storage_config_window *window){ -// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); -// data->action_text=DISABLE_CONFIRMATION_LABEL; -// GtkTreeIter iter,itar; -// if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter)){ -// if (yon_confirmation_dialog_call(self,data)){ -// char *storage; -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); -// if (id){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); -// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&storage,-1); -// char *repos; -// yon_window_config_get_parameter("storage_info",storage,&repos,YON_TYPE_STRING); -// int repo_size; -// config_str repo_list = yon_char_parse(repos,&repo_size,","); -// for (int i=0;istorages_copy,&itar); -// gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); -// } -// } -// yon_storage_config_update(window); -// } -// } - -// void on_storage_remove(GtkWidget *self, storage_config_window *window){ -// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); -// data->action_text=REMOVE_CONFIRMATION_LABEL; -// if (yon_confirmation_dialog_call(self,data)){ -// GtkTreeIter itar; -// char *storage; -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); -// if (id){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); -// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&storage,-1); -// char *repos; -// yon_window_config_get_parameter("storage_info",storage,&repos,YON_TYPE_STRING); -// int repo_size; -// config_str repo_list = yon_char_parse(repos,&repo_size,","); -// for (int i=0;istorages_copy,&itar); -// gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); -// } -// } -// yon_storage_config_update(window); -// } - -// void on_repo_add(GtkWidget *self, storage_config_window *window){ -// char *new_repo = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->AddEntry))); -// gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); -// if (yon_char_is_empty(new_repo)){ -// yon_ubl_status_highlight_incorrect(window->AddEntry); -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_NAME_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// GtkTreeIter iter,itar, childiter; -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); -// if (id){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&itar,id); -// char *path; -// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,3,&path,-1); -// char *child_path = yon_char_unite(path,"/",new_repo,NULL); -// gtk_tree_store_append(window->storages_copy,&childiter,&itar); -// gtk_tree_store_set(window->storages_copy,&childiter,2,new_repo,3,child_path,-1); -// yon_storage_config_update(window); -// char *old; -// yon_window_config_get_parameter("storage_info",path,&old,YON_TYPE_STRING); -// int old_repos_size; -// config_str old_repos_parsed = yon_char_parse(old,&old_repos_size,","); -// if (yon_char_parsed_check_exist(old_repos_parsed,old_repos_size,child_path)==-1){ -// yon_char_parsed_add_or_create_if_exists(old_repos_parsed,&old_repos_size,child_path); -// } -// yon_window_config_add_instant_parameter(path,"storage_info",yon_char_parsed_to_string(old_repos_parsed,old_repos_size,","),YON_TYPE_STRING); -// yon_char_parsed_free(old_repos_parsed,old_repos_size); -// yon_debug_output("%s\n",create_storage_command(path, new_repo)); -// yon_launch(create_storage_command(path, new_repo)); -// int size; -// config_str dirs = yon_file_list_dirs(child_path,&size); -// for (int i=0;istorages_copy,&iter,&childiter); -// gtk_tree_store_set(window->storages_copy,&iter,2,dirs[i],3,arch_path,-1); - -// if (!yon_char_is_empty(arch_path)&&!access(arch_path,F_OK)){ -// config_str final = NULL; -// int final_size=0; -// DIR *current_dir = opendir(arch_path); -// struct dirent* cur_dir; -// while ((cur_dir=readdir(current_dir))){ -// if (strlen(cur_dir->d_name)>8){ -// char *extension = yon_char_new(cur_dir->d_name); -// free(yon_char_divide(extension,yon_char_find_last(extension,'.')-4)); -// if ((strcmp(cur_dir->d_name, ".") && strcmp(cur_dir->d_name, ".."))&&strstr(extension,"tar.")){ -// yon_char_parsed_add_or_create_if_exists(final,&final_size,cur_dir->d_name); -// } -// } -// } -// closedir(current_dir); -// if (size) -// yon_window_config_add_instant_parameter(arch_path,"package_info",yon_char_parsed_to_string(final,final_size,","),YON_TYPE_STRING); -// } -// } -// yon_char_parsed_free(dirs,size); -// } -// free(new_repo); -// } - -// void on_storage_accept(GtkWidget *self, dictionary *dict){ +void on_storage_open(GtkWidget *self, storage_config_window *window){ + + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->MainFileChooser)); + storage_struct *storage = yon_storage_struct_new(); + 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,'/'))); + 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); + + } +} + +void on_storage_create(GtkWidget *self, storage_config_window *window){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){ + storage_struct *storage = yon_storage_struct_new(); + 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,'/'))); + 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); + } +} + +void on_storage_disable(GtkWidget *self, storage_config_window *window){ + const char *storage_target = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_target); + if (storage){ + gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->StoragePathCombo),0); + g_hash_table_remove(window->storages_copy,storage_target); + yon_storage_sturct_free_full(storage); + } +} + +void on_storage_remove(GtkWidget *self, storage_config_window *window){ + const char *storage_target = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_target); + if (storage){ + gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->StoragePathCombo),0); + g_hash_table_remove(window->storages_copy,storage_target); + yon_storage_sturct_free_full(storage); + yon_char_parsed_add_or_create_if_exists(window->delete_storages,&window->delete_storages_size,(char*)storage_target); + } +} + +void on_repo_add(GtkWidget *self, storage_config_window *window){ + const char *repo_name = gtk_entry_get_text(GTK_ENTRY(window->AddEntry)); + if (yon_char_is_empty(repo_name)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->AddEntry); + return; + } + const char *storage_target = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_target); + if (g_hash_table_lookup(storage->repos,repo_name)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->AddEntry); + return; + } + char *new_repo = yon_char_new(repo_name); + repo_struct *repo = yon_repo_struct_new(); + storage_repo_block *block = yon_storage_repo_block_new(); + g_object_set_data(G_OBJECT(block->SignatureCombo),"repo_storage",repo); + g_object_set_data(G_OBJECT(block->SignatureCombo),"window",window); + g_object_set_data(G_OBJECT(block->RepoRemoveButton),"window",window); + repo->name=new_repo; + block->repo_name=new_repo; + repo->path = yon_char_unite(storage_target,"/",new_repo,NULL); + repo->storage_path = yon_char_new(storage_target); + gtk_entry_set_text(GTK_ENTRY(block->RepoNameEntry),new_repo); + gtk_box_pack_start(GTK_BOX(window->ReposBox),block->MainBox,0,0,0); + g_hash_table_insert(storage->repos,repo->name,repo); + gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); +} + +void yon_storage_config_update(storage_config_window *window){ + GList *children = gtk_container_get_children(GTK_CONTAINER(window->ReposBox)); + if (children){ + GList *iter; + for(iter=children;iter;iter=iter->next){ + gtk_widget_destroy(GTK_WIDGET(iter->data)); + } + } + const char *active = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + if (active){ + storage_struct *storage = g_hash_table_lookup(window->storages_copy,active); + GList *repos = g_hash_table_get_values(storage->repos); + if (repos){ + GList *iter; + for (iter = repos;iter;iter=iter->next){ + repo_struct *cur_repo = (repo_struct*)iter->data; + storage_repo_block *cur_block = NULL; + 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),"window",window); + g_object_set_data(G_OBJECT(cur_block->RepoRemoveButton),"window",window); + cur_block->repo_name=yon_char_new(cur_repo->name); + gtk_entry_set_text(GTK_ENTRY(cur_block->RepoNameEntry),cur_repo->name); + gtk_box_pack_start(GTK_BOX(window->ReposBox),cur_block->MainBox,0,0,0); + } + } + } +} + +void on_storage_accept(GtkWidget *self, dictionary *dict){ + // 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*); // gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); @@ -221,59 +132,59 @@ // on_subwindow_close(self); // yon_config_load_update(widgets); // yon_ubl_status_box_render(STORAGES_SAVED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// } - - -// void on_storage_changed(GtkWidget *self, storage_config_window *window){ -// yon_storage_config_update(window); -// } - -// storage_config_window *yon_storage_config_window_new(){ -// storage_config_window *window = malloc(sizeof(storage_config_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_storage_config); -// window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->StoragePathCombo = yon_gtk_builder_get_widget(builder,"StoragePathCombo"); -// window->OpenExistingButton = yon_gtk_builder_get_widget(builder,"OpenExistingButton"); -// window->CreateNewButton = yon_gtk_builder_get_widget(builder,"CreateNewButton"); -// window->DisableButton = yon_gtk_builder_get_widget(builder,"DisableButton"); -// window->DeleteButton = yon_gtk_builder_get_widget(builder,"DeleteButton"); -// window->ReposBox = yon_gtk_builder_get_widget(builder,"ReposBox"); -// window->AddEntry = yon_gtk_builder_get_widget(builder,"AddEntry"); -// window->AddRepoButton = yon_gtk_builder_get_widget(builder,"AddRepoButton"); -// window->storages_copy = gtk_tree_store_new(7,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT); -// yon_gtk_tree_store_copy_full(main_config.tree_store,window->storages_copy); -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(window->OpenExistingButton),"clicked",G_CALLBACK(on_storage_open),window); -// g_signal_connect(G_OBJECT(window->CreateNewButton),"clicked",G_CALLBACK(on_storage_create),window); -// g_signal_connect(G_OBJECT(window->DisableButton),"clicked",G_CALLBACK(on_storage_disable),window); -// g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window); -// g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window); -// g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window); +} + + +void on_storage_changed(GtkWidget *self, storage_config_window *window){ + yon_storage_config_update(window); +} + +storage_config_window *yon_storage_config_window_new(){ + storage_config_window *window = malloc(sizeof(storage_config_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_storage_config); + window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->StoragePathCombo = yon_gtk_builder_get_widget(builder,"StoragePathCombo"); + window->OpenExistingButton = yon_gtk_builder_get_widget(builder,"OpenExistingButton"); + window->CreateNewButton = yon_gtk_builder_get_widget(builder,"CreateNewButton"); + window->DisableButton = yon_gtk_builder_get_widget(builder,"DisableButton"); + window->DeleteButton = yon_gtk_builder_get_widget(builder,"DeleteButton"); + window->ReposBox = yon_gtk_builder_get_widget(builder,"ReposBox"); + window->AddEntry = yon_gtk_builder_get_widget(builder,"AddEntry"); + window->AddRepoButton = yon_gtk_builder_get_widget(builder,"AddRepoButton"); + window->storages_copy = g_hash_table_new(g_str_hash,g_str_equal); + window->delete_storages=NULL; + window->delete_storages_size=0; + + yon_storage_hash_table_clone(main_config.storages,window->storages_copy); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->OpenExistingButton),"clicked",G_CALLBACK(on_storage_open),window); + g_signal_connect(G_OBJECT(window->CreateNewButton),"clicked",G_CALLBACK(on_storage_create),window); + // g_signal_connect(G_OBJECT(window->DisableButton),"clicked",G_CALLBACK(on_storage_disable),window); + g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window); + g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window); + g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window); -// return window; -// } - -// void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){ -// storage_config_window *window = yon_storage_config_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MANAGE_STORAGES_TITLE_LABEL,icon_path,"storage-configuration-window"); -// gtk_label_set_text(GTK_LABEL(window->HeadLabel),MANAGE_STORAGES_TITLE_LABEL); -// gtk_window_set_transient_for(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window)); -// GtkTreeIter iter,itar; -// for_iter(window->storages_copy,&iter){ -// char *storage; -// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&iter,3,&storage,-1); - -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage,storage); -// } - -// dictionary *dict = NULL; -// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); -// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); -// g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_storage_accept),dict); -// gtk_widget_show(window->MainWindow); -// } + return window; +} + +void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){ + storage_config_window *window = yon_storage_config_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MANAGE_STORAGES_TITLE_LABEL,icon_path,"storage-configuration-window"); + GtkTreeIter iter,itar; + GList *storages = g_hash_table_get_values(main_config.storages); + GList *listiter; + for (listiter = storages;listiter;listiter=listiter->next){ + storage_struct *cur_storage = (storage_struct*)listiter->data; + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),cur_storage->name,cur_storage->path); + } + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + // g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_storage_accept),dict); + gtk_widget_show(window->MainWindow); +} diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index e63189a..50cd491 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -3,46 +3,6 @@ config main_config; -// void yon_storage_config_update(storage_config_window *window){ -// GList *children = gtk_container_get_children(GTK_CONTAINER(window->ReposBox)); -// for (int i=0;iStoragePathCombo)); -// if (id){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id); -// if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter)){ -// int valid = 1; -// for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){ -// char *storage = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->StoragePathCombo)); -// char *repo; -// gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&repo,-1); -// storage_repo_block *block = yon_storage_repo_block_new(); -// block->repo_name = yon_char_new(repo); -// block->storage_path = yon_char_new(storage); -// gtk_box_pack_start(GTK_BOX(window->ReposBox),block->MainBox,0,0,0); -// gtk_entry_set_text(GTK_ENTRY(block->RepoNameEntry),repo); -// int sign_size; -// char *command = yon_repo_get_signature(storage,repo); -// yon_debug_output("%s\n",command); -// config_str sign = yon_config_load(command,&sign_size); -// if (sign_size>0){ -// yon_char_remove_last_symbol(sign[2],'\n'); -// char *mail = strstr(sign[2],"\""); -// if (!yon_char_is_empty(mail)){ -// char *email = yon_char_new(mail); -// yon_char_remove_brackets(email); -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(block->SignatureCombo),email); -// free(email); -// } -// yon_char_parsed_free(sign,sign_size); -// } -// } -// } -// } -// } - // // filechooser window section // void on_file_chooser_entry_changed(GtkEntry *self, file_chooser_window *window){ @@ -91,7 +51,7 @@ void config_init(){ main_config.tree_store=NULL; main_config.signs=NULL; main_config.signs_size=0; - // yon_sign_list_update(); + yon_sign_list_update(); main_config.last_selection = NULL; main_config.storages = g_hash_table_new(g_str_hash,g_str_equal); } @@ -354,28 +314,27 @@ void on_package_selection_changed(GtkWidget *self, main_window *widgets){ } } -// void yon_combo_box_text_set_signs(GtkComboBoxText *target){ -// g_return_if_fail(GTK_IS_COMBO_BOX_TEXT(target)); -// gtk_combo_box_text_remove_all(target); -// gtk_combo_box_text_append_text(target,DO_NOT_SIGN_LABEL); -// for (int i=0;i")) -// yon_char_remove_last_symbol(temp,'>'); -// gtk_combo_box_text_append(target,temp,main_config.signs[i]); -// free(temp); -// } -// } +void yon_combo_box_text_set_signs(GtkComboBoxText *target){ + g_return_if_fail(GTK_IS_COMBO_BOX_TEXT(target)); + gtk_combo_box_text_remove_all(target); + gtk_combo_box_text_append_text(target,DO_NOT_SIGN_LABEL); + for (int i=0;iReposTree)); gtk_tree_selection_get_selected(tree_selection,&model,&iter); - // storage_struct *target_struct; - // gtk_tree_model_get(model,&iter,7,&target_struct,-1); - // if (gtk_tree_model_iter_has_child(model,&iter)){ - // GtkTreeModel *submodel; - // GtkTreeIter subiter; - // if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&submodel,&subiter)) return; - // char *target; - // gtk_tree_model_get(submodel,&subiter,1,&target,-1); - // GtkTreeIter childiter; - // gtk_tree_model_iter_children(model,&childiter, &iter); - // for_iter(model,&childiter){ - // char *check_target; - // gtk_tree_model_get(model,&childiter,2,&check_target,-1); - // if (!strcmp(check_target,target)){ - // GtkTreePath *path = gtk_tree_model_get_path(model,&iter); - // gtk_tree_selection_select_path(tree_selection,path); - // g_signal_emit_by_name(G_OBJECT(widgets->ReposTree),"cursor-changed",widgets,G_TYPE_NONE,NULL); - - // } - // } - // } - if (gtk_tree_store_iter_depth(GTK_TREE_STORE(widgets->RepoList),&iter)<2){ char *path_id = gtk_tree_model_get_string_from_iter(model,&iter); char *target_id = gtk_tree_path_to_string(path); @@ -680,7 +617,7 @@ main_window *yon_main_window_complete(main_window *widgets){ // REMOVE_PACKAGES_TITLE_LABEL,remove_icon,G_CALLBACK(on_rmb_remove),widgets, // NULL); - // g_signal_connect(G_OBJECT(widgets->DBConfigurationButton),"clicked",G_CALLBACK(on_storage_configure_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->DBConfigurationButton),"clicked",G_CALLBACK(on_storage_configure_clicked),widgets); // g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_clicked),widgets); // g_signal_connect(G_OBJECT(widgets->MoveButton),"clicked",G_CALLBACK(on_move_clicked),widgets); // g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 5360dd4..5c34572 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -83,7 +83,23 @@ typedef char* string; #define yon_get_filename_from_package_name(target) yon_char_unite("find ${PATH} -maxdepth 1 -regextype egrep -regex \".*/",target,"-[^-]+-[^-]+-[^-]+\\.pkg\\.tar\\.[^-.]*\"",NULL) -#define get_gpg_keys_command yon_char_unite(yon_ubl_check_root()==1 ? yon_char_unite("su - ",yon_ubl_root_user_get()," -c \"gpg --list-signatures\"",NULL):"gpg --list-signatures"," | grep '^uid' | cut -d' ' -f10,11,12,13- | sort -u |sed -e 's/[0-9]*-[0-9]*-[0-9]* //g'",NULL) +#define get_gpg_keys_command "gpg --list-keys | awk ' \ +/^pub/ { \ + key=\"\"; \ + getline; \ + if (match($0, /[0-9A-F]{8,}/)) \ + key=substr($0, RSTART, RLENGTH); \ +} \ +/^uid/ { \ + $1=\"\"; sub(/^ +/, \"\"); \ + if (match($0, /<[^>]+>/)) { \ + email = substr($0, RSTART+1, RLENGTH-2); \ + print $0 \";\" email; \ + } else { \ + print $0 \";\" key; \ + } \ +}'" + #define yon_sign_package(storage,repo,arch,target,sign) yon_char_unite("repo-manager add -r ''",repo,"'' -a '",arch,"' -d '", storage,"' -s '",sign,"' ",target,NULL) #define yon_sign_repo(storage,repo,sign) yon_char_unite("repo-manager add -f -r ''",repo,"'' -d '", storage,"' --sign-repo='",sign,"'",NULL) @@ -215,9 +231,9 @@ typedef struct { GtkWidget *AddEntry; GtkWidget *AddRepoButton; GtkWidget *TestTree; - GtkListStore *StorageList; - GtkTreeStore *storages_copy; - GtkTreeModel *StorageFilter; + GHashTable *storages_copy; + int delete_storages_size; + config_str delete_storages; } storage_config_window; typedef struct { @@ -263,11 +279,11 @@ typedef struct { GtkWidget *MainBox; GtkWidget *RepoNameEntry; GtkWidget *SignatureCombo; - GtkWidget *SignatureButton; GtkWidget *RepoRemoveButton; char *storage_path; char *repo_name; + char *sign_request; } storage_repo_block; @@ -362,7 +378,7 @@ void on_storage_disable(GtkWidget *self, storage_config_window *window); void on_storage_create(GtkWidget *self, storage_config_window *window); void on_storage_open(GtkWidget *self, storage_config_window *window); void on_repo_signed(); -void on_repo_removed(GtkWidget *self,storage_config_window *window); +void on_repo_removed(GtkWidget *self,storage_repo_block *block); void on_repo_sign_changed(GtkWidget *self, storage_repo_block *block); void on_add_clicked(GtkWidget *self, main_window *widgets); void on_rmb_move(GtkWidget *self, main_window *widgets); @@ -388,4 +404,7 @@ void yon_repo_tree_build_repo(char *key, repo_struct *repo, struct repo_tree_bui void yon_repo_tree_build_arch(char *key, arch_struct *arch, struct repo_tree_build *data); void yon_interface_update(main_window *widgets); void yon_sublist_packages_build(char *key, char *file, main_window *widgets); -void yon_sublist_build(char *key, storage_struct *storage, main_window *widgets); \ No newline at end of file +void yon_sublist_build(char *key, storage_struct *storage, main_window *widgets); +void yon_storage_repo_block_destroy(storage_repo_block *block); +void yon_storage_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash); +void yon_storage_sturct_free_full(storage_struct *storage); \ No newline at end of file diff --git a/ubl-settings-repomanager-configuration.glade b/ubl-settings-repomanager-configuration.glade index 1575b04..32f8374 100644 --- a/ubl-settings-repomanager-configuration.glade +++ b/ubl-settings-repomanager-configuration.glade @@ -206,6 +206,7 @@ True False + 10 vertical 5 @@ -222,6 +223,7 @@ True False + 10 5 diff --git a/ubl-settings-repomanager-repo-block.glade b/ubl-settings-repomanager-repo-block.glade index 0880f29..8e6bcee 100644 --- a/ubl-settings-repomanager-repo-block.glade +++ b/ubl-settings-repomanager-repo-block.glade @@ -3,11 +3,6 @@ - - True - False - com.ublinux.libublsettingsui-gtk3.key-symbolic - True False @@ -53,23 +48,6 @@ 2 - - - True - True - True - Sign repo - image1 - - - - False - True - 3 - - True -- 2.35.1