diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 8326c24..0fce1b5 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -77,6 +77,7 @@ set(SOURCE_FILES ubl-settings-repomanager-remove.c ubl-settings-repomanager-storage-list.c ubl-settings-repomanager-storage-window.c + ubl-settings-repomanager-key.c ubl-settings-repomanager.h ubl-strings.h ) diff --git a/source/ubl-settings-repomanager-add-window.c b/source/ubl-settings-repomanager-add-window.c index 6c83bf8..f0743f7 100644 --- a/source/ubl-settings-repomanager-add-window.c +++ b/source/ubl-settings-repomanager-add-window.c @@ -249,6 +249,28 @@ repo_add_window *yon_repo_add_window_new(){ return window; } +void yon_add_window_add_chosen_packages(main_window *widgets, repo_add_window *window){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->RepoFileList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL,&iter)){ + char *target, *path; + gtk_tree_model_get(model,&iter,1,&target,2,&path,-1); + gtk_list_store_append(window->PackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,target,2,path,-1); + } + GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoPackagesTree)),NULL); + GList *liter; + if (list){ + for (liter=list;liter;liter=liter->next){ + gtk_tree_model_get_iter(model,&iter,(GtkTreePath*)liter->data); + char *target, *path; + gtk_tree_model_get(model,&iter,2,&target,-1); + gtk_list_store_append(window->PackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,target,-1); + } + } +} + void on_add_clicked(GtkWidget *self, main_window *widgets){ repo_add_window *window = yon_repo_add_window_new(); yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),ADD_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); @@ -286,24 +308,6 @@ void on_add_clicked(GtkWidget *self, main_window *widgets){ // g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); yon_add_window_set_selected(widgets,window); - GtkTreeModel *model; - GList *list = NULL; - char *full_path; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&full_path,-1); - if (list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoPackagesTree)),&model)){ - for (int i=0; iPackagesList,&itar); - char *temp = yon_char_unite(full_path,"/",path,NULL); - free(full_path); - full_path = temp; - gtk_list_store_set(window->PackagesList,&itar,1,path,2,full_path,-1); - } - } - } + // yon_add_window_add_chosen_packages(widgets,window); gtk_widget_show(window->MainWindow); } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-key.c b/source/ubl-settings-repomanager-key.c new file mode 100644 index 0000000..66bcc74 --- /dev/null +++ b/source/ubl-settings-repomanager-key.c @@ -0,0 +1,173 @@ +#include "ubl-settings-repomanager.h" + + +void on_calendar_open(GtkWidget *self,key_creation_window *window){ + yon_calendar_popover_open(GTK_ENTRY(window->ExpireEntry),self); +} + +void on_key_generate_accept(GtkWidget *self, key_creation_window* window){ + const char *name = gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); + const char *type = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->EncryptionCombo)); + const char *email = gtk_entry_get_text(GTK_ENTRY(window->EmailEntry)); + char *strength = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->KeyStrengthSpin))); + const char *comment = gtk_entry_get_text(GTK_ENTRY(window->CommentsEntry)); + if (!yon_char_is_empty(name)&&strlen(name)<5){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_SHORT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->NameEntry); + return; + } + GtkWidget *highlight_target=NULL; + if (yon_char_is_empty(name)){ + highlight_target=window->NameEntry; + } else if (yon_char_is_empty(type)){ + highlight_target=window->EncryptionCombo; + } else if (yon_char_is_empty(email)){ + highlight_target=window->EmailEntry; + } else if (yon_char_is_empty(strength)){ + highlight_target=window->KeyStrengthSpin; + } + if (highlight_target){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(highlight_target); + return; + } + char *expire = NULL; + if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ExpireCombo))==1){ + GDateTime *datetime = g_date_time_new_from_unix_local(yon_calendar_get_last_date()); + expire = g_date_time_format(datetime,"%Y%m%dT000000"); + g_date_time_unref(datetime); + + } + const char *password = gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + const char *password_confirm = gtk_entry_get_text(GTK_ENTRY(window->PasswordConfirmationEntry)); + int ex_status=0; + if (yon_char_is_empty(password)&&yon_char_is_empty(password_confirm)){ + yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password)); + ex_status = system(yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password))); + } else if (!strcmp(password,password_confirm)){ + yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password)); + ex_status = system(yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password))); + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_INCORRECT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->PasswordConfirmationEntry); + yon_ubl_status_highlight_incorrect(window->PasswordEntry); + return; + } + if (!ex_status) + yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + else + yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_widget_destroy(window->Window); + yon_sign_list_update(); +} + +key_creation_window *yon_key_creation_window_new(){ + key_creation_window *window = malloc(sizeof(key_creation_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_key); + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); + window->EmailEntry = yon_gtk_builder_get_widget(builder,"EmailEntry"); + window->CommentsEntry = yon_gtk_builder_get_widget(builder,"CommentsEntry"); + window->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); + window->KeyStrengthSpin = yon_gtk_builder_get_widget(builder,"KeyStrengthSpin"); + window->ExpireCombo = yon_gtk_builder_get_widget(builder,"ExpireCombo"); + window->ExpireEntry = yon_gtk_builder_get_widget(builder,"ExpireEntry"); + window->ExpireButton = yon_gtk_builder_get_widget(builder,"ExpireButton"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); + window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); + window->PasswordConfirmationEntry = yon_gtk_builder_get_widget(builder,"PasswordConfirmationEntry"); + + yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordConfirmationEntry)); + yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); + + g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireButton); + g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireEntry); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->ExpireButton),"clicked",G_CALLBACK(on_calendar_open),window); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window); + + int size; + config_str encription_keys = yon_file_open(key_encription_path,&size); + window->expire_time=0; + + for (int i=1;iEncryptionCombo),parsed[2],parsed[0]); + yon_char_parsed_free(parsed,parsed_size); + } + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->EncryptionCombo),"RSA"); + return window; +} + +void on_key_clicked(GtkWidget *self, main_window *widgets){ + key_creation_window *window = yon_key_creation_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEY_CREATION_TITLE_LABEL,icon_path,"key-create-window"); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),KEY_CREATION_TITLE_LABEL); + gtk_widget_show(window->Window); +} + + + +void on_sign_window_accept(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + sign_window *window = yon_dictionary_get_data(dict->first->next,sign_window*); + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ + char *arch; + char *repo; + char *storage; + char *signature = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->SignCombo)); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&arch,-1); + char *full_path = yon_char_new(arch); + repo = yon_char_divide(arch,yon_char_find_last(arch,'/')); + storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); + storage = yon_char_append(storage,"/"); + GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL); + char *targets = ""; + for (int i=0;iRepoFileList),&iter,(GtkTreePath*)g_list_nth_data(list,i)); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoFileList),&iter,2,&pack,-1); + char *temp = yon_char_unite(targets, " ", full_path,"/",pack,NULL); + if (!yon_char_is_empty(targets)) free(targets); + targets=temp; + } + if (!system(yon_debug_output("%s\n",yon_sign_package(storage,repo,arch,targets,signature)))){ + yon_ubl_status_box_render(SIGN_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + on_subwindow_close(window->Window); + } +} + +sign_window *yon_sign_window_new(){ + sign_window *window = malloc(sizeof(sign_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_sign); + + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->SignCombo = yon_gtk_builder_get_widget(builder,"SignCombo"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + + return window; +} + +void on_packages_sign(GtkWidget *self, main_window *widgets){ + sign_window *window = yon_sign_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),SIGNATURE_TITLE_LABEL,icon_path,"sign-window"); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->SignCombo)); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->SignButton),"clicked",G_CALLBACK(on_sign_window_accept),dict); + gtk_widget_show(window->Window); +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager-move.c b/source/ubl-settings-repomanager-move.c index c0849fc..1e7cb42 100644 --- a/source/ubl-settings-repomanager-move.c +++ b/source/ubl-settings-repomanager-move.c @@ -83,11 +83,12 @@ void on_move_add_accept(GtkWidget *self, dictionary *dict){ if (strstr(files[k],".pkg.tar")&&!strstr(files[k],".sig")){ GtkTreeIter iter; int temp_size; - config_str name = yon_config_load(yon_get_package_name_from_filename(files[k]),&temp_size); - yon_char_remove_last_symbol(name[0],'\n'); char *full_path = yon_char_unite(packages[i],"/",files[k],NULL); + config_str name = yon_config_load(yon_get_package_name_from_filename(full_path),&temp_size); + if (name&&!yon_char_is_empty(name[0])) + yon_char_remove_last_symbol(name[0],'\n'); gtk_list_store_append(window->PackagesList,&iter); - gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,full_path,-1); + gtk_list_store_set(window->PackagesList,&iter,1,name&&!yon_char_is_empty(name[0])?name[0]:"",2,full_path,-1); free(full_path); } } @@ -159,7 +160,7 @@ void on_move_add_package(GtkWidget *self, repo_add_window *window){ 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->MainFileChooser),"current-folder-changed",G_CALLBACK(on_folder_changed),dict); + yon_file_chooser_set_root(dialog,target); if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ on_move_add_accept(self,dict); } @@ -308,6 +309,7 @@ repo_add_window *on_move_clicked(GtkWidget *self, main_window *widgets){ g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_move_accept),dict); // g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_repo_sign_load),window); yon_move_window_set_selected(widgets,window); + yon_add_window_add_chosen_packages(widgets,window); gtk_widget_show(window->MainWindow); return window; } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-remove.c b/source/ubl-settings-repomanager-remove.c index 70ad2f3..e27b530 100644 --- a/source/ubl-settings-repomanager-remove.c +++ b/source/ubl-settings-repomanager-remove.c @@ -1,4 +1,4 @@ -// #include "ubl-settings-repomanager.h" +#include "ubl-settings-repomanager.h" // void on_remove_arch_selection_changed(GtkWidget *self, repo_add_window *window){ @@ -9,126 +9,109 @@ // } // } -// void on_remove_accept(GtkWidget *self, dictionary *dict){ -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); -// GtkTreeModel *model; -// GtkTreeIter iter; -// 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)); - -// 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); -// int size=0; -// 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 *sign = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); -// char *command; -// if (yon_char_is_empty(sign)){ -// command = yon_delete_packages_command(storage_path,arch,repo,yon_char_parsed_to_string(packages,size," ")); -// } else { -// command = yon_delete_packages_sign_command(storage_path,arch,repo,sign,yon_char_parsed_to_string(packages,size," ")); -// } -// yon_debug_output("%s\n",command); -// if (!system(command)){ -// yon_ubl_status_box_render(PACKAGES_REMOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); -// gtk_tree_store_clear(widgets->RepoList); -// yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); - -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); -// if (!yon_char_is_empty(id)){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); -// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); -// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); -// on_main_tree_selection_changed(NULL,widgets); -// } -// } -// yon_config_load_update(widgets); -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// }else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// gtk_widget_destroy(window->MainWindow); -// } +void on_remove_accept(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); + const char *storage_path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + const char *repo = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); + const char *arch = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); + const char *sign = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); -// 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_new(); -// yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); -// gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); -// 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); -// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); -// gtk_widget_show(dialog->Window); -// } -// } + if (!yon_char_is_empty(storage_path)){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); + int size; + config_str packages=NULL; + for_iter(model,&iter){ + char *target; + gtk_tree_model_get(model,&iter,2,&target,-1); + char *filename = yon_char_divide(target,yon_char_find_last(target,'/')); + yon_char_parsed_add_or_create_if_exists(packages,&size,target); + } + if (size){ + char *final = yon_char_parsed_to_string(packages,size," "); + char *command = remove_packages_command(storage_path,arch,repo,final,sign); + if (system(yon_debug_output("%s\n",command))){ -// repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets){ -// repo_add_window *window = yon_repo_add_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),REMOVE_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); -// gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGES_TITLE_LABEL); -// GtkTreeIter iter; -// for_iter (window->tree_copy,&iter){ -// char *current; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-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_label_set_text(GTK_LABEL(window->PackagesToAddLabel),REMOVE_PACKAGES_LABEL); -// yon_sign_list_update(); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); -// gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); - -// gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); - -// gtk_button_set_label(GTK_BUTTON(window->AddButton),REMOVE_LABEL); -// dictionary *dict = NULL; -// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); -// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); -// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),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->ArchitectureCombo),"changed",G_CALLBACK(on_remove_arch_selection_changed),window); -// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),dict); -// 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); -// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); -// yon_add_window_set_selected(widgets,window); -// gtk_widget_show(window->MainWindow); -// return window; -// } \ No newline at end of file + } + } + } + gtk_widget_destroy(window->MainWindow); + free(window); + yon_interface_update(widgets); +} + +void on_remove_add_package(GtkWidget *self, repo_add_window *window){ + if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))>-1){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); + gtk_label_set_text(GTK_LABEL(dialog->HeaderTopic),CHOSE_PACKAGES_TITLE_LABEL); + 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->MainFileChooser),filter); + GtkTreeIter iter,itar; + char *target; + const char* storage_path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + storage_struct *storage = g_hash_table_lookup(main_config.storages,storage_path); + if (storage){ + const char *repo_name = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); + repo_struct *repo = g_hash_table_lookup(storage->repos,repo_name); + if (repo){ + target = repo->path; + } + gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog->MainFileChooser),1); + gtk_widget_show(dialog->ChooseFolderCheck); + + } + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),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); + + yon_file_chooser_set_root(dialog,target); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + on_move_add_accept(self,dict); + } + } +} + + +repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets){ + repo_add_window *window = yon_repo_add_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),REMOVE_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGES_TITLE_LABEL); + gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),REMOVE_PACKAGES_LABEL); + + int size; + config_str storages = (config_str)g_hash_table_get_keys_as_array(main_config.storages,&size); + for (int i=0;iStorageCombo),storages[i],storages[i]); + } + + yon_sign_list_update(); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); + + gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); + + gtk_button_set_label(GTK_BUTTON(window->AddButton),REMOVE_LABEL); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),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->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_selection_changed),window); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),dict); + 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); + // g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); + yon_add_window_set_selected(widgets,window); + yon_add_window_add_chosen_packages(widgets,window); + gtk_widget_show(window->MainWindow); + return window; +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index fc33db7..f2f2486 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -5,34 +5,6 @@ config main_config; // // filechooser window section -// void on_file_chooser_entry_changed(GtkEntry *self, file_chooser_window *window){ -// const char *text = gtk_entry_get_text(self); -// GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(window->FileChooserWidget)); -// gtk_file_chooser_remove_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); -// filter = gtk_file_filter_new(); -// char *pattern = !yon_char_is_empty(text)?yon_char_unite("*",text,"*.pkg.tar*[^.sig]",NULL) : "*.pkg.tar*[^.sig]"; -// gtk_file_filter_add_pattern(filter,pattern); -// gtk_file_filter_set_name(filter,"*.pkg.tar*"); -// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); -// if (!yon_char_is_empty(text)) free(pattern); -// } - -// file_chooser_window *yon_file_chooser_new(){ -// file_chooser_window *window = malloc(sizeof(file_chooser_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_filechooser); -// window->Window = yon_gtk_builder_get_widget(builder,"Window"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel2"); -// window->ChooseButton = yon_gtk_builder_get_widget(builder,"ChooseButton"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); -// window->FileChooserWidget = yon_gtk_builder_get_widget(builder,"FileChooserWidget"); -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(window->NameEntry),"changed",G_CALLBACK(on_file_chooser_entry_changed),window); - -// return window; -// } - // // main window void on_folder_changed(GtkFileChooser *self, dictionary *dict){ @@ -77,7 +49,6 @@ void yon_remove_config_storages(char *key,storage_struct *storage,void*){ } int yon_storages_load(main_window *widgets){ - // g_hash_table_foreach_remove(main_config.storages,(GHRFunc)yon_remove_config_storages,NULL); g_hash_table_remove_all(main_config.storages); gsize size; @@ -138,90 +109,21 @@ void yon_interface_update(main_window *widgets){ gtk_tree_store_clear(widgets->RepoList); gtk_list_store_clear(widgets->RepoFileList); gtk_list_store_clear(widgets->RepoPackagesList); + GtkTreeIter iter; + GtkTreeModel *model; + GtkTreePath *path = NULL; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ + path = gtk_tree_model_get_path(model,&iter); + } yon_storages_load(widgets); g_hash_table_foreach(main_config.storages,(GHFunc)yon_repo_tree_build_storage,widgets); + if (path){ + gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),path); + gtk_tree_path_free(path); + } } -// void yon_config_load_update(main_window *widgets){ -// gtk_tree_store_clear(widgets->RepoList); -// gsize size=0; -// config_str storages = yon_window_config_get_section("storage_info",&size); -// GtkTreeIter iter,itar,childiter; -// for (int i=0;iRepoList,&iter,NULL); -// gtk_tree_store_set(widgets->RepoList,&iter,0,folder_no_edits,2,name,3,storages[i],-1); -// free(name); -// yon_window_config_get_parameter("storage_info",storages[i],&name,YON_TYPE_STRING); -// if (!yon_char_is_empty(name)){ -// int parsed_size; -// config_str name_parsed = yon_char_parse(name,&parsed_size,","); -// for (int j=0;jRepoList,&itar,&iter); -// gtk_tree_store_set(widgets->RepoList,&itar,2,nm,3,name_parsed[j],-1); -// int size; -// config_str dirs = yon_file_list_dirs(name_parsed[j],&size); -// for (int k=0;kRepoList,&childiter,&itar); -// gtk_tree_store_set(widgets->RepoList,&childiter,0,sign_status_image,2,dirs[k],3,arch_path,-1); -// } -// } -// free(nm); -// } -// yon_char_parsed_free(name_parsed,parsed_size); -// } - -// } -// if (size) -// yon_char_parsed_free(storages,size); -// } - -// 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; -// } // char *yon_signature_get(GtkTreeView *target, GtkTreeIter *iter){ // GtkTreeIter itar; @@ -387,115 +289,6 @@ void on_ubl_settings_update_launch(){ yon_launch_app_with_arguments(ubl_settings_update_command,NULL); } -// void on_calendar_open(GtkWidget *self,key_creation_window *window){ -// yon_calendar_popover_open(GTK_ENTRY(window->ExpireEntry),self); -// } - -// void on_key_generate_accept(GtkWidget *self, key_creation_window* window){ -// const char *name = gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); -// const char *type = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->EncryptionCombo)); -// const char *email = gtk_entry_get_text(GTK_ENTRY(window->EmailEntry)); -// char *strength = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->KeyStrengthSpin))); -// const char *comment = gtk_entry_get_text(GTK_ENTRY(window->CommentsEntry)); -// if (!yon_char_is_empty(name)&&strlen(name)<5){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_SHORT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// yon_ubl_status_highlight_incorrect(window->NameEntry); -// return; -// } -// GtkWidget *highlight_target=NULL; -// if (yon_char_is_empty(name)){ -// highlight_target=window->NameEntry; -// } else if (yon_char_is_empty(type)){ -// highlight_target=window->EncryptionCombo; -// } else if (yon_char_is_empty(email)){ -// highlight_target=window->EmailEntry; -// } else if (yon_char_is_empty(strength)){ -// highlight_target=window->KeyStrengthSpin; -// } -// if (highlight_target){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// yon_ubl_status_highlight_incorrect(highlight_target); -// return; -// } -// char *expire = NULL; -// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ExpireCombo))==1){ -// GDateTime *datetime = g_date_time_new_from_unix_local(yon_calendar_get_last_date()); -// expire = g_date_time_format(datetime,"%Y%m%dT000000"); -// g_date_time_unref(datetime); - -// } -// const char *password = gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); -// const char *password_confirm = gtk_entry_get_text(GTK_ENTRY(window->PasswordConfirmationEntry)); -// int ex_status=0; -// if (yon_char_is_empty(password)&&yon_char_is_empty(password_confirm)){ -// yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password)); -// ex_status = system(yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password))); -// } else if (!strcmp(password,password_confirm)){ -// yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password)); -// ex_status = system(yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password))); -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_INCORRECT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// yon_ubl_status_highlight_incorrect(window->PasswordConfirmationEntry); -// yon_ubl_status_highlight_incorrect(window->PasswordEntry); -// return; -// } -// if (!ex_status) -// yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// else -// yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); -// gtk_widget_destroy(window->Window); -// yon_sign_list_update(); -// } - -// key_creation_window *yon_key_creation_window_new(){ -// key_creation_window *window = malloc(sizeof(key_creation_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_key); -// window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); -// window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); -// window->EmailEntry = yon_gtk_builder_get_widget(builder,"EmailEntry"); -// window->CommentsEntry = yon_gtk_builder_get_widget(builder,"CommentsEntry"); -// window->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); -// window->KeyStrengthSpin = yon_gtk_builder_get_widget(builder,"KeyStrengthSpin"); -// window->ExpireCombo = yon_gtk_builder_get_widget(builder,"ExpireCombo"); -// window->ExpireEntry = yon_gtk_builder_get_widget(builder,"ExpireEntry"); -// window->ExpireButton = yon_gtk_builder_get_widget(builder,"ExpireButton"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); -// window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); -// window->PasswordConfirmationEntry = yon_gtk_builder_get_widget(builder,"PasswordConfirmationEntry"); - -// yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordConfirmationEntry)); -// yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); - -// g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireButton); -// g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireEntry); -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(window->ExpireButton),"clicked",G_CALLBACK(on_calendar_open),window); -// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window); - -// int size; -// config_str encription_keys = yon_file_open(key_encription_path,&size); -// window->expire_time=0; - -// for (int i=1;iEncryptionCombo),parsed[2],parsed[0]); -// yon_char_parsed_free(parsed,parsed_size); -// } -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->EncryptionCombo),"RSA"); -// return window; -// } - -// void on_key_clicked(GtkWidget *self, main_window *widgets){ -// key_creation_window *window = yon_key_creation_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEY_CREATION_TITLE_LABEL,icon_path,"key-create-window"); -// gtk_label_set_text(GTK_LABEL(window->HeadLabel),KEY_CREATION_TITLE_LABEL); -// gtk_widget_show(window->Window); -// } void on_tree_view_activate(GtkWidget *self, GtkTreePath* path, GtkTreeViewColumn* column, main_window *widgets){ gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),path); @@ -523,101 +316,18 @@ void on_update_clicked(GtkWidget *self, main_window *widgets){ yon_interface_update(widgets); } -// void on_sign_window_accept(GtkWidget *self, dictionary *dict){ -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// sign_window *window = yon_dictionary_get_data(dict->first->next,sign_window*); -// GtkTreeModel *model; -// GtkTreeIter iter; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ -// char *arch; -// char *repo; -// char *storage; -// char *signature = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->SignCombo)); -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&arch,-1); -// char *full_path = yon_char_new(arch); -// repo = yon_char_divide(arch,yon_char_find_last(arch,'/')); -// storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); -// storage = yon_char_append(storage,"/"); -// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL); -// char *targets = ""; -// for (int i=0;iRepoFileList),&iter,(GtkTreePath*)g_list_nth_data(list,i)); -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoFileList),&iter,2,&pack,-1); -// char *temp = yon_char_unite(targets, " ", full_path,"/",pack,NULL); -// if (!yon_char_is_empty(targets)) free(targets); -// targets=temp; -// } -// if (!system(yon_debug_output("%s\n",yon_sign_package(storage,repo,arch,targets,signature)))){ -// yon_ubl_status_box_render(SIGN_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// } -// on_subwindow_close(window->Window); -// } -// } - -// sign_window *yon_sign_window_new(){ -// sign_window *window = malloc(sizeof(sign_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_sign); - -// window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); -// window->SignCombo = yon_gtk_builder_get_widget(builder,"SignCombo"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); - -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - -// return window; -// } - -// void on_packages_sign(GtkWidget *self, main_window *widgets){ -// sign_window *window = yon_sign_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),SIGNATURE_TITLE_LABEL,icon_path,"sign-window"); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->SignCombo)); -// dictionary *dict = NULL; -// yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); -// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); -// g_signal_connect(G_OBJECT(window->SignButton),"clicked",G_CALLBACK(on_sign_window_accept),dict); -// gtk_widget_show(window->Window); -// } - -// int yon_tree_is_selected(void *widget){ -// main_window *widgets = (main_window*)widget; -// GtkTreeModel *model; -// GtkTreeIter iter, itar; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ -// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&itar); -// if (gtk_tree_store_iter_depth(widgets->RepoList,&itar)==2){ -// return 1; -// } -// } -// return 0; -// } - - -// void on_rmb_remove(GtkWidget *self, main_window *widgets){ - -// repo_add_window *window = on_remove_clicked(NULL,widgets); -// GtkTreeModel *model; -// GtkTreeIter iter; -// char *path; -// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter); -// gtk_tree_model_get(model,&iter,3,&path,-1); -// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model); -// for (int i=0;iPackagesList,&itar); -// gtk_list_store_set(window->PackagesList,&itar,1,name,2,full_path,-1); -// free(full_path); -// free(filename); -// free(name); -// } -// } +int yon_tree_is_selected(void *widget){ + main_window *widgets = (main_window*)widget; + GtkTreeModel *model; + GtkTreeIter iter, itar; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ + gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&itar); + if (gtk_tree_store_iter_depth(widgets->RepoList,&itar)==2){ + return 1; + } + } + return 0; +} main_window *yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); @@ -654,20 +364,20 @@ main_window *yon_main_window_complete(main_window *widgets){ gtk_style_context_add_class(gtk_widget_get_style_context(widgets->KeyMenuItem),"menuitemtop"); gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); - // g_signal_connect(G_OBJECT(widgets->KeyMenuItem),"activate",G_CALLBACK(on_key_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->KeyMenuItem),"activate",G_CALLBACK(on_key_clicked),widgets); } main_config.tree_store = widgets->RepoList; - // rmb_menu_window *rmb = yon_rmb_menu_setup(widgets->RepoFileTree, yon_tree_is_selected,widgets, - // SIGN_LABEL,lib_key_icon_name,G_CALLBACK(on_packages_sign),widgets, - // MOVE_PACKAGES_TITLE_LABEL,move_icon,G_CALLBACK(on_rmb_move),widgets, - // REMOVE_PACKAGES_TITLE_LABEL,remove_icon,G_CALLBACK(on_rmb_remove),widgets, - // NULL); + rmb_menu_window *rmb = yon_rmb_menu_setup(widgets->RepoFileTree, yon_tree_is_selected,widgets, + SIGN_LABEL,lib_key_icon_name,G_CALLBACK(on_packages_sign),widgets, + MOVE_PACKAGES_TITLE_LABEL,move_icon,G_CALLBACK(on_move_clicked),widgets, + REMOVE_PACKAGES_TITLE_LABEL,remove_icon,G_CALLBACK(on_remove_clicked),widgets, + NULL); g_signal_connect(G_OBJECT(widgets->DBConfigurationButton),"clicked",G_CALLBACK(on_storage_configure_clicked),widgets); g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_clicked),widgets); g_signal_connect(G_OBJECT(widgets->MoveButton),"clicked",G_CALLBACK(on_move_clicked),widgets); - // g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ReposTree),"cursor-changed",G_CALLBACK(on_main_tree_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->CloudButton),"clicked",G_CALLBACK(on_ubl_settings_update_launch),widgets); g_signal_connect(G_OBJECT(widgets->RepoFileTree),"cursor-changed",G_CALLBACK(on_package_selection_changed),widgets); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index cdb12e8..7867b0f 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -65,7 +65,7 @@ typedef char* string; #define add_packages_sign_command(path,arch,name,repo_sign,pack_sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -S ",repo_sign," -s ",pack_sign," ",packages_path,NULL) #define add_packages_package_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -s '",sign,"' ",packages_path,NULL) #define add_packages_repo_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -S '",sign,"' ",packages_path,NULL) -#define remove_packages_command(path,arch,name,packages_path) yon_char_unite("repo-manager remove -r '",name,"' -a '",arch,"' -d '", path,"' ",packages_path,NULL) +#define remove_packages_command(path,arch,name,packages_path,sign) yon_char_unite("repo-manager remove -r '",name,"' -a '",arch,"' -d '", path,"' ",sign?"-S ":"",sign?sign:"",sign?" ":"",packages_path,NULL) #define repo_sign_command(storage_path, repo, sign) yon_char_unite("repo-manager add -f -r '",repo,"' -d '", storage_path, "' -S ", sign,NULL) @@ -410,4 +410,7 @@ void yon_storage_struct_add_repo(storage_struct *storage,repo_struct *repo); void yon_repo_struct_sign(storage_struct *storage, repo_struct *repo,const char *sign); void yon_storage_remove(char *key, storage_struct *storage,void*); config_str yon_arch_struct_get_packages(arch_struct *arch, int *size); -void yon_move_window_set_selected(main_window *widgets, repo_add_window *window); \ No newline at end of file +void yon_move_window_set_selected(main_window *widgets, repo_add_window *window); +void on_move_add_package(GtkWidget *self, repo_add_window *window); +void on_packages_sign(GtkWidget *self, main_window *widgets); +void yon_add_window_add_chosen_packages(main_window *widgets, repo_add_window *window); \ No newline at end of file