From 09716940b7797416ebd870016dccdafdc5065a05 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 3 Jun 2024 16:47:36 +0600 Subject: [PATCH] Added info for storage, repo and architecture selection --- source/ubl-settings-repomanager.c | 63 +++++++++++++++++++++++++++++-- source/ubl-settings-repomanager.h | 6 +++ source/ubl-strings.h | 14 ++++++- ubl-settings-repomanager.pot | 24 ++++++++++++ ubl-settings-repomanager_ru.po | 24 ++++++++++++ 5 files changed, 126 insertions(+), 5 deletions(-) diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 2eb016f..3adb92c 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -1237,38 +1237,92 @@ void yon_config_load_update(main_window *widgets){ yon_char_parsed_free(storages,size); } -void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ +config_str yon_tree_store_storage_get_archs(GtkTreeStore *target, GtkTreeIter *storage, int *size){ + config_str final = NULL; + GtkTreeIter iter,itar; + int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,storage); + for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ + int archs_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&itar,&iter); + for (;archs_valid;archs_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&itar)){ + char *current; + gtk_tree_model_get(GTK_TREE_MODEL(target),&itar,2,¤t,-1); + if (yon_char_parsed_check_exist(final,*size,current)==-1) + yon_char_parsed_add_or_create_if_exists(final,size,current); + } + } + return final; +} + +config_str yon_tree_store_repo_get_archs(GtkTreeStore *target, GtkTreeIter *repo, int *size){ + config_str final = NULL; + GtkTreeIter iter; + int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,repo); + for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ + char *current; + gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,2,¤t,-1); + if (yon_char_parsed_check_exist(final,*size,current)==-1) + yon_char_parsed_add_or_create_if_exists(final,size,current); + } + return final; +} +void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ + gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),""); gtk_list_store_clear(widgets->RepoFileList); GtkTreeIter iter,itar; GtkTreeModel *model=NULL; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ GtkTreePath *path = gtk_tree_model_get_path(model,&iter); int depth = gtk_tree_path_get_depth(path); - char *target; - gtk_tree_model_get(model, &iter,3,&target,-1); + char *target, *name; + gtk_tree_model_get(model, &iter,2,&name,3,&target,-1); switch (depth){ case 1:{ + int size, arch_size; + config_str repos = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&size,2,2); + config_str archs = yon_tree_store_storage_get_archs(widgets->RepoList,&iter,&arch_size); + char *repo_string = yon_char_parsed_to_string(repos,size,", "); + char *archs_string = yon_char_parsed_to_string(archs,arch_size,", "); + char *info = get_storage_info_label(target,repo_string,archs_string); + gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),info); int lvlsize; config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,2); for (int i=0;iRepoFileList,&itar); gtk_list_store_set(widgets->RepoFileList,&itar,1,level[i],-1); } - + free(repo_string); + free(archs_string); + free(info); + yon_char_parsed_free(repos,size); + yon_char_parsed_free(archs,arch_size); } break; case 2:{ + int size, arch_size; + config_str archs = yon_tree_store_repo_get_archs(widgets->RepoList,&iter,&arch_size); + char *archs_string = yon_char_parsed_to_string(archs,arch_size,", "); + char *info = get_repo_info_label(name,archs_string); + gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),info); int lvlsize; config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,3); for (int i=0;iRepoFileList,&itar); gtk_list_store_set(widgets->RepoFileList,&itar,1,level[i],-1); } + free(archs_string); + free(info); + yon_char_parsed_free(archs,arch_size); } break; case 3:{ + GtkTreeIter itor; + gtk_tree_model_iter_parent(GTK_TREE_MODEL(widgets->RepoList),&itor,&iter); + char *trg; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&itor,2,&trg,-1); + char *info = get_arch_info_label(trg,name,"",""); + gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),info); char *packages; int size; config_str parsed = yon_file_ls(target,&size); @@ -1288,6 +1342,7 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ } } } + free(info); } break; } diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 5a02853..f1e9fd5 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -69,6 +69,12 @@ typedef char* string; #define get_package_info_command(filename) yon_char_unite("pacman -Q --info --file ",filename," 2>/dev/null|sed -e 's/ */ /g' -e 's/ : /: /g' -e 's/\\n/ /g' -e 's/^ /\\t/g'",NULL) +#define get_storage_info_label(path, repos, archs) yon_char_unite(STORAGE_PATH_LABEL,": ", path,"\n\n", REPOS_LABEL,": ",repos,"\n\n",ARCHS_LABEL,": ",archs,NULL) + +#define get_repo_info_label(repos, archs) yon_char_unite(REPO_NAME_LABEL,": ",repos,"\n\n",ARCHS_LABEL,": ",archs,NULL) + +#define get_arch_info_label(repos, archs,sign,sign_status) yon_char_unite(REPO_NAME_LABEL,": ",repos,"\n\n",ARCHS_LABEL,": ",archs,"\n\n",SIGNATURE_LABEL," ",sign,"\n\n",SIGN_STATUS_LABEL,": ",sign_status,NULL) + #define yon_generate_key_command(type,name,email,strength,comment,expire,password) yon_char_unite("gpg --batch --gen-key <