|
|
if (expr == NULL) { | if (expr == NULL) { |
uids = camel_folder_get_uids (m->folder); | uids = camel_folder_get_uids (m->folder); |
} else { | } else { |
char *tmp_expr = NULL; |
searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &m->base.ex); |
| |
/* If m->changes is not NULL, then it means we are called from folder_changed event, | /* If m->changes is not NULL, then it means we are called from folder_changed event, |
thus we will keep the selected message to be sure it doesn't disappear because | thus we will keep the selected message to be sure it doesn't disappear because |
it no longer belong to our search filter. */ | it no longer belong to our search filter. */ |
if (m->changes && m->ml->search && m->ml->cursor_uid) { |
if (m->changes && m->ml->search && m->ml->cursor_uid && uids) { |
tmp_expr = g_strdup_printf ("(or %s (match-all (uid \"%s\")))", expr, m->ml->cursor_uid); |
for (i = 0; i < uids->len; i++) { |
expr = tmp_expr; |
if (g_str_equal (m->ml->cursor_uid, uids->pdata [i])) |
} |
break; |
|
} |
| |
searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &m->base.ex); |
/* cursor_uid has been filtered out */ |
|
if (i == uids->len) { |
|
gboolean was_deleted = (camel_folder_get_message_flags (m->folder, m->ml->cursor_uid) & CAMEL_MESSAGE_DELETED) != 0; |
|
|
|
/* I would really like to check for CAMEL_MESSAGE_FOLDER_FLAGGED on a message, |
|
so I would know whether it was changed locally, and then just check the changes |
|
struct whether change came from the server, but with periodical save it doesn't |
|
matter. So here just check whether the file was deleted and we show it based |
|
on the flag whether we can view deleted messages or not. */ |
| |
g_free (tmp_expr); |
if (!was_deleted || (was_deleted && !m->hidedel)) |
|
g_ptr_array_add (uids, g_strdup (m->ml->cursor_uid)); |
|
} |
|
} |
} | } |
| |
if (camel_exception_is_set (&m->base.ex)) | if (camel_exception_is_set (&m->base.ex)) |
|
|
struct _regen_list_msg *m; | struct _regen_list_msg *m; |
GConfClient *gconf; | GConfClient *gconf; |
| |
|
/* report empty search as NULL, not as one/two-space string */ |
|
if (search && (strcmp (search, " ") == 0 || strcmp (search, " ") == 0)) |
|
search = NULL; |
|
|
if (ml->folder == NULL) { | if (ml->folder == NULL) { |
if (ml->search != search) { | if (ml->search != search) { |
g_free(ml->search); | g_free(ml->search); |
|
|
ESearchBar *esb = E_SEARCH_BAR (object); | ESearchBar *esb = E_SEARCH_BAR (object); |
| |
switch (property_id) { | switch (property_id) { |
case PROP_QUERY: |
case PROP_QUERY: { |
if (efb->current_query) { |
char *text = e_search_bar_get_text (E_SEARCH_BAR (efb)); |
|
|
|
/* empty search text means searching turned off */ |
|
if (efb->current_query && text && *text) { |
GString *out = g_string_new (""); | GString *out = g_string_new (""); |
| |
filter_rule_build_code (efb->current_query, out); | filter_rule_build_code (efb->current_query, out); |
|
|
} else { | } else { |
g_value_set_string (value, NULL); | g_value_set_string (value, NULL); |
} | } |
break; |
|
|
g_free (text); |
|
break; } |
case PROP_STATE: { | case PROP_STATE: { |
/* FIXME: we should have ESearchBar save its own state to the xmlDocPtr */ | /* FIXME: we should have ESearchBar save its own state to the xmlDocPtr */ |
xmlChar *xmlbuf; | xmlChar *xmlbuf; |