Storage configuration minor rework

pull/41/head
parent 311bc90705
commit 1d576f43a7

@ -11,10 +11,26 @@ void on_repo_removed(GtkWidget *self,storage_config_window *window){
char *repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0))); char *repo = (char*)gtk_entry_get_text(GTK_ENTRY(g_list_nth_data(list,0)));
GtkTreeIter iter, itar; GtkTreeIter iter, itar;
char *storage; char *storage;
gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter); char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo));
gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(window->StorageFilter),&itar,&iter); if (!yon_char_is_empty(id)){
gtk_tree_store_remove(GTK_TREE_STORE(window->storages_copy),&itar); gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->storages_copy),&iter,id);
int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter);
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){
char *target;
gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&target,-1);
if (!strcmp(target,repo)){
gtk_tree_store_remove(window->storages_copy,&itar);
break;
}
}
}
yon_storage_config_update(window); yon_storage_config_update(window);
// gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter);
// gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(window->StorageFilter),&itar,&iter);
// if (yon_gtk_tree_store_find_full(GTK_TREE_MODEL(window->storages_copy),&itar,2,repo)){
// gtk_tree_store_remove(GTK_TREE_STORE(window->storages_copy),&itar);
// yon_storage_config_update(window);
// }
} }
void yon_storage_config_update(storage_config_window *window){ void yon_storage_config_update(storage_config_window *window){
@ -22,14 +38,14 @@ void yon_storage_config_update(storage_config_window *window){
for (int i=0;i<g_list_length(children);i++){ for (int i=0;i<g_list_length(children);i++){
gtk_widget_destroy((GtkWidget*)g_list_nth_data(children,i)); gtk_widget_destroy((GtkWidget*)g_list_nth_data(children,i));
} }
GtkTreeIter iter,itar, childiter; GtkTreeIter iter,itar;
if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(window->StoragePathCombo),&iter)){ if (yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->StoragePathCombo),GTK_TREE_MODEL(window->storages_copy),&iter)){
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(window->StorageFilter),&itar,&iter);
if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&childiter,&itar)){ if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->storages_copy),&itar,&iter)){
int valid = 1; int valid = 1;
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&childiter)){ for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->storages_copy),&itar)){
char *repo; char *repo;
gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&childiter,2,&repo,-1); gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&itar,2,&repo,-1);
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_block); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_block);
GtkWidget *box = yon_gtk_builder_get_widget(builder,"MainBox"); GtkWidget *box = yon_gtk_builder_get_widget(builder,"MainBox");
gtk_box_pack_start(GTK_BOX(window->ReposBox),box,0,0,0); gtk_box_pack_start(GTK_BOX(window->ReposBox),box,0,0,0);
@ -41,15 +57,6 @@ void yon_storage_config_update(storage_config_window *window){
} }
} }
gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter){
g_return_val_if_fail(GTK_IS_COMBO_BOX(combo),0);
g_return_val_if_fail(GTK_IS_TREE_MODEL(model),0);
const char *id = gtk_combo_box_get_active_id(combo);
if (yon_char_is_empty(id)) return 0;
gtk_tree_model_get_iter_from_string(model,iter,id);
return 1;
}
// filechooser window section // filechooser window section
file_chooser_window *yon_file_chooser_window_new(){ file_chooser_window *yon_file_chooser_window_new(){
@ -268,7 +275,6 @@ storage_config_window *yon_storage_config_window_new(){
g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window); g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window);
g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window); g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window);
g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window); g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window);
gtk_combo_box_set_model(GTK_COMBO_BOX(window->StoragePathCombo),GTK_TREE_MODEL(window->storages_copy));
return window; return window;
} }
@ -277,9 +283,13 @@ void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){
storage_config_window *window = yon_storage_config_window_new(); storage_config_window *window = yon_storage_config_window_new();
yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"storage-configuration-window"); yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"storage-configuration-window");
gtk_window_set_transient_for(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window)); gtk_window_set_transient_for(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window));
window->StorageFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(window->storages_copy),NULL); GtkTreeIter iter,itar;
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(window->StorageFilter),yon_storage_filter_func,widgets,NULL); for_iter(window->storages_copy,&iter){
gtk_combo_box_set_model(GTK_COMBO_BOX(window->StoragePathCombo),GTK_TREE_MODEL(window->StorageFilter)); char *storage;
gtk_tree_model_get(GTK_TREE_MODEL(window->storages_copy),&iter,3,&storage,-1);
char *id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->storages_copy),&iter);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),id,storage);
}
dictionary *dict = NULL; 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,"widgets",widgets);
@ -292,9 +302,7 @@ void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){
//repo-add window section //repo-add window section
gboolean yon_storage_filter_func(GtkTreeModel *model, gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data){
GtkTreeIter *iter,
gpointer data){
GtkTreeIter parent; GtkTreeIter parent;
if (gtk_tree_model_iter_parent(model, &parent, iter)) if (gtk_tree_model_iter_parent(model, &parent, iter))
return 0; return 0;
@ -636,14 +644,20 @@ void on_move_add_accept(GtkWidget *self, dictionary *dict){
for (int k=0;k<size;k++){ for (int k=0;k<size;k++){
if (strstr(files[k],".pkg.tar")&&!strstr(files[k],".sig")){ if (strstr(files[k],".pkg.tar")&&!strstr(files[k],".sig")){
GtkTreeIter iter; 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');
gtk_list_store_append(window->PackagesList,&iter); gtk_list_store_append(window->PackagesList,&iter);
gtk_list_store_set(window->PackagesList,&iter,2,files[k],-1); gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,files[k],-1);
} }
} }
} else { } else {
GtkTreeIter iter; GtkTreeIter iter;
int temp_size;
config_str name = yon_config_load(yon_get_package_name_from_filename(path),&temp_size);
yon_char_remove_last_symbol(name[0],'\n');
gtk_list_store_append(window->PackagesList,&iter); gtk_list_store_append(window->PackagesList,&iter);
gtk_list_store_set(window->PackagesList,&iter,2,path,-1); gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,path,-1);
} }
} }
@ -672,7 +686,7 @@ void on_move_add_package(GtkWidget *self, repo_add_window *window){
yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),GTK_TREE_MODEL(window->tree_copy),&iter); yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),GTK_TREE_MODEL(window->tree_copy),&iter);
char *target; char *target;
gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&target,-1); 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->MoveSourceStorageEntry),GTK_TREE_MODEL(window->tree_copy),&itar); 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_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); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->FileChooserWidget),target);
@ -761,10 +775,45 @@ void on_move_clicked(GtkWidget *self, main_window *widgets){
gtk_widget_show(window->MainWindow); gtk_widget_show(window->MainWindow);
} }
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_window_new();
yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow");
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);
gtk_widget_show(dialog->Window);
}
}
void on_remove_arch_selection_changed(GtkWidget *self, repo_add_window *window){
if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))==-1){
gtk_widget_set_sensitive(window->AddPackageButton,0);
} else {
gtk_widget_set_sensitive(window->AddPackageButton,1);
}
}
void on_remove_accept(GtkWidget *self, repo_add_window *window){ void on_remove_accept(GtkWidget *self, repo_add_window *window){
GtkTreeModel *model; GtkTreeModel *model;
GtkTreeIter iter; GtkTreeIter iter;
char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); const char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo));
char *storage_path; char *storage_path;
char *repo = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); 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)); char *arch = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo));
@ -772,9 +821,6 @@ void on_remove_accept(GtkWidget *self, repo_add_window *window){
if (!yon_char_is_empty(storage_id)){ 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_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); gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&storage_path,-1);
}
GtkTreeIter iter;
int size; int size;
config_str packages=NULL; config_str packages=NULL;
for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){ for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){
@ -788,6 +834,7 @@ void on_remove_accept(GtkWidget *self, repo_add_window *window){
system(command); system(command);
} }
} }
}
void on_remove_clicked(GtkWidget *self, main_window *widgets){ void on_remove_clicked(GtkWidget *self, main_window *widgets){
repo_add_window *window = yon_repo_add_window_new(); repo_add_window *window = yon_repo_add_window_new();
@ -804,9 +851,9 @@ void on_remove_clicked(GtkWidget *self, main_window *widgets){
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);
// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_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),NULL); g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),window);
g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_move_add_package),window); 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->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window);
gtk_widget_show(window->MainWindow); gtk_widget_show(window->MainWindow);
} }

