aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-folder-search.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@HelixCode.com>2000-08-11 00:35:28 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-08-11 00:35:28 +0800
commit690509bf826bc02af09cbec064f1f34c48dd9b0c (patch)
tree41580cd68f0f3e0dc297f11e34e237c37b2dc09e /camel/camel-folder-search.c
parent544eb3c3493bfa25d6a3a82d1c18805174c37eb9 (diff)
downloadgsoc2013-evolution-690509bf826bc02af09cbec064f1f34c48dd9b0c.tar.gz
gsoc2013-evolution-690509bf826bc02af09cbec064f1f34c48dd9b0c.tar.zst
gsoc2013-evolution-690509bf826bc02af09cbec064f1f34c48dd9b0c.zip
A better way to compress leading whitespace. The code is probably invalid
2000-08-11 Not Zed <NotZed@HelixCode.com> * camel-mime-parser.c (folder_scan_header): A better way to compress leading whitespace. The code is probably invalid anyway, I dont think it will work across buffer boundaries. * providers/mbox/camel-mbox-folder.c (mbox_append_message): And write out proper format From lines here too. * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_build_from): New function to build a more compatible mbox "From " line. (camel_mbox_summary_sync): Write From lines in the proper format. 2000-08-10 Not Zed <NotZed@HelixCode.com> * providers/mh/camel-mh-store.c (get_folder): Remove warnin g. * providers/mbox/camel-mbox-store.c (xrename): Kill some warnings with constification. * providers/imap/camel-imap-folder.c (imap_append_message): Fixed for append api change. Eek this routine seriously wastes memory. * providers/mh/camel-mh-folder.c (mh_search_free): Impelemnt. (mh_append_message): Fix for api change, and include user flags and tags in new message. * providers/vee/camel-vee-folder.c (vee_search_by_expression): Fix for search api change. * camel-folder.c (camel_folder_search_free): New function for freeing search results. (search_free): Changed my mind, implement a default that actually does something. Free as to the old interface. (camel_folder_append_message): Changed to accept a camelmessageinfo rather than flags, which just doesn't have enough info in it. (copy_message_to): Change for append_message api change. (move_message_to): Likewise. * providers/mbox/camel-mbox-folder.c (mbox_search_free): Implement. (mbox_append_message): Fix for api change, and also copy user flags/tags across to new summary. * camel-folder-search.c (search_user_tag): A search expression that returns the current use flag by name. (camel_folder_search_free_result): New function to free the result of a search. * camel-folder-summary.c: Bump summary version. (message_info_new): (message_info_load): (message_info_save): (camel_message_info_dup_to): (camel_message_info_free): Added support for arbitrary tag/value pairs (CamelTag's). (camel_tag_get): (camel_tag_set): (camel_tag_list_size): (camel_tag_list_free): Operations for working with CamelTags. svn path=/trunk/; revision=4683
Diffstat (limited to 'camel/camel-folder-search.c')
-rw-r--r--camel/camel-folder-search.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/camel/camel-folder-search.c b/camel/camel-folder-search.c
index 44eb03faad..5c6fa111bb 100644
--- a/camel/camel-folder-search.c
+++ b/camel/camel-folder-search.c
@@ -42,6 +42,7 @@ static ESExpResult *search_header_contains(struct _ESExp *f, int argc, struct _E
static ESExpResult *search_match_all(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *search);
static ESExpResult *search_body_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search);
static ESExpResult *search_user_flag(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
+static ESExpResult *search_user_tag(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
static ESExpResult *search_dummy(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search);
@@ -92,6 +93,7 @@ camel_folder_search_class_init (CamelFolderSearchClass *klass)
klass->body_contains = search_body_contains;
klass->header_contains = search_header_contains;
klass->user_flag = search_user_flag;
+ klass->user_flag = search_user_tag;
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
@@ -137,6 +139,7 @@ struct {
{ "body-contains", GTK_STRUCT_OFFSET(CamelFolderSearchClass, body_contains), 1 },
{ "header-contains", GTK_STRUCT_OFFSET(CamelFolderSearchClass, header_contains), 1 },
{ "user-flag", GTK_STRUCT_OFFSET(CamelFolderSearchClass, user_flag), 1 },
+ { "user-tag", GTK_STRUCT_OFFSET(CamelFolderSearchClass, user_flag), 1 },
};
void
@@ -246,9 +249,8 @@ camel_folder_search_set_body_index(CamelFolderSearch *search, ibex *index)
* TODO: The interface should probably return summary items instead
* (since they are much more useful to any client).
*
- * Return value: A GPtrArray of strings of all matching messages. Once
- * finished with this, the array AND CONTENTS should be free'd
- * by the caller.
+ * Return value: A GPtrArray of strings of all matching messages.
+ * This must only be freed by camel_folder_search_free_result.
**/
GPtrArray *
camel_folder_search_execute_expression(CamelFolderSearch *search, const char *expr, CamelException *ex)
@@ -305,6 +307,15 @@ camel_folder_search_execute_expression(CamelFolderSearch *search, const char *ex
return matches;
}
+void camel_folder_search_free_result(CamelFolderSearch *search, GPtrArray *result)
+{
+ int i;
+
+ for (i=0;i<result->len;i++)
+ g_free(g_ptr_array_index(result, i));
+ g_ptr_array_free(result, TRUE);
+}
+
/* dummy function, returns false always, or an empty match array */
static ESExpResult *
search_dummy(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search)
@@ -513,3 +524,25 @@ static ESExpResult *search_user_flag(struct _ESExp *f, int argc, struct _ESExpRe
return r;
}
+
+static ESExpResult *search_user_tag(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search)
+{
+ ESExpResult *r;
+
+ r(printf("executing user-tag\n"));
+
+ /* are we inside a match-all? */
+ if (search->current) {
+ const char *value = NULL;
+ if (argc == 1) {
+ value = camel_tag_get(&search->current->user_tags, argv[0]->value.string);
+ }
+ r = e_sexp_result_new(ESEXP_RES_STRING);
+ r->value.string = g_strdup(value?value:"");
+ } else {
+ r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
+ r->value.ptrarray = g_ptr_array_new();
+ }
+
+ return r;
+}