Fixes; New functions added

pull/47/head
parent 00f358b38e
commit 2d8aff421c
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -63,7 +63,7 @@ int _yon_packages_get_db(){
GRegex *regex = g_regex_new("^\\[.*\\]$",G_REGEX_MULTILINE,0,NULL); GRegex *regex = g_regex_new("^\\[.*\\]$",G_REGEX_MULTILINE,0,NULL);
GMatchInfo *match = NULL; GMatchInfo *match = NULL;
g_regex_match(regex,pacman_config_full,G_REGEX_MATCH_DEFAULT,&match); g_regex_match(regex,pacman_config_full,G_REGEX_MATCH_DEFAULT,&match);
while (g_match_info_matches(match)){ while (g_match_info_matches(match)){
char *iter = g_match_info_fetch(match,0); char *iter = g_match_info_fetch(match,0);
if (iter[0]=='['){ if (iter[0]=='['){
@ -79,6 +79,43 @@ int _yon_packages_get_db(){
return 1; return 1;
} }
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;
}
return db_list;
}
int yon_packages_init(){ int yon_packages_init(){
if (packages_struct.packages_handle) return 0; if (packages_struct.packages_handle) return 0;
@ -130,6 +167,58 @@ int yon_packages_check_updates(char *package_name){
return 0; return 0;
} }
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);
}
}
}
return final;
}
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));
}
}
}
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));
}
}
}
void yon_packages_update(){ void yon_packages_update(){
if (packages_struct.packages_handle) alpm_release(packages_struct.packages_handle); if (packages_struct.packages_handle) alpm_release(packages_struct.packages_handle);
_yon_packages_get_db(); _yon_packages_get_db();

@ -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); GtkWidget *yon_ubl_browser_window_open(char *link, char *browser_window_name);
#endif #endif
#endif
// rmb menu section // rmb menu section
typedef struct { typedef struct {
GtkWidget *menu; GtkWidget *menu;
@ -564,18 +564,19 @@ void yon_gtk_revealer_set_from_expander(GtkRevealer *revealer, GtkExpander *targ
void yon_gtk_window_set_shrinking_from_revealer_resizing(GtkWindow *window, GtkRevealer *revealer); 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() /**yon_packages_init()
* Инициализация системы пакетов. Инициализация происходит долго, * Инициализация системы пакетов. Инициализация происходит долго,
* рекомендуется вызывать как можно ближе к началу работы кода. * рекомендуется вызывать как можно ближе к началу работы кода.
*/ */
int yon_packages_init(); int yon_packages_init();
/**yon_packages_finalize()
* Завершает инициирование системы пакетов из yon_packages_init().
* Рекомендуется вызывать как можно ближе к месту первого использования системы пакетов.
*/
int yon_packages_finalize();
/*Проверить существовует ли пакет в репозиториях*/ /*Проверить существовует ли пакет в репозиториях*/
int yon_packages_check_exist(const char *package); int yon_packages_check_exist(const char *package);
@ -588,4 +589,10 @@ void yon_packages_update();
int yon_packages_install(char *package); int yon_packages_install(char *package);
int yon_packages_remove(char *package); int yon_packages_remove(char *package);
void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(result_callback)(char*)); 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*));
#endif
Loading…
Cancel
Save