Added dependences for deleting kernel dependences

pull/51/head
parent 92641ad721
commit 271ee4303c

@ -160,6 +160,46 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){
yon_terminal_integrated_start(terminal,command);
}
char *yon_package_dependent_get(char *target){
int size=0;
config_str parsed = NULL;
if (strstr(target,",")){
int final_size=0;
int targets_size=0;
config_str targets = yon_char_parse(target,&targets_size,",");
for (int i=0;i<targets_size;i++){
int deps_size = 0;
config_str deps = yon_config_load(get_dependent_command(targets[i]),&deps_size);
for(int j=0;j<deps_size;j++){
yon_char_remove_last_symbol(deps[j],'\n');
}
config_str tmp = yon_char_parsed_merge(parsed,size,deps,deps_size,&final_size);
if (parsed) yon_char_parsed_free(parsed,size);
parsed=tmp;
size=final_size;
}
} else {
parsed = yon_config_load(get_dependent_command(target),&size);
}
int recurs_size=0;
config_str recurs = NULL;
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(parsed[i],'\n');
if (strcmp(parsed[i],target)){
yon_char_parsed_add_or_create_if_exists(recurs,&recurs_size,yon_package_dependent_get(parsed[i]));
} else {
yon_char_parsed_add_or_create_if_exists(recurs,&recurs_size,parsed[i]);
}
}
if (recurs_size){
yon_char_parsed_free(parsed,size);
parsed = recurs;
size = recurs_size;
}
return yon_char_parsed_to_string(parsed,size," ");
}
gboolean yon_tab_create_tags(kernels_tab *tab){
GList *list = gtk_container_get_children(GTK_CONTAINER(tab->install_tags_box));
for (guint i=0;i<g_list_length(list);i++){
@ -714,7 +754,7 @@ void on_module_install_clicked(GtkWidget *self,dictionary *dict){
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){
gtk_widget_hide(window->DependencesFrame);
// gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
} else {
int size;
config_str additions = yon_resource_open_file(kernels_addon_path,&size);
@ -766,7 +806,7 @@ void on_package_install_clicked(GtkWidget *self,dictionary *dict){
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){
gtk_widget_hide(window->DependencesFrame);
// gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
} else {
int size;
config_str additions = yon_resource_open_file(kernels_addon_path,&size);
@ -835,7 +875,7 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),self==tab->update_package_button?UPDATE_MODULE_TITLE_LABEL:INSTALL_MODULE_TITLE_LABEL,icon_path,"additions_dialog");
action_text = ADDITION_MODULE_REMOVE_CONFIRMATION_LABEL(tab->name);
gtk_widget_hide(window->DependencesFrame);
// gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_ADDITION_MODULE_TITLE_LABEL);
} else {
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),self==tab->update_package_button?UPDATE_MODULE_TITLE_LABEL:INSTALL_MODULE_TITLE_LABEL,icon_path,"dialog");
@ -848,18 +888,26 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){
}
int size;
config_str additions = yon_resource_open_file(kernels_addon_path,&size);
GtkTreeIter iter;
// GtkTreeIter iter;
for (int i=0;i<tab->module_requirements_size;i++){
if (!system(get_package_is_installed_command(tab->module_requirements[i]))){
gtk_list_store_append(window->liststore1,&iter);
for (int j=1;j<size;j++){
int cur_size;
config_str parsed = yon_char_parse(additions[j],&cur_size,";");
if (!strcmp(parsed[1],tab->module_requirements[i]))
gtk_list_store_set(window->liststore1,&iter,1,yon_char_unite(parsed[1],",",parsed[2],NULL),2,parsed[3],-1);
if (!strcmp(parsed[1],tab->module_requirements[i])){
char *target = yon_char_unite(parsed[1],",",parsed[2],NULL);
char *depends = yon_package_dependent_get(target);
if (strcmp(depends,target)){
GtkTreeIter itar;
gtk_list_store_append(window->liststore1,&itar);
gtk_list_store_set(window->liststore1,&itar,0,1,1,depends,2, parsed[3],-1);
}
}
yon_char_parsed_free(parsed,cur_size);
}
}
}
yon_char_parsed_free(additions,size);
}
@ -909,7 +957,7 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){
action_text = ADDITION_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name);
gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_ADDITION_PACKAGE_TITLE_LABEL);
gtk_widget_hide(window->DependencesFrame);
// gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START);
} else {
if (installed_kernels>1){
action_text = KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name);
@ -921,18 +969,23 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){
gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGE_TITLE_LABEL);
int size;
config_str additions = yon_resource_open_file(kernels_addon_path,&size);
GtkTreeIter iter;
for (int i=0;i<tab->module_requirements_size;i++){
if (!system(get_package_is_installed_command(tab->package_requirements[i]))){
gtk_list_store_append(window->liststore1,&iter);
for (int j=1;j<size;j++){
int cur_size;
config_str parsed = yon_char_parse(additions[j],&cur_size,";");
if (!strcmp(parsed[1],tab->module_requirements[i]))
gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1);
if (!strcmp(parsed[1],tab->module_requirements[i])){
char *target = yon_char_unite(parsed[1],",",parsed[2],NULL);
char *depends = yon_package_dependent_get(target);
if (strcmp(depends,target)){
GtkTreeIter itar;
gtk_list_store_append(window->liststore1,&itar);
gtk_list_store_set(window->liststore1,&itar,0,1,1,depends,2, parsed[3],-1);
}
}
yon_char_parsed_free(parsed,cur_size);
}
gtk_list_store_set(window->liststore1,&iter,0,1,1,tab->module_requirements[i],-1);
}
}
yon_char_parsed_free(additions,size);

