Merge pull request 'Fixed pacman commands' (#47) from YanTheKaller/libublsettings-gtk3:master into master

Reviewed-on: #47
master v1.45
Dmitry Razumov 5 months ago
commit 828ad7c99f

@ -14,6 +14,11 @@ include_directories(${VTE291_INCLUDE_DIRS})
link_directories(${VTE291_LIBRARY_DIRS})
add_definitions(${VTE291_CFLAGS_OTHER})
pkg_check_modules(ALPM REQUIRED libalpm)
include_directories(${ALPM_INCLUDE_DIRS})
link_directories(${ALPM_LIBRARY_DIRS})
add_definitions(${ALPM_CFLAGS_OTHER})
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
option(WEBKIT_FOUND "No" OFF)
@ -52,6 +57,8 @@ pthread)
add_definitions(-DVTE_INCLUDE)
list(APPEND LIBRARIES ${VTE291_LIBRARIES})
list(APPEND LIBRARIES ${ALPM_LIBRARIES})
if (WEBKIT_LIBRARIES_FOUND)
list(APPEND LIBRARIES ${WEBKIT_LIBRARIES})
add_definitions(-DWEBKIT_INCLUDE)

@ -241,11 +241,11 @@ void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *t
}
void yon_gtk_widget_set_sensitive_from_switch(GtkSwitch *toggle, GtkWidget *target){
void yon_gtk_widget_set_sensitive_from_switch(GtkSwitch *toggle, int status, GtkWidget *target){
gtk_widget_set_sensitive(target,gtk_switch_get_active(toggle));
}
void yon_gtk_widget_set_sensitive_from_switch_inversed(GtkSwitch *toggle, GtkWidget *target){
void yon_gtk_widget_set_sensitive_from_switch_inversed(GtkSwitch *toggle, int status, GtkWidget *target){
gtk_widget_set_sensitive(target,!gtk_switch_get_active(toggle));
}
@ -447,38 +447,19 @@ void yon_gtk_window_set_shrinking_from_revealer_resizing(GtkWindow *window, GtkR
g_signal_connect(G_OBJECT(wrapped->revealer),"notify::reveal-child",G_CALLBACK(_yon_on_revealer_switched),wrapped);
}
// void on_entry_pattern_inserted(GtkEditable *self, const gchar *text, gint length, gint *position, char *pattern){
// if (length!=1) {
// return;
// }
// const char *old = gtk_entry_get_text(GTK_ENTRY(self));
// int old_size = strlen(old);
// char *final = yon_char_append((char*)old,text);
void on_entry_pattern_inserted(GtkEditable *self, const gchar *text, gint length, gint *position, char *pattern){
const char *old_text = gtk_entry_get_text(GTK_ENTRY(self));
char *test_text = yon_char_append(old_text,text);
if (!g_regex_match_simple(pattern,test_text,0,0)){
g_signal_stop_emission_by_name(G_OBJECT(self),"insert-text");
}
// switch(pattern[old_size]){
// case '\1':{
// if (text[0]>='0'&&text[0]<='9')
// }
// break;
// case '\2':
// break;
// default:
// break;
// }
// if (strlen(new_text) < strlen(text)) {
// g_signal_handlers_block_by_func(editable, G_CALLBACK(yon_on_space_first_changed), NULL);
// gtk_entry_set_text(editable, new_text);
// g_signal_handlers_unblock_by_func(editable, G_CALLBACK(yon_on_space_first_changed), NULL);
// g_signal_stop_emission_by_name(editable, "changed");
// }
// }
// void yon_entry_set_pattern(GtkEntry *target, char *pattern){
// char *pattern_copy = yon_char_new(pattern);
// g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(on_entry_pattern_inserted),pattern_copy)
// }
}
void yon_entry_set_pattern(GtkEntry *target, char *pattern){
char *pattern_copy = yon_char_new(pattern);
g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(on_entry_pattern_inserted),pattern_copy);
}
void yon_on_insert_allowed_check(GtkEditable *editable, char *text, int length, int *position,char *symbols){
@ -506,4 +487,45 @@ void yon_on_insert_allowed_check(GtkEditable *editable, char *text, int length,
void yon_on_entry_set_allowed_symbols(GtkEntry *target, char *symbols){
g_return_if_fail(GTK_IS_ENTRY(target));
g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(yon_on_insert_allowed_check),symbols);
}
int yon_ip_check(char *ip){
if (!strstr(ip,".")){
int pixmask = atoi(ip);
if (pixmask > 32) return 0;
} else {
if (!g_regex_match_simple("^(\\d){0,3}\\.(\\d){0,3}\\.(\\d){0,3}\\.(\\d){0,3}$",ip,0,0)) return 0;
int size;
config_str parsed = yon_char_parse(ip,&size,".");
for (int i=0;i<size;i++){
int bits = atoi(parsed[i]);
if (bits>255){
yon_char_parsed_free(parsed,size);
return 0;
}
}
yon_char_parsed_free(parsed,size);
}
return 1;
}
int yon_ip_mask_get_bits(char *mask){
if (!strstr(mask,".")){
int bits = atoi(mask);
return bits;
}
int size;
config_str parsed = yon_char_parse(mask,&size,".");
int bits = 32;
for (int i=0;i<size;i++){
int pixmask = atoi(parsed[i]);
int k;
for (k=0;k<8;k++){
if (!(pixmask & (1<<k))){
bits--;
}
}
}
yon_char_parsed_free(parsed,size);
return bits;
}

@ -286,7 +286,7 @@
break;
}
} else {
g_error("Window configuration were not set");
g_warning("Window configuration were not set");
}
return 0;
}

