TnyIterator *piter = tny_list_create_iterator (child_parts);
while (!found && !tny_iterator_is_done (piter)) {
TnyMimePart *pcur = (TnyMimePart *) tny_iterator_get_current (piter);
+ if (pcur) {
+ found = search_mime_part_and_child_parts (pcur, search);
- found = search_mime_part_and_child_parts (pcur, search);
+ g_object_unref (pcur);
+ }
- g_object_unref (pcur);
tny_iterator_next (piter);
}
* @folder: a #TnyFolder instance
* @search: a #ModestSearch query
*
- * This operation will search @folder for headers that match the query @search.
+ * This operation will search @folder for headers that match the query @search,
+ * if the folder itself matches the query.
* It will return a doubly linked list with URIs that point to the message.
**/
GList *
modest_search_folder (TnyFolder *folder, ModestSearch *search)
{
+ /* Check that we should be searching this folder. */
+ /* Note that we don't try to search sub-folders.
+ * Maybe we should, but that should be specified. */
+ if (search->folder && strlen (search->folder) && (strcmp (tny_folder_get_id (folder), search->folder) != 0))
+ return NULL;
+
GList *retval = NULL;
TnyIterator *iter = NULL;
TnyList *list = NULL;
while (!tny_iterator_is_done (iter)) {
TnyHeader *cur = (TnyHeader *) tny_iterator_get_current (iter);
- time_t t = tny_header_get_date_sent (cur);
+ const time_t t = tny_header_get_date_sent (cur);
gboolean found = FALSE;
+ /* Ignore deleted (not yet expunged) emails: */
+ if (tny_header_get_flags(cur) & TNY_HEADER_FLAG_DELETED)
+ goto go_next;
+
if (search->flags & MODEST_SEARCH_BEFORE)
if (!(t <= search->before))
goto go_next;
if (msg) {
g_object_unref (msg);
}
- }
-
- found = search_mime_part_and_child_parts (TNY_MIME_PART (msg),
- search);
- if (found) {
- retval = add_hit (retval, cur, folder);
+ } else {
+
+ found = search_mime_part_and_child_parts (TNY_MIME_PART (msg),
+ search);
+ if (found) {
+ retval = add_hit (retval, cur, folder);
+ }
}
- g_object_unref (msg);
-
+ if (msg)
+ g_object_unref (msg);
}
go_next:
iter = tny_list_create_iterator (folders);
while (!tny_iterator_is_done (iter)) {
- TnyFolder *folder;
- GList *res;
+ TnyFolder *folder = NULL;
+ GList *res = NULL;
folder = TNY_FOLDER (tny_iterator_get_current (iter));
- /* g_debug ("DEBUG: %s: searching folder %s.",
- __FUNCTION__, tny_folder_get_name (folder)); */
+ if (folder) {
+ /* g_debug ("DEBUG: %s: searching folder %s.",
+ __FUNCTION__, tny_folder_get_name (folder)); */
- res = modest_search_folder (folder, search);
+ res = modest_search_folder (folder, search);
- if (res != NULL) {
- if (hits == NULL) {
- hits = res;
- } else {
- hits = g_list_concat (hits, res);
+ if (res != NULL) {
+ if (hits == NULL) {
+ hits = res;
+ } else {
+ hits = g_list_concat (hits, res);
+ }
}
+
+ g_object_unref (folder);
}
- g_object_unref (folder);
tny_iterator_next (iter);
}
g_object_unref (iter);
g_object_unref (folders);
+ /* printf ("DEBUG: %s: hits length = %d\n", __FUNCTION__, g_list_length (hits)); */
return hits;
}
GList *
modest_search_all_accounts (ModestSearch *search)
{
+ /* printf ("DEBUG: %s: query=%s\n", __FUNCTION__, search->query); */
ModestTnyAccountStore *astore;
TnyList *accounts;
TnyIterator *iter;
iter = tny_list_create_iterator (accounts);
while (!tny_iterator_is_done (iter)) {
- TnyAccount *account;
- GList *res;
+ TnyAccount *account = NULL;
+ GList *res = NULL;
account = TNY_ACCOUNT (tny_iterator_get_current (iter));
-
- /* g_debug ("DEBUG: %s: Searching account %s",
- __FUNCTION__, tny_account_get_name (account)); */
- res = modest_search_account (account, search);
-
- if (res != NULL) {
-
- if (hits == NULL) {
- hits = res;
- } else {
- hits = g_list_concat (hits, res);
+ if (account) {
+ /* g_debug ("DEBUG: %s: Searching account %s",
+ __FUNCTION__, tny_account_get_name (account)); */
+ res = modest_search_account (account, search);
+
+ if (res != NULL) {
+ if (hits == NULL) {
+ hits = res;
+ } else {
+ hits = g_list_concat (hits, res);
+ }
}
+
+ g_object_unref (account);
}
- g_object_unref (account);
tny_iterator_next (iter);
}
g_object_unref (accounts);
g_object_unref (iter);
+ /* printf ("DEBUG: %s: end: hits length=%d\n", __FUNCTION__, g_list_length(hits)); */
return hits;
}