Update button rework

pull/12/head
parent 8f5aa4a04a
commit 64ed79ce0a

@ -17,7 +17,7 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){
if (self){}; if (self){};
yon_load_proceed(YON_CONFIG_LOCAL); yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("",(GThreadFunc)yon_interface_update,widgets); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
main_config.load_mode=1; main_config.load_mode=1;
} }
} }
@ -28,7 +28,7 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){
if (self){}; if (self){};
yon_load_proceed(YON_CONFIG_GLOBAL); yon_load_proceed(YON_CONFIG_GLOBAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("",(GThreadFunc)yon_interface_update,widgets); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
main_config.load_mode=0; main_config.load_mode=0;
} }
@ -243,12 +243,6 @@ gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter,void *d
return 1; return 1;
} }
void on_source_changed(GtkWidget *self, main_window *widgets){
if (self){};
GtkTreePath *path = gtk_tree_path_new();
GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),path);
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_service_source_check,NULL,NULL);
}
gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){}; if (data){};
@ -295,6 +289,26 @@ gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
return 0; return 0;
} }
gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){};
gboolean type;
gtk_tree_model_get(model,iter,8,&type,-1);
if (type)
return 1;
return 0;
}
gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){};
gboolean type;
gtk_tree_model_get(model,iter,8,&type,-1);
if (!type)
return 1;
return 0;
}
void on_type_changed(GtkWidget *self, main_window *widgets){ void on_type_changed(GtkWidget *self, main_window *widgets){
if (self){}; if (self){};
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){ switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){
@ -322,6 +336,21 @@ void on_type_changed(GtkWidget *self, main_window *widgets){
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter)); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter));
break; break;
} }
if (main_config.SourceFilter){
g_object_unref(main_config.SourceFilter);
main_config.SourceFilter=NULL;
}
main_config.SourceFilter = gtk_tree_model_filter_new(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)),NULL);
int active = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceSourceCombo));
if (active==1){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_system_filter,NULL,NULL);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter);
} else if (active==2){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_user_filter,NULL,NULL);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter);
}
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SourceFilter));
} }
void on_service_update(GtkWidget *self, terminal_window* window){ void on_service_update(GtkWidget *self, terminal_window* window){
@ -389,7 +418,6 @@ void on_update(GtkWidget *self,main_window *widgets){
} }
void *update_delay(main_window *widgets){ void *update_delay(main_window *widgets){
sleep(1);
main_config.update_thread_active=0; main_config.update_thread_active=0;
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){ switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){
case 0: gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(widgets->liststore2)); case 0: gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(widgets->liststore2));
@ -410,6 +438,17 @@ void *update_delay(main_window *widgets){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.BlockedFilter); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.BlockedFilter);
break; break;
} }
if (main_config.SourceFilter){
g_object_unref(main_config.SourceFilter);
main_config.SourceFilter=NULL;
}
main_config.SourceFilter = gtk_tree_model_filter_new(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)),NULL);
int source_mode = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceSourceCombo));
if (source_mode==1){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter),(GtkTreeModelFilterVisibleFunc)on_source_system_filter,NULL,NULL);
} else if (source_mode==2){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter),(GtkTreeModelFilterVisibleFunc)on_source_user_filter,NULL,NULL);
}
textdomain(template_ui_LocaleName); textdomain(template_ui_LocaleName);
if (main_config.load_mode){ if (main_config.load_mode){
yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
@ -420,12 +459,16 @@ void *update_delay(main_window *widgets){
return NULL; return NULL;
} }
void *yon_interface_update(main_window *widgets){ gboolean yon_interface_update(main_window *widgets){
gtk_widget_set_sensitive(widgets->UpdateButton,0);
int size; int size;
int size_users;
GtkTreeIter iter; GtkTreeIter iter;
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL);
config_str services = yon_config_load(load_services_command,&size); config_str services = yon_config_load(load_services_command,&size);
config_str users_services = yon_config_load(load_user_services_command,&size_users);
for (int i=0;i<size;i++){ for (int i=0;i<size;i++){
while(gtk_events_pending()) gtk_main_iteration();
int parsed_size; int parsed_size;
if (services[i][strlen(services[i])-1]=='\n') services[i][strlen(services[i])-1]='\0'; if (services[i][strlen(services[i])-1]=='\n') services[i][strlen(services[i])-1]='\0';
config_str parsed = yon_char_parse(services[i],&parsed_size,";"); config_str parsed = yon_char_parse(services[i],&parsed_size,";");
@ -435,7 +478,11 @@ void *yon_interface_update(main_window *widgets){
if (strstr(parsed[0],".socket")) if (strstr(parsed[0],".socket"))
type = 2; type = 2;
else type = 1; else type = 1;
gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,-1); int user_service=0;
if (yon_char_parsed_check_exist(users_services,size_users,parsed[0])!=-1){
user_service=1;
}
gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1);
} }
int launched_size; int launched_size;
config_str launched_parsed = yon_config_load(load_launched_command,&launched_size); config_str launched_parsed = yon_config_load(load_launched_command,&launched_size);
@ -490,15 +537,11 @@ void *yon_interface_update(main_window *widgets){
gtk_list_store_set(widgets->liststore2,&iter,3,0,-1); gtk_list_store_set(widgets->liststore2,&iter,3,0,-1);
} }
free(name_parsed); free(name_parsed);
while(gtk_events_pending()) gtk_main_iteration();
} }
g_thread_new("",(GThreadFunc)update_delay,widgets); update_delay(widgets);
// int type_active=0; gtk_widget_set_sensitive(widgets->UpdateButton,1);
// if (!(type_active=gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo)))){ return 0;
// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo),type_active);
// } if (!(type_active=gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo)))){
// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo),type_active);
// }
return NULL;
} }
void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){ void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){
@ -694,6 +737,7 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets);
g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_activate),widgets); g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_activate),widgets);
g_signal_connect(G_OBJECT(widgets->ServiceTypeCombo),"changed",G_CALLBACK(on_type_changed),widgets); g_signal_connect(G_OBJECT(widgets->ServiceTypeCombo),"changed",G_CALLBACK(on_type_changed),widgets);
g_signal_connect(G_OBJECT(widgets->ServiceSourceCombo),"changed",G_CALLBACK(on_type_changed),widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
@ -718,7 +762,7 @@ void yon_main_window_complete(main_window *widgets){
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
if (!main_config.update_thread_active){ if (!main_config.update_thread_active){
main_config.update_thread_active=1; main_config.update_thread_active=1;
g_thread_new("",(GThreadFunc)yon_interface_update,widgets); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
} }
} }

