From 3089e0ae7a8c82dfeb68c6d3f94855419e84f108 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 4 Jul 2025 18:15:19 +0600 Subject: [PATCH] Drivers loading optimization --- source/ubl-settings-video.c | 33 +++++++++++++++++++++++++-------- source/ubl-settings-video.h | 3 +++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 5eb8f53..19f56e2 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -1045,7 +1045,7 @@ gboolean yon_proprietary_set(main_window *widgets){ gboolean yon_proprietary_append(struct proprietary_struct *target){ GtkTreeIter iter; gtk_list_store_append(main_config.list,&iter); - gtk_list_store_set(main_config.list,&iter,0,target->module_status,1,target->package_status,2,target->drivers[0],3,target->drivers[3],4,_(target->drivers[4]),5,_(target->drivers[5]),7,target->drivers[1],8,target->drivers[2],9,!yon_char_is_empty(target->drivers[1])&&!system(yon_get_is_exist_command(target->drivers[1])),10,!yon_char_is_empty(target->drivers[2])&&!system(yon_get_is_exist_command(target->drivers[2])),-1); + gtk_list_store_set(main_config.list,&iter,0,target->module_status,1,target->package_status,2,target->drivers[0],3,target->drivers[3],4,_(target->drivers[4]),5,_(target->drivers[5]),7,target->drivers[1],8,target->drivers[2],9,!yon_char_is_empty(target->drivers[1])&&target->module_exist,10,!yon_char_is_empty(target->drivers[2])&&target->package_exist,-1); free(target); return G_SOURCE_REMOVE; } @@ -1091,31 +1091,48 @@ void *yon_proprietary_local_get(main_window *widgets){ config_str rtn=NULL; rtn = yon_resource_open_file(get_proprietary_drivers_info_path,&size); for (int i=1;i-1)){ - if ((!yon_char_is_empty(current[1])&&!system(yon_get_is_exist_command(yon_debug_output("%s\n\n\n",current[1]))))||(!yon_char_is_empty(current[2])&&!system(yon_get_is_exist_command(yon_debug_output("%s\n\n\n",current[2]))))){ - int module_status = !yon_char_is_empty(current[1])?!system(yon_get_is_installed_command(current[1])):0; - int package_status = !yon_char_is_empty(current[2])?!system(yon_get_is_installed_command(current[2])):0; + if ((!strcmp(current[0],"")|| + yon_char_parsed_check_exist(kernels_installed,kernels_size,current[0])>-1)){ + if ((!yon_char_is_empty(current[1])&& + g_hash_table_contains(table,current[1]))|| + (!yon_char_is_empty(current[2])&& + g_hash_table_contains(table,current[2]))){ + int module_status = !yon_char_is_empty(current[1])?yon_char_parsed_check_exist(kernels_installed,kernels_size,current[1])>-1:0; + int package_status = !yon_char_is_empty(current[2])?yon_char_parsed_check_exist(kernels_installed,kernels_size,current[2])>-1:0; struct proprietary_struct *cur = malloc(sizeof(struct proprietary_struct)); cur->drivers=current; cur->drivers_size=current_size; cur->module_status=module_status; cur->package_status=package_status; + cur->module_exist=g_hash_table_contains(table,current[1]); + cur->package_exist=g_hash_table_contains(table,current[2]); g_idle_add((GSourceFunc)yon_proprietary_append,cur); } } - yon_debug_output("%s\n","Driver end"); if (dr_desc==size-1) { g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); } } + g_hash_table_unref(table); if (!size){ g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); } diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 74a71f0..b82a832 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -59,6 +59,7 @@ #define yon_get_is_installed_command(target) yon_char_append("pacman -Q ",target) #define yon_get_is_exist_command(target) yon_char_append("pacman -Ss ",target) +#define yon_get_all_pacman_packages_command "pacman -Slq" #define get_adapter_info "lshw -c display -quiet |grep -oE \"vendor:[0-9a-zA-Z ]{1,}|description:[0-9a-zA-Z ]{1,}|product:[]0-9a-zA-Z [-]{1,}\"|sed 's/: /=/g';lspci | grep -E ' VGA | Display ' | cut -d\" \" -f 1 | xargs -i lspci -v -s {} |grep -oE \"Kernel[:a-zA-Z0-9: ,_]{1,}\"|sed 's/: /=/g'|sed 's/ /-/g'" #define get_adapter_info_json "lshw -c display -quiet -json" @@ -308,6 +309,8 @@ struct proprietary_struct { int drivers_size; int module_status; int package_status; + int module_exist; + int package_exist; }; struct proprietary_kernel_append_struct {