diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 141e4fe..2b73504 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -363,6 +363,7 @@ void on_tree_selection_changed(GtkWidget *self,main_window *widgets){ gtk_widget_set_sensitive(widgets->DeleteButton,1); gtk_widget_set_sensitive(widgets->AddPackageButton,1); gtk_widget_set_sensitive(widgets->RemovePackageButton,0); + gtk_widget_set_sensitive(widgets->SignButton,1); gtk_widget_set_visible(widgets->NameBox,1); gtk_widget_set_visible(widgets->DependenceBox,0); gtk_widget_set_visible(widgets->VersionBox,0); @@ -375,6 +376,7 @@ void on_tree_selection_changed(GtkWidget *self,main_window *widgets){ gtk_widget_set_sensitive(widgets->DeleteButton,0); gtk_widget_set_sensitive(widgets->AddPackageButton,1); gtk_widget_set_sensitive(widgets->RemovePackageButton,1); + gtk_widget_set_sensitive(widgets->SignButton,1); gtk_widget_set_visible(widgets->NameBox,1); gtk_widget_set_visible(widgets->DependenceBox,1); gtk_widget_set_visible(widgets->VersionBox,1); @@ -388,6 +390,7 @@ void on_tree_selection_changed(GtkWidget *self,main_window *widgets){ gtk_widget_set_sensitive(widgets->DeleteButton,0); gtk_widget_set_sensitive(widgets->AddPackageButton,0); gtk_widget_set_sensitive(widgets->RemovePackageButton,0); + gtk_widget_set_sensitive(widgets->SignButton,0); gtk_widget_set_visible(widgets->NameBox,0); gtk_widget_set_visible(widgets->DependenceBox,0); gtk_widget_set_visible(widgets->VersionBox,0); @@ -405,7 +408,41 @@ void on_repo_add_new(GtkWidget *self, dictionary *dict){ name = window->path; if (!name||strcmp(name,"")!=0){ GtkTreeIter *iter = yon_repo_append(widgets, name, YON_REPO_LINE_REPO_TYPE); - gtk_tree_store_set(main_config.tree_store,iter,0,folder_added,2,window->path,3,1,-1); + struct dirent *de; + GtkTreeIter child; + char *reponame = yon_char_new(name); + yon_char_divide(reponame,yon_char_find_last(reponame,'/')); + char *searchpath = yon_char_unite(name,"/",reponame,"/x86_64/",NULL); + DIR *directory = opendir(searchpath); + if (directory){ + char *found_packages = NULL; + while ((de = readdir(directory))) + { + if (strstr(de->d_name,"pkg.tar.")&&!strstr(de->d_name,".sig")){ + char *filename = yon_char_unite(searchpath,"/",de->d_name,NULL); + FILE *file = popen(get_package_info_command(filename),"r"); + char *cur_string=g_malloc0(sizeof(char)*4096); + char *packname=NULL, *packver=NULL, *packarch=NULL, *packdepends=NULL; + while (fgets(cur_string,4096,file)){ + char *stringe = yon_char_divide_search(cur_string,"\n",-1); + char *p = yon_char_divide_search(stringe,":",-1); + if (strstr(p,"Name")) packname = yon_char_new(stringe); + else if (strstr(p,"Version")) packver = yon_char_new(stringe); + else if (strstr(p,"Architecture")) packarch = yon_char_new(stringe); + else if (strstr(p,"Depends On")) packdepends = yon_char_new(stringe); + else if (strstr(p,"Depends On")) packdepends = yon_char_new(stringe); + } + gtk_tree_store_append(main_config.tree_store,&child,iter); + gtk_tree_store_set(main_config.tree_store,&child,0,document_no_edits,1,yon_char_unite(packname,"-",packver,"-",packarch,NULL),2,filename,3,0,9,packname,10,packver,11,packarch,12,packdepends,-1); + found_packages = yon_char_unite(found_packages ? yon_char_append(found_packages,",") : "",de->d_name,NULL); + } + } + yon_window_config_add_custom_parameter(window->path,"repos",found_packages,YON_TYPE_STRING); + gtk_tree_store_set(main_config.tree_store,iter,0,folder_no_edits,2,window->path,3,0,9,reponame,-1); + } else { + gtk_tree_store_set(main_config.tree_store,iter,0,folder_added,2,window->path,3,1,9,reponame,-1); + + } yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } else { yon_ubl_status_box_render(EMPTY_NAME_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); @@ -539,19 +576,12 @@ void on_repo_configure_done(GtkWidget *self, dictionary *dict){ void on_repo_load_local(GtkWidget *self, main_window *widgets){ GtkFileFilter *file_filter = gtk_file_filter_new(); - GtkWidget *chooser = gtk_file_chooser_dialog_new(LOAD_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); - gtk_file_filter_add_pattern(file_filter,"*db.tar.gz"); - gtk_file_filter_set_name(file_filter, "*db.tar.gz"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser),file_filter); + GtkWidget *chooser = gtk_file_chooser_dialog_new(LOAD_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); gtk_window_set_icon_name(GTK_WINDOW(chooser),"com.ublinux.ubl-settings-repomanager"); int res = gtk_dialog_run(GTK_DIALOG(chooser)); if (res==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); - while (1){ - char *ret = yon_char_divide_search(filename,"/",-1); - if (strcmp(ret,filename)==0) break; - } yon_repo_append(widgets,filename,YON_REPO_LINE_REPO_TYPE); } on_close_subwindow(chooser); @@ -647,11 +677,17 @@ void yon_repo_remove(main_window *widgets){ } else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } +gboolean yon_check_file_pattern(GtkFileFilterInfo *info){ + if (!strstr(info->filename,".sig")&&strstr(info->filename,".pkg.tar.")) + return 1; + else return 0; +} + void yon_add_file(main_window *widgets){ GtkWidget *chooser = gtk_file_chooser_dialog_new(ADD_PACKAGE_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); GtkFileFilter *file_filter = gtk_file_filter_new(); file_filter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(file_filter,"*.pkg.tar.*"); + gtk_file_filter_add_custom(file_filter,GTK_FILE_FILTER_FILENAME,(GtkFileFilterFunc)yon_check_file_pattern,NULL,NULL); gtk_file_filter_set_name(file_filter,".pkg.tar.*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser),file_filter); file_filter = gtk_file_filter_new(); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 6d60768..0903905 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -46,7 +46,7 @@ #define SIGNATURE_LABEL _("Signature:") #define SIGN_LABEL _("Sign") -#define CREATE_REPO_LABEL _("Create repository") +#define CREATE_REPO_LABEL _("Open or create repository") #define OPEN_REPO_LABEL _("Open existing repository") #define CONFIGURE_REPO_LABEL _("Configure repository") #define DELETE_REPO_LABEL _("Delete repository") diff --git a/ubl-settings-repomanager.glade b/ubl-settings-repomanager.glade index 31e4f0a..b87000a 100644 --- a/ubl-settings-repomanager.glade +++ b/ubl-settings-repomanager.glade @@ -725,7 +725,7 @@ translated and supported by community. True True True - Create repository + Open or create repository image1