Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=b632b706dd0afa2d987ed612355bb6891f78dc1b

commit b632b706dd0afa2d987ed612355bb6891f78dc1b
Author: Priyank <[EMAIL PROTECTED]>
Date:   Sat Feb 9 12:49:08 2008 +0530

gfpm-repomanager: added support for deleting servers for a repository 
[experimental] (don't blame me if your repo files are messed up) :P

diff --git a/src/gfpm-repomanager.c b/src/gfpm-repomanager.c
index 416c3f5..afe67eb 100644
--- a/src/gfpm-repomanager.c
+++ b/src/gfpm-repomanager.c
@@ -23,10 +23,12 @@
#include <glib.h>

#define CONF_FILE "/etc/pacman-g2.conf"
+#define REPO_PATH "/etc/pacman-g2/repos"

extern GladeXML *xml;

-static gfpm_repolist_t *repolist = NULL;
+static gfpm_repolist_t         *repolist = NULL;
+static gchar                   *curr_repo = NULL;

/* Repository manager widgets */
static GtkWidget *gfpm_repomgr_dlg;
@@ -48,6 +50,7 @@ static GtkWidget *gfpm_servmgr_btnedit;

/* signal callbacks */
static void cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, gpointer data);
+static void cb_gfpm_servmgr_btndel_clicked (GtkButton *button, gpointer data);

void
gfpm_repomanager_init (void)
@@ -114,6 +117,7 @@ gfpm_repomanager_init (void)
/* connect important signals */
/* repository manager signals */
g_signal_connect (G_OBJECT(gfpm_repomgr_btnedit), "clicked", 
cb_gfpm_repomgr_btnedit_clicked, NULL);
+       g_signal_connect (G_OBJECT(gfpm_servmgr_btndel), "clicked", 
cb_gfpm_servmgr_btndel_clicked, NULL);

return;
}
@@ -351,6 +355,96 @@ gfpm_servmanager_show (const char *repo)
return;
}

+static void
+gfpm_repomgr_set_current_repo (const char *reponame)
+{
+       if (curr_repo)
+               g_free (curr_repo);
+       curr_repo = g_strdup_printf (reponame);
+
+       return;
+}
+
+static void
+gfpm_servmgr_delete_server (const char *server)
+{
+       gchar   *path = NULL;
+       gchar   line[256] = "";
+       FILE    *fp = NULL;
+       FILE    *tp = NULL;
+       GList   *rlist = NULL;
+
+       path = g_strdup_printf ("%s/%s", REPO_PATH, curr_repo);
+       if ((fp=fopen(path,"r"))==NULL)
+       {
+               gfpm_error (_("Error"), _("Error opening repository file"));
+               return;
+       }
+       if ((tp=tmpfile())==NULL)
+       {
+               gfpm_error (_("Error"), _("Unable to create a temporary file"));
+               return;
+       }
+
+       while (fgets(line, PATH_MAX, fp))
+       {
+               char svr[256] = "";
+               fwutil_trim (line);
+               if (!strlen(line) || line[0] == '#' || (line[0] == '[' && 
line[strlen(line)-1] == ']'))
+               {
+                       fputs (line, tp);
+                       fputc ('\n', tp);
+                       continue;
+               }
+               else if (sscanf (line, "Server = %s", svr))
+               {
+                       if (!strcmp(svr,server))
+                       {
+                               fputs ("#Server = ", tp);
+                               fputs (svr, tp);
+                               fputc ('\n', tp);
+                               continue;
+                       }
+                       else
+                       {
+                               fputs (line, tp);
+                               fputc ('\n', tp);
+                       }
+               }
+       }
+       fclose (fp);
+
+       fp = fopen (path, "w");
+       rewind (tp);
+       while (fgets(line, PATH_MAX, tp))
+               fputs (line, fp);
+       fclose (tp);
+       fclose (fp);
+       //g_list_free (repolist);
+
+       /* free the server list for the current repo */
+       rlist = repolist->list;
+       while (rlist != NULL)
+       {
+               gfpm_repo_t     *rp = NULL;
+
+               rp = rlist->data;
+               if (!strcmp(rp->name, curr_repo))
+               {
+                       if (rp->servers)
+                       g_list_free (rp->servers);
+                       rp->servers = gfpm_repomgr_get_servers_from_repofile 
(path);
+                       break;
+               }
+       }
+
+       /* repopulate the server list and display */
+       gfpm_repomgr_populate_servtvw (curr_repo);
+
+       cleanup: g_free (path);
+       return;
+}
+
/* CALLBACKS */
static void
cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, gpointer data)
@@ -365,8 +459,25 @@ cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, 
gpointer data)
{
gtk_tree_model_get (model, &iter, 1, &repo, -1);
gfpm_servmanager_show (repo);
+               gfpm_repomgr_set_current_repo (repo);
}

return;
}

+static void
+cb_gfpm_servmgr_btndel_clicked (GtkButton *button, gpointer data)
+{
+       GtkTreeSelection        *selection = NULL;
+       GtkTreeModel            *model;
+       GtkTreeIter                     iter;
+       gchar                           *server = NULL;
+
+       selection = gtk_tree_view_get_selection 
(GTK_TREE_VIEW(gfpm_servmgr_treeview));
+       if (gtk_tree_selection_get_selected(selection, &model, &iter))
+       {
+               gtk_tree_model_get (model, &iter, 1, &server, -1);
+               gfpm_servmgr_delete_server (server);
+               //gfpm_repomanager_set_current_repo (repo);
+       }
+}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to