packages function optimization

pull/47/head
parent a77405d1f2
commit 9f6957d631
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -44,10 +44,15 @@ struct packages {
GHashTable *all_list;
GHashTable *installed_list;
GHashTable *updates_list;
int init_status;
} packages_struct;
GThread *packages_thread = NULL;
int yon_packages_init(){
if (getuid()) return 0;
void *_yon_packages_init(void){
if (getuid()){
packages_struct.init_status = 0;
g_thread_exit(NULL);
}
packages_struct.all_list = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL);
packages_struct.installed_list = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL);
packages_struct.updates_list = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL);
@ -80,10 +85,21 @@ int yon_packages_init(){
free(installed);
free(updates);
if (g_hash_table_size(packages_struct.all_list)&&g_hash_table_size(packages_struct.installed_list))
return 1;
if (g_hash_table_size(packages_struct.all_list)&&g_hash_table_size(packages_struct.installed_list)){
packages_struct.init_status = 1;
} else {
packages_struct.init_status = 0;
}
g_thread_exit(NULL);
}
return 0;
void yon_packages_init(){
packages_thread = g_thread_new("packages_thread",(GThreadFunc)_yon_packages_init,NULL);
}
int yon_packages_finalize(){
g_thread_join(packages_thread);
return packages_struct.init_status;
}
#define install_package_command(target) yon_char_unite("pacman -S ",target,NULL)
@ -92,18 +108,22 @@ int yon_packages_init(){
#define update_package_updated_command(target) yon_char_append("pacman -Qqu ",target)
int yon_packages_check_exist(char *package){
if (!packages_struct.init_status) return 0;
return g_hash_table_contains(packages_struct.all_list,package);
}
int yon_packages_check_installed(char *package){
if (!packages_struct.init_status) return 0;
return g_hash_table_contains(packages_struct.installed_list,package);
}
int yon_packages_check_updates(char *package){
if (!packages_struct.init_status) return 0;
return g_hash_table_contains(packages_struct.updates_list,package);
}
void yon_packages_update_package_is_installed(char *package){
if (!packages_struct.init_status) return;
char *command = update_package_installed_command(package);
if (!system(command)){
if (!g_hash_table_contains(packages_struct.installed_list,package)){
@ -118,6 +138,7 @@ void yon_packages_update_package_is_installed(char *package){
}
void yon_packages_update_package_is_updated(char *package){
if (!packages_struct.init_status) return;
char *command = update_package_updated_command(package);
if (!system(command)){
if (!g_hash_table_contains(packages_struct.updates_list,package)){
@ -132,6 +153,7 @@ void yon_packages_update_package_is_updated(char *package){
}
void yon_packages_update_package(char *package){
if (!packages_struct.init_status) return;
char *command = update_package_installed_command(package);
if (!system(command)){
if (!g_hash_table_contains(packages_struct.installed_list,package)){
@ -158,6 +180,7 @@ void yon_packages_update_package(char *package){
}
int yon_packages_install(char *package){
if (!packages_struct.init_status) return 0;
char *command = install_package_command(package);
yon_terminal_window_launch(NULL,command,"","");
@ -166,6 +189,7 @@ int yon_packages_install(char *package){
}
int yon_packages_remove(char *package){
if (!packages_struct.init_status) return 0;
char *command = remove_package_command(package);
yon_terminal_window_launch(NULL,command,"","");
@ -174,6 +198,7 @@ int yon_packages_remove(char *package){
}
void yon_packages_finish(){
if (!packages_struct.init_status) return;
g_hash_table_unref(packages_struct.all_list);
g_hash_table_unref(packages_struct.installed_list);
}
@ -189,6 +214,45 @@ config_str yon_resource_open_file(const char *path, int *size){
return parsed;
}
struct yon_combo_default_struct {
char *command;
GtkComboBoxText *target;
void *result_callback; // char*(*)(char*)
char *default_value;
char *command_value;
};
void _yon_combo_box_set_default_value(struct yon_combo_default_struct *target){
gtk_combo_box_text_prepend(target->target,target->command_value,target->default_value);
if (!yon_char_is_empty(target->default_value)) free(target->command);
if (!yon_char_is_empty(target->default_value)) free(target->command_value);
}
void *__yon_combo_set_default(struct yon_combo_default_struct *target){
int size;
config_str parameter = yon_config_load(yon_config_parameter_prepare_command(target->command,"default",NULL,NULL),&size);
if (size&&!yon_char_is_empty(parameter[0])&&strcmp(parameter[0],"(null)\n")){
yon_char_remove_last_symbol(parameter[0],'\n');
target->command_value = yon_char_new(parameter[0]);
target->default_value = ((char*(*)(char*))(target->result_callback))(parameter[0]);
} else {
target->default_value = ((char*(*)(char*))(target->result_callback))(NULL);
}
g_idle_add_once((GSourceOnceFunc)_yon_combo_box_set_default_value,target);
}
void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(result_callback)(char*)){
struct yon_combo_default_struct *target_struct = malloc(sizeof(struct yon_combo_default_struct));
target_struct->result_callback = result_callback;
target_struct->target = target;
target_struct->command = yon_char_new(command);
target_struct->command_value=NULL;
target_struct->default_value = NULL;
g_thread_new("combo_get_default",(GThreadFunc)__yon_combo_set_default,target_struct);
}
// dictionary *__yon_config_listeners = NULL;
// typedef struct {
// GtkWidget *target;

@ -564,7 +564,18 @@ void yon_gtk_revealer_set_from_expander(GtkRevealer *revealer, GtkExpander *targ
void yon_gtk_window_set_shrinking_from_revealer_resizing(GtkWindow *window, GtkRevealer *revealer);
int yon_packages_init();
/**yon_packages_init()
* Инициализация системы пакетов. Инициализация происходит долго,
* рекомендуется вызывать как можно ближе к началу работы кода.
*/
void yon_packages_init();
/**yon_packages_finalize()
* Завершает инициирование системы пакетов из yon_packages_init().
* Рекомендуется вызывать как можно ближе к месту первого использования системы пакетов.
*/
int yon_packages_finalize();
int yon_packages_check_exist(char *package);
int yon_packages_check_installed(char *package);
int yon_packages_check_updates(char *package);
@ -574,3 +585,4 @@ int yon_packages_install(char *package);
int yon_packages_remove(char *package);
void yon_packages_update_package_is_installed(char *package);
void yon_packages_update_package_is_updated(char *package);
void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(result_callback)(char*));
Loading…
Cancel
Save