diff --git a/source/ubl-settings-repomanager-add-window.c b/source/ubl-settings-repomanager-add-window.c index 1a49323..9b7b451 100644 --- a/source/ubl-settings-repomanager-add-window.c +++ b/source/ubl-settings-repomanager-add-window.c @@ -1,4 +1,4 @@ -// #include "ubl-settings-repomanager.h" +#include "ubl-settings-repomanager.h" // gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data){ @@ -29,72 +29,55 @@ // 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, *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_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)){ + storage_struct *storage = g_hash_table_lookup(main_config.storages,path_str); + int size; + config_str repos = (config_str)g_hash_table_get_keys_as_array(storage->repos,&size); + for (int i=0;iRepositoryCombo),repos[i],repos[i]); + } + } +} + +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 *storage_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + char *repo_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); + if (!yon_char_is_empty(storage_str)){ + storage_struct *storage = g_hash_table_lookup(main_config.storages,storage_str); + repo_struct *repo = g_hash_table_lookup(storage->repos,repo_str); + int size; + config_str archs = (config_str)g_hash_table_get_keys_as_array(repo->archs,&size); + for (int i=0;iArchitectureCombo),archs[i],archs[i]); + } + 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)); @@ -113,113 +96,121 @@ // } // } -// 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*); +void on_add_accept(GtkWidget *self, dictionary *dict){ + repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); + filechooser_window *dialog = yon_dictionary_get_data(dict->first->next,filechooser_window*); + char *file = dialog->last_success_selection; + int size; + if (!yon_char_is_empty(file)){ + config_str package_name = yon_config_load(yon_get_package_name_from_filename(file),&size); + if (size){ + yon_char_remove_last_symbol(package_name[0],'\n'); + GtkTreeIter iter; + gtk_list_store_append(window->PackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,0,package_signature_icon_name,1,package_name[0],2,file,3,1,-1); + } + yon_char_parsed_free(package_name,size); + } +} + +void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict){ + on_add_accept(self,dict); +} + + +void on_add_package(GtkWidget *self, repo_add_window *window){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"filechooserWindow"); + gtk_label_set_text(GTK_LABEL(dialog->HeaderTopic),CHOSE_PACKAGES_TITLE_LABEL); + + 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->MainFileChooser),filter); + + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + 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); + on_add_accept(self,dict); + } + gtk_widget_destroy(dialog->Window); + free(dialog); + // g_signal_connect(G_OBJECT(dialog->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + // g_signal_connect(G_OBJECT(dialog->SaveButton),"clicked",G_CALLBACK(on_add_accept),dict); + // g_signal_connect(G_OBJECT(dialog->MainFileChooser),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); +} + +void on_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); + } +} + +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*); + + const char *storage = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + const char *repo = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); + const char *arch = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); + + const char *repo_sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); + const char *package_sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); + int size; + config_str parsed = NULL; + for_iter(model,&iter){ + char *path; + gtk_tree_model_get(model,&iter,2,&path,-1); + yon_char_parsed_add_or_create_if_exists(parsed, &size,path); + } + + char *packages = yon_char_parsed_to_string(parsed,size," "); + char *command = NULL; + if (repo_sign&&package_sign){ + command = add_packages_sign_command(storage,arch,repo,repo_sign,package_sign,packages); + } else if (!yon_char_is_empty(repo_sign)){ + command = add_packages_repo_sign_command(storage,arch,repo,repo_sign,packages); + } else if (!yon_char_is_empty(package_sign)){ + command = add_packages_package_sign_command(storage,arch,repo,package_sign,packages); + } else { + command = add_packages_command(storage,arch,repo,packages); + } + + if (system(command)){ + yon_ubl_status_box_render(PACKAGES_ADD_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(PACKAGES_ADD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + gtk_widget_destroy(window->MainWindow); + yon_interface_update(widgets); + free(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)){ @@ -274,7 +265,7 @@ // } 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; @@ -285,63 +276,6 @@ // 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; @@ -364,77 +298,132 @@ // } // } -// 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); -// } +void yon_add_window_set_selected(main_window *widgets, repo_add_window *window){ + GtkTreeIter iter, itar, itor; + + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ + int depth = gtk_tree_store_iter_depth(widgets->RepoList,&iter); + char *storage=NULL, *repo=NULL, *arch=NULL; + switch (depth){ + case 0: //storage + { + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&storage,-1); + }break; + case 1: //repo + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,2,&repo,-1); + gtk_tree_model_iter_parent(GTK_TREE_MODEL(widgets->RepoList),&itar, &iter); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&itar,3,&storage,-1); + break; + case 2: //arch + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,2,&arch,-1); + gtk_tree_model_iter_parent(GTK_TREE_MODEL(widgets->RepoList),&itar, &iter); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&itar,2,&repo,-1); + gtk_tree_model_iter_parent(GTK_TREE_MODEL(widgets->RepoList),&itor, &itar); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&itor,3,&storage,-1); + break; + } + if (!yon_char_is_empty(storage)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->StorageCombo),storage); + while(gtk_events_pending()) gtk_main_iteration(); + if (!yon_char_is_empty(repo)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepositoryCombo),repo); + while(gtk_events_pending()) gtk_main_iteration(); + if (!yon_char_is_empty(arch)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ArchitectureCombo),arch); + } +} + +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")); + + 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); -// 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 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; + int size; + config_str storages = (config_str)g_hash_table_get_keys_as_array(main_config.storages,&size); + for (int i=0;iStorageCombo),storages[i],storages[i]); + } + + 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); + + yon_rmb_menu_setup(window->PackagesTree,(int(*)(void*))gtk_widget_is_sensitive,window->AddPackageButton, + ADD_PACKAGE_LABEL,add_icon_name,G_CALLBACK(on_add_package),window, + REMOVE_PACKAGE_LABEL,remove_icon,G_CALLBACK(on_remove_package),window, + NULL); + + // 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); +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 8b89881..566b4d1 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -17,10 +17,6 @@ config main_config; // 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); @@ -658,7 +654,7 @@ main_window *yon_main_window_complete(main_window *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->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); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index f222454..e56122e 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -38,6 +38,7 @@ #define document_deleted "com.ublinux.ubl-settings-repomanager.key-red-symbolic" #define document_added "com.ublinux.ubl-settings-repomanager.key-green-symbolic" +#define add_icon_name "com.ublinux.libublsettingsui-gtk3.increase-symbolic" #define move_icon "com.ublinux.libublsettingsui-gtk3.arrows-left-right-symbolic" #define remove_icon "com.ublinux.libublsettingsui-gtk3.trash-symbolic" diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 0699111..cee66b0 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -86,6 +86,7 @@ #define REPO_SIGN_ERROR_LABEL _("Repository sign failed - repository has no packages") #define DATA_LOADED_LABEL _("Data has been loaded") +#define PACKAGES_ADD_ERROR_LABEL _("Failed to add packages") #define PACKAGES_ADD_SUCCESS_LABEL _("Packages were added successfully") #define PACKAGES_REMOVE_SUCCESS_LABEL _("Packages were removed successfully") #define PACKAGES_MOVE_SUCCESS_LABEL _("Packages were moved successfully")