diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 9a6c3f9..c808c2d 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -33,6 +33,34 @@ void on_repo_removed(GtkWidget *self,storage_config_window *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_sign_repo(storage_path,target_repo,sign))){ + gtk_combo_box_set_active(GTK_COMBO_BOX((GtkWidget*)g_list_nth_data(list,2)),0); + } + }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;iReposBox),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); + g_signal_connect(gtk_builder_get_object(builder,"SignatureCombo"),"changed",G_CALLBACK(on_repo_sign_changed),window); gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(builder,"RepoNameEntry")),repo); } } @@ -291,7 +322,7 @@ storage_config_window *yon_storage_config_window_new(){ window->AddEntry = yon_gtk_builder_get_widget(builder,"AddEntry"); window->AddRepoButton = yon_gtk_builder_get_widget(builder,"AddRepoButton"); window->TestTree = yon_gtk_builder_get_widget(builder,"TestTree"); - window->storages_copy = gtk_tree_store_new(6,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING); + 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); gtk_tree_view_set_model(GTK_TREE_VIEW(window->TestTree),GTK_TREE_MODEL(window->storages_copy)); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); @@ -301,6 +332,7 @@ storage_config_window *yon_storage_config_window_new(){ g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window); g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window); g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window); + return window; } @@ -350,7 +382,6 @@ config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *par 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); - free(append); } gtk_tree_path_free(path); } @@ -567,13 +598,6 @@ void on_remove_package(GtkWidget *self, repo_add_window *window){ } } -void on_add_selection_changed(GtkWidget *self, repo_add_window *window){ - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->storage_filter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->repo_filter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->arch_filter)); - 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; @@ -613,10 +637,6 @@ repo_add_window *yon_repo_add_window_new(){ 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); - window->storage_filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); - window->repo_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); - window->arch_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); - window->package_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); 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); @@ -642,6 +662,7 @@ void on_add_clicked(GtkWidget *self, main_window *widgets){ } } + yon_sign_list_update(); yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); @@ -791,6 +812,7 @@ void on_move_clicked(GtkWidget *self, main_window *widgets){ } } + yon_sign_list_update(); yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); @@ -862,7 +884,13 @@ void on_remove_accept(GtkWidget *self, repo_add_window *window){ yon_char_parsed_add_or_create_if_exists(packages,&size,target); } if (size){ - char *command = yon_delete_packages_command(storage_path,arch,repo,yon_char_parsed_to_string(packages,size," ")); + char *sign = 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,yon_char_parsed_to_string(packages,size," "),sign); + } yon_debug_output("%s\n",command); system(command); } @@ -881,8 +909,10 @@ void on_remove_clicked(GtkWidget *self, main_window *widgets){ 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_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); 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); @@ -999,7 +1029,6 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ } void yon_combo_box_text_set_signs(GtkComboBoxText *target){ - yon_sign_list_update(); g_return_if_fail(GTK_IS_COMBO_BOX_TEXT(target)); gtk_combo_box_text_remove_all(target); gtk_combo_box_text_append_text(target,DO_NOT_SIGN_LABEL); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index e08dc05..7c99f3c 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -51,12 +51,17 @@ typedef char* string; #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_get_package_name_from_filename(path) yon_char_unite("[[ '",path,"' =~ (.*/)*(.*)-[^-]+-[^-]+-[^-]+\\.pkg\\.tar\\.[^.-]+ ]] && echo ${BASH_REMATCH[2]}",NULL) #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 '^sig 3' | 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 -r '",repo,"' -d '", storage,"' -S '",sign,"'",NULL) + string version_application; char *local; @@ -161,4 +166,6 @@ void yon_sign_list_update(); void yon_combo_box_text_set_signs(GtkComboBoxText *target); -void on_storage_changed(GtkWidget *self, storage_config_window *window); \ No newline at end of file +void on_storage_changed(GtkWidget *self, storage_config_window *window); + +config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level); \ No newline at end of file diff --git a/ubl-settings-repomanager.glade b/ubl-settings-repomanager.glade index 36df70a..62bd7b8 100644 --- a/ubl-settings-repomanager.glade +++ b/ubl-settings-repomanager.glade @@ -34,6 +34,8 @@ + +