Git-Url:
http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=5a5aecb396ef4ccaf903965d29edcc4fe3e700ac
commit 5a5aecb396ef4ccaf903965d29edcc4fe3e700ac
Author: Priyank <[EMAIL PROTECTED]>
Date: Sat Feb 9 23:47:14 2008 +0530
gfpm-repomanager: comments for a server entry are also saved (vmiklos' idea)
* re-worked major parts of the code
* NOTE: Try at your own risk
diff --git a/src/gfpm-repomanager.c b/src/gfpm-repomanager.c
index 57838db..0cd5350 100644
--- a/src/gfpm-repomanager.c
+++ b/src/gfpm-repomanager.c
@@ -47,6 +47,8 @@ static GtkWidget *gfpm_servmgr_btnmup;
static GtkWidget *gfpm_servmgr_btnmdn;
static GtkWidget *gfpm_servmgr_btnedit;
+static void gfpm_write_servers_to_file (const gchar *reponame);
+
/* signal callbacks */
static void cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, gpointer data);
static void cb_gfpm_servmgr_btndel_clicked (GtkButton *button, gpointer data);
@@ -132,6 +134,7 @@ gfpm_repomgr_get_servers_from_repofile (const char
*conf_file)
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)
@@ -139,16 +142,33 @@ gfpm_repomgr_get_servers_from_repofile (const char
*conf_file)
g_error ("No configuration file found");
return NULL;
}
-
+ entry = (gfpm_server_entry_t*) malloc (sizeof(gfpm_server_entry_t));
+ memset (entry, 0, sizeof(gfpm_server_entry_t));
+ while (fgets(line, PATH_MAX, fp))
+ {
+ if (line[0] == '#')
+ continue;
+ else if (line[0]=='[')
+ break;
+ }
while (fgets(line, PATH_MAX, fp))
{
- fwutil_trim(line);
+ fwutil_trim (line);
if (!strlen(line))
continue;
+ if (line[0] == '#')
+ {
+ entry->comments = g_list_append (entry->comments, line);
+ continue;
+ }
if (sscanf(line, "Server = %s", server))
{
- ret = g_list_append (ret,
(gpointer)g_strdup(fwutil_trim(server)));
+ sprintf (entry->url, "%s", fwutil_trim(server));
+ ret = g_list_append (ret, entry);
+ entry = (gfpm_server_entry_t*) malloc
(sizeof(gfpm_server_entry_t));
+ memset (entry, 0, sizeof(gfpm_server_entry_t));
}
+
}
fclose (fp);
@@ -207,6 +227,7 @@ gfpm_repomgr_populate_repolist (void)
n++;
char svr[256];
gfpm_repo_t *repo_r = (gfpm_repo_t*)malloc(sizeof(gfpm_repo_t));
+ memset (repo_r, 0, sizeof(gfpm_repo_t));
if (repo_r == NULL)
{
g_error ("Error allocating memory. Exiting");
@@ -228,6 +249,7 @@ gfpm_repomgr_populate_repolist (void)
char ln[PATH_MAX+1];
char rn[PATH_MAX+1];
gfpm_repo_t *repo_r = (gfpm_repo_t*)malloc(sizeof(gfpm_repo_t));
+ memset (repo_r, 0, sizeof(gfpm_repo_t));
if ((tmp = fopen (str, "r")) == NULL)
{
@@ -237,8 +259,14 @@ gfpm_repomgr_populate_repolist (void)
while (fgets(ln, PATH_MAX, tmp))
{
fwutil_trim (ln);
- if (!strlen(ln) || ln[0] == '#')
+ if (!strlen(ln))
+ continue;
+ if (ln[0] == '#')
+ {
+ repo_r->header = g_list_append
(repo_r->header, ln);
continue;
+ }
+ else
if (ln[0] == '[' && ln[strlen(ln)-1] == ']')
{
// could be a repo entry
@@ -254,6 +282,7 @@ gfpm_repomgr_populate_repolist (void)
{
g_error ("error parsing");
}
+ break;
}
}
fclose (tmp);
@@ -326,7 +355,6 @@ gfpm_repomgr_populate_servtvw (const char *repo)
while (rlist != NULL)
{
gfpm_repo_t *rp = NULL;
- GList *ser = NULL;
rp = rlist->data;
if (!strcmp(rp->name, repo))
@@ -340,8 +368,9 @@ gfpm_repomgr_populate_servtvw (const char *repo)
while (slist != NULL)
{
+ gfpm_server_entry_t *entry = slist->data;
gtk_list_store_append (GTK_LIST_STORE(store), &iter);
- gtk_list_store_set (store, &iter, 0, pixbuf, 1,
(char*)slist->data, -1);
+ gtk_list_store_set (store, &iter, 0, pixbuf, 1,
(char*)entry->url, -1);
slist = g_list_next (slist);
}
@@ -379,79 +408,103 @@ gfpm_repomgr_set_current_repo (const char *reponame)
static void
gfpm_servmgr_delete_server (const char *server)
{
- gchar *path = NULL;
- gchar line[256] = "";
- FILE *fp = NULL;
- FILE *tp = NULL;
- GList *rlist = NULL;
+ GList *rlist = NULL;
+ GList *slist = NULL;
+ gfpm_repo_t *r = NULL;
- path = g_strdup_printf ("%s/%s", REPO_PATH, curr_repo);
- if ((fp=fopen(path,"r"))==NULL)
+ rlist = repolist->list;
+ while (rlist != NULL)
{
- gfpm_error (_("Error"), _("Error opening repository file"));
- goto cleanup;
+ r = rlist->data;
+ if (!strcmp(r->name,curr_repo))
+ {
+ slist = r->servers;
+ break;
+ }
+ rlist = g_list_next (rlist);
}
- if ((tp=tmpfile())==NULL)
+ while (slist != NULL)
{
- gfpm_error (_("Error"), _("Unable to create a temporary file"));
- goto cleanup;
+ gfpm_server_entry_t *s = slist->data;
+ if (!strcmp(s->url,server))
+ {
+ r->servers = g_list_delete_link (r->servers, slist);
+ break;
+ }
+ slist = g_list_next (slist);
}
- while (fgets(line, PATH_MAX, fp))
+ /* update repository file */
+ gfpm_write_servers_to_file (curr_repo);
+
+ /* repopulate the server list and display */
+ gfpm_repomgr_populate_servtvw (curr_repo);
+
+ return;
+}
+
+static void
+gfpm_write_servers_to_file (const gchar *reponame)
+{
+ FILE *fp = NULL;
+ gchar *path = NULL;
+
+ path = g_strdup_printf ("%s/%s", REPO_PATH, curr_repo);
+ if ((fp=fopen(path,"w"))!=NULL)
{
- 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))
+ GList *rlist = NULL;
+ GList *slist = NULL;
+ GList *header = NULL;
+ gfpm_repo_t *r = NULL;
+
+ rlist = repolist->list;
+ while (rlist != NULL)
{
- if (!strcmp(svr,server))
+ r = rlist->data;
+
+ if (!strcmp(r->name,curr_repo))
{
- fputs ("#Server = ", tp);
- fputs (svr, tp);
- fputc ('\n', tp);
- continue;
+ g_print ("COMPARING: %s and %s\n", r->name,
curr_repo);
+ slist = r->servers;
+ header = r->header;
+ break;
}
- else
+ rlist = g_list_next (rlist);
+ }
+
+ /* write the header */
+ while (header != NULL)
+ {
+ printf ("writing : %s\n", header->data);
+ fprintf (fp, "%s\n", (char*)header->data);
+ header = g_list_next (header);
+ }
+ /* write the repository name */
+ fprintf (fp, "[%s]\n", r->name);
+ /* and finally, the servers */
+ while (slist != NULL)
+ {
+ gfpm_server_entry_t *s = NULL;
+ GList *comment = NULL;
+ s = slist->data;
+ comment = s->comments;
+ while (comment != NULL)
{
- fputs (line, tp);
- fputc ('\n', tp);
+ printf ("COMMENT : %s\n", comment->data);
+ fprintf (fp, "%s", (char*)comment->data);
+ comment = g_list_next (comment);
}
+ fprintf (fp, "Server = %s", s->url);
+ slist = g_list_next (slist);
}
+ fclose (fp);
}
- fclose (fp);
-
- fp = fopen (path, "w");
- rewind (tp);
- while (fgets(line, PATH_MAX, tp))
- fputs (line, fp);
- fclose (tp);
- fclose (fp);
-
- /* free the server list for the current repo */
- rlist = repolist->list;
- while (rlist != NULL)
+ else
{
- 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;
- }
+ gfpm_error (_("Error"), _("Error opening repository file"));
}
+ g_free (path);
- /* repopulate the server list and display */
- gfpm_repomgr_populate_servtvw (curr_repo);
-
- cleanup: g_free (path);
return;
}
diff --git a/src/gfpm-repomanager.h b/src/gfpm-repomanager.h
index a2c8f40..6f53580 100644
--- a/src/gfpm-repomanager.h
+++ b/src/gfpm-repomanager.h
@@ -12,9 +12,11 @@
#include "gfpm.h"
#define REPONAME_MAX_SIZE 32
+#define SERVER_MAX_SIZE 255
typedef struct __gfpm_repo_t {
char name[REPONAME_MAX_SIZE+1];
+ GList *header;
GList *servers;
} gfpm_repo_t;
@@ -23,6 +25,11 @@ typedef struct __gfpm_repolist_t {
GList *list;
} gfpm_repolist_t;
+typedef struct __gfpm_server_entry_t {
+ GList *comments;
+ gchar url[SERVER_MAX_SIZE+1];
+} gfpm_server_entry_t;
+
void gfpm_repomanager_init (void);
void gfpm_repomanager_show (void);
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git