Drivers loading optimization

pull/111/head
parent 4777074654
commit 3089e0ae7a
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -1045,7 +1045,7 @@ gboolean yon_proprietary_set(main_window *widgets){
gboolean yon_proprietary_append(struct proprietary_struct *target){ gboolean yon_proprietary_append(struct proprietary_struct *target){
GtkTreeIter iter; GtkTreeIter iter;
gtk_list_store_append(main_config.list,&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); free(target);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
@ -1091,31 +1091,48 @@ void *yon_proprietary_local_get(main_window *widgets){
config_str rtn=NULL; config_str rtn=NULL;
rtn = yon_resource_open_file(get_proprietary_drivers_info_path,&size); rtn = yon_resource_open_file(get_proprietary_drivers_info_path,&size);
for (int i=1;i<size;i++){ for (int i=1;i<size;i++){
if (rtn[i][strlen(rtn[i])-1]=='\n') rtn[i][strlen(rtn[i])-1] = '\0'; yon_char_remove_last_symbol(rtn[i],'\n');
}
int packages_size;
config_str packages = yon_config_load(yon_get_all_pacman_packages_command,&packages_size);
GHashTable *table = g_hash_table_new(g_str_hash,g_str_equal);
if (packages_size){
for (int i=0;i<packages_size;i++){
yon_char_remove_last_symbol(packages[i],'\n');
g_hash_table_add(table,packages[i]);
printf("%s\n",packages[i]);
}
// yon_char_parsed_free(packages,packages_size);
} }
g_idle_add((GSourceFunc)yon_proprietary_disconnect,widgets); g_idle_add((GSourceFunc)yon_proprietary_disconnect,widgets);
for (int dr_desc=1;dr_desc<size;dr_desc++){ for (int dr_desc=1;dr_desc<size;dr_desc++){
yon_debug_output("%s\n","Driver add");
int current_size; int current_size;
config_str current = yon_char_parse(rtn[dr_desc],&current_size,";"); config_str current = yon_char_parse(rtn[dr_desc],&current_size,";");
if ((!strcmp(current[0],"")||yon_char_parsed_check_exist(kernels_installed,kernels_size,current[0])>-1)){ if ((!strcmp(current[0],"")||
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]))))){ yon_char_parsed_check_exist(kernels_installed,kernels_size,current[0])>-1)){
int module_status = !yon_char_is_empty(current[1])?!system(yon_get_is_installed_command(current[1])):0; if ((!yon_char_is_empty(current[1])&&
int package_status = !yon_char_is_empty(current[2])?!system(yon_get_is_installed_command(current[2])):0; 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)); struct proprietary_struct *cur = malloc(sizeof(struct proprietary_struct));
cur->drivers=current; cur->drivers=current;
cur->drivers_size=current_size; cur->drivers_size=current_size;
cur->module_status=module_status; cur->module_status=module_status;
cur->package_status=package_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); g_idle_add((GSourceFunc)yon_proprietary_append,cur);
} }
} }
yon_debug_output("%s\n","Driver end");
if (dr_desc==size-1) { if (dr_desc==size-1) {
g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); g_idle_add((GSourceFunc)yon_proprietary_connect,widgets);
} }
} }
g_hash_table_unref(table);
if (!size){ if (!size){
g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); g_idle_add((GSourceFunc)yon_proprietary_connect,widgets);
} }

@ -59,6 +59,7 @@
#define yon_get_is_installed_command(target) yon_char_append("pacman -Q ",target) #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_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 "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" #define get_adapter_info_json "lshw -c display -quiet -json"
@ -308,6 +309,8 @@ struct proprietary_struct {
int drivers_size; int drivers_size;
int module_status; int module_status;
int package_status; int package_status;
int module_exist;
int package_exist;
}; };
struct proprietary_kernel_append_struct { struct proprietary_kernel_append_struct {

Loading…
Cancel
Save