|
|
|
|
@ -4,8 +4,7 @@ config main_config;
|
|
|
|
|
|
|
|
|
|
//saving & loading
|
|
|
|
|
|
|
|
|
|
void on_save_done(main_window *widgets, config_str output, int size){
|
|
|
|
|
if (widgets) {};
|
|
|
|
|
void on_save_done(main_window *, config_str output, int size){
|
|
|
|
|
char *final_output = yon_char_parsed_to_string(output,size,"");
|
|
|
|
|
if (!yon_char_is_empty(final_output)){
|
|
|
|
|
printf("%s\n",final_output);
|
|
|
|
|
@ -67,37 +66,34 @@ void yon_load_proceed(YON_CONFIG_TYPE type){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_local_load(GtkWidget *self,main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_config_local_load(GtkWidget *,main_window *widgets){
|
|
|
|
|
if (!main_config.update_thread_active){
|
|
|
|
|
main_config.update_thread_active=1;
|
|
|
|
|
yon_load_proceed(YON_CONFIG_LOCAL);
|
|
|
|
|
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
|
|
|
|
|
gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
|
|
|
|
|
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
|
|
|
|
|
main_config.load_mode=1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_global_load(GtkWidget *self,main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_config_global_load(GtkWidget *,main_window *widgets){
|
|
|
|
|
if (!main_config.update_thread_active){
|
|
|
|
|
main_config.update_thread_active=1;
|
|
|
|
|
yon_load_proceed(YON_CONFIG_GLOBAL);
|
|
|
|
|
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
|
|
|
|
|
gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
|
|
|
|
|
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
|
|
|
|
|
main_config.load_mode=0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_custom_load(GtkWidget *self,main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_config_custom_load(GtkWidget *,main_window *widgets){
|
|
|
|
|
yon_load_proceed(YON_CONFIG_CUSTOM);
|
|
|
|
|
textdomain(template_ui_LocaleName);
|
|
|
|
|
yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
|
|
|
|
|
textdomain(LocaleName);
|
|
|
|
|
main_config.load_mode=3;
|
|
|
|
|
yon_interface_update(widgets);
|
|
|
|
|
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_service_constant_update(){
|
|
|
|
|
@ -121,28 +117,13 @@ void on_config_global_save(){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_custom_save(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self&&widgets){}
|
|
|
|
|
void on_config_custom_save(GtkWidget *, main_window *){
|
|
|
|
|
main_config.save_config=1;
|
|
|
|
|
template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL);
|
|
|
|
|
if (window){};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// functions
|
|
|
|
|
|
|
|
|
|
enum YON_UNIT_TYPE {
|
|
|
|
|
YON_UNIT_SERVICE=0,
|
|
|
|
|
YON_UNIT_SWAP,
|
|
|
|
|
YON_UNIT_SOCKET,
|
|
|
|
|
YON_UNIT_DEVICE,
|
|
|
|
|
YON_UNIT_TARGET,
|
|
|
|
|
YON_UNIT_MOUNT,
|
|
|
|
|
YON_UNIT_TIMER,
|
|
|
|
|
YON_UNIT_PATH,
|
|
|
|
|
YON_UNIT_SLICE,
|
|
|
|
|
YON_UNIT_SCOPE,
|
|
|
|
|
YON_UNIT_UNRECOGNISED
|
|
|
|
|
};
|
|
|
|
|
enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name);
|
|
|
|
|
|
|
|
|
|
enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name){
|
|
|
|
|
@ -183,8 +164,7 @@ void on_activate(GtkTreeView *self, main_window *widgets){
|
|
|
|
|
if (self&&widgets){};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){
|
|
|
|
|
GtkTreeIter filter_iter;
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
@ -242,8 +222,7 @@ void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widgets){
|
|
|
|
|
GtkTreeIter filter_iter;
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
@ -302,8 +281,7 @@ void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_config_block_clicked(GtkCellRenderer *, char *path, main_window *widgets){
|
|
|
|
|
GtkTreeIter filter_iter;
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
@ -362,13 +340,11 @@ void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *wid
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_autostart_confirmed(GtkWidget *self,char *service_command){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_system_autostart_confirmed(GtkWidget *,char *service_command){
|
|
|
|
|
yon_launch_app_with_arguments(service_command,"");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){
|
|
|
|
|
GtkTreeIter filter_iter;
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
@ -401,20 +377,20 @@ void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){
|
|
|
|
|
gboolean autostart,autostop,masked,type,loaded,inactive;
|
|
|
|
|
gboolean autostart,autostop,masked,type,loaded,active;
|
|
|
|
|
char *name;
|
|
|
|
|
gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&inactive,-1);
|
|
|
|
|
gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&active,-1);
|
|
|
|
|
GtkWidget *combo=NULL;
|
|
|
|
|
GtkWidget *loaded_check=NULL;
|
|
|
|
|
GtkWidget *active_check=NULL;
|
|
|
|
|
GtkWidget *name_entry = NULL;
|
|
|
|
|
int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
|
|
|
|
|
if (page == 0){
|
|
|
|
|
if (model == GTK_TREE_MODEL(widgets->SystemList)){
|
|
|
|
|
combo = widgets->SystemFiltersCombo;
|
|
|
|
|
loaded_check = widgets->SystemUnloadedShowCheck;
|
|
|
|
|
active_check = widgets->SystemInactiveShowCheck;
|
|
|
|
|
name_entry = widgets->SystemSearchEntry;
|
|
|
|
|
} else if (page == 1){
|
|
|
|
|
}
|
|
|
|
|
if (model == GTK_TREE_MODEL(widgets->UserList)){
|
|
|
|
|
combo = widgets->UserFiltersCombo;
|
|
|
|
|
loaded_check = widgets->UserUnloadedShowCheck;
|
|
|
|
|
active_check = widgets->UserInactiveShowCheck;
|
|
|
|
|
@ -452,14 +428,13 @@ gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets
|
|
|
|
|
char *name_text = (char*)gtk_entry_get_text(GTK_ENTRY(name_entry));
|
|
|
|
|
if (name&&!yon_char_is_empty(name_text)&&!strstr(name,name_text))
|
|
|
|
|
name_filter=0;
|
|
|
|
|
if (type_filter&&(active_filter||inactive)&&(loaded_filter||loaded)&&name_filter){
|
|
|
|
|
if (type_filter&&(active_filter||active)&&(loaded_filter||loaded)&&name_filter){
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_filter_changed(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_filter_changed(GtkWidget *, main_window *widgets){
|
|
|
|
|
int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
|
|
|
|
|
if (page == 0){
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL);
|
|
|
|
|
@ -472,13 +447,11 @@ void on_filter_changed(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_kill_confirmed(GtkWidget *self,char *service_name){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_system_kill_confirmed(GtkWidget *,char *service_name){
|
|
|
|
|
yon_launch(service_name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){
|
|
|
|
|
GtkTreeIter iter, filter_iter;
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
GtkTreeModel *filter;
|
|
|
|
|
@ -548,8 +521,7 @@ void on_service_restart_confirmed(GtkWidget *self,char *service_name){
|
|
|
|
|
yon_launch_app_with_arguments(command,"");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_restart_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self&&widgets){};
|
|
|
|
|
void on_system_restart_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkWidget *target_tree;
|
|
|
|
|
switch(gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){
|
|
|
|
|
case 0:target_tree=widgets->SystemUnitsTree;
|
|
|
|
|
@ -574,8 +546,7 @@ void on_system_restart_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_sessions_selection_changed(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_sessions_selection_changed(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
|
|
|
|
|
@ -609,8 +580,7 @@ void yon_sessions_update(main_window *widgets){
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_session_activate(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_session_activate(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList);
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
|
|
|
|
|
@ -623,8 +593,7 @@ void on_session_activate(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_session_end(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_session_end(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList);
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
|
|
|
|
|
@ -637,8 +606,7 @@ void on_session_end(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_session_block(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_session_block(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList);
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
|
|
|
|
|
@ -674,8 +642,7 @@ log_window *yon_log_window_new(){
|
|
|
|
|
return window;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void yon_system_systemd_restart(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
if (!getuid()&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
|
|
|
|
|
if (system(reload_systemd_root_command)){
|
|
|
|
|
@ -695,8 +662,7 @@ void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void yon_system_systemd_reexec(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
|
|
|
|
|
if (system(reexec_systemd_root_command)){
|
|
|
|
|
@ -719,7 +685,6 @@ void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){
|
|
|
|
|
typedef void (*data_function)(void*,void*);
|
|
|
|
|
|
|
|
|
|
void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
if (widgets){
|
|
|
|
|
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
|
|
|
|
|
data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd");
|
|
|
|
|
@ -731,7 +696,6 @@ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_update_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
if (widgets){
|
|
|
|
|
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
|
|
|
|
|
data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd");
|
|
|
|
|
@ -742,8 +706,7 @@ void on_system_update_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_info_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_system_info_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
|
|
|
|
|
@ -761,8 +724,7 @@ void on_system_info_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_log_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_system_log_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
|
|
|
|
|
@ -780,29 +742,26 @@ void on_system_log_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void *on_terminal_relaunch(log_window *window){
|
|
|
|
|
gboolean on_terminal_relaunch(log_window *window){
|
|
|
|
|
gtk_widget_set_sensitive(window->SystemTerminal,0);
|
|
|
|
|
sleep(1);
|
|
|
|
|
gtk_widget_set_sensitive(window->SystemTerminal,1);
|
|
|
|
|
yon_terminal_integrated_start_shell(window->SystemTerminal,window->target,NULL,NULL);
|
|
|
|
|
return NULL;
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_save_clicked(GtkWidget *self, log_window *window){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_save_clicked(GtkWidget *, log_window *window){
|
|
|
|
|
vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"\30",-1);
|
|
|
|
|
vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"Y\r",-1);
|
|
|
|
|
gtk_widget_grab_focus(window->SystemTerminal);
|
|
|
|
|
g_thread_new(NULL,(GThreadFunc)on_terminal_relaunch,window);
|
|
|
|
|
g_idle_add((GSourceFunc)on_terminal_relaunch,window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_update_clicked(GtkWidget *self, log_window *window){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_update_clicked(GtkWidget *, log_window *window){
|
|
|
|
|
yon_terminal_integrated_start_shell(window->SystemTerminal,window->target,NULL,NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_edit_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_system_edit_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
|
|
|
|
|
@ -828,8 +787,7 @@ void on_system_edit_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_status_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_system_status_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
|
|
|
|
|
@ -849,7 +807,6 @@ void on_system_status_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
if (widgets){
|
|
|
|
|
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
|
|
|
|
|
data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd");
|
|
|
|
|
@ -862,7 +819,6 @@ void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_user_update_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
if (widgets){
|
|
|
|
|
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
|
|
|
|
|
data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd");
|
|
|
|
|
@ -873,8 +829,7 @@ void on_user_update_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_user_info_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_user_info_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
|
|
|
|
|
@ -892,8 +847,7 @@ void on_user_info_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_user_log_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_user_log_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
|
|
|
|
|
@ -911,8 +865,7 @@ void on_user_log_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_user_edit_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_user_edit_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
|
|
|
|
|
@ -938,8 +891,7 @@ void on_user_edit_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_user_status_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_user_status_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
|
|
|
|
|
@ -958,8 +910,7 @@ void on_user_status_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_log_save(GtkWidget *self, log_window *window){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_config_log_save(GtkWidget *, log_window *window){
|
|
|
|
|
GtkTextIter start, end;
|
|
|
|
|
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor));
|
|
|
|
|
gtk_text_buffer_get_end_iter(buffer,&end);
|
|
|
|
|
@ -974,8 +925,7 @@ void on_config_log_save(GtkWidget *self, log_window *window){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_config_edit_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_config_edit_clicked(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(widgets->ConfigList);
|
|
|
|
|
@ -1003,8 +953,7 @@ void on_config_edit_clicked(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_system_services_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_system_services_status(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
log_window *window = yon_log_window_new();
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SYSTEM_STATUS_LABEL);
|
|
|
|
|
@ -1017,8 +966,7 @@ void on_system_services_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_user_services_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_user_services_status(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
log_window *window = yon_log_window_new();
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),USER_STATUS_LABEL);
|
|
|
|
|
@ -1031,8 +979,7 @@ void on_user_services_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_units_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_units_status(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
log_window *window = yon_log_window_new();
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),INSTALLED_UNIT_LABEL);
|
|
|
|
|
@ -1045,8 +992,7 @@ void on_units_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_units_list_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_units_list_status(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
log_window *window = yon_log_window_new();
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),UNITS_LIST_LABEL);
|
|
|
|
|
@ -1059,8 +1005,7 @@ void on_units_list_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_sockets_list_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_sockets_list_status(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
log_window *window = yon_log_window_new();
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SOCKETS_LIST_LABEL);
|
|
|
|
|
@ -1073,8 +1018,7 @@ void on_sockets_list_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_timers_list_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){}
|
|
|
|
|
void on_timers_list_status(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
log_window *window = yon_log_window_new();
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),TIMERS_LIST_LABEL);
|
|
|
|
|
@ -1087,8 +1031,8 @@ void on_timers_list_status(GtkWidget *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
if (widgets){
|
|
|
|
|
gboolean yon_interface_list_models_disconnect(main_window *widgets){
|
|
|
|
|
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL);
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL);
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),NULL);
|
|
|
|
|
@ -1097,140 +1041,56 @@ gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
gtk_list_store_clear(widgets->UserList);
|
|
|
|
|
gtk_list_store_clear(widgets->ConfigList);
|
|
|
|
|
gtk_list_store_clear(widgets->TimersList);
|
|
|
|
|
int system_size;
|
|
|
|
|
config_str system_services = yon_config_load(load_services_command,&system_size);
|
|
|
|
|
int user_size;
|
|
|
|
|
config_str user_services = yon_config_load(load_user_services_command,&user_size);
|
|
|
|
|
int config_size;
|
|
|
|
|
config_str config_files = yon_config_load(get_config_files_command,&config_size);
|
|
|
|
|
int timers_size;
|
|
|
|
|
config_str timers = yon_config_load(get_timers_command,&timers_size);
|
|
|
|
|
struct json_object *jsobject = json_tokener_parse(timers[0]);
|
|
|
|
|
int launched_size;
|
|
|
|
|
config_str launched = yon_config_load(load_launched_command,&launched_size);
|
|
|
|
|
for (int i=0;i<launched_size;i++){
|
|
|
|
|
yon_char_remove_last_symbol(launched[i],'\n');
|
|
|
|
|
}
|
|
|
|
|
for (int i=0; i<system_size;i++){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (system_services[i][strlen(system_services[i])-1]=='\n') system_services[i][strlen(system_services[i])-1] = '\0';
|
|
|
|
|
int size;
|
|
|
|
|
config_str parsed = yon_char_parse(system_services[i],&size,";");
|
|
|
|
|
char *name_temp = yon_char_replace(parsed[0],"\\","\18");
|
|
|
|
|
if (name_temp!=parsed[0]) free(parsed[0]);
|
|
|
|
|
parsed[0]=yon_char_replace(name_temp,"\18","\\\\");
|
|
|
|
|
if (name_temp!=parsed[0]) free(name_temp);
|
|
|
|
|
if (parsed){
|
|
|
|
|
int loaded = !strcmp(parsed[1],"loaded");
|
|
|
|
|
int active = !strcmp(parsed[2],"active");
|
|
|
|
|
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
|
|
|
|
|
gtk_list_store_append(widgets->SystemList,&iter);
|
|
|
|
|
gtk_list_store_set(widgets->SystemList,&iter,3,yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
for (int i=0; i<user_size;i++){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (user_services[i][strlen(user_services[i])-1]=='\n') user_services[i][strlen(user_services[i])-1] = '\0';
|
|
|
|
|
int size;
|
|
|
|
|
config_str parsed = yon_char_parse(user_services[i],&size,";");
|
|
|
|
|
if (parsed){
|
|
|
|
|
int loaded = !strcmp(parsed[1],"loaded");
|
|
|
|
|
int active = !strcmp(parsed[2],"active");
|
|
|
|
|
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
|
|
|
|
|
gtk_list_store_append(widgets->UserList,&iter);
|
|
|
|
|
gtk_list_store_set(widgets->UserList,&iter,3,yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->UserFiltersCombo),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->UserSearchEntry),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->UserInactiveShowCheck),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(widgets->UserUnloadedShowCheck),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
for (int i=0; i<config_size;i++){
|
|
|
|
|
int size;
|
|
|
|
|
if (config_files[i][strlen(config_files[i])-1]=='\n') config_files[i][strlen(config_files[i])-1] = '\0';
|
|
|
|
|
config_str parsed = yon_char_parse(config_files[i],&size,";");
|
|
|
|
|
if (parsed&&size>2){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
char *description = "";
|
|
|
|
|
gtk_list_store_append(widgets->ConfigList,&iter);
|
|
|
|
|
gtk_list_store_set(widgets->ConfigList,&iter,0,parsed[2],1,parsed[1],2,description,-1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
yon_sessions_update(widgets);
|
|
|
|
|
for (size_t i=0;i<json_object_array_length(jsobject);i++){
|
|
|
|
|
struct json_object *item_obj = json_object_array_get_idx(jsobject, i);
|
|
|
|
|
const char *unit="",*next="",*left="",*last="",*passed="",*activates="";
|
|
|
|
|
// Получение значений по ключам
|
|
|
|
|
struct json_object *unit_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "unit", &unit_obj)) {
|
|
|
|
|
unit = json_object_get_string(unit_obj);
|
|
|
|
|
}
|
|
|
|
|
gboolean yon_interface_list_models_connect(main_window *widgets){
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter));
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter));
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList));
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList));
|
|
|
|
|
|
|
|
|
|
struct json_object *next_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "next", &next_obj)) {
|
|
|
|
|
next = json_object_get_string(next_obj);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserFiltersCombo),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserSearchEntry),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserInactiveShowCheck),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserUnloadedShowCheck),G_CALLBACK(on_filter_changed),widgets);
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *left_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "left", &left_obj)) {
|
|
|
|
|
left = json_object_get_string(left_obj);
|
|
|
|
|
gboolean yon_system_set(struct system_services_data *data){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
gtk_list_store_append(data->widgets->SystemList,&iter);
|
|
|
|
|
gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1);
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *last_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "last", &last_obj)) {
|
|
|
|
|
last = json_object_get_string(last_obj);
|
|
|
|
|
gboolean yon_user_set(struct system_user_data *data){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
gtk_list_store_append(data->widgets->UserList,&iter);
|
|
|
|
|
gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1);
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *passed_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "passed", &passed_obj)) {
|
|
|
|
|
passed = json_object_get_string(passed_obj);
|
|
|
|
|
gboolean yon_system_config_set(struct system_config_data *data){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
gtk_list_store_append(data->widgets->ConfigList,&iter);
|
|
|
|
|
gtk_list_store_set(data->widgets->ConfigList,&iter,0,data->Name,1,data->Date,2,data->Descr,-1);
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *activates_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "activates", &activates_obj)) {
|
|
|
|
|
activates = json_object_get_string(activates_obj);
|
|
|
|
|
}
|
|
|
|
|
gboolean yon_timers_set(struct system_timers_data *data){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
gtk_list_store_append(widgets->TimersList,&iter);
|
|
|
|
|
GDateTime *datetime=NULL;
|
|
|
|
|
if (!yon_char_is_empty(next)&&atol(next)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(next)/1000000);
|
|
|
|
|
next = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
next="";
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(left)&&atol(left)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(left)/1000000);
|
|
|
|
|
GDateTime *now = g_date_time_new_now_local();
|
|
|
|
|
left = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
gint64 left_microseconds = 0;
|
|
|
|
|
left_microseconds = g_date_time_difference(datetime,now);
|
|
|
|
|
left_microseconds/=1000000;
|
|
|
|
|
long days = (long)((left_microseconds/60)/60)/24;
|
|
|
|
|
long hours = (long)(left_microseconds/60)/60%60;
|
|
|
|
|
long minutes = (long)left_microseconds/60%60;
|
|
|
|
|
long seconds = (long)left_microseconds%60;
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
left = yon_char_unite(days?yon_char_from_long(days):"",days?" ":"",days?DAYS_LABEL:"",days?" ":"",hours?yon_char_from_long(hours):"",hours?" ":"",hours?HOURS_LABEL:"",hours?" ":"",minutes?yon_char_from_long(minutes):"",minutes?" ":"",minutes?MINUTES_LABEL:"",minutes?" ":"",seconds?yon_char_from_long(seconds):"",seconds?" ":"",seconds?SECONDS_LABEL:"",NULL);
|
|
|
|
|
} else {
|
|
|
|
|
left="";
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(last)&&atol(last)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(last)/1000000);
|
|
|
|
|
last = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
last="";
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(passed)&&atol(passed)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(passed)/1000000);
|
|
|
|
|
passed = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
passed="";
|
|
|
|
|
}
|
|
|
|
|
gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1);
|
|
|
|
|
}
|
|
|
|
|
gtk_list_store_append(data->widgets->TimersList,&iter);
|
|
|
|
|
gtk_list_store_set(data->widgets->TimersList,&iter,0,data->unit,1,data->next,2,data->left,3,data->last,4,data->passed,5,data->activates,-1);
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gboolean yon_interface_update_finish(main_window *widgets){
|
|
|
|
|
{
|
|
|
|
|
int parsed_size;
|
|
|
|
|
char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER);
|
|
|
|
|
@ -1260,6 +1120,7 @@ gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed,parsed_size);
|
|
|
|
|
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER);
|
|
|
|
|
parsed = yon_char_parse(disabled,&parsed_size,",");
|
|
|
|
|
valid = gtk_tree_model_get_iter_first(model,&iter);
|
|
|
|
|
@ -1278,6 +1139,7 @@ gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed,parsed_size);
|
|
|
|
|
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER);
|
|
|
|
|
parsed = yon_char_parse(masked,&parsed_size,",");
|
|
|
|
|
valid = gtk_tree_model_get_iter_first(model,&iter);
|
|
|
|
|
@ -1295,6 +1157,7 @@ gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
int parsed_size;
|
|
|
|
|
@ -1319,6 +1182,7 @@ gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed,parsed_size);
|
|
|
|
|
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER);
|
|
|
|
|
parsed = yon_char_parse(disabled,&parsed_size,",");
|
|
|
|
|
valid = gtk_tree_model_get_iter_first(model,&iter);
|
|
|
|
|
@ -1337,6 +1201,7 @@ gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed,parsed_size);
|
|
|
|
|
|
|
|
|
|
while(gtk_events_pending()) gtk_main_iteration();
|
|
|
|
|
char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER);
|
|
|
|
|
parsed = yon_char_parse(masked,&parsed_size,",");
|
|
|
|
|
valid = gtk_tree_model_get_iter_first(model,&iter);
|
|
|
|
|
@ -1354,27 +1219,215 @@ gboolean yon_interface_update(main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter));
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter));
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList));
|
|
|
|
|
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList));
|
|
|
|
|
main_config.update_thread_active=0;
|
|
|
|
|
return 0;
|
|
|
|
|
return G_SOURCE_REMOVE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_interface_update(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void* yon_interface_update(main_window *widgets){
|
|
|
|
|
dictionary *dict = yon_systemd_get_list();
|
|
|
|
|
if (dict){}
|
|
|
|
|
if (widgets){
|
|
|
|
|
g_idle_add((GSourceFunc)yon_interface_list_models_disconnect,widgets);
|
|
|
|
|
// int system_size;
|
|
|
|
|
// config_str system_services = yon_config_load(load_services_command,&system_size);
|
|
|
|
|
int user_size;
|
|
|
|
|
config_str user_services = yon_config_load(load_user_services_command,&user_size);
|
|
|
|
|
int config_size;
|
|
|
|
|
config_str config_files = yon_config_load(get_config_files_command,&config_size);
|
|
|
|
|
int timers_size;
|
|
|
|
|
config_str timers = yon_config_load(get_timers_command,&timers_size);
|
|
|
|
|
struct json_object *jsobject = json_tokener_parse(timers[0]);
|
|
|
|
|
int launched_size;
|
|
|
|
|
config_str launched = yon_config_load(load_launched_command,&launched_size);
|
|
|
|
|
for (int i=0;i<launched_size;i++){
|
|
|
|
|
yon_char_remove_last_symbol(launched[i],'\n');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dictionary *dact = NULL;
|
|
|
|
|
for_dictionaries(dact,dict){
|
|
|
|
|
enum YON_UNIT_TYPE type = yon_get_unit_type(((systemd_struct*)dact->data)->name);
|
|
|
|
|
struct system_services_data *data = malloc(sizeof(struct system_services_data));
|
|
|
|
|
{
|
|
|
|
|
data->widgets=widgets;
|
|
|
|
|
data->SystemAutostart=((systemd_struct*)dact->data)->enable;
|
|
|
|
|
data->SystemLaunched=((systemd_struct*)dact->data)->active;
|
|
|
|
|
data->Name=((systemd_struct*)dact->data)->name;
|
|
|
|
|
data->Descr=((systemd_struct*)dact->data)->description;
|
|
|
|
|
data->Type = type;
|
|
|
|
|
data->Loaded=((systemd_struct*)dact->data)->load;
|
|
|
|
|
data->Active=((systemd_struct*)dact->data)->active;
|
|
|
|
|
data->State=((systemd_struct*)dact->data)->state;
|
|
|
|
|
}
|
|
|
|
|
g_idle_add((GSourceFunc)yon_system_set,data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i=0; i<user_size;i++){
|
|
|
|
|
if (user_services[i][strlen(user_services[i])-1]=='\n') user_services[i][strlen(user_services[i])-1] = '\0';
|
|
|
|
|
int size;
|
|
|
|
|
config_str parsed = yon_char_parse(user_services[i],&size,";");
|
|
|
|
|
if (parsed){
|
|
|
|
|
// int loaded = !system(user_check_enabled_command(parsed[0]));
|
|
|
|
|
// int active = !system(user_check_active_command(parsed[0]));
|
|
|
|
|
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
|
|
|
|
|
struct system_user_data *data = malloc(sizeof(struct system_user_data));
|
|
|
|
|
{
|
|
|
|
|
data->widgets=widgets;
|
|
|
|
|
data->SystemAutostart=0;//loaded;
|
|
|
|
|
data->SystemLaunched=0;//active;
|
|
|
|
|
data->Name=yon_char_new(parsed[0]);
|
|
|
|
|
data->Descr=yon_char_new(parsed[4]);
|
|
|
|
|
data->Type = type;
|
|
|
|
|
data->Loaded=strcmp(parsed[1],"loaded")?0:1;
|
|
|
|
|
data->Active=strcmp(parsed[2],"active")?0:1;
|
|
|
|
|
data->State=yon_char_new(_(parsed[3]));
|
|
|
|
|
}
|
|
|
|
|
g_idle_add((GSourceFunc)yon_user_set,data);
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed,size);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int descr_size;
|
|
|
|
|
config_str config_descr = yon_resource_open_file(systemd_config_path,&descr_size);
|
|
|
|
|
for (int i=0; i<config_size;i++){
|
|
|
|
|
int size;
|
|
|
|
|
if (config_files[i][strlen(config_files[i])-1]=='\n') config_files[i][strlen(config_files[i])-1] = '\0';
|
|
|
|
|
config_str parsed = yon_char_parse(config_files[i],&size,";");
|
|
|
|
|
if (parsed&&size>2){
|
|
|
|
|
char *description = "";
|
|
|
|
|
{
|
|
|
|
|
for (int k=0;k<descr_size;k++){
|
|
|
|
|
int parsed_size;
|
|
|
|
|
config_str parsed_descr = yon_char_parse(config_descr[k],&parsed_size,";");
|
|
|
|
|
if (parsed_size){
|
|
|
|
|
for (int j=1;j<parsed_size;j++){
|
|
|
|
|
GRegex *regex = g_regex_new(parsed_descr[0],0,0,NULL);
|
|
|
|
|
|
|
|
|
|
GMatchInfo *match = NULL;
|
|
|
|
|
g_regex_match(regex,parsed[2],0,&match);
|
|
|
|
|
g_regex_unref(regex);
|
|
|
|
|
if (g_match_info_matches(match)){
|
|
|
|
|
yon_char_remove_last_symbol(parsed_descr[1],'\n');
|
|
|
|
|
description = yon_char_new(parsed_descr[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
g_match_info_unref(match);
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(parsed_descr,parsed_size);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
struct system_config_data *data = malloc(sizeof(struct system_config_data));
|
|
|
|
|
{
|
|
|
|
|
data->widgets=widgets;
|
|
|
|
|
data->Name=yon_char_new(parsed[2]);
|
|
|
|
|
data->Descr=yon_char_new(parsed[1]);
|
|
|
|
|
data->Date = _(description);
|
|
|
|
|
}
|
|
|
|
|
g_idle_add((GSourceFunc)yon_system_config_set,data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
yon_sessions_update(widgets);
|
|
|
|
|
|
|
|
|
|
for (size_t i=0;i<json_object_array_length(jsobject);i++){
|
|
|
|
|
struct json_object *item_obj = json_object_array_get_idx(jsobject, i);
|
|
|
|
|
const char *unit="",*next="",*left="",*last="",*passed="",*activates="";
|
|
|
|
|
// Получение значений по ключам
|
|
|
|
|
struct json_object *unit_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "unit", &unit_obj)) {
|
|
|
|
|
unit = json_object_get_string(unit_obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *next_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "next", &next_obj)) {
|
|
|
|
|
next = json_object_get_string(next_obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *left_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "left", &left_obj)) {
|
|
|
|
|
left = json_object_get_string(left_obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *last_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "last", &last_obj)) {
|
|
|
|
|
last = json_object_get_string(last_obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *passed_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "passed", &passed_obj)) {
|
|
|
|
|
passed = json_object_get_string(passed_obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct json_object *activates_obj;
|
|
|
|
|
if (json_object_object_get_ex(item_obj, "activates", &activates_obj)) {
|
|
|
|
|
activates = json_object_get_string(activates_obj);
|
|
|
|
|
}
|
|
|
|
|
GDateTime *datetime=NULL;
|
|
|
|
|
if (!yon_char_is_empty(next)&&atol(next)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(next)/1000000);
|
|
|
|
|
next = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
next="";
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(left)&&atol(left)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(left)/1000000);
|
|
|
|
|
GDateTime *now = g_date_time_new_now_local();
|
|
|
|
|
left = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
gint64 left_microseconds = 0;
|
|
|
|
|
left_microseconds = g_date_time_difference(datetime,now);
|
|
|
|
|
left_microseconds/=1000000;
|
|
|
|
|
long days = (long)((left_microseconds/60)/60)/24;
|
|
|
|
|
long hours = (long)(left_microseconds/60)/60%60;
|
|
|
|
|
long minutes = (long)left_microseconds/60%60;
|
|
|
|
|
long seconds = (long)left_microseconds%60;
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
left = yon_char_unite(days?yon_char_from_long(days):"",days?" ":"",days?DAYS_LABEL:"",days?" ":"",hours?yon_char_from_long(hours):"",hours?" ":"",hours?HOURS_LABEL:"",hours?" ":"",minutes?yon_char_from_long(minutes):"",minutes?" ":"",minutes?MINUTES_LABEL:"",minutes?" ":"",seconds?yon_char_from_long(seconds):"",seconds?" ":"",seconds?SECONDS_LABEL:"",NULL);
|
|
|
|
|
} else {
|
|
|
|
|
left="";
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(last)&&atol(last)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(last)/1000000);
|
|
|
|
|
last = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
last="";
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(passed)&&atol(passed)!=0){
|
|
|
|
|
datetime = g_date_time_new_from_unix_local(atol(passed)/1000000);
|
|
|
|
|
passed = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
passed="";
|
|
|
|
|
}
|
|
|
|
|
struct system_timers_data *data = malloc(sizeof(struct system_timers_data));
|
|
|
|
|
{
|
|
|
|
|
data->widgets=widgets;
|
|
|
|
|
data->unit=unit;
|
|
|
|
|
data->next=next;
|
|
|
|
|
data->left=left;
|
|
|
|
|
data->last=last;
|
|
|
|
|
data->passed=passed;
|
|
|
|
|
data->activates=activates;
|
|
|
|
|
}
|
|
|
|
|
g_idle_add((GSourceFunc)yon_timers_set,data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g_idle_add((GSourceFunc)yon_interface_update_finish,widgets);
|
|
|
|
|
g_idle_add((GSourceFunc)yon_interface_list_models_connect,widgets);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_interface_update(GtkWidget *, main_window *widgets){
|
|
|
|
|
if (!main_config.update_thread_active){
|
|
|
|
|
gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)));
|
|
|
|
|
gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)));
|
|
|
|
|
main_config.update_thread_active=1;
|
|
|
|
|
pthread_t tid;
|
|
|
|
|
pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets);
|
|
|
|
|
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){
|
|
|
|
|
if (self||pspec){}
|
|
|
|
|
void on_column_resize(GtkTreeViewColumn *,GParamSpec *,main_window *widgets){
|
|
|
|
|
GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree));
|
|
|
|
|
int width_configuration = gtk_tree_view_column_get_width(g_list_nth_data(list,0))+gtk_tree_view_column_get_width(g_list_nth_data(list,1))+gtk_tree_view_column_get_width(g_list_nth_data(list,2));
|
|
|
|
|
int width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4))+gtk_tree_view_column_get_width(g_list_nth_data(list,5));
|
|
|
|
|
@ -1412,8 +1465,7 @@ void config_init(){
|
|
|
|
|
main_config.launch_size=0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_tree_selection_changed(GtkWidget *self, main_window *widgets){
|
|
|
|
|
if (self){};
|
|
|
|
|
void on_tree_selection_changed(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkTreeModel *model;
|
|
|
|
|
GtkWidget *Tree;
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
@ -1478,9 +1530,7 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gboolean on_tooltip_show(GtkWidget* self, gint x, gint y, gboolean keyboard_mode, GtkTooltip* tooltip, main_window *widgets) {
|
|
|
|
|
if (self || x || y || keyboard_mode) {};
|
|
|
|
|
|
|
|
|
|
gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* tooltip, main_window *widgets) {
|
|
|
|
|
gtk_tooltip_set_custom(tooltip,widgets->TooltipBox);
|
|
|
|
|
GtkWidget *tree = NULL;
|
|
|
|
|
GtkTreeModel *model = NULL;
|
|
|
|
|
@ -1500,7 +1550,6 @@ gboolean on_tooltip_show(GtkWidget* self, gint x, gint y, gboolean keyboard_mode
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (gtk_tree_model_get_iter(model, &iter, path)) {
|
|
|
|
|
gchar *name, *description, *state, *name_target;
|
|
|
|
|
gint64 activa, deactiva;
|
|
|
|
|
int size;
|
|
|
|
|
gtk_tree_model_get(model, &iter, 5, &name, 6, &description, 11, &state, -1);
|
|
|
|
|
name_target = yon_char_new(name);
|
|
|
|
|
@ -1516,8 +1565,6 @@ gboolean on_tooltip_show(GtkWidget* self, gint x, gint y, gboolean keyboard_mode
|
|
|
|
|
yon_char_remove_last_symbol(target[1], '\n');
|
|
|
|
|
free(yon_char_divide_search(target[2], "=", -1));
|
|
|
|
|
yon_char_remove_last_symbol(target[2], '\n');
|
|
|
|
|
activa = g_ascii_strtoll(target[1], NULL, 10);
|
|
|
|
|
deactiva = g_ascii_strtoll(target[1], NULL, 10);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(widgets->UnitLabel), target[0]);
|
|
|
|
|
}
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(widgets->NameLabel), name);
|
|
|
|
|
@ -1529,21 +1576,35 @@ gboolean on_tooltip_show(GtkWidget* self, gint x, gint y, gboolean keyboard_mode
|
|
|
|
|
free(state);
|
|
|
|
|
|
|
|
|
|
if (target){
|
|
|
|
|
gchar *formatted_activa = NULL;
|
|
|
|
|
gchar *formatted_deactiva = NULL;
|
|
|
|
|
if (activa) {
|
|
|
|
|
GDateTime *datetime = g_date_time_new_from_unix_local(activa);
|
|
|
|
|
formatted_activa = g_date_time_format(datetime, "%d:%m:%Y %T");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
formatted_activa = g_strdup(NULL_LABEL);
|
|
|
|
|
}
|
|
|
|
|
if (deactiva) {
|
|
|
|
|
GDateTime *datetime = g_date_time_new_from_unix_local(deactiva);
|
|
|
|
|
formatted_deactiva = g_date_time_format(datetime, "%d:%m:%Y %T");
|
|
|
|
|
g_date_time_unref(datetime);
|
|
|
|
|
} else {
|
|
|
|
|
formatted_deactiva = g_strdup(NULL_LABEL);
|
|
|
|
|
gchar *formatted_activa = g_strdup(NULL_LABEL);//!yon_char_is_empty(target[1])&&strcmp(target[1],"0")?target[1]:g_strdup(NULL_LABEL);
|
|
|
|
|
gchar *formatted_deactiva = g_strdup(NULL_LABEL);//!yon_char_is_empty(target[2])&&strcmp(target[2],"0")?target[2]:g_strdup(NULL_LABEL);
|
|
|
|
|
if (strcmp(target[1],"0")){
|
|
|
|
|
int activated_size;
|
|
|
|
|
config_str activated_parsed = yon_char_parse(target[1],&activated_size," ");
|
|
|
|
|
int date_size;
|
|
|
|
|
config_str date_parsed = yon_char_parse(activated_parsed[1],&date_size,"-");
|
|
|
|
|
if (date_size>2){
|
|
|
|
|
char *temp = date_parsed[0];
|
|
|
|
|
date_parsed[0]=date_parsed[2];
|
|
|
|
|
date_parsed[2]=temp;
|
|
|
|
|
formatted_deactiva = yon_char_unite(date_parsed?yon_char_parsed_to_string(date_parsed,date_size,"."):""," ",activated_parsed[2],NULL);
|
|
|
|
|
if (date_size) yon_char_parsed_free(date_parsed,date_size);
|
|
|
|
|
}
|
|
|
|
|
if (activated_size) yon_char_parsed_free(activated_parsed,activated_size);
|
|
|
|
|
}
|
|
|
|
|
if (strcmp(target[2],"0")){
|
|
|
|
|
int deactivated_size;
|
|
|
|
|
config_str deactivated_parsed = yon_char_parse(target[2],&deactivated_size," ");
|
|
|
|
|
int date_size;
|
|
|
|
|
config_str date_parsed = yon_char_parse(deactivated_parsed[0],&date_size,"-");
|
|
|
|
|
if (date_size>=2){
|
|
|
|
|
char *temp = date_parsed[0];
|
|
|
|
|
date_parsed[0]=date_parsed[2];
|
|
|
|
|
date_parsed[2]=temp;
|
|
|
|
|
formatted_deactiva = yon_char_unite(date_parsed?yon_char_parsed_to_string(date_parsed,date_size,"."):""," ",deactivated_parsed[2],NULL);
|
|
|
|
|
if (date_size) yon_char_parsed_free(date_parsed,date_size);
|
|
|
|
|
}
|
|
|
|
|
if (deactivated_size) yon_char_parsed_free(deactivated_parsed,deactivated_size);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(widgets->ActivateLabel), formatted_activa);
|
|
|
|
|
@ -1729,7 +1790,7 @@ void yon_main_window_complete(main_window *widgets){
|
|
|
|
|
|
|
|
|
|
g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),widgets);
|
|
|
|
|
|
|
|
|
|
// g_signal_connect(G_OBJECT(widgets->SessionRestartButton),"clicked",G_CALLBACK(on_interface_update),widgets);
|
|
|
|
|
g_signal_connect(G_OBJECT(widgets->SessionRestartButton),"clicked",G_CALLBACK(on_interface_update),widgets);
|
|
|
|
|
g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_activate),widgets);
|
|
|
|
|
g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_end),widgets);
|
|
|
|
|
g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_block),widgets);
|
|
|
|
|
@ -1827,14 +1888,14 @@ void yon_main_window_complete(main_window *widgets){
|
|
|
|
|
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
|
|
|
|
|
if (!main_config.update_thread_active){
|
|
|
|
|
main_config.update_thread_active=1;
|
|
|
|
|
pthread_t tid;
|
|
|
|
|
pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets);
|
|
|
|
|
g_thread_new("update",(GThreadFunc)yon_interface_update,widgets);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
yon_save_window_set_postsave_function(on_save_done,widgets);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char *argv[]){
|
|
|
|
|
local=setlocale(LC_ALL, "");
|
|
|
|
|
setlocale(LC_ALL, "");
|
|
|
|
|
textdomain (LocaleName);
|
|
|
|
|
config_init();
|
|
|
|
|
|
|
|
|
|
|