You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libublsettings-gtk3/source/libublsettings-gtk3.c

296 lines
10 KiB

#include "libublsettings-gtk3.h"
#ifdef __GTK_H__
// GtkEntry section
// struct entry_pattern_data {
// GtkEntry *entry;
// char *pattern; // %d %s
// };
// char *yon_gtk_entry_pattern_format(GtkWidget *target, struct entry_pattern_data *data){
// if (target){
// const char *entry_data = gtk_entry_get_text(target);
// int next_track=0;
// for (int i=0; i<strlen(data->pattern);i++){
// char target_letter=-1;
// target_letter = ;
// switch (data->pattern[i]){
// case '%':next_track=1;
// break;
// case 'd':if (next_track){
// }
// break;
// case 's':
// break;
// default:
// }
// }
// };
// }
// void yon_gtk_entry_set_pattern(GtkEntry *entry, char *pattern){
// struct entry_pattern_data *data = malloc(sizeof(struct entry_pattern_data));
// data->entry=entry;
// data->pattern=pattern;
// char *current_text = gtk_entry_get_text(entry);
// }
struct packages {
GHashTable *all_list;
GHashTable *installed_list;
GHashTable *updates_list;
int init_status;
} packages_struct;
GThread *packages_thread = NULL;
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);
int size;
int installed_size;
int updates_size;
config_str package_list = yon_config_load("pacman -Slq",&size);
config_str installed = yon_config_load("pacman -Qq",&installed_size);
config_str updates = yon_config_load("pacman -Qqu",&updates_size);
for (int i=0;i<size;i++){
while(gtk_events_pending()) gtk_main_iteration();
yon_char_remove_last_symbol(package_list[i],'\n');
g_hash_table_add(packages_struct.all_list,package_list[i]);
}
for (int i=0;i<installed_size;i++){
while(gtk_events_pending()) gtk_main_iteration();
yon_char_remove_last_symbol(installed[i],'\n');
g_hash_table_add(packages_struct.installed_list,installed[i]);
}
for (int i=0;i<updates_size;i++){
while(gtk_events_pending()) gtk_main_iteration();
yon_char_remove_last_symbol(updates[i],'\n');
g_hash_table_add(packages_struct.updates_list,updates[i]);
}
free(package_list);
free(installed);
free(updates);
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);
}
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)
#define remove_package_command(target) yon_char_unite("pacman -R ",target,NULL)
#define update_package_installed_command(target) yon_char_append("pacman -Qq ",target)
#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)){
g_hash_table_add(packages_struct.installed_list,yon_char_new(package));
}
} else {
if (g_hash_table_contains(packages_struct.installed_list,package)){
g_hash_table_remove(packages_struct.installed_list,package);
}
}
free(command);
}
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)){
g_hash_table_add(packages_struct.updates_list,yon_char_new(package));
}
} else {
if (g_hash_table_contains(packages_struct.updates_list,package)){
g_hash_table_remove(packages_struct.updates_list,package);
}
}
free(command);
}
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)){
g_hash_table_add(packages_struct.installed_list,yon_char_new(package));
}
} else {
if (g_hash_table_contains(packages_struct.installed_list,package)){
g_hash_table_remove(packages_struct.installed_list,package);
}
}
free(command);
command = update_package_updated_command(package);
if (!system(command)){
if (!g_hash_table_contains(packages_struct.updates_list,package)){
g_hash_table_add(packages_struct.updates_list,yon_char_new(package));
}
} else {
if (g_hash_table_contains(packages_struct.updates_list,package)){
g_hash_table_remove(packages_struct.updates_list,package);
}
}
free(command);
}
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,"","");
yon_packages_update_package(package);
free(command);
}
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,"","");
yon_packages_update_package(package);
free(command);
}
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);
}
config_str yon_resource_open_file(const char *path, int *size){
config_str parsed = NULL;
char *modules = NULL;
gsize sz=0;
GFile *file = g_file_new_for_uri(path);
g_file_load_contents(file,NULL,&modules,&sz,NULL,NULL);
g_object_unref(G_OBJECT(file));
parsed = yon_char_parse(modules,size,"\n");
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;
// char *widget_parameter;
// void *check_function;
// char *parameter;
// char *save_command;
// } config_listener;
// void __yon_gtk_config_activated(GtkWidget *, config_listener *current){
// char *parameter;
// if (((int (*)(char*, GtkWidget*, char*))(current->check_function))(parameter,current->target, current->parameter)) {
// }
// }
// int yon_gtk_config_add_listener (GtkWidget *target, char *parameter, char *save_command,int(check_function)(char*,GtkWidget*,char*)){
// if (__yon_config_listeners){
// dictionary *dict;
// for_dictionaries(dict,__yon_config_listeners){
// if (target==((config_listener*)dict->data)->target){
// return 0;
// }
// }
// }
// config_listener *current = malloc(sizeof(config_listener));
// current->target=target;
// current->parameter = parameter;
// current->save_command = save_command;
// current->check_function = (void*)check_function;
// if (GTK_IS_TOGGLE_BUTTON(target)){
// g_signal_connect(G_OBJECT(target),"toggled",C_CALLBACK(__yon_gtk_config_activated),current);
// }
// yon_dictionary_add_or_create_if_exists_with_data(__yon_config_listeners,NULL,current);
// return 0;
// }
#endif