diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 29f4243..5be8681 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -411,6 +411,8 @@ void on_move_storage_changed(GtkWidget *self, repo_add_window *window){ void on_move_repo_changed(GtkWidget *self, repo_add_window *window){ GtkWidget *ArchCombo = NULL; ArchCombo = self==window->MoveSourceRepoEntry?window->MoveSourceArchEntry:window->MoveTargetArchEntry; + + yon_debug_output("%s\n","repo"); 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)); @@ -422,21 +424,45 @@ void on_move_repo_changed(GtkWidget *self, repo_add_window *window){ 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); } + yon_debug_output("%s\n","repo 2"); } 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; + 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,3,&path,-1); + 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; @@ -452,8 +478,9 @@ void on_add_accept(GtkWidget *self, dictionary *dict){ char *repo_name; gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itor,3,&repo_name,-1); char *repo_pack = yon_char_divide(repo_name,yon_char_find_last(repo_name,'/')); - yon_debug_output("%s\n",add_packages_command(repo_pack,repo_name,current)); - if (!system(add_packages_command(repo_pack,repo_name,current))){ + char *command = add_packages_command(repo_pack,arch_name,repo_name,current); + yon_debug_output("%s\n",command); + if (!system(command)){ gtk_list_store_append(window->PackagesList,&itar); gtk_list_store_set(window->PackagesList,&itar,1,name,2,current,3,1,-1); yon_char_parsed_add_or_create_if_exists(parsed,&size,name); @@ -482,20 +509,24 @@ void on_add_package(GtkWidget *self, repo_add_window *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 *arch = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + 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,arch); - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itor,3,&arch,-1); + 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); - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&repo,3,&path,-1); 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); + char *temp = yon_char_divide(path,yon_char_find_last(path,'/')); + free(path); + path=temp; + free(yon_char_divide(path,yon_char_find_last(path,'/'))); char *cur_name, *cur_path; gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&itar,1,&cur_name,2,&cur_path,-1); - char *command = remove_packages_command(arch,repo,cur_name); + char *command = remove_packages_command(storage,path,repo,cur_name); yon_debug_output("%s\n",command); yon_launch(command); on_add_target_package_selection_changed(window->ArchitectureCombo,window); @@ -509,6 +540,16 @@ void on_add_selection_changed(GtkWidget *self, repo_add_window *window){ gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->package_filter)); } +void on_add_window_tree_changed(GtkWidget *self, repo_add_window *window){ + 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); + } else { + gtk_widget_set_sensitive(window->RemoveButton,0); + } +} + 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); @@ -545,6 +586,7 @@ repo_add_window *yon_repo_add_window_new(){ gtk_tree_view_set_model(GTK_TREE_VIEW(window->TestTree),GTK_TREE_MODEL(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; @@ -657,7 +699,6 @@ void on_move_remove_package(GtkWidget *self, repo_add_window *window){ gtk_widget_set_sensitive(window->MoveSourceArchEntry,1); gtk_widget_set_sensitive(window->MoveTargetRepoEntry,1); - gtk_widget_set_sensitive(window->MoveTargetArchEntry,1); } } @@ -675,6 +716,7 @@ void on_move_accept(GtkWidget *self, repo_add_window *window){ } } 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; @@ -682,10 +724,11 @@ void on_move_accept(GtkWidget *self, repo_add_window *window){ 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,source_repo, target_repo, yon_char_parsed_to_string(packages,size," ")); + 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); system(command); } + on_subwindow_close(window->MainWindow); } void on_move_clicked(GtkWidget *self, main_window *widgets){ @@ -720,8 +763,23 @@ void on_move_clicked(GtkWidget *self, main_window *widgets){ void 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),TITLE_LABEL,icon_path,"remove-repo-window"); - gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); + yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"add-repo-window"); + 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); + } + } + + 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_add_target_package_selection_changed),window); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + 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); gtk_widget_show(window->MainWindow); } diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 6bd8f42..d5683b2 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -46,10 +46,10 @@ typedef char* string; #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 '^sig 3' | cut -d' ' -f10,11,13- | sort -u |sed -e 's/[0-9]*-[0-9]*-[0-9]* //g'",NULL) #define create_storage_command(path,name) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"'",NULL) -#define add_packages_command(path,name,packages_path) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"' ",packages_path,NULL) -#define remove_packages_command(path,name,packages_path) yon_char_unite("repo-manager remove -r '",name,"' -d '", path,"' ",packages_path,NULL) +#define add_packages_command(path,arch,name,packages_path) yon_char_unite("repo-manager add -r '",name,"' -a '",arch,"' -d '", path,"' ",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, source_repo, target_repo, packages) yon_char_unite("repo-manager move -d '",storage,"' -R '",source_repo,"' -r '",target_repo,"' ", packages,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) string version_application; diff --git a/ubl-settings-repomanager-add.glade b/ubl-settings-repomanager-add.glade index 09d695c..7891137 100644 --- a/ubl-settings-repomanager-add.glade +++ b/ubl-settings-repomanager-add.glade @@ -438,6 +438,7 @@ True + False True True image2 @@ -454,6 +455,7 @@ True + False True True image1