Re: [evolution-patches] NNTP one-liners



Jeffrey Stedfast wrote:

@@ -1802,7 +1802,7 @@
	m->root = gtk_tree_row_reference_copy (row);
	m->store = store;
	m->emft = emft;
-	m->top = top ? g_strdup (top) : NULL;
+	m->top = top ? g_strdup (top) : "";
	m->flags = CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_RECURSIVE;
	m->select_uri = g_strdup (uri);
	
this change is wrong. when we later go to g_free (m->top), you'll be
trying to free a static string. bad things will happen :-)

your nntp_get_folder_info() code is supposed to be able to handle NULL
and treat it as a toplevel query (same as the other stores).

The problem isn't in the NNTP code, it's in the folder tree itself. Later on, when it has retrieved the folder info, it does:

    /* FIXME: camel's IMAP code is totally on crack here, @top's
     * folder info should be @fi and fi->child should be what we
     * want to fill our tree with... *sigh* */
    if (m->top && m->fi && !strcmp (m->fi->full_name, m->top)) {
        if (!(fi = m->fi->child))
            fi = m->fi->sibling;
    } else
        fi = m->fi;

This piece of code doesn't detect that the m->fi is the parent if m->top is NULL, causing a hierarchy to show up like:

news.wanadoo.nl
  -> .
      -> foo

Doing a g_strdup("") now (could also change the check above, but think this is cleaner...). Still, strange that other stores do not have this problem... or is there some extra rule that the top item should /not/ be returned by get_folder_info?

also, can you not modify every blank line? it makes the patch far larger
than it needs to be...

Yeah, I wonder why my patch does that... now patched with -Bb...

Meilof
-- meilof wanadoo nl

--- /home/meilof/tmp/evolution//camel/ChangeLog	2004-01-14 00:41:49.000000000 +0100
+++ camel/ChangeLog	2004-01-14 15:01:49.000000000 +0100
@@ -1,3 +1,18 @@
+2004-01-14  Meilof Veeningen  <meilof wanadoo nl>
+
+	* providers/nntp/camel-nntp-folder.c: support for working without a
+	cache, object state files
+
+	* providers/nntp/camel-nntp-store.c: support for working without a
+	cache, support for looking up non-root subscribed folders, support for
+	recursive unsubscribed folder listings, fix for folder info crash
+
+	* providers/nntp/camel-nntp-store-summary.[ch]: removed some
+	imap-specific code
+
+	* providers/nntp/camel-nntp-summary.c: work without cache
+
+
 2004-01-12  Meilof Veeningen  <meilof wanadoo nl>
 
 	* providers/nntp/camel-nntp-folder.[ch]: now based on discofolder,
--- /home/meilof/tmp/evolution//mail/ChangeLog	2004-01-14 00:39:54.000000000 +0100
+++ mail/ChangeLog	2004-01-14 14:21:43.000000000 +0100
@@ -1,3 +1,12 @@
+2004-01-14  Meilof Veeningen  <meilof wanadoo nl>
+
+	* em-folder-selection-button.c
+	(em_folder_selection_button_set_selection_mult): use gstring rather
+	than char*
+
+	* em-folder-tree.c (em_folder_tree_set_selected): use "" rather than
+	NULL for get_folder_info top (needed for check in folder_info__got)
+
 2004-01-12  Meilof Veeningen  <meilof wanadoo nl>
 
 	* em-composer-utils.c: support for posting both to mail and to
--- /home/meilof/tmp/evolution//composer/ChangeLog	2004-01-14 00:40:05.000000000 +0100
+++ composer/ChangeLog	2004-01-14 14:24:33.000000000 +0100
@@ -1,3 +1,9 @@
+2004-01-14  Meilof Veeningen  <meilof wanadoo nl>
+
+	* e-msg-composer-hdrs.c: fix to make relative folder names work
+	if the store url does not end with a slash, use gstring rather
+	than char* in some places.
+
 2004-01-12  JP Rosevear  <jpr ximian com>
 
 	* e-msg-composer-hdrs.c (e_msg_composer_hdrs_set_post_to): fix
