From fc1994ffc27c1a6590ab0c03e2fe50cc56b0198d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 5 Jun 2024 11:24:56 +0600 Subject: [PATCH] Package loading rework; Moved but not linked packages now outputs at lower tree view --- source/ubl-settings-repomanager.c | 41 +++++++++++++++++++------------ source/ubl-settings-repomanager.h | 9 +++++-- ubl-settings-repomanager.glade | 18 ++++++++++---- 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 47cffb3..14add2d 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -1360,21 +1360,28 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),info); char *packages; int size; - config_str parsed = yon_file_ls(target,&size); + char *repo = yon_char_divide(target,yon_char_find_last(target,'/')); + char *storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); + char *command = yon_get_packages_command(storage,repo,target); + yon_debug_output("%s\n",command); + config_str parsed = yon_config_load(command,&size); for (int i=0;i0){ - gtk_list_store_append(widgets->RepoFileList,&itar); - yon_char_remove_last_symbol(load[0],'\n'); - char *temp = load[0]; - free(name); - name=temp; - gtk_list_store_set(widgets->RepoFileList,&itar,1,name,3,parsed[i],-1); - yon_char_parsed_free(load,load_size); + int line_size; + yon_char_remove_last_symbol(parsed[i],'\n'); + config_str line = yon_char_parse(parsed[i],&line_size,":"); + if (line[0][0]!='-'&&line[0][1]!='\0'){ + int load_size; + char *name = yon_char_unite(target,"/",parsed[i],NULL); + config_str load = yon_config_load(yon_get_package_name_from_filename(name),&load_size); + if (load_size>0){ + yon_char_remove_last_symbol(load[0],'\n'); + gtk_list_store_append(widgets->RepoFileList,&itar); + gtk_list_store_set(widgets->RepoFileList,&itar,0,line[1][0]!='-'&&line[1][1]!='\0'? document_added : "",1,line[0],2,line[1],-1); + yon_char_parsed_free(load,load_size); } + } else { + gtk_list_store_append(widgets->RepoPackagesList,&itar); + gtk_list_store_set(widgets->RepoPackagesList,&itar,0,document_deleted,1,line[1],-1); } } free(info); @@ -1403,10 +1410,12 @@ void on_package_selection_changed(GtkWidget *self, main_window *widgets){ break; case 2: char *path, *filename; - gtk_tree_model_get(model,&iter,3,&filename,-1); + gtk_tree_model_get(model,&iter,2,&filename,-1); gtk_tree_model_get(model2,&itar,3,&path,-1); int size; - config_str parsed = yon_config_load(get_package_info_command(yon_char_unite(path,"/",filename,NULL)),&size); + char *command = get_package_info_command(yon_char_unite(path,"/",filename,NULL)); + yon_debug_output("%s\n",command); + config_str parsed = yon_config_load(command,&size); char *full = yon_char_parsed_to_string(parsed,size,""); gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),full); yon_char_parsed_free(parsed,size); @@ -1580,7 +1589,7 @@ main_window *yon_main_window_complete(main_window *widgets){ widgets->RepoList = GTK_TREE_STORE(gtk_builder_get_object(builder,"RepoStore")); widgets->RepoFileList = GTK_LIST_STORE(gtk_builder_get_object(builder,"RepoFileList")); - widgets->RepoPackagesTre = GTK_LIST_STORE(gtk_builder_get_object(builder,"RepoPackagesTre")); + widgets->RepoPackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"RepoPackageList")); { widgets->KeyMenuItem = gtk_menu_item_new(); gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->AboutMenuItem)),widgets->KeyMenuItem); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 172d71f..6cb71ce 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -42,6 +42,9 @@ #define key_icon_name "com.ublinux.libublsettingsui-gtk3.key-symbolic" +#define package_linked_icon "com.ublinux.ubl-settings-repomanager.package-linked-symbolic" +#define package_unlinked_icon "com.ublinux.ubl-settings-repomanager.package-unlinked-symbolic" + #define key_encription_path "/usr/share/ubl-settings-repomanager/csv/crypt-key.csv" typedef char* string; @@ -60,7 +63,9 @@ typedef char* string; #define ubl_settings_update_command "ubl-settings-update" -#define yon_repo_get_signature(path, repo) yon_char_unite("repo-manager verify --quiet -d ",path," -r ",repo," .",NULL) +#define yon_get_packages_command(path,repo,arch) yon_char_unite("repo-manager show --quiet -d ",path," -a ",arch," -r ",repo," | sed -E 's/(\\S+)(\\s+)(\\S+)/\\1:\\3/g'",NULL) + +#define yon_repo_get_signature(path, repo) yon_char_unite("repo-manager verify --quiet -d ",path," -r ",repo," . 2>&1 | cut -d: -f2 |sed -E 's/ *//g'",NULL) #define yon_get_package_name_from_filename(path) yon_char_unite("[[ '",path,"' =~ (.*/)*(.*)-[^-]+-[^-]+-[^-]+\\.pkg\\.tar\\.[^.-]+ ]] && echo ${BASH_REMATCH[2]}",NULL) @@ -138,7 +143,7 @@ typedef struct { GtkWidget *KeyMenuItem; GtkTreeStore *RepoList; GtkListStore *RepoFileList; - GtkListStore *RepoPackagesTre; + GtkListStore *RepoPackagesList; } main_window; typedef struct { diff --git a/ubl-settings-repomanager.glade b/ubl-settings-repomanager.glade index c924304..f1c515f 100644 --- a/ubl-settings-repomanager.glade +++ b/ubl-settings-repomanager.glade @@ -14,12 +14,18 @@ - - + + + + + + + + @@ -110,7 +116,7 @@ True True True - Configure storages + Manage storages image2