@ -1,5 +1,7 @@
#include "libublsettings-gtk3.h"
#include <alpm.h>
#ifdef __GTK_H__
// GtkEntry section
@ -40,112 +42,228 @@
// }
struct packages {
GHashTable *all_list;
GHashTable *installed_list;
GHashTable *updates_list;
} packages_struct;
alpm_handle_t *packages_handle;
int init_status;
} packages_struct = {};
int _yon_packages_get_db(){
const char *root = "/";
const char *dbpath = "/var/lib/pacman";
const char *config_path = "/etc/pacman.conf";
packages_struct.packages_handle = alpm_initialize(root,dbpath,NULL);
if (!packages_struct.packages_handle){
packages_struct.init_status=0;
return 0;
}
int size = 0;
config_str pacman_config = yon_file_open((char*)config_path,&size);
char *pacman_config_full = yon_char_parsed_to_string(pacman_config,size,"");
GRegex *regex = g_regex_new("^\\[.*\\]$",G_REGEX_MULTILINE,0,NULL);
GMatchInfo *match = NULL;
g_regex_match(regex,pacman_config_full,G_REGEX_MATCH_DEFAULT,&match);
while (g_match_info_matches(match)){
char *iter = g_match_info_fetch(match,0);
if (iter[0]=='['){
free(yon_char_divide(iter,0));
yon_char_remove_last_symbol(iter,']');
}
if (strcmp(iter,"options")){
alpm_register_syncdb(packages_struct.packages_handle,iter,ALPM_SIG_USE_DEFAULT);
}
g_match_info_next(match,NULL);
}
int yon_packages_init(){
if (getuid()) return 0;
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);
return 1;
}
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++){
yon_char_remove_last_symbol(package_list[i],'\n');
g_hash_table_add(packages_struct.all_list,package_list[i]);
}
alpm_list_t *_yon_packages_get_db_list(enum YON_PACKAGES_DB_TYPE type){
alpm_list_t *db_list = NULL;
switch(type){
case YON_PACKAGES_LOCAL:
alpm_db_t *database = alpm_get_localdb(packages_struct.packages_handle);
if (!db_list) db_list = alpm_list_append(&db_list,database);
else alpm_list_append(&db_list,database);
break;
case YON_PACKAGES_SYNC:
alpm_list_t *sync_db = alpm_get_syncdbs(packages_struct.packages_handle);
for (alpm_list_t *iter=sync_db;iter;iter=alpm_list_next(iter)){
alpm_db_t *database = iter->data;
if (!db_list) db_list = alpm_list_append(&db_list,database);
else alpm_list_append(&db_list,database);
}
break;
case YON_PACKAGES_ALL:{
alpm_list_t *sync_db = alpm_get_syncdbs(packages_struct.packages_handle);
for (alpm_list_t *iter=sync_db;iter;iter=alpm_list_next(iter)){
alpm_db_t *database = iter->data;
if (!db_list) db_list = alpm_list_append(&db_list,database);
else alpm_list_append(&db_list,database);
}
}
{
alpm_db_t *database = alpm_get_localdb(packages_struct.packages_handle);
if (!db_list) db_list = alpm_list_append(&db_list,database);
else alpm_list_append(&db_list,database);
}
break;
for (int i=0;i<installed_size;i++){
yon_char_remove_last_symbol(installed[i],'\n');
g_hash_table_add(packages_struct.installed_list,installed[i]);
}
return db_list;
}
for (int i=0;i<updates_size;i++){
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);
int yon_packages_init(){
if (packages_struct.packages_handle) return 0;
if (g_hash_table_size(packages_struct.all_list)&&g_hash_table_size(packages_struct.installed_list))
return 1;
int status = _yon_packages_get_db();
if (!status) return 0;
return 0;
return 1;
}
#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){
return g_hash_table_contains(packages_struct.all_list,package);
int yon_packages_check_exist(const char *package_name){
alpm_list_t *sync_db = alpm_get_syncdbs(packages_struct.packages_handle);
for (alpm_list_t *iter=sync_db;iter;iter=alpm_list_next(iter)){
alpm_db_t *database = iter->data;
alpm_pkg_t *package = alpm_db_get_pkg(database,package_name);
if (package) return 1;
}
return 0;
}
int yon_packages_check_installed(char *package){
return g_hash_table_contains(packages_struct.installed_list,package);
int yon_packages_check_installed(char *package_name){
alpm_db_t *database = alpm_get_localdb(packages_struct.packages_handle);
alpm_pkg_t *package = alpm_db_get_pkg(database,package_name);
if (package) return 1;
return 0;
}
int yon_packages_check_updates(char *package){
return g_hash_table_contains(packages_struct.updates_list,package);
int yon_packages_check_updates(char *package_name){
alpm_pkg_t *sync_db_package = NULL;
alpm_pkg_t *local_db_package = NULL;
alpm_list_t *sync_db = alpm_get_syncdbs(packages_struct.packages_handle);
for (alpm_list_t *iter=sync_db;iter;iter=alpm_list_next(iter)){
alpm_db_t *database = iter->data;
alpm_pkg_t *package = alpm_db_get_pkg(database,package_name);
if (package) sync_db_package = package;
}
{
alpm_db_t *database = alpm_get_localdb(packages_struct.packages_handle);
alpm_pkg_t *package = alpm_db_get_pkg(database,package_name);
if (package) local_db_package = package;
}
if (sync_db_package && local_db_package){
const char *sync_db_package_version = alpm_pkg_get_version(sync_db_package);
const char *local_db_package_version = alpm_pkg_get_version(sync_db_package);
if (strcmp(sync_db_package_version,local_db_package_version)) return 1;
}
return 0;
}
void yon_packages_update_package(char *package){
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);
config_str yon_packages_find(enum YON_PACKAGES_DB_TYPE type, const char *search_string, gsize *size){
(*size)=0;
if (yon_char_is_empty(search_string)) return NULL;
config_str final = NULL;
alpm_list_t *databases = _yon_packages_get_db_list(type);
alpm_list_t *iter = NULL;
for (iter = databases; iter; iter=iter->next){
alpm_db_t *database = iter->data;
alpm_list_t *packages = alpm_db_get_pkgcache(database);
alpm_list_t *iter2 = NULL;
for (iter2 = packages; iter2; iter2=iter2->next){
const char *name = alpm_pkg_get_name(iter2->data);
if (strstr(name,search_string)){
yon_char_parsed_add_or_create_if_exists(final,(int*)size,(char*)name);
}
}
}
free(command);
return final;
}
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));
char *yon_packages_get_version(enum YON_PACKAGES_DB_TYPE type, const char *package){
if (yon_char_is_empty(package)) return NULL;
alpm_list_t *databases = _yon_packages_get_db_list(type);
alpm_list_t *iter = NULL;
for (iter = databases; iter; iter=iter->next){
alpm_pkg_t *pkg = alpm_db_get_pkg(iter->data,package);
if (!pkg) continue;
const char *name = alpm_pkg_get_name(pkg);
if (!strcmp(name,package)){
return yon_char_new(alpm_pkg_get_version(pkg));
}
} else {
if (g_hash_table_contains(packages_struct.updates_list,package)){
g_hash_table_remove(packages_struct.updates_list,package);
}
}
char *yon_packages_get_description(enum YON_PACKAGES_DB_TYPE type, const char *package){
if (yon_char_is_empty(package)) return NULL;
alpm_list_t *databases = _yon_packages_get_db_list(type);
alpm_list_t *iter = NULL;
for (iter = databases; iter; iter=iter->next){
alpm_pkg_t *pkg = alpm_db_get_pkg(iter->data,package);
if (!pkg) continue;
const char *name = alpm_pkg_get_name(pkg);
if (!strcmp(name,package)){
return yon_char_new(alpm_pkg_get_desc(pkg));
}
}
free(command);
}
void yon_packages_update(){
if (packages_struct.packages_handle) alpm_release(packages_struct.packages_handle);
_yon_packages_get_db();
}
int yon_packages_install(char *package){
char *command = install_package_command(package);
yon_terminal_window_launch(NULL,command,"","");
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);
yon_packages_update();
// free(command);
}
int yon_packages_remove(char *package){
char *command = remove_package_command(package);
yon_terminal_window_launch(NULL,command,"","");
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);
yon_packages_update();
// free(command);
}
void yon_packages_finish(){
g_hash_table_unref(packages_struct.all_list);
g_hash_table_unref(packages_struct.installed_list);
if (!packages_struct.init_status) return;
alpm_release(packages_struct.packages_handle);
}
GList *yon_packages_get_all(){
if (!packages_struct.init_status) return NULL;
GList *list = NULL;
alpm_list_t *sync_db = alpm_get_syncdbs(packages_struct.packages_handle);
for (alpm_list_t *iter=sync_db;iter;iter=alpm_list_next(iter)){
alpm_db_t *database = iter->data;
alpm_list_t *package_list = alpm_db_get_pkgcache(database);
for (alpm_list_t *iter = package_list;iter;iter=iter->next){
const char *cur_name = alpm_pkg_get_name(iter->data);
if (!list) list = g_list_append(list,yon_char_new(cur_name));
else if (g_list_append(list,yon_char_new(cur_name))){};
}
}
return list;
}
config_str yon_resource_open_file(const char *path, int *size){
@ -159,6 +277,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;

@ -283,8 +283,8 @@ void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, Gt
*/
void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_switch(GtkSwitch *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_switch_inversed(GtkSwitch *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_switch(GtkSwitch *toggle, int status, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_switch_inversed(GtkSwitch *toggle, int status, GtkWidget *target);
/**yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target);
* [EN]
@ -509,7 +509,7 @@ GtkWidget *yon_ubl_browser_window_open(char *link, char *browser_window_name);
*/
GtkWidget *yon_ubl_browser_window_open(char *link, char *browser_window_name);
#endif
#endif
// rmb menu section
typedef struct {
GtkWidget *menu;
@ -533,6 +533,8 @@ void yon_gtk_entry_block_symbols(GtkEntry *target, char *symbols);
void yon_gtk_entry_block_lowercase(GtkEntry *target);
void yon_entry_set_pattern(GtkEntry *target, char *pattern);
void yon_on_entry_set_allowed_symbols(GtkEntry *target, char *symbols);
// GtkTreeStore section
@ -564,11 +566,39 @@ void yon_gtk_revealer_set_from_expander(GtkRevealer *revealer, GtkExpander *targ
void yon_gtk_window_set_shrinking_from_revealer_resizing(GtkWindow *window, GtkRevealer *revealer);
enum YON_PACKAGES_DB_TYPE {
YON_PACKAGES_LOCAL,
YON_PACKAGES_SYNC,
YON_PACKAGES_ALL,
};
/**yon_packages_init()
* Инициализация системы пакетов. Инициализация происходит долго,
* рекомендуется вызывать как можно ближе к началу работы кода.
*/
int yon_packages_init();
int yon_packages_check_exist(char *package);
/*Проверить существовует ли пакет в репозиториях*/
int yon_packages_check_exist(const char *package);
/*Проверить установлен ли пакет*/
int yon_packages_check_installed(char *package);
int yon_packages_check_updates(char *package);
void yon_packages_finish();
void yon_packages_update_package(char *package);
GList *yon_packages_get_all();
void yon_packages_update();
int yon_packages_install(char *package);
int yon_packages_remove(char *package);
int yon_packages_remove(char *package);
config_str yon_packages_find(enum YON_PACKAGES_DB_TYPE type, const char *search_string, gsize *size);
char *yon_packages_get_version(enum YON_PACKAGES_DB_TYPE type, const char *package);
char *yon_packages_get_description(enum YON_PACKAGES_DB_TYPE type, const char *package);
void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(result_callback)(char*));
int yon_ip_mask_get_bits(char *mask);
int yon_ip_check(char *ip);
#endif
Loading…
Cancel
Save