--- /home/meilof/tmp/evolution//camel/providers/nntp/camel-nntp-folder.c	2004-01-14 00:39:27.000000000 +0100
+++ camel/providers/nntp/camel-nntp-folder.c	2004-01-14 14:08:17.000000000 +0100
@@ -80,6 +80,8 @@
 	if (camel_nntp_summary_check ((CamelNNTPSummary *) folder->summary, nntp_folder->changes, ex) != -1)
 		camel_folder_summary_save (folder->summary);
 	
+	camel_object_state_write (folder);
+
 	if (camel_folder_change_info_changed(nntp_folder->changes)) {
 		changes = nntp_folder->changes;
 		nntp_folder->changes = camel_folder_change_info_new();
@@ -96,6 +98,7 @@
 static void
 nntp_folder_sync_offline (CamelFolder *folder, CamelException *ex)
 {
+	camel_object_state_write (folder);
 	camel_folder_summary_save (folder->summary);
 }
 
@@ -121,8 +124,9 @@
 		goto fail;
 	
 	if (ret == 220) {
-		stream = camel_data_cache_add (nntp_store->cache, "cache", msgid, NULL);
-		if (stream) {
+
+		if (nntp_store->cache &&
+		    (stream = camel_data_cache_add (nntp_store->cache, "cache", msgid, NULL)) != NULL) {
 			if (camel_stream_write_to_stream ((CamelStream *) nntp_store->stream, stream) == -1)
 				goto fail;
 			if (camel_stream_reset (stream) == -1)
@@ -198,8 +202,8 @@
 	msgid++;
 	
 	/* Lookup in cache, NEWS is global messageid's so use a global cache path */
-	stream = camel_data_cache_get (nntp_store->cache, "cache", msgid, NULL);
-	if (stream == NULL) {
+	if (nntp_store->cache == NULL ||
+	    (stream = camel_data_cache_get (nntp_store->cache, "cache", msgid, NULL)) == NULL) {
 		if (camel_disco_store_status ((CamelDiscoStore *) nntp_store) == CAMEL_DISCO_STORE_OFFLINE) {
 			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
 					     _("This message is not currently available"));
@@ -577,7 +581,7 @@
 {
 	CamelFolder *folder;
 	CamelNNTPFolder *nntp_folder;
-	char *root;
+	char *filename;
 	CamelService *service;
 #ifdef ASYNC_SUMMARY
 	struct _folder_check_msg *m;
@@ -586,12 +590,12 @@
 	gboolean subscribed = TRUE;
 	
 	service = (CamelService *) parent;
-	root = camel_session_get_storage_path (service->session, service, ex);
-	if (root == NULL)
+	filename = camel_session_get_storage_path (service->session, service, ex);
+	if (filename == NULL)
 		return NULL;
 	
 	/* If this doesn't work, stuff wont save, but let it continue anyway */
-	camel_mkdir (root, 0777);
+	camel_mkdir (filename, 0777);
 	
 	folder = (CamelFolder *) camel_object_new (CAMEL_NNTP_FOLDER_TYPE);
 	nntp_folder = (CamelNNTPFolder *)folder;
@@ -599,8 +603,13 @@
 	camel_folder_construct (folder, parent, folder_name, folder_name);
 	folder->folder_flags |= CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY|CAMEL_FOLDER_HAS_SEARCH_CAPABILITY;
 	
-	nntp_folder->storage_path = g_build_filename (root, folder->full_name, NULL);
-	g_free (root);
+	nntp_folder->storage_path = g_build_filename (filename, folder->full_name, NULL);
+	g_free (filename);
+
+	filename = g_strdup_printf ("%s.cmeta", nntp_folder->storage_path);
+	camel_object_set (folder, NULL, CAMEL_OBJECT_STATE_FILE, filename, NULL);
+	camel_object_state_read (folder);
+	g_free (filename);
 	
 	folder->summary = (CamelFolderSummary *) camel_nntp_summary_new (nntp_folder);
 	camel_folder_summary_load (folder->summary);
--- /home/meilof/tmp/evolution//camel/providers/nntp/camel-nntp-store.c	2004-01-14 00:39:28.000000000 +0100
+++ camel/providers/nntp/camel-nntp-store.c	2004-01-14 14:58:28.000000000 +0100
@@ -102,17 +102,18 @@
 	/* setup store-wide cache */
 	if (store->cache == NULL) {
 		if (store->storage_path == NULL)
-			goto fail;
+			goto cache_done;
 		
 		store->cache = camel_data_cache_new (store->storage_path, 0, ex);
 		if (store->cache == NULL)
-			goto fail;
+			goto cache_done;
 		
 		/* Default cache expiry - 2 weeks old, or not visited in 5 days */
 		camel_data_cache_set_expire_age (store->cache, 60*60*24*14);
 		camel_data_cache_set_expire_access (store->cache, 60*60*24*5);
 	}
 	
+ cache_done:
 	if (!(h = camel_service_gethost (service, ex)))
 		goto fail;
 	
@@ -179,7 +180,7 @@
 	/* set 'reader' mode & ignore return code */
 	if (camel_nntp_command (store, (char **) &buf, "mode reader") < 0 ||
 	/* hack: inn seems to close connections if nothing is done within
-	   the first ten seconds. a non-existent command is enough though */
+	   the first ten seconds, so we do some pseudo-useful command */
 	    camel_nntp_command (store, (char **) &buf, "date") < 0)
 	    goto fail;
 	
@@ -259,13 +260,13 @@
 	/* setup store-wide cache */
 	if (nntp_store->cache == NULL) {
 		nntp_store->cache = camel_data_cache_new (nntp_store->storage_path, 0, ex);
-		if (nntp_store->cache == NULL)
-			return FALSE;
 		
+		if (nntp_store->cache != NULL) {
 		/* Default cache expiry - 2 weeks old, or not visited in 5 days */
 		camel_data_cache_set_expire_age (nntp_store->cache, 60*60*24*14);
 		camel_data_cache_set_expire_access (nntp_store->cache, 60*60*24*5);
 	}	
+	}
 	
 	path = g_build_filename (nntp_store->storage_path, ".ev-journal", NULL);
 	disco_store->diary = camel_disco_diary_new (disco_store, path, ex);
@@ -466,11 +467,30 @@
 {
 	int i;
 	CamelStoreInfo *si;
-	CamelFolderInfo *first = NULL, *last = NULL, *fi = NULL;
+	CamelFolderInfo *root, *first = NULL, *last = NULL, *fi = NULL;
+
+	if (flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) {
+		/* for recursive queries, the item itself should be added */
+		if (top && top[0] != 0) {
+			si = (CamelStoreInfo *) camel_nntp_store_summary_full_name (store->summary, top);
+			if (si) {
+				if (si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED)
+					root = nntp_folder_info_from_store_info (store, store->do_short_folder_notation, si);
+				camel_store_summary_info_free ((CamelStoreSummary *) store->summary, si);
+			}
+		}
+
+		if (!root) {
+			root = nntp_folder_info_from_name (store, store->do_short_folder_notation, top ? top : "");
+			root->flags |= CAMEL_FOLDER_NOSELECT;
+		}
+	}
 	
-	/* since we do not do a tree, any request that is not for root is sure to give no results */
-	if (top != NULL && top[0] != 0)
+	if (top != NULL && top[0] != 0) {
+		/* no subitems for sure */
 		return NULL;
+	}
+
 	
 	for (i=0;(si = camel_store_summary_index ((CamelStoreSummary *) store->summary, i));i++) {
 		if (si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED) {
@@ -487,7 +507,41 @@
 		camel_store_summary_info_free ((CamelStoreSummary *) store->summary, si);
 	}
 	
+	if (!(flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE))
 	return first;
+
+	root->child = first;
+	return root;
+}
+
+static CamelFolderInfo *
+nntp_folder_list_hierarchical (CamelNNTPStore *store, CamelFolderInfo *first, char *top)
+{
+	GPtrArray *arr = g_ptr_array_new();
+	CamelFolderInfo *cur;
+	CamelStoreInfo *si;
+
+	if (top != NULL) {
+		/* check to see whether top exists */
+		cur = nntp_folder_info_from_name (store, FALSE,
+		         (store->folder_hierarchy_relative || top == NULL) ? "" : top);
+		si = (CamelStoreInfo *) camel_nntp_store_summary_full_name (store->summary, top);
+		if (si)
+			camel_store_summary_info_free ((CamelStoreSummary *) store->summary, si);
+		else
+			cur->flags |= CAMEL_FOLDER_NOSELECT;
+		g_ptr_array_add (arr, cur);
+	}
+
+	while (first) {
+		g_ptr_array_add (arr, first);
+		first = first->sibling;
+	}
+
+	cur = camel_folder_info_build (arr, NULL, '.', store->folder_hierarchy_relative);
+	g_ptr_array_free (arr, FALSE);
+
+	return cur;
 }
 
 /*
@@ -522,7 +576,7 @@
 				/* apparently, this is an indirect subitem. if it's not a subitem of
 				   the item we added last, we need to add a portion of this item to
 				   the list as a placeholder */
-				len = strlen (last->full_name);
+				len = last ? strlen (last->full_name) : 0;
 				if (!last ||
 				    g_ascii_strncasecmp(si->path, last->full_name, len) != 0 || 
 				    si->path[len] != '.') {
@@ -552,8 +606,14 @@
 		camel_store_summary_info_free((CamelStoreSummary *)store->summary, si);
 	}
 	
+	if (recursive_flag) {
+		last = nntp_folder_list_hierarchical (store, first, top);
+		g_free(top);
+		return last;
+	} else {
 	g_free(top);
 	return first;
+	}
 }
 
 /* retrieves the date from the NNTP server */
@@ -1058,7 +1118,10 @@
 	}
 	camel_nntp_stream_set_mode(store->stream, CAMEL_NNTP_STREAM_LINE);
 	
- command_begin_send:
+	camel_stream_reset ((CamelStream *) store->mem);
+	/* FIXME: hack */
+	g_byte_array_set_size (store->mem->buffer, 0);
+
 	va_start(ap, fmt);
 	ps = p = fmt;
 	while ((c = *p++)) {
@@ -1103,25 +1166,20 @@
 	dd(printf("NNTP_COMMAND: '%.*s'\n", (int)store->mem->buffer->len, store->mem->buffer->data));
 	camel_stream_write ((CamelStream *) store->mem, "\r\n", 2);
 	
-	if (camel_stream_write ((CamelStream *) store->stream, store->mem->buffer->data, store->mem->buffer->len) == -1 && errno != EINTR) {
-		camel_stream_reset ((CamelStream *) store->mem);
-		/* FIXME: hack */
-		g_byte_array_set_size (store->mem->buffer, 0);
-		
-	reconnect:
+	while (1) {
+		dd(printf("NNTP_COMMAND: '%.*s'\n", (int)store->mem->buffer->len, store->mem->buffer->data));
+		if (camel_stream_write ((CamelStream *) store->stream, store->mem->buffer->data, store->mem->buffer->len) == -1
+		    && errno != EINTR) {
+reconnect:
 		/* some error, re-connect */
 		camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
 		
 		if (!nntp_connected (store, NULL))
 			return -1;
 		
-		goto command_begin_send;
+			continue;
 	}
 	
-	camel_stream_reset ((CamelStream *) store->mem);
-	/* FIXME: hack */
-	g_byte_array_set_size (store->mem->buffer, 0);
-	
 	if (camel_nntp_stream_line (store->stream, (unsigned char **) line, &u) == -1)
 		return -1;
 	
@@ -1129,13 +1187,17 @@
 	
 	/* Check for 'authentication required' codes */
 	if (u == NNTP_AUTH_REQUIRED &&
-	    camel_nntp_try_authenticate(store))
-		goto command_begin_send;
+		    camel_nntp_try_authenticate (store))
+			continue;
 	
 	/* the server doesn't like us anymore, but we still like her! */
 	if (u == 401 || u == 503)
 		goto reconnect;
 	
+		/* success */
+		break;
+	}
+
 	/* Handle all switching to data mode here, to make callers job easier */
 	if (u == 215 || (u >= 220 && u <=224) || (u >= 230 && u <= 231))
 		camel_nntp_stream_set_mode(store->stream, CAMEL_NNTP_STREAM_DATA);
--- /home/meilof/tmp/evolution//camel/providers/nntp/camel-nntp-store-summary.c	2004-01-12 23:20:40.000000000 +0100
+++ camel/providers/nntp/camel-nntp-store-summary.c	2004-01-14 13:42:07.000000000 +0100
@@ -87,10 +87,6 @@
 static void
 camel_nntp_store_summary_init (CamelNNTPStoreSummary *s)
 {
-	/*struct _CamelNNTPStoreSummaryPrivate *p;
-
-	  p = _PRIVATE(s) = g_malloc0(sizeof(*p));*/
-
 	((CamelStoreSummary *) s)->store_info_size = sizeof (CamelNNTPStoreInfo);
 	s->version = CAMEL_NNTP_STORE_SUMMARY_VERSION;
 	memset (&s->last_newslist, 0, sizeof (s->last_newslist));
@@ -99,11 +95,6 @@
 static void
 camel_nntp_store_summary_finalise (CamelObject *obj)
 {
-	/*struct _CamelNNTPStoreSummaryPrivate *p;*/
-	/*CamelNNTPStoreSummary *s = (CamelNNTPStoreSummary *)obj;*/
-
-	/*p = _PRIVATE(obj);
-	  g_free(p);*/
 }
 
 CamelType
@@ -171,148 +162,6 @@
 	return NULL;
 }
 
-char *
-camel_nntp_store_summary_full_to_path (CamelNNTPStoreSummary *s, const char *full_name, char dir_sep)
-{
-	char *path, *p;
-	int c;
-	const char *f;
-
-	if (dir_sep != '/') {
-		p = path = g_alloca (strlen (full_name) * 3 + 1);
-		f = full_name;
-		while ((c = *f++ & 0xff)) {
-			if (c == dir_sep)
-				*p++ = '/';
-			else if (c == '/' || c == '%')
-				p += sprintf (p, "%%%02X", c);
-			else
-				*p++ = c;
-		}
-		*p = 0;
-	} else
-		path = (char *) full_name;
-	
-	return camel_utf7_utf8 (path);
-}
-
-static guint32
-hexnib (guint32 c)
-{
-	if (c >= '0' && c <= '9')
-		return c-'0';
-	else if (c >= 'A' && c <= 'Z')
-		return c - 'A' + 10;
-	else
-		return 0;
-}
-
-char *
-camel_nntp_store_summary_path_to_full (CamelNNTPStoreSummary *s, const char *path, char dir_sep)
-{
-	unsigned char *full, *f;
-	guint32 c, v = 0;
-	const char *p;
-	int state=0;
-	char *subpath, *last = NULL;
-	CamelStoreInfo *si;
-	
-	/* check to see if we have a subpath of path already defined */
-	subpath = g_alloca (strlen (path) + 1);
-	strcpy (subpath, path);
-	do {
-		si = camel_store_summary_path ((CamelStoreSummary *) s, subpath);
-		if (si == NULL) {
-			last = strrchr (subpath, '/');
-			if (last)
-				*last = 0;
-		}
-	} while (si == NULL && last);
-	
-	/* path is already present, use the raw version we have */
-	if (si && strlen (subpath) == strlen (path)) {
-		f = g_strdup (camel_nntp_store_info_full_name (s, si));
-		camel_store_summary_info_free ((CamelStoreSummary *) s, si);
-		return f;
-	}
-	
-	f = full = g_alloca (strlen (path)*2+1);
-	if (si)
-		p = path + strlen (subpath);
-	else
-		p = path;
-	
-	while ((c = camel_utf8_getc ((const unsigned char **) &p))) {
-		switch (state) {
-		case 0:
-			if (c == '%') {
-				state = 1;
-			} else {
-				if (c == '/')
-					c = dir_sep;
-				camel_utf8_putc(&f, c);
-			}
-			break;
-		case 1:
-			state = 2;
-			v = hexnib (c) << 4;
-			break;
-		case 2:
-			state = 0;
-			v |= hexnib (c);
-			camel_utf8_putc (&f, v);
-			break;
-		}
-	}
-	camel_utf8_putc (&f, c);
-	
-	/* merge old path part if required */
-	f = camel_utf8_utf7 (full);
-	if (si) {
-		full = g_strdup_printf ("%s%s", camel_nntp_store_info_full_name (s, si), f);
-		g_free (f);
-		camel_store_summary_info_free ((CamelStoreSummary *) s, si);
-		f = full;
-	}
-	
-	return f;
-}
-
-CamelNNTPStoreInfo *
-camel_nntp_store_summary_add_from_full (CamelNNTPStoreSummary *s, const char *full, char dir_sep)
-{
-	CamelNNTPStoreInfo *info;
-	char *pathu8;
-	int len;
-	char *full_name;
-	
-	d(printf("adding full name '%s' '%c'\n", full, dir_sep));
-	
-	len = strlen (full);
-	full_name = g_alloca (len+1);
-	strcpy(full_name, full);
-	if (full_name[len-1] == dir_sep)
-		full_name[len-1] = 0;
-	
-	info = camel_nntp_store_summary_full_name (s, full_name);
-	if (info) {
-		camel_store_summary_info_free ((CamelStoreSummary *) s, (CamelStoreInfo *) info);
-		d(printf("  already there\n"));
-		return info;
-	}
-	
-	pathu8 = camel_nntp_store_summary_full_to_path (s, full_name, dir_sep);
-	
-	info = (CamelNNTPStoreInfo *) camel_store_summary_add_from_path ((CamelStoreSummary *) s, pathu8);
-	if (info) {
-		d(printf("  '%s' -> '%s'\n", pathu8, full_name));
-		camel_store_info_set_string((CamelStoreSummary *)s, (CamelStoreInfo *)info, CAMEL_NNTP_STORE_INFO_FULL_NAME, full_name);
-	} else
-		d(printf("  failed\n"));
-	
-	return info;
-}
-
 static int
 summary_header_load (CamelStoreSummary *s, FILE *in)
 {
--- /home/meilof/tmp/evolution//camel/providers/nntp/camel-nntp-summary.c	2004-01-14 00:39:28.000000000 +0100
+++ camel/providers/nntp/camel-nntp-summary.c	2004-01-14 13:37:16.000000000 +0100
@@ -276,7 +276,7 @@
 					   a cached message that might be in another folder - not that important as
 					   it is a true cache */
 					msgid = strchr(uid, ',');
-					if (msgid)
+					if (msgid && store->cache)
 						camel_data_cache_remove(store->cache, "cache", msgid+1, NULL);
 					camel_folder_change_info_remove_uid(changes, uid);
 					camel_folder_summary_remove(s, mi);
--- /home/meilof/tmp/evolution//camel/providers/nntp/camel-nntp-store-summary.h	2004-01-12 23:20:40.000000000 +0100
+++ camel/providers/nntp/camel-nntp-store-summary.h	2004-01-14 13:41:01.000000000 +0100
@@ -71,27 +71,8 @@
 CamelType			 camel_nntp_store_summary_get_type	(void);
 CamelNNTPStoreSummary      *camel_nntp_store_summary_new	(void);
 
-/* TODO: this api needs some more work, needs to support lists */
-/*CamelNNTPStoreNamespace *camel_nntp_store_summary_namespace_new(CamelNNTPStoreSummary *s, const char *full_name, char dir_sep);*/
-/*void camel_nntp_store_summary_namespace_set(CamelNNTPStoreSummary *s, CamelNNTPStoreNamespace *ns);*/
-/*CamelNNTPStoreNamespace *camel_nntp_store_summary_namespace_find_path(CamelNNTPStoreSummary *s, const char *path);*/
-/*CamelNNTPStoreNamespace *camel_nntp_store_summary_namespace_find_full(CamelNNTPStoreSummary *s, const char *full_name);*/
-
-/* helper macro's */
-#define camel_nntp_store_info_full_name(s, i) (camel_store_info_string((CamelStoreSummary *)s, (const CamelStoreInfo *)i, CAMEL_NNTP_STORE_INFO_FULL_NAME))
-
-/* converts to/from utf8 canonical nasmes */
-char *camel_nntp_store_summary_full_to_path(CamelNNTPStoreSummary *s, const char *full_name, char dir_sep);
-
-char *camel_nntp_store_summary_path_to_full(CamelNNTPStoreSummary *s, const char *path, char dir_sep);
-char *camel_nntp_store_summary_dotted_to_full(CamelNNTPStoreSummary *s, const char *dotted, char dir_sep);
 
 CamelNNTPStoreInfo *camel_nntp_store_summary_full_name(CamelNNTPStoreSummary *s, const char *full_name);
-CamelNNTPStoreInfo *camel_nntp_store_summary_add_from_full(CamelNNTPStoreSummary *s, const char *full_name, char dir_sep);
-
-/* a convenience lookup function. always use this if path known */
-char *camel_nntp_store_summary_full_from_path(CamelNNTPStoreSummary *s, const char *path);
-
 
 #ifdef __cplusplus
 }
--- /home/meilof/tmp/evolution//composer/e-msg-composer-hdrs.c	2004-01-14 00:40:05.000000000 +0100
+++ composer/e-msg-composer-hdrs.c	2004-01-14 14:07:54.000000000 +0100
@@ -650,7 +650,7 @@
 static void
 set_pair_visibility (EMsgComposerHdrs *h, EMsgComposerHdrPair *pair, int visible)
 {
-	if (visible /*& h->visible_mask*/) {
+	if (visible) {
 		gtk_widget_show (pair->label);
 		gtk_widget_show (pair->entry);
 	} else {
@@ -1023,14 +1023,6 @@
 		eab_destination_freev (cc_destv);
 		eab_destination_freev (bcc_destv);
 	}
-	
-#if 0
-	if (hdrs->visible_mask & E_MSG_COMPOSER_VISIBLE_POSTTO) {
-		header = e_msg_composer_hdrs_get_post_to (hdrs);
-		camel_medium_set_header (CAMEL_MEDIUM (msg), "X-Evolution-PostTo", header);
-		g_free (header);
-	}
-#endif
 }
 
 
@@ -1208,6 +1200,7 @@
 	
 	if (hdrs->account->source && hdrs->account->source->url) {
 		url = camel_url_new (hdrs->account->source->url, NULL);
+		camel_url_set_path (url, "/");
 		ret = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
 		camel_url_free (url);
 	}
@@ -1239,23 +1232,22 @@
 e_msg_composer_hdrs_set_post_to_list (EMsgComposerHdrs *hdrs, GList *urls)
 {
 	/* compile the name */
-	char *caption, *tmp, *tmp2;
+	GString *caption;
+	char *tmp;
 	gboolean post_custom;
 	
 	if (hdrs->priv->post_to.entry == NULL)
 		return;
 	
-	caption = g_strdup ("");
+	caption = g_string_new("");
 	
 	while (urls) {
-		tmp = folder_name_to_string (hdrs, (char *)urls->data);
+		tmp = folder_name_to_string (hdrs, (char *) urls->data);
 		if (tmp) {
-			tmp2 = g_strconcat (caption, ", ", tmp, NULL);
-			g_free (caption);
-			caption = tmp2;
+			g_string_append (caption, ", ");
+			g_string_append (caption, tmp);
 			g_free (tmp);
 		}
-		
 		urls = g_list_next (urls);
 	}
 	
@@ -1260,9 +1252,10 @@
 	}
 	
 	post_custom = hdrs->priv->post_custom;
-	gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption[0] ? caption + 2 : "");
+	gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption->str[0] ? caption->str + 2 : "");
 	hdrs->priv->post_custom = post_custom;
-	g_free (caption);
+	g_string_free (caption, TRUE);
+
 }
 
 void
@@ -1270,33 +1263,34 @@
                                       const char *base, const char *post_to)
 {
 	GList *lst, *curlist;
-	char *hdr_copy = g_strdup (post_to), *caption, *tmp, *tmp2;
+	char *hdr_copy = g_strdup (post_to), *tmp, *tmp2;
 	gboolean post_custom;
+	GString *caption;
 	
 	/* split to newsgroup names */
 	lst = newsgroups_list_split (hdr_copy);
 	curlist = lst;
 	
 	/* compile the name */
-	caption = g_strdup ("");
+	caption = g_string_new("");
 	
 	while (curlist) {
-		tmp2 = g_strdup_printf ("%s/%s", base, (char *)curlist->data);
+		tmp2 = g_strdup_printf ("%s/%s", base, (char *) curlist->data);
 		tmp = folder_name_to_string (hdrs, tmp2);
 		g_free (tmp2);
+
 		if (tmp) {
-			tmp2 = g_strconcat (caption, ", ", tmp, NULL);
-			g_free (caption);
-			caption = tmp2;
+			g_string_append (caption, ", ");
+			g_string_append (caption, tmp);
 			g_free (tmp);
 		}
 		curlist = g_list_next (curlist);
 	}
 	
 	post_custom = hdrs->priv->post_custom;
-	gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption[0] ? caption + 2 : "");
+	gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption->str[0] ? caption->str + 2 : "");
 	hdrs->priv->post_custom = post_custom;
-	g_free (caption);
+	g_string_free (caption, TRUE);
 	
         g_list_foreach (lst, (GFunc) g_free, NULL);
 	g_list_free (lst);
--- /home/meilof/tmp/evolution//mail/em-folder-selection-button.c	2004-01-14 00:39:54.000000000 +0100
+++ mail/em-folder-selection-button.c	2004-01-14 13:53:49.000000000 +0100
@@ -268,7 +268,10 @@
 em_folder_selection_button_set_selection_mult (EMFolderSelectionButton *button, GList *uris)
 {
 	struct _EMFolderSelectionButtonPrivate *priv = button->priv;
-	char *caption, *tmp, *tmp2;
+	char *tmp;
+	GList *uri_next;
+	GString *caption = NULL;
+
 	
 	g_return_if_fail (EM_IS_FOLDER_SELECTION_BUTTON (button));
 	
@@ -281,30 +284,30 @@
 	priv->uris = uris;
 	
 	/* compile the name */
-	caption = g_strdup ("");
+	caption = g_string_new ("");
 	
 	while (uris) {
 		tmp = em_utils_folder_name_from_uri (uris->data);
 		if (tmp) {
-			tmp2 = g_strconcat (caption, ", ", tmp, NULL);
-			g_free (caption);
-			caption = tmp2;
+			g_string_append (caption, ", ");
+			g_string_append (caption, tmp);
 			g_free (tmp);
-			uris = uris->next;
+			uris = g_list_next (uris);
 		} else {
 			/* apparently, we do not know this folder, so we'll just skip it */
 			g_free (uris->data);
-			uris = g_list_next (uris);
-			priv->uris = g_list_remove (priv->uris, uris->data);
+			uri_next = g_list_next (uris);
+			priv->uris = g_list_remove_link (priv->uris, uris);
+			uris = uri_next;
 		}
 	}
 	
-	if (caption[0])
-		gtk_label_set_text (GTK_LABEL (priv->label), caption + 2);
+	if (caption->str[0])
+		gtk_label_set_text (GTK_LABEL (priv->label), caption->str + 2);
 	else
 		set_contents_unselected (button);
 	
-	g_free (caption);
+	g_string_free (caption, TRUE);
 }
 
 GList *
--- /home/meilof/tmp/evolution//mail/em-folder-tree.c	2004-01-14 00:39:54.000000000 +0100
+++ mail/em-folder-tree.c	2004-01-14 15:22:23.000000000 +0100
@@ -1802,7 +1802,7 @@
 	m->root = gtk_tree_row_reference_copy (row);
 	m->store = store;
 	m->emft = emft;
-	m->top = top ? g_strdup (top) : NULL;
+	m->top = top ? g_strdup (top) : g_strdup("");
 	m->flags = CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_RECURSIVE;
 	m->select_uri = g_strdup (uri);
 	


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]