diff options
author | Not Zed <NotZed@HelixCode.com> | 2000-08-11 00:35:28 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2000-08-11 00:35:28 +0800 |
commit | 690509bf826bc02af09cbec064f1f34c48dd9b0c (patch) | |
tree | 41580cd68f0f3e0dc297f11e34e237c37b2dc09e /camel/camel-folder-search.c | |
parent | 544eb3c3493bfa25d6a3a82d1c18805174c37eb9 (diff) | |
download | gsoc2013-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.c | 39 |
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; +} |