@ -33,6 +33,8 @@
#define LocaleName "ubl-settings-services" #define LocaleName "ubl-settings-services"
#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' -e 's/running /running;/g' -e 's/inactive /inactive;/g'" #define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' -e 's/running /running;/g' -e 's/inactive /inactive;/g'"
#define load_user_services_command yon_char_unite("su -l ",yon_ubl_root_user_get()," -c \"systemctl --user list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'\"",NULL)
#define load_system_services_command "systemctl --system list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'"
#define load_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:" #define load_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:"
#define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" #define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:"
#define service_start_command(target) yon_char_append("systemctl start --no-pager ",target) #define service_start_command(target) yon_char_append("systemctl start --no-pager ",target)
@ -68,6 +70,8 @@ typedef struct {
GtkTreeModel *AutolaunchFilter; GtkTreeModel *AutolaunchFilter;
GtkTreeModel *StoppedFilter; GtkTreeModel *StoppedFilter;
GtkTreeModel *BlockedFilter; GtkTreeModel *BlockedFilter;
GtkTreeModel *SourceFilter;
int update_thread_active; int update_thread_active;
} config; } config;
@ -183,7 +187,7 @@ void on_config_local_save();
void on_config_global_save(); void on_config_global_save();
void *yon_interface_update(main_window *widgets); gboolean yon_interface_update(main_window *widgets);
GtkWidget *yon_menu_button_create(char *icon_name, char *text); GtkWidget *yon_menu_button_create(char *icon_name, char *text);
@ -207,8 +211,6 @@ void on_system_launch_clicked();
gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data); gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data);
void on_source_changed(GtkWidget *self, main_window *widgets);
gboolean yon_service_type_check(GtkTreeModel *model, GtkTreeIter *iter,void *data); gboolean yon_service_type_check(GtkTreeModel *model, GtkTreeIter *iter,void *data);
void on_type_changed(GtkWidget *self, main_window *widgets); void on_type_changed(GtkWidget *self, main_window *widgets);
@ -245,6 +247,10 @@ gboolean on_stopped_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
terminal_window *yon_terminal_window_new(); terminal_window *yon_terminal_window_new();
void on_service_update(GtkWidget *self, terminal_window* window); void on_service_update(GtkWidget *self, terminal_window* window);
Loading…
Cancel
Save