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 dbc17c2..1a49323 100644 --- a/source/ubl-settings-repomanager-add-window.c +++ b/source/ubl-settings-repomanager-add-window.c @@ -1,405 +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),window); -} - -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)){ - 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..27619e5 --- /dev/null +++ b/source/ubl-settings-repomanager-data-structs.c @@ -0,0 +1,177 @@ +#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=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); + } +} + +void yon_storage_sturct_free_full(storage_struct *storage){ + if (!yon_char_is_empty(storage->name)) 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; + 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); + } + } +} + +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; + 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); + } +} + +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; + 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; +} + +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-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..6b85cbe --- /dev/null +++ b/source/ubl-settings-repomanager-storage-list.c @@ -0,0 +1,53 @@ +#include "ubl-settings-repomanager.h" + + +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_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); + } + +} + +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->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); + + + 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 c6048e3..fb2e287 100644 --- a/source/ubl-settings-repomanager-storage-window.c +++ b/source/ubl-settings-repomanager-storage-window.c @@ -1,226 +1,137 @@ #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); - } - } + 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); + } - 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); - } - } + 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); } - 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); + 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){ - 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))); - } + 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); } - 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)){ + 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); - 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); + 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),""); +} - 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); - } +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); } - 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); + +// 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); } @@ -244,12 +155,15 @@ storage_config_window *yon_storage_config_window_new(){ 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); + 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->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); @@ -261,19 +175,16 @@ storage_config_window *yon_storage_config_window_new(){ 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); + 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); + // 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 9c495b2..50cd491 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -2,208 +2,42 @@ 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(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))); -} - -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); -} +// // 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); @@ -212,638 +46,270 @@ 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),window); - gtk_widget_show(dialog->Window); - } +// /* 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_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); - } - } +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; } -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); - } -} +int yon_storages_load(main_window *widgets){ -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); + 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),window); - 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; +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); } - /* 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_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); + + } break; } } } @@ -853,13 +319,12 @@ void yon_combo_box_text_set_signs(GtkComboBoxText *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); + char *temp = main_config.signs[i]; + int size; + config_str parsed = yon_char_parse(temp,&size,";"); + char *text = yon_char_wrap_to_length_str(parsed[0],50); + gtk_combo_box_text_append(target,parsed[1],text); + yon_char_parsed_free(parsed,size); } } @@ -875,115 +340,115 @@ void on_ubl_settings_update_launch(){ yon_launch_app_with_arguments(ubl_settings_update_command,NULL); } -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_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); @@ -1008,125 +473,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)); @@ -1163,20 +607,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->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); @@ -1190,7 +634,6 @@ main_window *yon_main_window_complete(main_window *widgets){ /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ /* Localisation | Локализация */ - // gtk_widget_show(widgets->Window); return widgets; } } @@ -1212,7 +655,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 88edd1d..5c34572 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,26 @@ 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 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_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) #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 +154,7 @@ typedef struct { config_str signs; int signs_size; char *last_selection; + GHashTable *storages; } config; extern config main_config; @@ -214,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 { @@ -258,6 +275,54 @@ typedef struct { GtkWidget *SignCombo; } sign_window; +typedef struct { + GtkWidget *MainBox; + GtkWidget *RepoNameEntry; + GtkWidget *SignatureCombo; + GtkWidget *RepoRemoveButton; + + char *storage_path; + char *repo_name; + char *sign_request; + +} 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 +331,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); @@ -296,7 +365,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); @@ -307,4 +376,35 @@ 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_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); +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); +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 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