@ -52,6 +52,9 @@ typedef char* string;
#define yon_move_packages_command(storage,arch, source_repo, target_repo, packages) yon_char_unite("repo-manager move -d '",storage,"' -a '",arch,"' -R '",source_repo,"' -r '",target_repo,"' ", packages,NULL) #define yon_move_packages_command(storage,arch, source_repo, target_repo, packages) yon_char_unite("repo-manager move -d '",storage,"' -a '",arch,"' -R '",source_repo,"' -r '",target_repo,"' ", packages,NULL)
#define yon_delete_packages_command(storage,arch, target_repo, packages) yon_char_unite("repo-manager remove -d '",storage,"' -a '",arch,"' -r '",target_repo,"' ", packages,NULL) #define yon_delete_packages_command(storage,arch, target_repo, packages) yon_char_unite("repo-manager remove -d '",storage,"' -a '",arch,"' -r '",target_repo,"' ", packages,NULL)
#define yon_get_package_name_from_filename(path) yon_char_unite("[[ '",path,"' =~ (.*/)*(.*)-[^-]+-[^-]+-[^-]+\\.pkg\\.tar\\.[^.-]+ ]] && echo ${BASH_REMATCH[2]}",NULL)
#define yon_get_filename_from_package_name(target) yon_char_unite("find ${PATH} -maxdepth 1 -regextype egrep -regex \".*/",target,"-[^-]+-[^-]+-[^-]+\\.pkg\\.tar\\.[^-.]*\"",NULL)
string version_application; string version_application;
@ -148,3 +151,5 @@ typedef struct {
main_window *setup_window(); main_window *setup_window();
void yon_storage_config_update(storage_config_window *window); void yon_storage_config_update(storage_config_window *window);
void yon_storage_config_update(storage_config_window *window);

@ -28,12 +28,6 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.increase-symbolic</property> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.increase-symbolic</property>
</object> </object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkApplicationWindow" id="MainWindow"> <object class="GtkApplicationWindow" id="MainWindow">
<property name="width-request">450</property> <property name="width-request">450</property>
<property name="height-request">300</property> <property name="height-request">300</property>
@ -88,17 +82,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkComboBox" id="StoragePathCombo"> <object class="GtkComboBoxText" id="StoragePathCombo">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="model">liststore1</property>
<property name="active">0</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -364,4 +350,10 @@
</object> </object>
</child> </child>
</object> </object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
</columns>
</object>
</interface> </interface>

Loading…
Cancel
Save