Add pakcage window fixes

pull/41/head
parent 7861614253
commit bc7eb46817

@ -71,7 +71,7 @@ void on_storage_open(GtkWidget *self, storage_config_window *window){
} }
yon_char_parsed_free(repos_list,repos_size); yon_char_parsed_free(repos_list,repos_size);
} else { } else {
yon_window_config_add_custom_parameter(path,"storage_info","",YON_TYPE_STRING); yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING);
} }
} }
} }
@ -93,7 +93,7 @@ void on_storage_create(GtkWidget *self, storage_config_window *window){
gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1); gtk_tree_store_set(window->storages_copy,&iter,2,name,3,path,-1);
gtk_combo_box_set_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&itar); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&itar);
gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); gtk_entry_set_text(GTK_ENTRY(window->AddEntry),"");
yon_window_config_add_custom_parameter(path,"storage_info","",YON_TYPE_STRING); yon_window_config_add_instant_parameter(path,"storage_info","",YON_TYPE_STRING);
} }
} }
yon_storage_config_update(window); yon_storage_config_update(window);
@ -166,7 +166,7 @@ void on_repo_add(GtkWidget *self, storage_config_window *window){
if (yon_char_parsed_check_exist(old_repos_parsed,old_repos_size,child_path)==-1){ if (yon_char_parsed_check_exist(old_repos_parsed,old_repos_size,child_path)==-1){
yon_char_parsed_add_or_create_if_exists(old_repos_parsed,&old_repos_size,child_path); yon_char_parsed_add_or_create_if_exists(old_repos_parsed,&old_repos_size,child_path);
} }
yon_window_config_add_custom_parameter(path,"storage_info",yon_char_parsed_to_string(old_repos_parsed,old_repos_size,","),YON_TYPE_STRING); yon_window_config_add_instant_parameter(path,"storage_info",yon_char_parsed_to_string(old_repos_parsed,old_repos_size,","),YON_TYPE_STRING);
yon_char_parsed_free(old_repos_parsed,old_repos_size); yon_char_parsed_free(old_repos_parsed,old_repos_size);
yon_launch(create_storage_command(path, new_repo)); yon_launch(create_storage_command(path, new_repo));
int size; int size;
@ -191,7 +191,7 @@ void on_repo_add(GtkWidget *self, storage_config_window *window){
} }
} }
closedir(current_dir); closedir(current_dir);
yon_window_config_add_custom_parameter(arch_path,"package_info",yon_char_parsed_to_string(final,size,","),YON_TYPE_STRING); yon_window_config_add_instant_parameter(arch_path,"package_info",yon_char_parsed_to_string(final,size,","),YON_TYPE_STRING);
} }
} }
yon_char_parsed_free(dirs,size); yon_char_parsed_free(dirs,size);
@ -264,6 +264,9 @@ void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){
gtk_widget_show(window->MainWindow); gtk_widget_show(window->MainWindow);
} }
//repo-move window
//repo-add window section //repo-add window section
gboolean yon_storage_filter_func(GtkTreeModel *model, gboolean yon_storage_filter_func(GtkTreeModel *model,
GtkTreeIter *iter, GtkTreeIter *iter,
@ -275,6 +278,7 @@ gboolean yon_storage_filter_func(GtkTreeModel *model,
} }
config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level){ config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level){
(*size)=0;
config_str final = NULL; config_str final = NULL;
GtkTreePath *path=NULL, *parent_path=NULL; GtkTreePath *path=NULL, *parent_path=NULL;
GtkTreeIter iter; GtkTreeIter iter;
@ -348,16 +352,14 @@ void on_add_target_package_selection_changed(GtkWidget *target,repo_add_window *
if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){
char *curpath; char *curpath;
gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&curpath,-1); gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&curpath,-1);
char *packages;
yon_window_config_get_parameter("package_info",curpath,&packages,YON_TYPE_STRING);
if (!yon_char_is_empty(packages)){
int size; int size;
config_str parsed = yon_char_parse(packages,&size,","); config_str parsed = yon_file_ls(curpath,&size);
for (int i=0;i<size;i++){ for (int i=0;i<size;i++){
if (strstr(parsed[i],".tar.")&&!strstr(parsed[i],".files.")&&!strstr(parsed[i],".db.")&&!strstr(parsed[i],".sig")){
char *full_path_package = yon_char_unite(curpath,"/",parsed[i],NULL); char *full_path_package = yon_char_unite(curpath,"/",parsed[i],NULL);
char *name = yon_char_new(parsed[i]); char *name = yon_char_new(parsed[i]);
gtk_list_store_append(window->PackagesList,&iter); gtk_list_store_append(window->PackagesList,&iter);
gtk_list_store_set(window->PackagesList,&iter,1,parsed[i],2,full_path_package,-1); gtk_list_store_set(window->PackagesList,&iter,1,parsed[i],2,full_path_package,3,0,-1);
free(full_path_package); free(full_path_package);
} }
} }
@ -376,7 +378,7 @@ void on_add_package(GtkWidget *self, repo_add_window *window){
if (responce == GTK_RESPONSE_ACCEPT){ if (responce == GTK_RESPONSE_ACCEPT){
char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo));
char *path; char *path;
GtkTreeIter iter,itar; GtkTreeIter iter,itar,itor;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id);
gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&path,-1); gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&path,-1);
char *packages; char *packages;
@ -389,17 +391,45 @@ void on_add_package(GtkWidget *self, repo_add_window *window){
char *name = yon_char_new(current); char *name = yon_char_new(current);
free(yon_char_divide(name,yon_char_find_last(name,'/'))); free(yon_char_divide(name,yon_char_find_last(name,'/')));
if (yon_char_parsed_check_exist(parsed,size,current)==-1){ if (yon_char_parsed_check_exist(parsed,size,current)==-1){
char *repo_store_path = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo));
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&itor,repo_store_path);
char *repo_name;
gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itor,3,&repo_name,-1);
char *repo_pack = yon_char_divide(repo_name,yon_char_find_last(repo_name,'/'));
yon_debug_output("%s\n",add_packages_command(repo_pack,repo_name,current));
if (!system(add_packages_command(repo_pack,repo_name,current))){
gtk_list_store_append(window->PackagesList,&itar); gtk_list_store_append(window->PackagesList,&itar);
gtk_list_store_set(window->PackagesList,&itar,1,name,2,current,-1); gtk_list_store_set(window->PackagesList,&itar,1,name,2,current,3,1,-1);
yon_char_parsed_add_or_create_if_exists(parsed,&size,name);
yon_window_config_add_instant_parameter(path,"package_info",yon_char_parsed_to_string(parsed,size,","),YON_TYPE_STRING);
} }
} }
} }
}
gtk_widget_destroy(dialog); gtk_widget_destroy(dialog);
} }
void on_remove_package(){ void on_remove_package(GtkWidget *self, repo_add_window *window){
char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo));
char *arch = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo));
char *repo;
char *path;
GtkTreeModel *model;
GtkTreeIter iter,itar,itor;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&itor,arch);
gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itor,3,&arch,-1);
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id);
gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&repo,3,&path,-1);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&itar)){
char *cur_name, *cur_path;
gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&itar,1,&cur_name,2,&cur_path,-1);
char *command = remove_packages_command(arch,repo,cur_name);
yon_debug_output("%s\n",command);
yon_launch(command);
on_add_target_package_selection_changed(window->ArchitectureCombo,window);
}
} }
void on_add_selection_changed(GtkWidget *self, repo_add_window *window){ void on_add_selection_changed(GtkWidget *self, repo_add_window *window){
@ -436,13 +466,15 @@ repo_add_window *yon_repo_add_window_new(){
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->TestTree = yon_gtk_builder_get_widget(builder,"TestTree"); window->TestTree = yon_gtk_builder_get_widget(builder,"TestTree");
window->PackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PackagesList")); window->PackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PackagesList"));
window->tree_copy = gtk_tree_store_new(6,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING); window->tree_copy = gtk_tree_store_new(7,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT);
yon_gtk_tree_store_copy_full(main_config.tree_store,window->tree_copy); yon_gtk_tree_store_copy_full(main_config.tree_store,window->tree_copy);
window->storage_filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); window->storage_filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL);
window->repo_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); window->repo_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL);
window->arch_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); window->arch_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL);
window->package_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL); window->package_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(window->tree_copy),NULL);
gtk_tree_view_set_model(GTK_TREE_VIEW(window->TestTree),GTK_TREE_MODEL(window->tree_copy)); gtk_tree_view_set_model(GTK_TREE_VIEW(window->TestTree),GTK_TREE_MODEL(window->tree_copy));
window->added_packages_archs = NULL;
window->removed_packages_archs = NULL;
g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); 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->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window);
@ -477,6 +509,15 @@ void on_move_clicked(GtkWidget *self, main_window *widgets){
gtk_widget_show(window->MoveSourceFrame); gtk_widget_show(window->MoveSourceFrame);
gtk_widget_show(window->MoveTargetFrame); gtk_widget_show(window->MoveTargetFrame);
gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo));
GtkTreeIter iter;
for_iter (window->tree_copy,&iter){
char *current;
gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&current,-1);
if (!yon_char_is_empty(current)){
char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StorageCombo),path,current);
}
}
gtk_widget_show(window->MainWindow); gtk_widget_show(window->MainWindow);
} }
@ -520,32 +561,16 @@ void yon_config_load_update(main_window *widgets){
free(yon_char_divide(nm,yon_char_find_last(nm,'/'))); free(yon_char_divide(nm,yon_char_find_last(nm,'/')));
gtk_tree_store_append(widgets->RepoList,&itar,&iter); gtk_tree_store_append(widgets->RepoList,&itar,&iter);
gtk_tree_store_set(widgets->RepoList,&itar,3,name_parsed[j],2,nm,-1); gtk_tree_store_set(widgets->RepoList,&itar,3,name_parsed[j],2,nm,-1);
free(nm);
int size; int size;
config_str dirs = yon_file_list_dirs(name_parsed[j],&size); config_str dirs = yon_file_list_dirs(name_parsed[j],&size);
for (int k=0;k<size;k++){ for (int k=0;k<size;k++){
if (strcmp(dirs[k],"pool")&&strcmp(dirs[k],nm)){
char *arch_path = yon_char_unite(name_parsed[j],"/",dirs[k],NULL); char *arch_path = yon_char_unite(name_parsed[j],"/",dirs[k],NULL);
gtk_tree_store_append(widgets->RepoList,&iter,&itar); gtk_tree_store_append(widgets->RepoList,&iter,&itar);
gtk_tree_store_set(widgets->RepoList,&iter,2,dirs[k],3,arch_path,-1); gtk_tree_store_set(widgets->RepoList,&iter,2,dirs[k],3,arch_path,-1);
if (!yon_char_is_empty(arch_path)&&!access(arch_path,F_OK)){
config_str final = NULL;
int final_size=0;
DIR *current_dir = opendir(arch_path);
struct dirent* cur_dir;
while ((cur_dir=readdir(current_dir))){
if (strlen(cur_dir->d_name)>8){
char *extension = yon_char_new(cur_dir->d_name);
free(yon_char_divide(extension,yon_char_find_last(extension,'.')-4));
if ((strcmp(cur_dir->d_name, ".") && strcmp(cur_dir->d_name, ".."))&&strstr(extension,"tar.")){
yon_char_parsed_add_or_create_if_exists(final,&final_size,cur_dir->d_name);
}
}
}
closedir(current_dir);
yon_window_config_add_custom_parameter(arch_path,"package_info",yon_char_parsed_to_string(final,size,","),YON_TYPE_STRING);
} }
} }
free(nm);
} }
yon_char_parsed_free(name_parsed,parsed_size); yon_char_parsed_free(name_parsed,parsed_size);
} }
@ -566,23 +591,34 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){
gtk_tree_model_get(model, &iter,3,&target,-1); gtk_tree_model_get(model, &iter,3,&target,-1);
switch (depth){ switch (depth){
case 1:{ case 1:{
int lvlsize;
config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,2);
for (int i=0;i<lvlsize;i++){
gtk_list_store_append(widgets->RepoFileList,&itar);
gtk_list_store_set(widgets->RepoFileList,&itar,1,level[i],-1);
}
} }
break; break;
case 2:{ case 2:{
int lvlsize;
config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,3);
for (int i=0;i<lvlsize;i++){
gtk_list_store_append(widgets->RepoFileList,&itar);
gtk_list_store_set(widgets->RepoFileList,&itar,1,level[i],-1);
}
} }
break; break;
case 3:{ case 3:{
char *packages; char *packages;
int size; int size;
yon_window_config_get_parameter("package_info",target,&packages,YON_TYPE_STRING); config_str parsed = yon_file_ls(target,&size);
if (!yon_char_is_empty(packages)){
config_str parsed = yon_char_parse(packages,&size,",");
for (int i=0;i<size;i++){ for (int i=0;i<size;i++){
if (strstr(parsed[i],".tar.")&&!strstr(parsed[i],".files.")&&!strstr(parsed[i],".db.")&&!strstr(parsed[i],".sig")){
gtk_list_store_append(widgets->RepoFileList,&itar); gtk_list_store_append(widgets->RepoFileList,&itar);
char *name = yon_char_new(parsed[i]); char *name = yon_char_new(parsed[i]);
char *temp = yon_char_divide_search(name,"-",-1); char *temp = yon_char_divide_search(name,".",-1);
free(name); free(name);
name=temp; name=temp;
gtk_list_store_set(widgets->RepoFileList,&itar,1,name,3,parsed[i],-1); gtk_list_store_set(widgets->RepoFileList,&itar,1,name,3,parsed[i],-1);

@ -45,6 +45,8 @@ typedef char* string;
#define get_gpg_keys_command yon_char_unite(yon_ubl_check_root()==1 ? yon_char_unite("su - ",yon_ubl_root_user_get()," -c \"gpg --list-signatures\"",NULL):"gpg --list-signatures"," | grep '^sig 3' | cut -d' ' -f10,11,13- | sort -u |sed -e 's/[0-9]*-[0-9]*-[0-9]* //g'",NULL) #define get_gpg_keys_command yon_char_unite(yon_ubl_check_root()==1 ? yon_char_unite("su - ",yon_ubl_root_user_get()," -c \"gpg --list-signatures\"",NULL):"gpg --list-signatures"," | grep '^sig 3' | cut -d' ' -f10,11,13- | sort -u |sed -e 's/[0-9]*-[0-9]*-[0-9]* //g'",NULL)
#define create_storage_command(path,name) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"'",NULL) #define create_storage_command(path,name) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"'",NULL)
#define add_packages_command(path,name,packages_path) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"' ",packages_path,NULL)
#define remove_packages_command(path,name,packages_path) yon_char_unite("repo-manager remove -r '",name,"' -d '", path,"' ",packages_path,NULL)
string version_application; string version_application;
@ -104,6 +106,9 @@ typedef struct {
GtkTreeModel *repo_filter; GtkTreeModel *repo_filter;
GtkTreeModel *arch_filter; GtkTreeModel *arch_filter;
GtkTreeModel *package_filter; GtkTreeModel *package_filter;
dictionary *added_packages_archs;
dictionary *removed_packages_archs;
} repo_add_window; } repo_add_window;
typedef struct { typedef struct {

@ -11,6 +11,8 @@
<column type="gchararray"/> <column type="gchararray"/>
<!-- column-name Path --> <!-- column-name Path -->
<column type="gchararray"/> <column type="gchararray"/>
<!-- column-name Status -->
<column type="gint"/>
</columns> </columns>
</object> </object>
<object class="GtkImage" id="image1"> <object class="GtkImage" id="image1">

Loading…
Cancel
Save