From 311bc9070543311523e55fffdb8aeee67c1890e4 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 22 May 2024 18:21:57 +0600 Subject: [PATCH] Early remove of packages implementation --- source/ubl-settings-repomanager.c | 34 ++++++++++++++++++++++++++++--- source/ubl-settings-repomanager.h | 2 ++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 5be8681..4fafc4b 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -761,6 +761,34 @@ void on_move_clicked(GtkWidget *self, main_window *widgets){ gtk_widget_show(window->MainWindow); } +void on_remove_accept(GtkWidget *self, repo_add_window *window){ + GtkTreeModel *model; + GtkTreeIter iter; + 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); + + } + GtkTreeIter iter; + int size; + 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 *command = yon_delete_packages_command(storage_path,arch,repo,yon_char_parsed_to_string(packages,size," ")); + yon_debug_output("%s\n",command); + system(command); + } +} + 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,"add-repo-window"); @@ -777,9 +805,9 @@ void on_remove_clicked(GtkWidget *self, main_window *widgets){ 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); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),NULL); + 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); gtk_widget_show(window->MainWindow); } diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index d5683b2..102ed6c 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -50,6 +50,8 @@ typedef char* string; #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) + string version_application;