View | Details | Raw Unified | Return to bug 137582
Collapse All | Expand All

(-)courier-0.62.0/files/extra-patch-webmail__folder.c (+102 lines)
Line 0 Link Here
1
--- webmail/folder.c.orig	2008-07-20 19:00:33.000000000 +0200
2
+++ webmail/folder.c	2009-06-04 08:32:54.000000000 +0200
3
@@ -247,6 +247,18 @@
4
 	return (maildir_msgmovefile(folder, file, cgi("moveto"), pos));
5
 }
6
 
7
+static int groupmark(const char *folder, const char *file, size_t pos)
8
+{
9
+	maildir_msgmarkfile(folder, file, pos);
10
+	return (0);
11
+}
12
+
13
+static int groupunmark(const char *folder, const char *file, size_t pos)
14
+{
15
+	maildir_msgunmarkfile(folder, file, pos);
16
+	return (0);
17
+}
18
+
19
 void folder_delmsgs(const char *dir, size_t pos)
20
 {
21
 	int	rc=0;
22
@@ -317,6 +329,16 @@
23
 		rc=group_movedel( dir, &groupmove );
24
 		maildir_savefoldermsgs(dir);
25
 	}
26
+	else if (*cgi("cmdmark"))
27
+	{
28
+		rc=group_movedel( dir, &groupmark );
29
+		maildir_savefoldermsgs(dir);
30
+	} 
31
+	else if (*cgi("cmdunmark"))
32
+	{
33
+		rc=group_movedel( dir, &groupunmark );
34
+		maildir_savefoldermsgs(dir);
35
+	} 
36
 
37
 	maildir_cleanup();
38
 
39
@@ -441,7 +463,7 @@
40
 
41
 	folder_navigate(dir, pos, highend, morebefore, moreafter);
42
 
