Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 81375
Collapse All | Expand All

(-)trunk/src/procheader.c (-1 / +15 lines)
Lines 507-513 Link Here
507
	MsgInfo *msginfo;
507
	MsgInfo *msginfo;
508
	gchar buf[BUFFSIZE], tmp[BUFFSIZE];
508
	gchar buf[BUFFSIZE], tmp[BUFFSIZE];
509
	gchar *reference = NULL;
509
	gchar *reference = NULL;
510
	gchar *p;
510
	gchar *p, *q;
511
	gchar *hp;
511
	gchar *hp;
512
	HeaderEntry *hentry;
512
	HeaderEntry *hentry;
513
	gint hnum;
513
	gint hnum;
Lines 573-578 Link Here
573
			msginfo->msgid = g_strdup(hp);
573
			msginfo->msgid = g_strdup(hp);
574
			break;
574
			break;
575
		case H_REFERENCES:
575
		case H_REFERENCES:
576
			p = hp;
577
			while ((p = strchr(p, '<')) != NULL && 
578
			       (q = strchr(p + 1, '>')) != NULL) {
579
				msginfo->references = g_slist_prepend
580
					(msginfo->references, 
581
					 g_strndup(p + 1, q - p - 1));
582
				p = q + 1;						 
583
			}
584
			if (msginfo->references) { 
585
				if (!reference) 
586
					/* use last one as possible in-reply-to replacement*/
587
					reference = g_strdup(msginfo->references->data);
588
			}
589
			break;
576
		case H_IN_REPLY_TO:
590
		case H_IN_REPLY_TO:
577
			if (!reference) {
591
			if (!reference) {
578
				eliminate_parenthesis(hp, '(', ')');
592
				eliminate_parenthesis(hp, '(', ')');
(-)trunk/src/procmsg.c (-10 / +56 lines)
Lines 201-207 Link Here
201
	MsgFlags default_flags;
201
	MsgFlags default_flags;
202
	gchar file_buf[BUFFSIZE];
202
	gchar file_buf[BUFFSIZE];
203
	guint32 num;
203
	guint32 num;
204
	gint refnum;
204
	FolderType type;
205
	FolderType type;
206
	gchar *ref;
205
207
206
	g_return_val_if_fail(item != NULL, NULL);
208
	g_return_val_if_fail(item != NULL, NULL);
207
	g_return_val_if_fail(item->folder != NULL, NULL);
209
	g_return_val_if_fail(item->folder != NULL, NULL);
Lines 257-262 Link Here
257
		READ_CACHE_DATA(msginfo->msgid, fp);
259
		READ_CACHE_DATA(msginfo->msgid, fp);
258
		READ_CACHE_DATA(msginfo->inreplyto, fp);
260
		READ_CACHE_DATA(msginfo->inreplyto, fp);
259
261
262
		READ_CACHE_DATA_INT(refnum, fp);
263
		for (; refnum != 0; refnum--) {
264
			READ_CACHE_DATA(ref, fp);
265
			msginfo->references = g_slist_append
266
				(msginfo->references, ref);
267
		}
268
260
		MSG_SET_PERM_FLAGS(msginfo->flags, default_flags.perm_flags);
269
		MSG_SET_PERM_FLAGS(msginfo->flags, default_flags.perm_flags);
261
		MSG_SET_TMP_FLAGS(msginfo->flags, default_flags.tmp_flags);
270
		MSG_SET_TMP_FLAGS(msginfo->flags, default_flags.tmp_flags);
262
271
Lines 443-448 Link Here
443
void procmsg_write_cache(MsgInfo *msginfo, FILE *fp)
452
void procmsg_write_cache(MsgInfo *msginfo, FILE *fp)
444
{
453
{
445
	MsgTmpFlags flags = msginfo->flags.tmp_flags & MSG_CACHED_FLAG_MASK;
454
	MsgTmpFlags flags = msginfo->flags.tmp_flags & MSG_CACHED_FLAG_MASK;
455
	GSList *refs;
446
456
447
	WRITE_CACHE_DATA_INT(msginfo->msgnum, fp);
457
	WRITE_CACHE_DATA_INT(msginfo->msgnum, fp);
448
	WRITE_CACHE_DATA_INT(msginfo->size, fp);
458
	WRITE_CACHE_DATA_INT(msginfo->size, fp);
Lines 459-464 Link Here
459
	WRITE_CACHE_DATA(msginfo->subject, fp);
469
	WRITE_CACHE_DATA(msginfo->subject, fp);
460
	WRITE_CACHE_DATA(msginfo->msgid, fp);
470
	WRITE_CACHE_DATA(msginfo->msgid, fp);
461
	WRITE_CACHE_DATA(msginfo->inreplyto, fp);
471
	WRITE_CACHE_DATA(msginfo->inreplyto, fp);
472
 
473
 	WRITE_CACHE_DATA_INT(g_slist_length(msginfo->references), fp);
474
 	if (g_slist_length(msginfo->references))
475
 		for (refs = msginfo->references; refs; refs = refs->next) 
476
 			WRITE_CACHE_DATA(((gchar *)refs->data), fp);
462
}
477
}
463
478
464
void procmsg_write_flags(MsgInfo *msginfo, FILE *fp)
479
void procmsg_write_flags(MsgInfo *msginfo, FILE *fp)
Lines 752-757 Link Here
752
	GHashTable *table;
767
	GHashTable *table;
753
	MsgInfo *msginfo;
768
	MsgInfo *msginfo;
754
	const gchar *msgid;
769
	const gchar *msgid;
770
	GSList *reflist;
755
771
756
	root = g_node_new(NULL);
772
	root = g_node_new(NULL);
757
	table = g_hash_table_new(g_str_hash, g_str_equal);
773
	table = g_hash_table_new(g_str_hash, g_str_equal);
Lines 762-768 Link Here
762
778
763
		if (msginfo->inreplyto) {
779
		if (msginfo->inreplyto) {
764
			parent = g_hash_table_lookup(table, msginfo->inreplyto);
780
			parent = g_hash_table_lookup(table, msginfo->inreplyto);
765
			if (parent == NULL)
781
			
782
			/* check references */			
783
			if (!parent && msginfo->references)
784
				for (reflist = msginfo->references; 
785
				     reflist != NULL; 
786
				     reflist = reflist->next)
787
					if ((parent = g_hash_table_lookup
788
						(table, reflist->data))) 
789
						break;
790
			if (parent == NULL) 
766
				parent = root;
791
				parent = root;
767
		}
792
		}
768
		node = g_node_insert_data_before
793
		node = g_node_insert_data_before
Lines 777-792 Link Here
777
	for (node = root->children; node != NULL; ) {
802
	for (node = root->children; node != NULL; ) {
778
		next = node->next;
803
		next = node->next;
779
		msginfo = (MsgInfo *)node->data;
804
		msginfo = (MsgInfo *)node->data;
780
		if (msginfo->inreplyto) {
805
		parent = NULL;
806
807
		/* check in reply to */
808
		if (msginfo->inreplyto)
781
			parent = g_hash_table_lookup(table, msginfo->inreplyto);
809
			parent = g_hash_table_lookup(table, msginfo->inreplyto);
782
			/* node should not be the parent, and node should not
810
783
			   be an ancestor of parent (circular reference) */
811
		/* check references */			
784
			if (parent && parent != node &&
812
		if (!parent && msginfo->references)
785
			    !g_node_is_ancestor(node, parent)) {
813
			for (reflist = msginfo->references; 
786
				g_node_unlink(node);
814
			     reflist != NULL; 
787
				g_node_insert_before
815
			     reflist = reflist->next)
788
					(parent, parent->children, node);
816
				if ((parent = g_hash_table_lookup
789
			}
817
					(table, reflist->data))) 
818
					break;
819
		
820
		/* node should not be the parent, and node should not
821
		   be an ancestor of parent (circular reference) */
822
		if (parent && parent != node &&
823
		    !g_node_is_ancestor(node, parent)) {
824
			g_node_unlink(node);
825
			g_node_insert_before
826
				(parent, parent->children, node);
790
		}
827
		}
791
		node = next;
828
		node = next;
792
	}
829
	}
Lines 1419-1428 Link Here
1419
	return full_msginfo;
1456
	return full_msginfo;
1420
}
1457
}
1421
1458
1459
static void free_references(gpointer data, gpointer user)
1460
{
1461
	g_free(data);
1462
}
1463
1422
void procmsg_msginfo_free(MsgInfo *msginfo)
1464
void procmsg_msginfo_free(MsgInfo *msginfo)
1423
{
1465
{
1424
	if (msginfo == NULL) return;
1466
	if (msginfo == NULL) return;
1425
1467
1468
	g_slist_foreach(msginfo->references, 
1469
		       free_references, NULL);
1470
	g_slist_free(msginfo->references);
1471
1426
	g_free(msginfo->xface);
1472
	g_free(msginfo->xface);
1427
1473
1428
	g_free(msginfo->fromname);
1474
	g_free(msginfo->fromname);
(-)trunk/src/procmsg.h (+1 lines)
Lines 180-185 Link Here
180
	gchar *subject;
180
	gchar *subject;
181
	gchar *msgid;
181
	gchar *msgid;
182
	gchar *inreplyto;
182
	gchar *inreplyto;
183
	GSList *references;
183
184
184
	FolderItem *folder;
185
	FolderItem *folder;
185
	FolderItem *to_folder;
186
	FolderItem *to_folder;
(-)trunk/src/summaryview.c (+12 lines)
Lines 3033-3038 Link Here
3033
	GtkCTreeNode *next;
3033
	GtkCTreeNode *next;
3034
	GtkCTreeNode *parent;
3034
	GtkCTreeNode *parent;
3035
	MsgInfo *msginfo;
3035
	MsgInfo *msginfo;
3036
	GSList *reflist;
3036
3037
3037
	summary_lock(summaryview);
3038
	summary_lock(summaryview);
3038
3039
Lines 3053-3058 Link Here
3053
		if (msginfo && msginfo->inreplyto) {
3054
		if (msginfo && msginfo->inreplyto) {
3054
			parent = g_hash_table_lookup(summaryview->msgid_table,
3055
			parent = g_hash_table_lookup(summaryview->msgid_table,
3055
						     msginfo->inreplyto);
3056
						     msginfo->inreplyto);
3057
						     
3058
			/* check references */			
3059
			if (!parent && msginfo->references)
3060
				for (reflist = msginfo->references; 
3061
				     reflist != NULL; 
3062
				     reflist = reflist->next)
3063
					if ((parent = g_hash_table_lookup
3064
						(summaryview->msgid_table, 
3065
						 reflist->data))) 
3066
						break;
3067
						
3056
			if (parent && parent != node) {
3068
			if (parent && parent != node) {
3057
				gtk_ctree_move(ctree, node, parent, NULL);
3069
				gtk_ctree_move(ctree, node, parent, NULL);
3058
				gtk_ctree_expand(ctree, node);
3070
				gtk_ctree_expand(ctree, node);
(-)trunk/src/defs.h (-1 / +4 lines)
Lines 63-69 Link Here
63
#define FOLDER_LIST		"folderlist.xml"
63
#define FOLDER_LIST		"folderlist.xml"
64
#define CACHE_FILE		".sylpheed_cache"
64
#define CACHE_FILE		".sylpheed_cache"
65
#define MARK_FILE		".sylpheed_mark"
65
#define MARK_FILE		".sylpheed_mark"
66
#define CACHE_VERSION		0x20
66
#define CACHE_VERSION		0x1024
67
#define MARK_VERSION		2
67
#define MARK_VERSION		2
68
68
69
#define DEFAULT_SIGNATURE	".signature"
69
#define DEFAULT_SIGNATURE	".signature"
Lines 105-108 Link Here
105
105
106
#define DEFAULT_MESSAGE_FONT	"Sans 14"
106
#define DEFAULT_MESSAGE_FONT	"Sans 14"
107
107
108
#undef CACHE_VERSION
109
#define CACHE_VERSION			0x1024
110
108
#endif /* __DEFS_H__ */
111
#endif /* __DEFS_H__ */

Return to bug 81375