@ -92,4 +92,5 @@
#define UPDATE_ADDITION_PACKAGE_TITLE_LABEL _("Update addition package")
#define BUILD_SUCCESS_STATUS_LABEL _("Building has succeeded")
#define BUILD_FAILED_STATUS_LABEL _("Building has failed")
#define KERNEL_PACKAGE_INSTALL_ATTENTION_LABEL _("Attention! If you work in sandbox mode, you must install the package with the module!")
#define KERNEL_PACKAGE_INSTALL_ATTENTION_LABEL _("Attention! If you work in sandbox mode, you must install the package with the module!")
#define DEPENDS_LABEL(target) yon_char_unite(_("Some of chosen dependent packages have been in dependences for another packages"),": ",target,_(". Do you really want to remove them?"),NULL)

@ -5,11 +5,13 @@
<!-- interface-css-provider-path ubl-settings-kernel.css -->
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name gboolean1 -->
<!-- column-name Active -->
<column type="gboolean"/>
<!-- column-name gchararray1 -->
<!-- column-name Module -->
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<!-- column-name Description -->
<column type="gchararray"/>
<!-- column-name DependsPath -->
<column type="gchararray"/>
</columns>
</object>
@ -103,6 +105,7 @@
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">liststore1</property>
<property name="enable-grid-lines">both</property>
<child internal-child="selection">
<object class="GtkTreeSelection">
<property name="mode">none</property>
@ -122,7 +125,10 @@
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Module</property>
<child>
<object class="GtkCellRendererText"/>
<object class="GtkCellRendererText">
<property name="wrap-mode">word</property>
<property name="wrap-width">200</property>
</object>
<attributes>
<attribute name="markup">1</attribute>
</attributes>
@ -133,7 +139,9 @@
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Description</property>
<child>
<object class="GtkCellRendererText"/>
<object class="GtkCellRendererText">
<property name="wrap-width">100</property>
</object>
<attributes>
<attribute name="markup">2</attribute>
</attributes>
@ -155,7 +163,7 @@
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>

Loading…
Cancel
Save