diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 4fafc4b..e5a0520 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -11,10 +11,26 @@ void on_repo_removed(GtkWidget *self,storage_config_window *window){ char *repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); GtkTreeIter iter, itar; char *storage; - gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter); - gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(window->StorageFilter),&itar,&iter); - gtk_tree_store_remove(GTK_TREE_STORE(window->storages_copy),&itar); + 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); + // gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter); + // gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(window->StorageFilter),&itar,&iter); + // if (yon_gtk_tree_store_find_full(GTK_TREE_MODEL(window->storages_copy),&itar,2,repo)){ + // gtk_tree_store_remove(GTK_TREE_STORE(window->storages_copy),&itar); + // yon_storage_config_update(window); + // } } void yon_storage_config_update(storage_config_window *window){ @@ -22,14 +38,14 @@ void yon_storage_config_update(storage_config_window *window){ for (int i=0;iStoragePathCombo),&iter)){ - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(window->StorageFilter),&itar,&iter); - if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&childiter,&itar)){ + GtkTreeIter iter,itar; + if (yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->StoragePathCombo),GTK_TREE_MODEL(window->storages_copy),&iter)){ + + 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),&childiter)){ + 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),&childiter,2,&repo,-1); + 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); @@ -41,15 +57,6 @@ void yon_storage_config_update(storage_config_window *window){ } } -gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter){ - g_return_val_if_fail(GTK_IS_COMBO_BOX(combo),0); - g_return_val_if_fail(GTK_IS_TREE_MODEL(model),0); - const char *id = gtk_combo_box_get_active_id(combo); - if (yon_char_is_empty(id)) return 0; - gtk_tree_model_get_iter_from_string(model,iter,id); - return 1; -} - // filechooser window section file_chooser_window *yon_file_chooser_window_new(){ @@ -268,7 +275,6 @@ 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); - gtk_combo_box_set_model(GTK_COMBO_BOX(window->StoragePathCombo),GTK_TREE_MODEL(window->storages_copy)); return window; } @@ -277,9 +283,13 @@ 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),TITLE_LABEL,icon_path,"storage-configuration-window"); gtk_window_set_transient_for(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window)); - window->StorageFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(window->storages_copy),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(window->StorageFilter),yon_storage_filter_func,widgets,NULL); - gtk_combo_box_set_model(GTK_COMBO_BOX(window->StoragePathCombo),GTK_TREE_MODEL(window->StorageFilter)); + 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); + } dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); @@ -292,9 +302,7 @@ void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){ //repo-add window section -gboolean yon_storage_filter_func(GtkTreeModel *model, - GtkTreeIter *iter, - gpointer data){ +gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data){ GtkTreeIter parent; if (gtk_tree_model_iter_parent(model, &parent, iter)) return 0; @@ -636,14 +644,20 @@ void on_move_add_accept(GtkWidget *self, dictionary *dict){ for (int k=0;kPackagesList,&iter); - gtk_list_store_set(window->PackagesList,&iter,2,files[k],-1); + 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); + yon_char_remove_last_symbol(name[0],'\n'); gtk_list_store_append(window->PackagesList,&iter); - gtk_list_store_set(window->PackagesList,&iter,2,path,-1); + gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,path,-1); } } @@ -672,7 +686,7 @@ void on_move_add_package(GtkWidget *self, repo_add_window *window){ 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,-1); - yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry),GTK_TREE_MODEL(window->tree_copy),&itar); + 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); @@ -761,10 +775,45 @@ void on_move_clicked(GtkWidget *self, main_window *widgets){ gtk_widget_show(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_window_new(); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); + 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); + gtk_widget_show(dialog->Window); + } +} + +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, repo_add_window *window){ GtkTreeModel *model; GtkTreeIter iter; - char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + 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)); @@ -772,20 +821,18 @@ void on_remove_accept(GtkWidget *self, repo_add_window *window){ 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); + 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); + } } } @@ -804,9 +851,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_remove_accept),NULL); - g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_move_add_package),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),window); + 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); gtk_widget_show(window->MainWindow); } diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 102ed6c..555bb19 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -52,6 +52,9 @@ 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_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) string version_application; @@ -147,4 +150,6 @@ typedef struct { main_window *setup_window(); +void yon_storage_config_update(storage_config_window *window); + void yon_storage_config_update(storage_config_window *window); \ No newline at end of file diff --git a/ubl-settings-repomanager-configuration.glade b/ubl-settings-repomanager-configuration.glade index 92f28f7..cd8823d 100644 --- a/ubl-settings-repomanager-configuration.glade +++ b/ubl-settings-repomanager-configuration.glade @@ -28,12 +28,6 @@ False com.ublinux.libublsettingsui-gtk3.increase-symbolic - - - - - - 450 300 @@ -88,17 +82,9 @@ - + True False - liststore1 - 0 - - - - 3 - - True @@ -364,4 +350,10 @@ + + + + + +