Git-Url:
http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=f5ec94f541417ca6185715f82ff43c0f09fe6d54
commit f5ec94f541417ca6185715f82ff43c0f09fe6d54
Author: Priyank <[EMAIL PROTECTED]>
Date: Tue Feb 26 16:20:11 2008 +0530
gfpm-repomanager: New repositories can now be added [EXPERIMENTAL]
diff --git a/data/gfpm.glade b/data/gfpm.glade
index 97c7fff..76a9052 100644
--- a/data/gfpm.glade
+++ b/data/gfpm.glade
@@ -2444,13 +2444,13 @@
</widget>
<widget class="GtkDialog" id="gfpm_repomgr_input_dlg">
<property name="width_request">400</property>
- <property name="height_request">250</property>
+ <property name="height_request">280</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK
| GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">New Repository</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="default_width">400</property>
- <property name="default_height">250</property>
+ <property name="default_height">280</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="transient_for">gfpm_repomanager_servermgr</property>
<property name="has_separator">False</property>
@@ -2491,6 +2491,7 @@
<property name="label" translatable="yes">Repository Name</property>
</widget>
<packing>
+ <property name="expand">False</property>
<property name="position">3</property>
</packing>
</child>
@@ -2501,6 +2502,7 @@
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK
| GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
+ <property name="expand">False</property>
<property name="position">4</property>
</packing>
</child>
diff --git a/src/gfpm-repomanager.c b/src/gfpm-repomanager.c
index 66c007f..0d7e275 100644
--- a/src/gfpm-repomanager.c
+++ b/src/gfpm-repomanager.c
@@ -33,10 +33,14 @@
extern GtkWidget *gfpm_mw;
static gfpm_repolist_t *repolist = NULL;
-static gchar *curr_repo = NULL;
+static gchar *curr_repo = NULL;
/* Repository manager widgets */
static GtkWidget *gfpm_repomgr_dlg;
+static GtkWidget *gfpm_repomgr_repo_input_dlg;
+static GtkWidget *gfpm_repomgr_repo_input_dlg_entry1;
+static GtkWidget *gfpm_repomgr_repo_input_dlg_entry2;
+static GtkWidget *gfpm_repomgr_repo_input_dlg_entry3;
static GtkWidget *gfpm_repomgr_treeview;
static GtkWidget *gfpm_repomgr_btnadd;
static GtkWidget *gfpm_repomgr_btndel;
@@ -56,12 +60,15 @@ static GtkWidget *gfpm_servmgr_btnmup;
static GtkWidget *gfpm_servmgr_btnmdn;
static GtkWidget *gfpm_servmgr_btnedit;
+static void gfpm_write_config_file (void);
static void convert_server_to_repofile (void);
static void gfpm_write_servers_to_file (const gchar *reponame);
static void gfpm_servmgr_edit_server (gfpm_server_entry_t *s);
+static gfpm_repo_t * gfpm_repomgr_get_repo_input (void);
static gfpm_server_entry_t * gfpm_servmgr_get_server_input (void);
/* signal callbacks */
+static void cb_gfpm_repomgr_btnadd_clicked (GtkButton *button, gpointer data);
static void cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, gpointer data);
static void cb_gfpm_servmgr_btndel_clicked (GtkButton *button, gpointer data);
static void cb_gfpm_servmgr_btnedit_clicked (GtkButton *button, gpointer data);
@@ -93,6 +100,10 @@ gfpm_repomanager_init (void)
gfpm_servmgr_server_input_dlg = gfpm_get_widget ("gfpm_servmgr_input_dlg");
gfpm_servmgr_server_input_dlg_entry1 = gfpm_get_widget ("entry1");
gfpm_servmgr_server_input_dlg_entry2 = gfpm_get_widget ("commentview");
+ gfpm_repomgr_repo_input_dlg = gfpm_get_widget
("gfpm_repomgr_input_dlg");
+ gfpm_repomgr_repo_input_dlg_entry1 = gfpm_get_widget ("reponame");
+ gfpm_repomgr_repo_input_dlg_entry2 = gfpm_get_widget ("serverurl");
+ gfpm_repomgr_repo_input_dlg_entry3 = gfpm_get_widget ("commentview2");
/* setup repo store */
store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
@@ -137,6 +148,7 @@ gfpm_repomanager_init (void)
/* connect important signals */
/* repository manager signals */
g_signal_connect (G_OBJECT(gfpm_repomgr_btnedit), "clicked",
G_CALLBACK(cb_gfpm_repomgr_btnedit_clicked), NULL);
+ g_signal_connect (G_OBJECT(gfpm_repomgr_btnadd), "clicked",
G_CALLBACK(cb_gfpm_repomgr_btnadd_clicked), NULL);
/* server manager signals */
g_signal_connect (G_OBJECT(gfpm_servmgr_btndel), "clicked",
G_CALLBACK(cb_gfpm_servmgr_btndel_clicked), NULL);
@@ -228,6 +240,43 @@ convert_server_to_repofile (void)
return;
}
+static void
+gfpm_write_config_file (void)
+{
+ FILE *fp = NULL;
+ GList *rlist = NULL;
+ gfpm_repo_t *repo = NULL;
+
+ fp = fopen (CONF_FILE, "w");
+ if (fp == NULL)
+ {
+ gfpm_error (_("Error saving configuration"), _("Gfpm could not
open the pacman-g2.conf file for saving. Make sure no other program is using
it"));
+ return;
+ }
+
+ rlist = repolist->list;
+ while (rlist != NULL)
+ {
+ GList *header = NULL;
+
+ repo = rlist->data;
+ header = repo->header;
+ /* write the header first */
+ while (header != NULL)
+ {
+ fprintf (fp, "%s\n", (char*)header->data);
+ header = g_list_next (header);
+ }
+ /* write the repository entry */
+ fprintf (fp, "Include = %s/%s\n", REPO_PATH, repo->name);
+
+ rlist = g_list_next (rlist);
+ }
+ fclose (fp);
+
+ return;
+}
+
static gfpm_server_entry_t *
gfpm_servmgr_get_server_input (void)
{
@@ -293,14 +342,110 @@ gfpm_servmgr_get_server_input (void)
return ret;
}
+static gfpm_repo_t *
+gfpm_repomgr_get_repo_input (void)
+{
+ gint response;
+ gchar *name = NULL;
+ gchar *url = NULL;
+ GtkTextBuffer *buffer = NULL;
+ gfpm_repo_t *ret = NULL;
+ gfpm_server_entry_t *server = NULL;
+
+ ret = (gfpm_repo_t *) malloc (sizeof(gfpm_repo_t));
+ memset (ret, 0, sizeof(gfpm_repo_t));
+ run: response = gtk_dialog_run
(GTK_DIALOG(gfpm_repomgr_repo_input_dlg));
+ name = gtk_entry_get_text
(GTK_ENTRY(gfpm_repomgr_repo_input_dlg_entry1));
+ url = gtk_entry_get_text
(GTK_ENTRY(gfpm_repomgr_repo_input_dlg_entry2));
+ buffer = gtk_text_view_get_buffer
(GTK_TEXT_VIEW(gfpm_repomgr_repo_input_dlg_entry3));
+
+ switch (response)
+ {
+ gchar *comments = NULL;
+ GList *rlist = NULL;
+ GtkTextIter siter;
+ GtkTextIter eiter;
+
+ case 32: /* OK Button */
+ {
+ if (name == NULL || !strlen (name))
+ {
+ gfpm_error (_("Error"), _("The Repository Name
field cannot be left blank"));
+ gtk_widget_hide (gfpm_repomgr_repo_input_dlg);
+ goto run;
+ }
+ if (url == NULL || !strlen (url))
+ {
+ gfpm_error (_("Error"), _("The Repository URL
field cannot be left blank"));
+ gtk_widget_hide (gfpm_repomgr_repo_input_dlg);
+ goto run;
+ }
+ /* check if repository name already exists */
+ rlist = repolist->list;
+ while (rlist != NULL)
+ {
+ gfpm_repo_t *r = NULL;
+ r = rlist->data;
+ if (!strcmp(r->name, name))
+ {
+ gfpm_error (_("Repository exists"),
_("A repository with the specified name already exists. Please provide a
different name for the repository."));
+ gtk_widget_hide
(gfpm_repomgr_repo_input_dlg);
+ goto run;
+ }
+ rlist = g_list_next (rlist);
+ }
+ /* good, let's add it then */
+ strncpy (ret->name, name, strlen(name));
+ server = (gfpm_server_entry_t *) malloc
(sizeof(gfpm_server_entry_t));
+ memset (server, 0, sizeof(gfpm_server_entry_t));
+ strncpy (server->url, url, strlen(url));
+ ret->servers = g_list_append (ret->servers,
(gpointer)server);
+ gtk_text_buffer_get_start_iter (buffer, &siter);
+ gtk_text_buffer_get_end_iter (buffer, &eiter);
+ comments = gtk_text_buffer_get_text (buffer, &siter,
&eiter, FALSE);
+ if (comments != NULL)
+ {
+ gchar *cslice = NULL;
+ cslice = strtok (comments, "\n");
+ if (cslice != NULL)
+ {
+ do {
+ gchar *text = g_strdup_printf
("# %s", cslice);
+ server->comments =
g_list_append (server->comments, (gpointer) text);
+ } while
((cslice=strtok(NULL,"\n"))!=NULL);
+ }
+ }
+ gtk_entry_set_text
(GTK_ENTRY(gfpm_repomgr_repo_input_dlg_entry1), "");
+ gtk_entry_set_text
(GTK_ENTRY(gfpm_repomgr_repo_input_dlg_entry2), "");
+ gtk_text_buffer_set_text (buffer, "", 0);
+ gtk_text_view_set_buffer
(GTK_TEXT_VIEW(gfpm_repomgr_repo_input_dlg_entry3), buffer);
+ gtk_widget_hide (gfpm_repomgr_repo_input_dlg);
+ break;
+ }
+
+ case 64: /* CANCEL Button */
+ gtk_entry_set_text
(GTK_ENTRY(gfpm_repomgr_repo_input_dlg_entry1), "");
+ gtk_entry_set_text
(GTK_ENTRY(gfpm_repomgr_repo_input_dlg_entry2), "");
+ gtk_text_buffer_set_text (buffer, "", 0);
+ gtk_text_view_set_buffer
(GTK_TEXT_VIEW(gfpm_repomgr_repo_input_dlg_entry3), buffer);
+ gtk_widget_hide (gfpm_repomgr_repo_input_dlg);
+ g_free (ret);
+ return NULL;
+
+ break;
+ }
+
+ return ret;
+}
+
static GList *
gfpm_repomgr_get_servers_from_repofile (const char *conf_file)
{
- FILE *fp = NULL;
- GList *ret = NULL;
- char line[PATH_MAX+1] = "";
- char server[PATH_MAX+1] = "";
- gfpm_server_entry_t *entry = NULL;
+ FILE *fp = NULL;
+ GList *ret = NULL;
+ char line[PATH_MAX+1] = "";
+ char server[PATH_MAX+1] = "";
+ gfpm_server_entry_t *entry = NULL;
fp = fopen (conf_file, "r");
if (fp == NULL)
@@ -336,7 +481,6 @@ gfpm_repomgr_get_servers_from_repofile (const char
*conf_file)
entry = (gfpm_server_entry_t*) malloc (sizeof(gfpm_server_entry_t));
memset (entry, 0, sizeof(gfpm_server_entry_t));
}
-
}
fclose (fp);
@@ -462,7 +606,7 @@ gfpm_repomgr_populate_repolist (void)
repo_r->servers = gfpm_repomgr_get_servers_from_repofile (str);
// and then append it to our repo list
- repolist->list = g_list_append (repolist->list,
(gpointer)repo_r);
+ repolist->list = g_list_append (repolist->list,
(gpointer)repo_r);gtk_widget_hide (gfpm_repomgr_repo_input_dlg);
}
}
repolist->n = n;
@@ -808,6 +952,26 @@ gfpm_write_servers_to_file (const gchar *reponame)
/* CALLBACKS */
static void
+cb_gfpm_repomgr_btnadd_clicked (GtkButton *button, gpointer data)
+{
+ GList *rlist = NULL;
+ gfpm_repo_t *rp = NULL;
+
+ rlist = repolist->list;
+ rp = gfpm_repomgr_get_repo_input ();
+ if (rp == NULL)
+ return;
+ /* increment the repo count */
+ repolist->n++;
+ /* and add the repo */
+ rlist = g_list_append (rlist, (gpointer)rp);
+ /* save the configuration file */
+ gfpm_write_config_file ();
+
+ return;
+}
+
+static void
cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, gpointer data)
{
GtkTreeSelection *selection = NULL;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git