43
-	printf("<table width=\"100%%\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\"><tr class=\"folder-index-header\"><th align=\"center\">%s</th><th>&nbsp;</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n",
44
+	printf("<table width=\"100%%\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\"><tr class=\"folder-index-header\"><th align=\"center\">%s</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n",
45
 		getarg("NUM"),
46
 		getarg("DATE"),
47
 		(strncmp(dir, INBOX "." SENT, sizeof(INBOX)+sizeof(SENT)-1) &&
48
@@ -486,12 +508,13 @@
49
 		if ((q=strrchr(p, '/')) != 0)
50
 			p=q+1;
51
 
52
-		printf("<tr class=\"folder-index-bg-%d\" id=\"row%d\"><td align=\"right\" class=\"message-number\">%s%ld.%s</td><td class=\"message-status\"><input type=\"checkbox\" name=\"MOVE-%ld\" id=\"MOVE-%ld",
53
+		printf("<tr class=\"folder-index-bg-%d\" id=\"row%d\"><td align=\"right\" class=\"message-number\">%s%ld.%s</td><td class=\"message-flag\">%s</td><td class=\"message-select\"><input type=\"checkbox\" name=\"MOVE-%ld\" id=\"MOVE-%ld",
54
 		       (i & 1)+1,
55
 		       i,
56
 		       folder_index_entry_start,
57
 		       (long)(i+pos+1),
58
 		       folder_index_entry_end,
59
+		       maildirfile_flag(MSGINFO_FILENAME(contents[i])) ? "<font color=\"red\">!</font>" : "",
60
 		       (long) (pos+i),
61
 		       (long) (pos+i));
62
 		printf("\" onchange=\"setsel('MOVE-%ld', 'row%d', 'folder-index-bg-%d');\"%s /><input type=\"hidden\" name=\"MOVEFILE-%ld\" value=\"",
63
@@ -499,7 +522,7 @@
64
 			(type[0] == MSGTYPE_DELETED ? " disabled=\"disabled\"":""),
65
 			(long)(pos+i));
66
 		output_attrencoded(p);
67
-		printf("\" />&nbsp;%s%s%s</td><td class=\"message-date\">%s",
68
+		printf("\" /></td><td class=\"message-status\">%s%s%s</td><td class=\"message-date\">%s",
69
 		       folder_index_entry_start,
70
 		       type,
71
 		       folder_index_entry_end,
72
@@ -545,9 +568,9 @@
73
 
74
 	if (found)
75
 	{
76
-		puts("<tr class=\"folder-index-bg-1\"><td colspan=\"6\"><hr /></td></tr>");
77
-		puts("<tr class=\"folder-index-bg-2\"><td>&nbsp;</td>");
78
-		puts("<td colspan=\"5\">");
79
+		puts("<tr class=\"folder-index-bg-3\"><td colspan=\"8\"><hr /></td></tr>");
80
+		puts("<tr class=\"folder-index-bg-4\"><td>&nbsp;</td>");
81
+		puts("<td colspan=\"7\">");
82
 
83
 		puts("<script type=\"text/javascript\">");
84
 		puts("/* <![CDATA[ */");
85
@@ -578,7 +601,7 @@
86
 	}
87
 	if (!found && nomsg)
88
 	{
89
-		puts("<tr class=\"folder-index-bg-1\"><td colspan=\"6\" align=\"left\"><p>");
90
+		puts("<tr class=\"folder-index-bg-1\"><td colspan=\"8\" align=\"left\"><p>");
91
 		puts(nomsg);
92
 		puts("<br /></p></td></tr>");
93
 		printf("</table>\n");
94
@@ -3364,7 +3387,7 @@
95
 	if ((strcmp(sqwebmail_folder, INBOX "." TRASH) == 0) && (strlen(getarg("PURGEALL"))))
96
 	    printf("<input type=\"submit\" name=\"cmdpurgeall\" value=\"%s\" onclick=\"javascript: return deleteAll();\" />", 
97
 		getarg("PURGEALL"));
98
-	printf("<input type=\"submit\" name=\"cmddel\" value=\"%s\" />%s<select name=\"moveto\">",
99
+	printf("<input type=\"submit\" name=\"cmddel\" value=\"%s\" />, <input type=\"submit\" name=\"cmdmark\" value=\"Mark\" />, <input type=\"submit\" name=\"cmdunmark\" value=\"Unmark\" />%s<select name=\"moveto\">",
100
 		strcmp(sqwebmail_folder, INBOX "." TRASH) == 0
101
 		? purgelab:deletelab,
102
 		movelab);
(-)courier-0.62.0/files/extra-patch-webmail__images__sqwebmail.css (+28 lines)
Line 0 Link Here
1
--- webmail/images/sqwebmail.css.orig	2009-06-04 08:27:30.000000000 +0200
2
+++ webmail/images/sqwebmail.css	2009-06-04 08:33:54.000000000 +0200
3
@@ -142,6 +142,9 @@
4
 .folder-index-bg-1:hover { background-color: #bbbbbb }
5
 .folder-index-bg-2 { background-color: #ddddbb }
6
 .folder-index-bg-2:hover { background-color: #bbbbbb }
7
+/* for <HR> and buttons under message list */
8
+.folder-index-bg-3 { background-color: #ffffff }
9
+.folder-index-bg-4 { background-color: #eeeecc }
10
 
11
 	/* Selected message */
12
 
13
@@ -159,11 +162,13 @@
14
 */
15
 
16
 .message-number { }
17
-.message-status { }
18
+.message-flag { padding: 0}
19
+.message-select { padding: 0 }
20
+.message-status { padding: 0 }
21
 .message-date { }
22
 .message-from { }
23
 .message-subject { }
24
-.message-size { font-family: monospace}
25
+.message-size { font-family: monospace }
26
 
27
 /***************************** Folder permissions ***********************/
28
 
(-)courier-0.62.0/files/extra-patch-webmail__maildir.c (+75 lines)
Line 0 Link Here
1
--- webmail/maildir.c.orig	2008-07-20 05:15:08.000000000 +0200
2
+++ webmail/maildir.c	2009-06-03 22:41:49.000000000 +0200
3
@@ -1091,6 +1091,42 @@
4
 	return (rc);
5
 }
6
 
7
+void maildir_msgmarkfile(const char *folder, const char *file, size_t pos)
8
+{
9
+char *filename=maildir_find(folder, file);
10
+char *new_filename;
11
+
12
+	if (filename)
13
+	{
14
+		if ((new_filename=maildir_addflagfilename(filename, 'F')) != 0)
15
+		{
16
+			rename(filename, new_filename);
17
+			update_foldermsgs(folder, new_filename, pos);
18
+			free(new_filename);
19
+		}
20
+
21
+		free(filename);
22
+	}
23
+}
24
+
25
+void maildir_msgunmarkfile(const char *folder, const char *file, size_t pos)
26
+{
27
+char *filename=maildir_find(folder, file);
28
+char *new_filename;
29
+
30
+	if (filename)
31
+	{
32
+		if ((new_filename = strdup(filename)) != 0)
33
+		{
34
+			maildir_remflagname(new_filename, 'F');
35
+			rename(filename, new_filename);
36
+			update_foldermsgs(folder, new_filename, pos);
37
+			free(new_filename);
38
+		}
39
+		free(filename);
40
+	}
41
+}
42
+
43
 static char *foldercountfilename(const char *folder)
44
 {
45
 	char *f=malloc(sizeof(MAILDIRCURCACHE "/cnt.") + strlen(folder));
46
@@ -1604,6 +1640,29 @@
47
 	return (MSGTYPE_NEW);
48
 }
49
 
50
+/*
51
+** maildirfile_flag(directory, filename) - boolean:
52
+**
53
+*/
54
+
55
+int maildirfile_flag(const char *p)
56
+{
57
+const char *q=strrchr(p, '/');
58
+int	seen_flag=0;
59
+
60
+	if (q)	p=q;
61
+
62
+	if ( !(p=strchr(p, ':')) || *++p != '2' || *++p != ',')
63
+		return (0);		/* No :2,info */
64
+
65
+	++p;
66
+	while (p && isalpha((int)(unsigned char)*p))
67
+		if (*p++ == 'F')
68
+			seen_flag=1;
69
+
70
+	return (seen_flag);
71
+}
72
+
73
 static int docount(const char *fn, unsigned *new_cnt, unsigned *other_cnt)
74
 {
75
 const char *filename=strrchr(fn, '/');
(-)courier-0.62.0/files/extra-patch-webmail__maildir.h (+18 lines)
Line 0 Link Here
1
--- webmail/maildir.h.orig	2004-02-17 01:58:24.000000000 +0100
2
+++ webmail/maildir.h	2009-06-04 08:40:43.000000000 +0200
3
@@ -35,12 +35,15 @@
4
 extern int maildir_name2pos(const char *, const char *, size_t *);
5
 
6
 extern char maildirfile_type(const char *);
7
+extern int maildirfile_flag(const char *);
8
 extern void maildir_markread(const char *, size_t);
9
 extern void maildir_markreplied(const char *, const char *);
10
 extern void maildir_msgdeletefile(const char *, const char *, size_t);
11
 extern void maildir_msgpurge(const char *, size_t);
12
 extern void maildir_msgpurgefile(const char *, const char *);
13
 extern void maildir_purgemimegpg();
14
+extern void maildir_msgmarkfile(const char *, const char *, size_t);
15
+extern void maildir_msgunmarkfile(const char *, const char *, size_t);
16
 
17
 extern int maildir_msgmove(const char *, size_t, const char *);
18
 extern int maildir_msgmovefile(const char *, const char *, const char *, size_t);

Return to bug 137582