Git-Url:
http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=20b3dd785ee8a3a852f2f2047056f93c7d94a53d
commit 20b3dd785ee8a3a852f2f2047056f93c7d94a53d
Author: Priyank <[EMAIL PROTECTED]>
Date: Wed Sep 5 14:55:42 2007 +0530
gfpm
* gfpm can now manage multiple repositories.
* repositories are parsed from pacman.conf
diff --git a/data/gfpm.glade b/data/gfpm.glade
index 71e2bb1..f19190d 100644
--- a/data/gfpm.glade
+++ b/data/gfpm.glade
@@ -269,8 +269,7 @@
<child>
<widget class="GtkComboBox" id="combobox_repos">
<property name="visible">True</property>
- <property name="items">All packages
-Installed packages</property>
+ <property name="items"></property>
</widget>
<packing>
<property name="expand">False</property>
diff --git a/src/gfpm-db.c b/src/gfpm-db.c
index 34ca785..f572737 100644
--- a/src/gfpm-db.c
+++ b/src/gfpm-db.c
@@ -19,8 +19,7 @@
*/
#define _GNU_SOURCE
-#define FW_CURRENT "frugalware-current"
-#define FW_LOCAL "local"
+#define CFG_FILE "/etc/pacman.conf"
#include <pacman.h>
#include "gfpm-db.h"
@@ -30,20 +29,39 @@ PM_DB *sync_db = NULL;
PM_DB *local_db = NULL;
char *repo = NULL;
+static GList *dblist = NULL;
+
+static void _db_callback (char *section, PM_DB *db);
int
gfpm_db_init (void)
{
- if (NULL == (sync_db=pacman_db_register(FW_CURRENT)))
- return 1;
+ //if (NULL == (sync_db=pacman_db_register(FW_CURRENT)))
+ // return 1;
if (NULL == (local_db=pacman_db_register(FW_LOCAL)))
return 1;
- asprintf (&repo, "%s", FW_CURRENT);
+ //asprintf (&repo, "%s", FW_CURRENT);
return 0;
}
void
+gfpm_db_register (const char *dbname)
+{
+ if (sync_db != NULL);
+ {
+ pacman_db_unregister (sync_db);
+ sync_db = NULL;
+ g_free (repo);
+ }
+ if (strcmp(dbname,"local"))
+ sync_db = pacman_db_register (dbname);
+ asprintf (&repo, dbname);
+
+ return;
+}
+
+void
gfpm_db_cleanup (void)
{
pacman_db_unregister (sync_db);
@@ -53,3 +71,30 @@ gfpm_db_cleanup (void)
return;
}
+static void
+_db_callback (char *section, PM_DB *db)
+{
+ dblist = g_list_append (dblist, db);
+
+ return;
+}
+
+int
+gfpm_db_populate_repolist (void)
+{
+ /* get the list of usable repositories */
+ if (pacman_parse_config (CFG_FILE, _db_callback, "") == -1)
+ {
+ printf ("error parsing config file");
+ return 1;
+ }
+
+ return 0;
+}
+
+GList *
+gfpm_db_get_repolist (void)
+{
+ return dblist;
+}
+
diff --git a/src/gfpm-db.h b/src/gfpm-db.h
index 73c97b4..0f381d7 100644
--- a/src/gfpm-db.h
+++ b/src/gfpm-db.h
@@ -8,9 +8,17 @@
#include <locale.h>
#include <libintl.h>
#include <pacman.h>
+#include <gtk/gtk.h>
+#define FW_CURRENT "frugalware-current"
+#define FW_STABLE "frugalware-stable"
+#define FW_LOCAL "local"
+
+void gfpm_db_register (const char *);
int gfpm_db_init (void);
void gfpm_db_cleanup (void);
+int gfpm_db_populate_repolist (void);
+GList *gfpm_db_get_repolist (void);
#endif
diff --git a/src/gfpm-interface.c b/src/gfpm-interface.c
index 043956c..39f08e5 100644
--- a/src/gfpm-interface.c
+++ b/src/gfpm-interface.c
@@ -72,6 +72,7 @@ static GtkWidget *gfpm_apply_inst_depcheck;
static GtkWidget *gfpm_apply_inst_dwocheck;
static GtkWidget *gfpm_apply_rem_depcheck;
+static void gfpm_populate_repos_combobox (GtkComboBox *combo);
static void cb_gfpm_repos_combo_changed (GtkComboBox *combo, gpointer data);
static void cb_gfpm_groups_tvw_selected (GtkTreeSelection *selection, gpointer
data);
static void cb_gfpm_pkgs_tvw_selected (GtkTreeSelection *selection, gpointer
data);
@@ -84,6 +85,32 @@ static void cb_gfpm_clear_cache_apply_clicked (GtkButton
*button, gpointer data)
static void cb_gfpm_refresh_button_clicked (GtkButton *button, gpointer data);
static void cb_gfpm_mark_for_upgrade (GtkButton *button, gpointer data);
+static void
+gfpm_populate_repos_combobox (GtkComboBox *combo)
+{
+ GList *rlist = NULL;
+ GtkListStore *store = NULL;
+ GtkTreeIter iter;
+ gint index = -1;
+
+ store = GTK_LIST_STORE (gtk_combo_box_get_model(GTK_COMBO_BOX(combo)));
+ rlist = gfpm_db_get_repolist ();
+ for (;rlist != NULL;rlist=rlist->next)
+ {
+ char *repo = (char *)pacman_db_getinfo ((PM_DB *)rlist->data,
PM_DB_TREENAME);
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, repo, -1);
+ if (!strcmp(repo,FW_CURRENT))
+ index++;
+ }
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, (char*)_("Installed Packages"),
-1);
+ g_signal_connect (G_OBJECT(combo), "changed",
G_CALLBACK(cb_gfpm_repos_combo_changed), NULL);
+ gtk_combo_box_set_active (GTK_COMBO_BOX(combo), index);
+
+ return;
+}
+
void
gfpm_interface_init (void)
{
@@ -116,11 +143,7 @@ gfpm_interface_init (void)
gfpm_apply_rem_depcheck = glade_xml_get_widget (xml, "applyremdepcheck");
gfpm_apply_inst_dwocheck = glade_xml_get_widget (xml, "applyinstdwcheck");
- /* Setup repository combobox */
- widget = glade_xml_get_widget (xml, "combobox_repos");
- store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(widget)));
- gtk_combo_box_set_active (GTK_COMBO_BOX(widget), 0);
- g_signal_connect (G_OBJECT(widget), "changed",
G_CALLBACK(cb_gfpm_repos_combo_changed), NULL);
+ //g_signal_connect (G_OBJECT(widget), "changed",
G_CALLBACK(cb_gfpm_repos_combo_changed), NULL);
/* Setup groups treeview */
store = gtk_list_store_new (1, G_TYPE_STRING);
@@ -211,6 +234,11 @@ gfpm_interface_init (void)
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW(gfpm_info_tvw), -1,
"Value", renderer, "text", 1, NULL);
gtk_tree_view_set_model (GTK_TREE_VIEW(gfpm_info_tvw), GTK_TREE_MODEL(store));
g_object_set (gfpm_info_tvw, "hover-selection", TRUE, NULL);
+
+ /* Setup repository combobox */
+ widget = glade_xml_get_widget (xml, "combobox_repos");
+ if (gfpm_db_populate_repolist() == 0)
+ gfpm_populate_repos_combobox (widget);
/* search */
g_signal_connect (G_OBJECT(glade_xml_get_widget(xml, "search_entry1")),
"key-release-event", G_CALLBACK(cb_gfpm_search_keypress), NULL);
@@ -245,7 +273,6 @@ gfpm_interface_init (void)
gfpm_progress_init ();
/* load default repo */
- gfpm_load_groups_tvw ("frugalware-current");
gtk_widget_hide (gfpm_splash);
gtk_widget_show_all (gfpm_mw);
@@ -413,7 +440,7 @@ gfpm_load_groups_tvw (const char *repo_name)
PM_DB *db;
char *temp;
- if (!strcmp(repo_name,"frugalware-current"))
+ if (strcmp(repo_name,"local"))
db = sync_db;
else
db = local_db;
@@ -423,7 +450,6 @@ gfpm_load_groups_tvw (const char *repo_name)
model = gtk_tree_view_get_model (GTK_TREE_VIEW(gfpm_groups_tvw));
gtk_list_store_clear (GTK_LIST_STORE(model));
-
for (l=pacman_db_getgrpcache(db); l; l=pacman_list_next(l))
{
asprintf (&temp, _("Loading groups ... [%s]"), (char*)pacman_list_getdata(l));
@@ -1000,30 +1026,21 @@ cleanup:
static void
cb_gfpm_repos_combo_changed (GtkComboBox *combo, gpointer data)
{
- gint index;
+ gchar *text = NULL;
- index = gtk_combo_box_get_active (combo);
- switch (index)
+ text = gtk_combo_box_get_active_text (combo);
+ if (!strcmp(text, "Installed Packages"))
{
- case 0: /* frugalware-Current */
- g_free (repo);
- asprintf (&repo, "frugalware-current");
- gfpm_load_groups_tvw ("frugalware-current");
- break;
-
- case 1: /* local */
- g_free (repo);
- asprintf (&repo, "local");
- gfpm_load_groups_tvw ("local");
- break;
-
- default: break;
+ g_free (text);
+ text = g_strdup ("local");
}
+ gfpm_db_register (text);
+ gfpm_load_groups_tvw (text);
+ g_free (text);
return;
}
-
static void
cb_gfpm_groups_tvw_selected (GtkTreeSelection *selection, gpointer data)
{
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git